re PR rtl-optimization/50396 (SSE division by zero generates incorrect code with optimizations enabled)

2011-12-23  Richard Guenther  <rguenther@suse.de>

	PR rtl-optimization/50396
	* simplify-rtx.c (simplify_binary_operation_1): Properly
	guard code that only works for integers.

	* gcc.dg/torture/pr50396.c: New testcase.

From-SVN: r182653
This commit is contained in:
Richard Guenther 2011-12-23 09:10:18 +00:00 committed by Richard Biener
parent a27d7a6fdf
commit e46bf5d625
4 changed files with 33 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2011-12-23 Richard Guenther <rguenther@suse.de>
PR rtl-optimization/50396
* simplify-rtx.c (simplify_binary_operation_1): Properly
guard code that only works for integers.
2011-12-23 Tristan Gingold <gingold@adacore.com>
* config/vms/vms-crtlmap.map (log10): Fix typo.

View File

@ -2953,7 +2953,7 @@ simplify_binary_operation_1 (enum rtx_code code, enum machine_mode mode,
}
}
}
else
else if (SCALAR_INT_MODE_P (mode))
{
/* 0/x is 0 (or x&0 if x has side-effects). */
if (trueop0 == CONST0_RTX (mode)

View File

@ -1,3 +1,8 @@
2011-12-23 Richard Guenther <rguenther@suse.de>
PR rtl-optimization/50396
* gcc.dg/torture/pr50396.c: New testcase.
2011-12-22 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/43491

View File

@ -0,0 +1,21 @@
/* { dg-do run } */
extern void abort (void);
typedef float vf128 __attribute__((vector_size(16)));
typedef float vf64 __attribute__((vector_size(8)));
int main()
{
#if !__FINITE_MATH_ONLY__
#if __FLT_HAS_QUIET_NAN__
vf128 v = (vf128){ 0.f, 0.f, 0.f, 0.f };
vf64 u = (vf64){ 0.f, 0.f };
v = v / (vf128){ 0.f, 0.f, 0.f, 0.f };
if (v[0] == v[0])
abort ();
u = u / (vf64){ 0.f, 0.f };
if (u[0] == u[0])
abort ();
#endif
#endif
return 0;
}