diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0109-PR-rtl-optimization-48549.patch')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0109-PR-rtl-optimization-48549.patch | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0109-PR-rtl-optimization-48549.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0109-PR-rtl-optimization-48549.patch deleted file mode 100644 index 03b711973..000000000 --- a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0109-PR-rtl-optimization-48549.patch +++ /dev/null @@ -1,128 +0,0 @@ -From 5b05a527f1368e4ca9f71a8ec8124a2c64661007 Mon Sep 17 00:00:00 2001 -From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> -Date: Tue, 12 Apr 2011 13:44:33 +0000 -Subject: [PATCH] PR rtl-optimization/48549 - * combine.c (propagate_for_debug): Also stop after BB_END of - this_basic_block. Process LAST and just stop processing after it. - (combine_instructions): If last_combined_insn has been deleted, - set last_combined_insn to its PREV_INSN. - - * g++.dg/opt/pr48549.C: New test. - - -git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172319 138bc75d-0d04-0410-961f-82ee72b054a4 - -index 5f179c6..d563999 100644 ---- a/gcc/combine.c -+++ b/gcc/combine.c -@@ -1178,8 +1178,13 @@ combine_instructions (rtx f, unsigned int nregs) - next = 0; - if (NONDEBUG_INSN_P (insn)) - { -+ while (last_combined_insn -+ && INSN_DELETED_P (last_combined_insn)) -+ last_combined_insn = PREV_INSN (last_combined_insn); - if (last_combined_insn == NULL_RTX -- || DF_INSN_LUID (last_combined_insn) < DF_INSN_LUID (insn)) -+ || BARRIER_P (last_combined_insn) -+ || BLOCK_FOR_INSN (last_combined_insn) != this_basic_block -+ || DF_INSN_LUID (last_combined_insn) <= DF_INSN_LUID (insn)) - last_combined_insn = insn; - - /* See if we know about function return values before this -@@ -2435,19 +2440,21 @@ propagate_for_debug_subst (rtx from, const_rtx old_rtx, void *data) - } - - /* Replace all the occurrences of DEST with SRC in DEBUG_INSNs between INSN -- and LAST. */ -+ and LAST, not including INSN, but including LAST. Also stop at the end -+ of THIS_BASIC_BLOCK. */ - - static void - propagate_for_debug (rtx insn, rtx last, rtx dest, rtx src) - { -- rtx next, loc; -+ rtx next, loc, end = NEXT_INSN (BB_END (this_basic_block)); - - struct rtx_subst_pair p; - p.to = src; - p.adjusted = false; - - next = NEXT_INSN (insn); -- while (next != last) -+ last = NEXT_INSN (last); -+ while (next != last && next != end) - { - insn = next; - next = NEXT_INSN (insn); -new file mode 100644 -index 0000000..30799ee ---- /dev/null -+++ b/gcc/testsuite/g++.dg/opt/pr48549.C -@@ -0,0 +1,63 @@ -+// PR rtl-optimization/48549 -+// { dg-do compile } -+// { dg-options "-fcompare-debug -O2" } -+ -+void -+foo (void *from, void *to) -+{ -+ long offset = reinterpret_cast <long>(to) - reinterpret_cast <long>(from); -+ if (offset != static_cast <int>(offset)) -+ *(int *) 0xC0DE = 0; -+ reinterpret_cast <int *>(from)[1] = offset; -+} -+struct A -+{ -+ A () : a () {} -+ A (void *x) : a (x) {} -+ void *bar () { return a; } -+ void *a; -+}; -+struct C; -+struct D; -+struct E : public A -+{ -+ C m1 (int); -+ D m2 (); -+ E () {} -+ E (A x) : A (x) {} -+}; -+struct C : public E -+{ -+ C () {} -+ C (void *x) : E (x) {} -+}; -+struct D : public E -+{ -+ D (void *x) : E (x) {} -+}; -+C -+E::m1 (int x) -+{ -+ return (reinterpret_cast <char *>(bar ()) + x); -+} -+D -+E::m2 () -+{ -+ return reinterpret_cast <char *>(bar ()); -+} -+struct B -+{ -+ E a; -+ unsigned b : 16; -+ unsigned c : 1; -+}; -+void -+baz (B *x) -+{ -+ for (unsigned i = 0; i < 64; i++) -+ { -+ D d = x[i].a.m2 (); -+ C c = x[i].a.m1 (x[i].c); -+ foo (d.bar (), c.bar ()); -+ } -+} --- -1.7.0.4 - |