aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/gcc
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2010-10-20 10:55:57 -0700
committerKhem Raj <raj.khem@gmail.com>2010-10-20 11:00:16 -0700
commit7cb89bb309a4b1d3e54296a553c118b982820be7 (patch)
tree3ae5f45a1bcdd6421fb903902664ca5dd26563d5 /recipes/gcc
parentac0b7d1cf703fed7930e2adf6309ded86a887d1b (diff)
downloadopenembedded-7cb89bb309a4b1d3e54296a553c118b982820be7.tar.gz
gcc-4.5.inc: Backport gcc trunk svn revision 165495 to fix ICE on udev
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'recipes/gcc')
-rw-r--r--recipes/gcc/gcc-4.5.inc3
-rw-r--r--recipes/gcc/gcc-4.5/gcc-linaro-fix-lp-653316.patch130
2 files changed, 132 insertions, 1 deletions
diff --git a/recipes/gcc/gcc-4.5.inc b/recipes/gcc/gcc-4.5.inc
index 36d12ecd11..dd11395e5d 100644
--- a/recipes/gcc/gcc-4.5.inc
+++ b/recipes/gcc/gcc-4.5.inc
@@ -8,7 +8,7 @@ DEPENDS = "mpfr gmp libmpc libelf"
NATIVEDEPS = "mpfr-native gmp-native libmpc-native"
-INC_PR = "r12"
+INC_PR = "r13"
SRCREV = "164562"
PV = "4.5"
@@ -119,6 +119,7 @@ SRC_URI = "svn://gcc.gnu.org/svn/gcc/branches;module=${BRANCH} \
file://linaro/gcc-4.5-linaro-r99398.patch \
file://gcc-vmovl-PR45805.patch \
file://gcc-scalar-widening-pr45847.patch \
+ file://gcc-linaro-fix-lp-653316.patch \
"
SRC_URI_append_mips64 = " file://mips64-nomultilib.patch"
diff --git a/recipes/gcc/gcc-4.5/gcc-linaro-fix-lp-653316.patch b/recipes/gcc/gcc-4.5/gcc-linaro-fix-lp-653316.patch
new file mode 100644
index 0000000000..72a221b1d2
--- /dev/null
+++ b/recipes/gcc/gcc-4.5/gcc-linaro-fix-lp-653316.patch
@@ -0,0 +1,130 @@
+2010-10-15 Chung-Lin Tang <cltang@codesourcery.com>
+
+ Backport from mainline:
+
+ 2010-10-15 Chung-Lin Tang <cltang@codesourcery.com>
+
+ gcc/
+ * ifcvt.c (find_active_insn_before): New function.
+ (find_active_insn_after): New function.
+ (cond_exec_process_if_block): Use new functions to replace
+ prev_active_insn() and next_active_insn().
+
+ gcc/testsuite/
+ * gcc.dg/20101010-1.c: New testcase.
+
+=== modified file 'gcc/ifcvt.c'
+Index: gcc-4.5/gcc/ifcvt.c
+===================================================================
+--- gcc-4.5.orig/gcc/ifcvt.c
++++ gcc-4.5/gcc/ifcvt.c
+@@ -88,6 +88,8 @@ static int count_bb_insns (const_basic_b
+ static bool cheap_bb_rtx_cost_p (const_basic_block, int);
+ static rtx first_active_insn (basic_block);
+ static rtx last_active_insn (basic_block, int);
++static rtx find_active_insn_before (basic_block, rtx);
++static rtx find_active_insn_after (basic_block, rtx);
+ static basic_block block_fallthru (basic_block);
+ static int cond_exec_process_insns (ce_if_block_t *, rtx, rtx, rtx, rtx, int);
+ static rtx cond_exec_get_condition (rtx);
+@@ -230,6 +232,48 @@ last_active_insn (basic_block bb, int sk
+ return insn;
+ }
+
++/* Return the active insn before INSN inside basic block CURR_BB. */
++
++static rtx
++find_active_insn_before (basic_block curr_bb, rtx insn)
++{
++ if (!insn || insn == BB_HEAD (curr_bb))
++ return NULL_RTX;
++
++ while ((insn = PREV_INSN (insn)) != NULL_RTX)
++ {
++ if (NONJUMP_INSN_P (insn) || JUMP_P (insn) || CALL_P (insn))
++ break;
++
++ /* No other active insn all the way to the start of the basic block. */
++ if (insn == BB_HEAD (curr_bb))
++ return NULL_RTX;
++ }
++
++ return insn;
++}
++
++/* Return the active insn after INSN inside basic block CURR_BB. */
++
++static rtx
++find_active_insn_after (basic_block curr_bb, rtx insn)
++{
++ if (!insn || insn == BB_END (curr_bb))
++ return NULL_RTX;
++
++ while ((insn = NEXT_INSN (insn)) != NULL_RTX)
++ {
++ if (NONJUMP_INSN_P (insn) || JUMP_P (insn) || CALL_P (insn))
++ break;
++
++ /* No other active insn all the way to the end of the basic block. */
++ if (insn == BB_END (curr_bb))
++ return NULL_RTX;
++ }
++
++ return insn;
++}
++
+ /* Return the basic block reached by falling though the basic block BB. */
+
+ static basic_block
+@@ -448,9 +492,9 @@ cond_exec_process_if_block (ce_if_block_
+ if (n_matching > 0)
+ {
+ if (then_end)
+- then_end = prev_active_insn (then_first_tail);
++ then_end = find_active_insn_before (then_bb, then_first_tail);
+ if (else_end)
+- else_end = prev_active_insn (else_first_tail);
++ else_end = find_active_insn_before (else_bb, else_first_tail);
+ n_insns -= 2 * n_matching;
+ }
+
+@@ -488,9 +532,9 @@ cond_exec_process_if_block (ce_if_block_
+ if (n_matching > 0)
+ {
+ if (then_start)
+- then_start = next_active_insn (then_last_head);
++ then_start = find_active_insn_after (then_bb, then_last_head);
+ if (else_start)
+- else_start = next_active_insn (else_last_head);
++ else_start = find_active_insn_after (else_bb, else_last_head);
+ n_insns -= 2 * n_matching;
+ }
+ }
+@@ -646,7 +690,7 @@ cond_exec_process_if_block (ce_if_block_
+ {
+ rtx from = then_first_tail;
+ if (!INSN_P (from))
+- from = next_active_insn (from);
++ from = find_active_insn_after (then_bb, from);
+ delete_insn_chain (from, BB_END (then_bb), false);
+ }
+ if (else_last_head)
+Index: gcc-4.5/gcc/testsuite/gcc.dg/20101010-1.c
+===================================================================
+--- /dev/null
++++ gcc-4.5/gcc/testsuite/gcc.dg/20101010-1.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fno-crossjumping" } */
++
++int foo (void)
++{
++ int len;
++ if (bar1 (&len))
++ {
++ char devpath [len];
++ if (bar2 (devpath) == len)
++ return len;
++ }
++ return -1;
++}