Commit 338b5886 by Kazu Hirata Committed by Kazu Hirata

re PR tree-optimization/25501 (Segfault)

gcc/
	PR tree-optimization/25501
	* tree-cfgcleanup.c (merge_phi_nodes): Check that RESULT is
	used in the PHI argument corresponding to the edge from BB to
	DEST.

gcc/testsuite/
	PR tree-optimization/25501
	* testsuite/gcc.dg/tree-ssa/pr25501.c: New.

From-SVN: r108853
parent bd989e4c
2005-12-20 Kazu Hirata <kazu@codesourcery.com>
PR tree-optimization/25501
* tree-cfgcleanup.c (merge_phi_nodes): Check that RESULT is
used in the PHI argument corresponding to the edge from BB to
DEST.
2005-12-20 Richard Guenther <rguenther@suse.de>
Revert
......
2005-12-20 Kazu Hirata <kazu@codesourcery.com>
PR tree-optimization/25501
* testsuite/gcc.dg/tree-ssa/pr25501.c: New.
2005-12-20 Richard Guenther <rguenther@suse.de>
Revert
/* PR tree-optimization/25501
The PHI merge pass used to try to merge PHI nodes that cannot
actually merged, causing a segfault later. Make sure that does not
happen any more. */
/* { dg-options "-O1 -fdump-tree-mergephi" } */
int
foo (int a)
{
int b;
int c;
int d;
if (a == 2)
b = 3;
else
b = 5;
c = 7;
d = 11;
for (;;)
{
if (d == 5)
break;
d = b;
}
return 13;
}
/* { dg-final { scan-tree-dump-times "Removing basic block" 0 "mergephi"} } */
/* { dg-final { cleanup-tree-dump "mergephi" } } */
......@@ -746,6 +746,7 @@ merge_phi_nodes (void)
else
{
tree phi;
unsigned int dest_idx = single_succ_edge (bb)->dest_idx;
/* BB dominates DEST. There may be many users of the PHI
nodes in BB. However, there is still a trivial case we
......@@ -767,7 +768,8 @@ merge_phi_nodes (void)
/* Get the single use of the result of this PHI node. */
if (!single_imm_use (result, &imm_use, &use_stmt)
|| TREE_CODE (use_stmt) != PHI_NODE
|| bb_for_stmt (use_stmt) != dest)
|| bb_for_stmt (use_stmt) != dest
|| PHI_ARG_DEF (use_stmt, dest_idx) != result)
break;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment