re PR tree-optimization/31797 (infinite loop in tree-ssa-pre or ICE)
2007-05-12 Richard Guenther <rguenther@suse.de> PR tree-optimization/31797 * tree-ssa-forwprop.c (forward_propagate_addr_expr): Do not propagate into a stmt that has volatile ops. * gcc.c-torture/compile/pr31797.c: New testcase. From-SVN: r124637
This commit is contained in:
parent
a747170836
commit
c4160806e1
@ -1,3 +1,9 @@
|
||||
2007-05-12 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/31797
|
||||
* tree-ssa-forwprop.c (forward_propagate_addr_expr): Do not
|
||||
propagate into a stmt that has volatile ops.
|
||||
|
||||
2007-05-12 Richard Sandiford <richard@codesourcery.com>
|
||||
|
||||
* configure.ac (gcc_gxx_include_dir): Use $(libsubdir_to_prefix).
|
||||
|
@ -1,3 +1,8 @@
|
||||
2007-05-12 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/31797
|
||||
* gcc.c-torture/compile/pr31797.c: New testcase.
|
||||
|
||||
2007-05-12 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/30746
|
||||
|
31
gcc/testsuite/gcc.c-torture/compile/pr31797.c
Normal file
31
gcc/testsuite/gcc.c-torture/compile/pr31797.c
Normal file
@ -0,0 +1,31 @@
|
||||
struct GTeth_desc
|
||||
{
|
||||
unsigned ed_cmdsts;
|
||||
};
|
||||
struct GTeth_softc
|
||||
{
|
||||
struct GTeth_desc txq_desc[32];
|
||||
unsigned int txq_fi;
|
||||
unsigned int txq_nactive;
|
||||
};
|
||||
|
||||
void
|
||||
GTeth_txq_free (struct GTeth_softc *sc)
|
||||
{
|
||||
struct GTeth_desc *txd = &sc->txq_desc[0];
|
||||
txd->ed_cmdsts &= ~(1U << (31));
|
||||
}
|
||||
void
|
||||
GTeth_txq_done (struct GTeth_softc *sc)
|
||||
{
|
||||
while (sc->txq_nactive > 0)
|
||||
{
|
||||
volatile struct GTeth_desc *txd = &sc->txq_desc[sc->txq_fi];
|
||||
if (txd->ed_cmdsts)
|
||||
{
|
||||
if (sc->txq_nactive == 1)
|
||||
return;
|
||||
}
|
||||
GTeth_txq_free (sc);
|
||||
}
|
||||
}
|
@ -727,7 +727,7 @@ forward_propagate_addr_expr (tree name, tree rhs)
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If the use is in a deeper loop nest, then we do not want
|
||||
/* If the use is in a deeper loop nest, then we do not want
|
||||
to propagate the ADDR_EXPR into the loop as that is likely
|
||||
adding expression evaluations into the loop. */
|
||||
if (bb_for_stmt (use_stmt)->loop_depth > stmt_loop_depth)
|
||||
@ -735,7 +735,14 @@ forward_propagate_addr_expr (tree name, tree rhs)
|
||||
all = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
/* If the use_stmt has side-effects, don't propagate into it. */
|
||||
if (stmt_ann (use_stmt)->has_volatile_ops)
|
||||
{
|
||||
all = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
push_stmt_changes (&use_stmt);
|
||||
|
||||
result = forward_propagate_addr_expr_1 (name, rhs, use_stmt,
|
||||
|
Loading…
Reference in New Issue
Block a user