aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-if-conv.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r--gcc/tree-if-conv.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index 33d6cdd..d2e40d4 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -2624,6 +2624,11 @@ combine_blocks (class loop *loop)
vphi = get_virtual_phi (bb);
if (vphi)
{
+ /* When there's just loads inside the loop a stray virtual
+ PHI merging the uses can appear, update last_vdef from
+ it. */
+ if (!last_vdef)
+ last_vdef = gimple_phi_arg_def (vphi, 0);
imm_use_iterator iter;
use_operand_p use_p;
gimple *use_stmt;
@@ -2655,6 +2660,10 @@ combine_blocks (class loop *loop)
if (gimple_vdef (stmt))
last_vdef = gimple_vdef (stmt);
}
+ else
+ /* If this is the first load we arrive at update last_vdef
+ so we handle stray PHIs correctly. */
+ last_vdef = gimple_vuse (stmt);
if (predicated[i])
{
ssa_op_iter i;