Fix miscompilation of 416.gamess.

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.

From-SVN: r164812
This commit is contained in:
Sebastian Pop 2010-09-30 21:21:56 +00:00 committed by Sebastian Pop
parent 99e557492e
commit 8ba78f92f2
3 changed files with 26 additions and 3 deletions

View file

@ -1,3 +1,8 @@
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

View file

@ -1,3 +1,8 @@
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

View file

@ -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