]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR rtl-optimization/65980
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Dec 2015 08:04:31 +0000 (08:04 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Dec 2015 08:04:31 +0000 (08:04 +0000)
* jump.c (rtx_renumbered_equal_p) <case LABEL_REF>: Use
next_nonnote_nondebug_insn instead of next_real_insn and
skip over CODE_LABELs too.

* gcc.dg/pr65980.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@231672 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/jump.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr65980.c [new file with mode: 0644]

index ad50192a9231b53214cb26cbb443cf25b8fb2ca5..c68fd132e34b5de5a39edba0ebef523b7142423b 100644 (file)
@@ -1,3 +1,10 @@
+2015-12-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/65980
+       * jump.c (rtx_renumbered_equal_p) <case LABEL_REF>: Use
+       next_nonnote_nondebug_insn instead of next_real_insn and
+       skip over CODE_LABELs too.
+
 2015-12-10  Jan Hubicka  <hubicka@ucw.cz>
 
        * symtab.c (symtab_node::fixup_same_cpp_alias_visibility):
index c41710db73d942616dec4999729559dcda69c4a4..79188f4bc65fbe4e2033893580e90200540124c3 100644 (file)
@@ -1802,8 +1802,16 @@ rtx_renumbered_equal_p (const_rtx x, const_rtx y)
 
       /* Two label-refs are equivalent if they point at labels
         in the same position in the instruction stream.  */
-      return (next_real_insn (LABEL_REF_LABEL (x))
-             == next_real_insn (LABEL_REF_LABEL (y)));
+      else
+       {
+         rtx_insn *xi = next_nonnote_nondebug_insn (LABEL_REF_LABEL (x));
+         rtx_insn *yi = next_nonnote_nondebug_insn (LABEL_REF_LABEL (y));
+         while (xi && LABEL_P (xi))
+           xi = next_nonnote_nondebug_insn (xi);
+         while (yi && LABEL_P (yi))
+           yi = next_nonnote_nondebug_insn (yi);
+         return xi == yi;
+       }
 
     case SYMBOL_REF:
       return XSTR (x, 0) == XSTR (y, 0);
index 7e45765159c78eede71b9374ec9431bd07277ef9..a0b8fda8b3c74aa0e558b6e2e5d2d6fad745530d 100644 (file)
@@ -1,3 +1,8 @@
+2015-12-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/65980
+       * gcc.dg/pr65980.c: New test.
+
 2015-12-15  Martin Sebor  <msebor@redhat.com>
 
        c++/42121
diff --git a/gcc/testsuite/gcc.dg/pr65980.c b/gcc/testsuite/gcc.dg/pr65980.c
new file mode 100644 (file)
index 0000000..5139ae3
--- /dev/null
@@ -0,0 +1,30 @@
+/* PR rtl-optimization/65980 */
+/* { dg-do compile } */
+/* { dg-options "-O3 -fcompare-debug" } */
+
+typedef struct { int b; } A;
+void (*a) (int);
+int b;
+
+int
+foo (A *v)
+{
+  asm goto ("" : : "m" (v->b) : : l);
+  return 0;
+l:
+  return 1;
+}
+
+int
+bar (void)
+{
+  if (b)
+    {
+      if (foo (0) && a)
+       a (0);
+      return 0;
+    }
+  if (foo (0) && a)
+    a (0);
+  return 0;
+}