aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-split.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-ssa-loop-split.cc')
-rw-r--r--gcc/tree-ssa-loop-split.cc7
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