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; }