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

Reply via email to