re PR rtl-optimization/26087 (ICE in df_find_use)
authorZdenek Dvorak <dvorakz@suse.cz>
Sun, 5 Feb 2006 14:58:07 +0000 (15:58 +0100)
committerZdenek Dvorak <rakdver@gcc.gnu.org>
Sun, 5 Feb 2006 14:58:07 +0000 (14:58 +0000)
PR rtl-optimization/26087
* rtlanal.c (canonicalize_condition): Do not cross basic block
boundaries.

From-SVN: r110614

gcc/ChangeLog
gcc/rtlanal.c

index e1fac08dbb54eaad05126ec08726fedcd52dcaa0..4908f5c6137695b572a7b2b82425dd74546848b8 100644 (file)
@@ -1,3 +1,9 @@
+2006-02-04  Zdenek Dvorak <dvorakz@suse.cz>
+
+       PR rtl-optimization/26087
+       * rtlanal.c (canonicalize_condition): Do not cross basic block
+       boundaries.
+
 2006-02-04  Alexandre Oliva  <aoliva@redhat.com>
 
        PR debug/24444
index 91fb4898b73b076965aa1ac62e33e97c539e9130..1390ad985294dce8bbffcdf13faaec7aad153ffd 100644 (file)
@@ -4508,6 +4508,7 @@ canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest,
   rtx op0, op1;
   int reverse_code = 0;
   enum machine_mode mode;
+  basic_block bb = BLOCK_FOR_INSN (insn);
 
   code = GET_CODE (cond);
   mode = GET_MODE (cond);
@@ -4569,7 +4570,11 @@ canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest,
 
       if ((prev = prev_nonnote_insn (prev)) == 0
          || !NONJUMP_INSN_P (prev)
-         || FIND_REG_INC_NOTE (prev, NULL_RTX))
+         || FIND_REG_INC_NOTE (prev, NULL_RTX)
+         /* In cfglayout mode, there do not have to be labels at the
+            beginning of a block, or jumps at the end, so the previous
+            conditions would not stop us when we reach bb boundary.  */
+         || BLOCK_FOR_INSN (prev) != bb)
        break;
 
       set = set_of (op0, prev);