diff options
author | Volker Reichelt <reichelt@igpm.rwth-aachen.de> | 2005-08-03 14:18:56 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2005-08-03 14:18:56 +0000 |
commit | 9d2b0e128a1cf10949f7a5b6db2df7ef157ebd4c (patch) | |
tree | bac0d1350104882338d136860782796fa710de2b /gcc | |
parent | 3ed831a4a786bb5357035449cc0e9bec967a7ad0 (diff) | |
download | gcc-9d2b0e128a1cf10949f7a5b6db2df7ef157ebd4c.zip gcc-9d2b0e128a1cf10949f7a5b6db2df7ef157ebd4c.tar.gz gcc-9d2b0e128a1cf10949f7a5b6db2df7ef157ebd4c.tar.bz2 |
re PR tree-optimization/19899 (ICE: tree check: expected real_cst, have integer_cst in const_binop, at fold-const.c:1490 with -ftree-vectorize -msse2)
PR tree-optimization/19899
* Makefile.in (tree-scalar-evolution.o): Add real.h.
* tree-scalar-evolution.c: Include real.h.
(add_to_evolution): Build constant -1 of correct type.
* gcc.dg/tree-ssa/scev-1.c: New test.
* gcc.dg/tree-ssa/scev-2.c: New test.
From-SVN: r102695
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/Makefile.in | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/scev-1.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/scev-2.c | 20 | ||||
-rw-r--r-- | gcc/tree-scalar-evolution.c | 6 |
6 files changed, 57 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 21d87f2..c5893c9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-08-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + + PR tree-optimization/19899 + * Makefile.in (tree-scalar-evolution.o): Add real.h. + * tree-scalar-evolution.c: Include real.h. + (add_to_evolution): Build constant -1 of correct type. + 2005-08-03 Jan Hubicka <jh@suse.cz> * cfgloop.h (DLTHE_FLAG_COMPLETTE_PEEL): New flag. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index ab3a164..e45a03c 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1945,7 +1945,7 @@ tree-chrec.o: tree-chrec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(GGC_H) $(TREE_H) tree-chrec.h tree-pass.h $(PARAMS_H) \ $(DIAGNOSTIC_H) $(VARRAY_H) $(CFGLOOP_H) $(TREE_FLOW_H) tree-scalar-evolution.o: tree-scalar-evolution.c $(CONFIG_H) $(SYSTEM_H) \ - coretypes.h $(TM_H) $(GGC_H) $(TREE_H) $(RTL_H) \ + coretypes.h $(TM_H) $(GGC_H) $(TREE_H) real.h $(RTL_H) \ $(BASIC_BLOCK_H) $(DIAGNOSTIC_H) $(TREE_FLOW_H) $(TREE_DUMP_H) \ $(TIMEVAR_H) $(CFGLOOP_H) $(SCEV_H) tree-pass.h $(FLAGS_H) tree-chrec.h tree-data-ref.o: tree-data-ref.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fa68ac5..dbafe3a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-08-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + + PR tree-optimization/19899 + * gcc.dg/tree-ssa/scev-1.c: New test. + * gcc.dg/tree-ssa/scev-2.c: New test. + 2005-08-03 Richard Sandiford <richard@codesourcery.com> PR target/18582 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/scev-1.c b/gcc/testsuite/gcc.dg/tree-ssa/scev-1.c new file mode 100644 index 0000000..b959fa1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/scev-1.c @@ -0,0 +1,19 @@ +/* PR tree-optimization/19899 */ +/* Decrementing a floating-point variable in a loop caused an ICE. */ + +/* { dg-do run } */ +/* { dg-options "-O -ftree-vectorize" } */ + +extern void abort (void); + +int main() +{ + float i=1; + + while (i>=0) + --i; + + if (i != -1) + abort(); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/scev-2.c b/gcc/testsuite/gcc.dg/tree-ssa/scev-2.c new file mode 100644 index 0000000..0cac994 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/scev-2.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/19899 */ +/* Decrementing a floating-point variable in a loop caused an ICE. */ + +/* { dg-do run } */ +/* { dg-options "-O -ftree-vectorize" } */ + +extern void abort (void); + +int main() +{ + double a = 20; + int i; + + for (i = 0; i < 10; ++i) + a -= 2; + + if (a) + abort(); + return 0; +} diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 52a2d1a..507e3e9 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -237,6 +237,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "tm.h" #include "ggc.h" #include "tree.h" +#include "real.h" /* These RTL headers are needed for basic-block.h. */ #include "rtl.h" @@ -866,8 +867,9 @@ add_to_evolution (unsigned loop_nb, } if (code == MINUS_EXPR) - to_add = chrec_fold_multiply (type, to_add, - build_int_cst_type (type, -1)); + to_add = chrec_fold_multiply (type, to_add, SCALAR_FLOAT_TYPE_P (type) + ? build_real (type, dconstm1) + : build_int_cst_type (type, -1)); res = add_to_evolution_1 (loop_nb, chrec_before, to_add); |