tree-ssa.c (kill_redundant_phi_nodes): More correctly handle PHIs where the destination or an argument is marked with...
* tree-ssa.c (kill_redundant_phi_nodes): More correctly handle PHIs where the destination or an argument is marked with SSA_NAME_OCCURS_IN_ABNORMAL_PHI. * gcc.c-torture/20040614-1.c: New test. From-SVN: r83132
This commit is contained in:
parent
d962e073a0
commit
daa2b95a4f
|
@ -1,3 +1,9 @@
|
|||
2004-06-14 Jeff Law <law@redhat.com>
|
||||
|
||||
* tree-ssa.c (kill_redundant_phi_nodes): More correctly handle
|
||||
PHIs where the destination or an argument is marked with
|
||||
SSA_NAME_OCCURS_IN_ABNORMAL_PHI.
|
||||
|
||||
2004-06-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/15945
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2004-06-14 Jeff Law <law@redhat.com>
|
||||
|
||||
* gcc.c-torture/compile/20040614-1.c: New test.
|
||||
|
||||
2004-06-14 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
|
||||
|
||||
PR fortran/15211
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef NO_LABEL_VALUES
|
||||
void f(int r1, int *fp)
|
||||
{
|
||||
void *hlbl_tbl[] = { &&label1 };
|
||||
goto *hlbl_tbl[r1];
|
||||
*fp = 0;
|
||||
label0:
|
||||
fp += 8;
|
||||
label1:
|
||||
*fp = 0;
|
||||
if (r1)
|
||||
goto label2;
|
||||
if (r1)
|
||||
goto label0;
|
||||
label2:
|
||||
;
|
||||
}
|
||||
#else
|
||||
int x;
|
||||
#endif
|
|
@ -885,6 +885,14 @@ kill_redundant_phi_nodes (void)
|
|||
{
|
||||
var = PHI_RESULT (phi);
|
||||
|
||||
/* If the destination of the PHI is associated with an
|
||||
abnormal edge, then we can not propagate this PHI away. */
|
||||
if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (var))
|
||||
{
|
||||
raise_value (phi, var, eq_to);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (i = 0; i < (unsigned) PHI_NUM_ARGS (phi); i++)
|
||||
{
|
||||
t = PHI_ARG_DEF (phi, i);
|
||||
|
@ -897,12 +905,20 @@ kill_redundant_phi_nodes (void)
|
|||
|
||||
stmt = SSA_NAME_DEF_STMT (t);
|
||||
|
||||
/* If any particular PHI argument is associated with
|
||||
an abnormal edge, then we know that we should not
|
||||
be propagating away this PHI. Go ahead and raise
|
||||
the result of this PHI to the top of the lattice. */
|
||||
if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (t))
|
||||
{
|
||||
raise_value (phi, var, eq_to);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If the defining statement for this argument is not a
|
||||
phi node or the argument is associated with an abnormal
|
||||
edge, then we need to recursively start the forward
|
||||
phi node then we need to recursively start the forward
|
||||
dataflow starting with PHI. */
|
||||
if (TREE_CODE (stmt) != PHI_NODE
|
||||
|| SSA_NAME_OCCURS_IN_ABNORMAL_PHI (t))
|
||||
if (TREE_CODE (stmt) != PHI_NODE)
|
||||
{
|
||||
eq_to[SSA_NAME_VERSION (t)] = t;
|
||||
raise_value (phi, t, eq_to);
|
||||
|
|
Loading…
Reference in New Issue