mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-26 17:00:58 +08:00
if-conv: Delete dead stmts backwards in ifcvt_local_dce [PR94283]
> > This patch caused: > > > > gcc /home/marxin/Programming/gcc/gcc/testsuite/gcc.c-torture/compile/990625-2.c -O3 -g -fno-tree-dce -c > > during GIMPLE pass: ifcvt > > /home/marxin/Programming/gcc/gcc/testsuite/gcc.c-torture/compile/990625-2.c: In function ‘broken030599’: > > /home/marxin/Programming/gcc/gcc/testsuite/gcc.c-torture/compile/990625-2.c:2:1: internal compiler error: Segmentation fault > > Likely > > /* Delete dead statements. */ > gsi = gsi_start_bb (bb); > while (!gsi_end_p (gsi)) > { > > needs to instead work back-to-front for debug stmt adjustment to work Indeed, that seems to work. 2020-03-25 Richard Biener <rguenther@suse.de> Jakub Jelinek <jakub@redhat.com> PR debug/94283 * tree-if-conv.c (ifcvt_local_dce): Delete dead statements backwards. * gcc.dg/pr94283.c: New test. Co-authored-by: Richard Biener <rguenther@suse.de>
This commit is contained in:
parent
adaf4b6c66
commit
c2133167ad
@ -1,3 +1,9 @@
|
||||
2020-03-25 Richard Biener <rguenther@suse.de>
|
||||
Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/94283
|
||||
* tree-if-conv.c (ifcvt_local_dce): Delete dead statements backwards.
|
||||
|
||||
2020-03-24 Christophe Lyon <christophe.lyon@linaro.org>
|
||||
|
||||
* doc/sourcebuild.texi (ARM-specific attributes): Add
|
||||
|
@ -1,3 +1,8 @@
|
||||
2020-03-25 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/94283
|
||||
* gcc.dg/pr94283.c: New test.
|
||||
|
||||
2020-03-24 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
* gcc.dg/analyzer/sigsetjmp-5.c: Require sigsetjmp support.
|
||||
|
16
gcc/testsuite/gcc.dg/pr94283.c
Normal file
16
gcc/testsuite/gcc.dg/pr94283.c
Normal file
@ -0,0 +1,16 @@
|
||||
/* PR debug/94283 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -fno-tree-dce -fcompare-debug" } */
|
||||
|
||||
void
|
||||
foo (int *n)
|
||||
{
|
||||
for (int i = 0; i < 32; i++)
|
||||
{
|
||||
int x = 0;
|
||||
x++;
|
||||
if (i & 4)
|
||||
x++;
|
||||
x++;
|
||||
}
|
||||
}
|
@ -2973,9 +2973,11 @@ ifcvt_local_dce (class loop *loop)
|
||||
}
|
||||
}
|
||||
/* Delete dead statements. */
|
||||
gsi = gsi_start_bb (bb);
|
||||
gsi = gsi_last_bb (bb);
|
||||
while (!gsi_end_p (gsi))
|
||||
{
|
||||
gimple_stmt_iterator gsiprev = gsi;
|
||||
gsi_prev (&gsiprev);
|
||||
stmt = gsi_stmt (gsi);
|
||||
if (gimple_store_p (stmt))
|
||||
{
|
||||
@ -2986,14 +2988,13 @@ ifcvt_local_dce (class loop *loop)
|
||||
if (dse_classify_store (&write, stmt, false, NULL, NULL, latch_vdef)
|
||||
== DSE_STORE_DEAD)
|
||||
delete_dead_or_redundant_assignment (&gsi, "dead");
|
||||
else
|
||||
gsi_next (&gsi);
|
||||
gsi = gsiprev;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (gimple_plf (stmt, GF_PLF_2))
|
||||
{
|
||||
gsi_next (&gsi);
|
||||
gsi = gsiprev;
|
||||
continue;
|
||||
}
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
@ -3003,6 +3004,7 @@ ifcvt_local_dce (class loop *loop)
|
||||
}
|
||||
gsi_remove (&gsi, true);
|
||||
release_defs (stmt);
|
||||
gsi = gsiprev;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user