summaryrefslogtreecommitdiff
path: root/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0109-PR-rtl-optimization-48549.patch
diff options
context:
space:
mode:
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.patch128
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
-