summaryrefslogtreecommitdiff
path: root/patches/gcc/3.4.6/700-pr15068-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/gcc/3.4.6/700-pr15068-fix.patch')
-rw-r--r--patches/gcc/3.4.6/700-pr15068-fix.patch27
1 files changed, 27 insertions, 0 deletions
diff --git a/patches/gcc/3.4.6/700-pr15068-fix.patch b/patches/gcc/3.4.6/700-pr15068-fix.patch
new file mode 100644
index 0000000..308f35b
--- /dev/null
+++ b/patches/gcc/3.4.6/700-pr15068-fix.patch
@@ -0,0 +1,27 @@
+diff -durN gcc-3.4.6.orig/gcc/flow.c gcc-3.4.6/gcc/flow.c
+--- gcc-3.4.6.orig/gcc/flow.c 2005-09-01 22:51:09.000000000 +0200
++++ gcc-3.4.6/gcc/flow.c 2007-08-15 23:00:30.000000000 +0200
+@@ -1884,6 +1884,7 @@
+ rtx set_src = SET_SRC (pc_set (BB_END (bb)));
+ rtx cond_true = XEXP (set_src, 0);
+ rtx reg = XEXP (cond_true, 0);
++ enum rtx_code inv_cond;
+
+ if (GET_CODE (reg) == SUBREG)
+ reg = SUBREG_REG (reg);
+@@ -1892,11 +1893,13 @@
+ in the form of a comparison of a register against zero.
+ If the condition is more complex than that, then it is safe
+ not to record any information. */
+- if (GET_CODE (reg) == REG
++ inv_cond = reversed_comparison_code (cond_true, BB_END (bb));
++ if (inv_cond != UNKNOWN
++ && GET_CODE (reg) == REG
+ && XEXP (cond_true, 1) == const0_rtx)
+ {
+ rtx cond_false
+- = gen_rtx_fmt_ee (reverse_condition (GET_CODE (cond_true)),
++ = gen_rtx_fmt_ee (inv_cond,
+ GET_MODE (cond_true), XEXP (cond_true, 0),
+ XEXP (cond_true, 1));
+ if (GET_CODE (XEXP (set_src, 1)) == PC)