diff options
author | Richard Guenther <rguenther@suse.de> | 2011-12-23 09:10:18 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-12-23 09:10:18 +0000 |
commit | e46bf5d625d4e20b11f3a001d41247be330d4b1b (patch) | |
tree | ff3f050835a600396300926ed08f80d6958c7f10 /gcc | |
parent | a27d7a6fdf22848b10ca91d6417ade086ff5c4e0 (diff) | |
download | gcc-e46bf5d625d4e20b11f3a001d41247be330d4b1b.zip gcc-e46bf5d625d4e20b11f3a001d41247be330d4b1b.tar.gz gcc-e46bf5d625d4e20b11f3a001d41247be330d4b1b.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/simplify-rtx.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr50396.c | 21 |
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 119b9a8..508ce45 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index ab888a9..6733b84 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0594a96..86ff93e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/gcc.dg/torture/pr50396.c b/gcc/testsuite/gcc.dg/torture/pr50396.c new file mode 100644 index 0000000..8e5d008 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr50396.c @@ -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; +} |