From 9e1d5f491f78069261227aa55ce43879e427c51a Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Wed, 26 Oct 2011 09:33:49 +0000 Subject: [PATCH] re PR tree-optimization/50763 (ICE: verify_gimple failed: missing PHI def with -ftree-tail-merge) 2011-10-26 Tom de Vries PR tree-optimization/50763 * tree-ssa-tail-merge.c (replace_block_by): Update vops if phi_vuse1 or phi_vuse2 is NULL_TREE only if bb1 dominates or is dominated by bb2. From-SVN: r180518 --- gcc/ChangeLog | 6 ++++++ gcc/tree-ssa-tail-merge.c | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a54e9490afe..1a09dcc78c3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-10-26 Tom de Vries + + PR tree-optimization/50763 + * tree-ssa-tail-merge.c (replace_block_by): Update vops if phi_vuse1 or + phi_vuse2 is NULL_TREE only if bb1 dominates or is dominated by bb2. + 2011-10-26 Richard Guenther PR lto/41844 diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c index f7b2f5278d7..eb4bc92bd62 100644 --- a/gcc/tree-ssa-tail-merge.c +++ b/gcc/tree-ssa-tail-merge.c @@ -1551,7 +1551,12 @@ replace_block_by (basic_block bb1, basic_block bb2, bool update_vops) phi_vuse1 = vop_at_entry (bb1); /* If both are not found, it means there's no need to update. */ - update_vops = phi_vuse1 != NULL_TREE || phi_vuse2 != NULL_TREE; + if (phi_vuse1 == NULL_TREE && phi_vuse2 == NULL_TREE) + update_vops = false; + else if (phi_vuse1 == NULL_TREE) + update_vops = dominated_by_p (CDI_DOMINATORS, bb1, bb2); + else if (phi_vuse2 == NULL_TREE) + update_vops = dominated_by_p (CDI_DOMINATORS, bb2, bb1); } if (phi_vuse1 && gimple_bb (SSA_NAME_DEF_STMT (phi_vuse1)) == bb1)