[oe-commits] Khem Raj : gcc-4.5.inc: Backport gcc trunk svn revision 165495 to fix ICE on udev

git version control git at git.openembedded.org
Fri Oct 22 03:30:52 UTC 2010


Module: openembedded.git
Branch: kergoth/autotools
Commit: 7cb89bb309a4b1d3e54296a553c118b982820be7
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=7cb89bb309a4b1d3e54296a553c118b982820be7

Author: Khem Raj <raj.khem at gmail.com>
Date:   Wed Oct 20 10:55:57 2010 -0700

gcc-4.5.inc: Backport gcc trunk svn revision 165495 to fix ICE on udev

Signed-off-by: Khem Raj <raj.khem at gmail.com>

---

 recipes/gcc/gcc-4.5.inc                            |    3 +-
 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 36d12ec..dd11395 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 0000000..72a221b
--- /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 at codesourcery.com>
+
+	Backport from mainline:
+
+	2010-10-15  Chung-Lin Tang  <cltang at 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;
++}





More information about the Openembedded-commits mailing list