From: Jan Hubicka Date: Fri, 21 Apr 2023 13:53:21 +0000 (+0200) Subject: Fix latent bug in loop header copying which forgets to update the loop header pointer X-Git-Tag: basepoints/gcc-15~9994 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2f4e45101dd812a6fcc1e5d96efedc60b8735432;p=thirdparty%2Fgcc.git 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. --- 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