diff options
author | Khem Raj <raj.khem@gmail.com> | 2010-10-20 10:55:57 -0700 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2010-10-20 11:00:16 -0700 |
commit | 7cb89bb309a4b1d3e54296a553c118b982820be7 (patch) | |
tree | 3ae5f45a1bcdd6421fb903902664ca5dd26563d5 /recipes/gcc | |
parent | ac0b7d1cf703fed7930e2adf6309ded86a887d1b (diff) | |
download | openembedded-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.inc | 3 | ||||
-rw-r--r-- | recipes/gcc/gcc-4.5/gcc-linaro-fix-lp-653316.patch | 130 |
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; ++} |