@@ -1,5 +1,10 @@
2010-09-30 Sebastian Pop <sebastian.pop@amd.com>
+ * sese.h (scev_analyzable_p): Return false for real or floating
+ point. Only handle INTEGRAL_TYPE_P and POINTER_TYPE_P.
+
+2010-09-30 Sebastian Pop <sebastian.pop@amd.com>
+
* graphite-clast-to-gimple.c (compute_bounds_for_level): Free le
and ps.
* graphite-poly.c (pbb_number_of_iterations_at_time): Free le and
@@ -1,5 +1,10 @@
2010-09-23 Sebastian Pop <sebastian.pop@amd.com>
+ * sese.h (scev_analyzable_p): Return false for real or floating
+ point. Only handle INTEGRAL_TYPE_P and POINTER_TYPE_P.
+
+2010-09-23 Sebastian Pop <sebastian.pop@amd.com>
+
PR middle-end/45758
* gfortran.dg/graphite/pr45758.f90: New.
@@ -386,9 +386,22 @@ nb_common_loops (sese region, gimple_bb_p gbb1, gimple_bb_p gbb2)
static inline bool
scev_analyzable_p (tree def, sese region)
{
- gimple stmt = SSA_NAME_DEF_STMT (def);
- loop_p loop = loop_containing_stmt (stmt);
- tree scev = scalar_evolution_in_region (region, loop, def);
+ loop_p loop;
+ tree scev;
+ tree type = TREE_TYPE (def);
+
+ /* When Graphite generates code for a scev, the code generator
+ expresses the scev in function of a single induction variable.
+ This is unsafe for floating point computations, as it may replace
+ a floating point sum reduction with a multiplication. The
+ following test returns false for non integer types to avoid such
+ problems. */
+ if (!INTEGRAL_TYPE_P (type)
+ && !POINTER_TYPE_P (type))
+ return false;
+
+ loop = loop_containing_stmt (SSA_NAME_DEF_STMT (def));
+ scev = scalar_evolution_in_region (region, loop, def);
return !chrec_contains_undetermined (scev)
&& TREE_CODE (scev) != SSA_NAME
From: spop <spop@138bc75d-0d04-0410-961f-82ee72b054a4> 2010-09-23 Sebastian Pop <sebastian.pop@amd.com> * sese.h (scev_analyzable_p): Return false for real or floating point. Only handle INTEGRAL_TYPE_P and POINTER_TYPE_P. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/graphite@164579 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/ChangeLog.graphite | 5 +++++ gcc/sese.h | 19 ++++++++++++++++--- 3 files changed, 26 insertions(+), 3 deletions(-)