From 9d2b0e128a1cf10949f7a5b6db2df7ef157ebd4c Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Wed, 3 Aug 2005 14:18:56 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/Makefile.in | 2 +- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/tree-ssa/scev-1.c | 19 +++++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/scev-2.c | 20 ++++++++++++++++++++ gcc/tree-scalar-evolution.c | 6 ++++-- 6 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/scev-1.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/scev-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 21d87f21c64..c5893c967c7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-08-03 Volker Reichelt + + 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 * cfgloop.h (DLTHE_FLAG_COMPLETTE_PEEL): New flag. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index ab3a1640b98..e45a03c8dca 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 fa68ac52cf7..dbafe3aed8d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-08-03 Volker Reichelt + + 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 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 00000000000..b959fa17b2c --- /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 00000000000..0cac9947576 --- /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 52a2d1a612c..507e3e91947 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); -- 2.30.2