diff options
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r-- | gcc/tree-if-conv.c | 9 |
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; |