aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorZdenek Dvorak <dvorakz@suse.cz>2006-02-05 15:58:07 +0100
committerZdenek Dvorak <rakdver@gcc.gnu.org>2006-02-05 14:58:07 +0000
commit569f8d982a8147ed19d8370d127291c308116419 (patch)
tree7defa2a131c1aee78633e3ed7d7b325c46ebf1dd /gcc
parent93638ec7948abfd1c205d06c5c4cb9e603b78b32 (diff)
downloadgcc-569f8d982a8147ed19d8370d127291c308116419.zip
gcc-569f8d982a8147ed19d8370d127291c308116419.tar.gz
gcc-569f8d982a8147ed19d8370d127291c308116419.tar.bz2
re PR rtl-optimization/26087 (ICE in df_find_use)
PR rtl-optimization/26087 * rtlanal.c (canonicalize_condition): Do not cross basic block boundaries. From-SVN: r110614
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/rtlanal.c7
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e1fac08..4908f5c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 91fb489..1390ad9 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -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);