re PR rtl-optimization/65980 (-fcompare-debug failure building Linux kernel)

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.

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

From-SVN: r231672
This commit is contained in:
Jakub Jelinek 2015-12-16 09:04:31 +01:00 committed by Jakub Jelinek
parent 3fddb2efc2
commit 8ec0963c81
4 changed files with 52 additions and 2 deletions

View 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):

View 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);

View 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

View File

@ -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;
}