I am testing the following patch to robustify into-loop-closed-SSA
rewrite against removed blocks in the changed_bbs bitmap.

Bootstrap and regtest running on x86_64-unknown-linux-gnu.

Richard.

2016-06-09  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/71462
        * tree-ssa-loop-manip.c (find_uses_to_rename): Guard against
        removed blocks.

        * gcc.dg/torture/pr71462.c: New testcase.

Index: gcc/tree-ssa-loop-manip.c
===================================================================
*** gcc/tree-ssa-loop-manip.c   (revision 237248)
--- gcc/tree-ssa-loop-manip.c   (working copy)
*************** find_uses_to_rename (bitmap changed_bbs,
*** 472,479 ****
  
    if (changed_bbs)
      EXECUTE_IF_SET_IN_BITMAP (changed_bbs, 0, index, bi)
!       find_uses_to_rename_bb (BASIC_BLOCK_FOR_FN (cfun, index), use_blocks,
!                             need_phis, use_flags);
    else
      FOR_EACH_BB_FN (bb, cfun)
        find_uses_to_rename_bb (bb, use_blocks, need_phis, use_flags);
--- 472,482 ----
  
    if (changed_bbs)
      EXECUTE_IF_SET_IN_BITMAP (changed_bbs, 0, index, bi)
!       {
!       bb = BASIC_BLOCK_FOR_FN (cfun, index);
!       if (bb)
!         find_uses_to_rename_bb (bb, use_blocks, need_phis, use_flags);
!       }
    else
      FOR_EACH_BB_FN (bb, cfun)
        find_uses_to_rename_bb (bb, use_blocks, need_phis, use_flags);
Index: gcc/testsuite/gcc.dg/torture/pr71462.c
===================================================================
*** gcc/testsuite/gcc.dg/torture/pr71462.c      (revision 0)
--- gcc/testsuite/gcc.dg/torture/pr71462.c      (working copy)
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ 
+ short a;
+ long b;
+ void fn1()
+ {
+   int c = a = 1;
+   for (; a; a++)
+     {
+       for (; 9 <= 8;)
+       for (;;) {
+           a = 20;
+           for (; a <= 35; a++)
+             ;
+ line:;
+       }
+       if ((c += 264487869) == 9)
+       {
+         unsigned *d = 0;
+         for (; b;)
+           d = (unsigned *)&c;
+         if (d)
+           for (;;)
+             ;
+       }
+     }
+   goto line;
+ }

Reply via email to