re PR debug/84875 (ICE in maybe_record_trace_start, at dwarf2cfi.c:2348 on s390x)
PR debug/84875 * dce.c (delete_unmarked_insns): Don't remove frame related noop moves holding REG_CFA_RESTORE notes, instead turn them into a USE. * gcc.dg/pr84875.c: New test. From-SVN: r258692
This commit is contained in:
parent
1efb1dc2d8
commit
6f21dc3c4f
@ -1,3 +1,9 @@
|
|||||||
|
2018-03-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR debug/84875
|
||||||
|
* dce.c (delete_unmarked_insns): Don't remove frame related noop moves
|
||||||
|
holding REG_CFA_RESTORE notes, instead turn them into a USE.
|
||||||
|
|
||||||
2018-03-20 Peter Bergner <bergner@vnet.ibm.com>
|
2018-03-20 Peter Bergner <bergner@vnet.ibm.com>
|
||||||
|
|
||||||
PR target/83789
|
PR target/83789
|
||||||
|
27
gcc/dce.c
27
gcc/dce.c
@ -569,9 +569,19 @@ delete_unmarked_insns (void)
|
|||||||
FOR_BB_INSNS_REVERSE_SAFE (bb, insn, next)
|
FOR_BB_INSNS_REVERSE_SAFE (bb, insn, next)
|
||||||
if (NONDEBUG_INSN_P (insn))
|
if (NONDEBUG_INSN_P (insn))
|
||||||
{
|
{
|
||||||
|
rtx turn_into_use = NULL_RTX;
|
||||||
|
|
||||||
/* Always delete no-op moves. */
|
/* Always delete no-op moves. */
|
||||||
if (noop_move_p (insn))
|
if (noop_move_p (insn))
|
||||||
;
|
{
|
||||||
|
if (RTX_FRAME_RELATED_P (insn))
|
||||||
|
turn_into_use
|
||||||
|
= find_reg_note (insn, REG_CFA_RESTORE, NULL);
|
||||||
|
if (turn_into_use && REG_P (XEXP (turn_into_use, 0)))
|
||||||
|
turn_into_use = XEXP (turn_into_use, 0);
|
||||||
|
else
|
||||||
|
turn_into_use = NULL_RTX;
|
||||||
|
}
|
||||||
|
|
||||||
/* Otherwise rely only on the DCE algorithm. */
|
/* Otherwise rely only on the DCE algorithm. */
|
||||||
else if (marked_insn_p (insn))
|
else if (marked_insn_p (insn))
|
||||||
@ -611,8 +621,19 @@ delete_unmarked_insns (void)
|
|||||||
if (CALL_P (insn))
|
if (CALL_P (insn))
|
||||||
must_clean = true;
|
must_clean = true;
|
||||||
|
|
||||||
/* Now delete the insn. */
|
if (turn_into_use)
|
||||||
delete_insn_and_edges (insn);
|
{
|
||||||
|
/* Don't remove frame related noop moves if they cary
|
||||||
|
REG_CFA_RESTORE note, while we don't need to emit any code,
|
||||||
|
we need it to emit the CFI restore note. */
|
||||||
|
PATTERN (insn)
|
||||||
|
= gen_rtx_USE (GET_MODE (turn_into_use), turn_into_use);
|
||||||
|
INSN_CODE (insn) = -1;
|
||||||
|
df_insn_rescan (insn);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* Now delete the insn. */
|
||||||
|
delete_insn_and_edges (insn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Deleted a pure or const call. */
|
/* Deleted a pure or const call. */
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2018-03-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR debug/84875
|
||||||
|
* gcc.dg/pr84875.c: New test.
|
||||||
|
|
||||||
2018-03-20 Marek Polacek <polacek@redhat.com>
|
2018-03-20 Marek Polacek <polacek@redhat.com>
|
||||||
|
|
||||||
PR c++/84978, ICE with NRVO.
|
PR c++/84978, ICE with NRVO.
|
||||||
|
28
gcc/testsuite/gcc.dg/pr84875.c
Normal file
28
gcc/testsuite/gcc.dg/pr84875.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/* PR debug/84875 */
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-Os" } */
|
||||||
|
/* { dg-additional-options "-fpie" { target pie } } */
|
||||||
|
/* { dg-additional-options "-march=z196" { target s390*-*-* } } */
|
||||||
|
|
||||||
|
static long *a[100];
|
||||||
|
static int b[100];
|
||||||
|
long *c;
|
||||||
|
int d;
|
||||||
|
void foo (long *);
|
||||||
|
|
||||||
|
void
|
||||||
|
bar ()
|
||||||
|
{
|
||||||
|
long *g = c;
|
||||||
|
g--;
|
||||||
|
d = *g;
|
||||||
|
if (d)
|
||||||
|
if (b[d] < 8)
|
||||||
|
{
|
||||||
|
*(void **)g = a[d];
|
||||||
|
a[d] = g;
|
||||||
|
b[d]++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
foo (g);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user