The following fixes the graphite ICE that results from stmt_simple_for_scop_p not walking all GIMPLE_COND operands but only SSA name ones.
Bootstrap and regtest in progress on x86_64-unknown-linux-gnu. Richard. 2014-04-03 Richard Biener <rguent...@suse.de> PR tree-optimization/60740 * graphite-scop-detection.c (stmt_simple_for_scop_p): Iterate over all GIMPLE_COND operands. * gcc.dg/graphite/pr60740.c: New testcase. Index: gcc/graphite-scop-detection.c =================================================================== *** gcc/graphite-scop-detection.c (revision 209018) --- gcc/graphite-scop-detection.c (working copy) *************** stmt_simple_for_scop_p (basic_block scop *** 346,358 **** 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. */ if (!(code == LT_EXPR || code == GT_EXPR || code == LE_EXPR --- 346,355 ---- case GIMPLE_COND: { /* 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 *************** stmt_simple_for_scop_p (basic_block scop *** 361,371 **** || 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; return true; } --- 358,371 ---- || code == NE_EXPR)) 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; } Index: gcc/testsuite/gcc.dg/graphite/pr60740.c =================================================================== *** gcc/testsuite/gcc.dg/graphite/pr60740.c (revision 0) --- gcc/testsuite/gcc.dg/graphite/pr60740.c (working copy) *************** *** 0 **** --- 1,16 ---- + /* { dg-options "-O2 -floop-interchange" } */ + + int **db6 = 0; + + void + k26(void) + { + static int geb = 0; + int *a22 = &geb; + int **l30 = &a22; + int *c4b; + int ndf; + for (ndf = 0; ndf <= 1; ++ndf) + *c4b = (db6 == l30) && (*a22)--; + } +