From 2f4e45101dd812a6fcc1e5d96efedc60b8735432 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 21 Apr 2023 15:53:21 +0200 Subject: [PATCH] Fix latent bug in loop header copying which forgets to update the loop header pointer gcc/ChangeLog: 2023-04-21 Jan Hubicka Ondrej Kubanek * tree-ssa-loop-ch.cc (ch_base::copy_headers): Update loop header and latch. --- gcc/tree-ssa-loop-ch.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gcc/tree-ssa-loop-ch.cc b/gcc/tree-ssa-loop-ch.cc index ddf025c0cfdd..560df39893ef 100644 --- a/gcc/tree-ssa-loop-ch.cc +++ b/gcc/tree-ssa-loop-ch.cc @@ -542,6 +542,17 @@ ch_base::copy_headers (function *fun) } } + /* Update header of the loop. */ + loop->header = header; + /* Find correct latch. We only duplicate chain of conditionals so + there should be precisely two edges to the new header. One entry + edge and one to latch. */ + FOR_EACH_EDGE (e, ei, loop->header->preds) + if (header != e->src) + { + loop->latch = e->src; + break; + } /* Ensure that the latch and the preheader is simple (we know that they are not now, since there was the loop exit condition. */ split_edge (loop_preheader_edge (loop)); @@ -561,6 +572,8 @@ ch_base::copy_headers (function *fun) if (changed) { + if (flag_checking) + verify_loop_structure (); update_ssa (TODO_update_ssa); /* After updating SSA form perform CSE on the loop header copies. This is esp. required for the pass before -- 2.47.2