diff options
Diffstat (limited to 'gcc/tree-ssa-loop-split.cc')
-rw-r--r-- | gcc/tree-ssa-loop-split.cc | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree-ssa-loop-split.cc b/gcc/tree-ssa-loop-split.cc index 48d153d..a64066a 100644 --- a/gcc/tree-ssa-loop-split.cc +++ b/gcc/tree-ssa-loop-split.cc @@ -622,6 +622,7 @@ split_loop (class loop *loop1) gphi *phi = find_or_create_guard_phi (loop1, guard_iv, &iv); if (!phi) continue; + const tree phi_result = gimple_phi_result (phi); gcond *guard_stmt = as_a<gcond *> (*gsi_last_bb (bbs[i])); tree guard_init = PHI_ARG_DEF_FROM_EDGE (phi, loop_preheader_edge (loop1)); @@ -703,6 +704,12 @@ split_loop (class loop *loop1) profile_probability::very_likely (), true); gcc_assert (loop2); + + /* The phi address may have changed due to being resized in + loop_version (), so reobtain it. */ + phi = as_a<gphi *> (SSA_NAME_DEF_STMT (phi_result)); + gcc_checking_assert (gimple_bb (phi) == loop1->header); + /* Correct probability of edge cond_bb->preheader_of_loop2. */ single_pred_edge (loop_preheader_edge (loop2)->src)->probability |