http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60740
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P3 |P2
Status|NEW |ASSIGNED
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot
gnu.org
Target Milestone|4.9.0 |4.8.3
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
It seems we can't encode &a22 (an address of a decl) for ISL. Which means
the loop should have been rejected earlier? Or the
if (&a22 == pretmp_1)
_10 = geb_lsm.6_11 - 1;
should have been in a "black-box"? We're coming from add_condition_to_pbb
but it seems "stmts" do not cover control flow. Looks like
stmt_simple_for_scop_p
simply implements checks for GIMPLE_CONDs wrong. Testing the following:
Index: gcc/graphite-scop-detection.c
===================================================================
--- gcc/graphite-scop-detection.c (revision 209018)
+++ gcc/graphite-scop-detection.c (working copy)
@@ -346,13 +346,10 @@ stmt_simple_for_scop_p (basic_block scop
case GIMPLE_COND:
{
- tree op;
- ssa_op_iter op_iter;
- enum tree_code code = gimple_cond_code (stmt);
-
/* We can handle all binary comparisons. Inequalities are
also supported as they can be represented with union of
polyhedra. */
+ enum tree_code code = gimple_cond_code (stmt);
if (!(code == LT_EXPR
|| code == GT_EXPR
|| code == LE_EXPR
@@ -361,11 +358,14 @@ stmt_simple_for_scop_p (basic_block scop
|| code == NE_EXPR))
return false;
- FOR_EACH_SSA_TREE_OPERAND (op, stmt, op_iter, SSA_OP_ALL_USES)
- if (!graphite_can_represent_expr (scop_entry, loop, op)
- /* We can not handle REAL_TYPE. Failed for pr39260. */
- || TREE_CODE (TREE_TYPE (op)) == REAL_TYPE)
- return false;
+ for (unsigned i = 0; i < 2; ++i)
+ {
+ tree op = gimple_op (stmt, i);
+ if (!graphite_can_represent_expr (scop_entry, loop, op)
+ /* We can not handle REAL_TYPE. Failed for pr39260. */
+ || TREE_CODE (TREE_TYPE (op)) == REAL_TYPE)
+ return false;
+ }
return true;
}