[GuardWidening] Improve analysis of potential widening into hotter block, try 2
authorMax Kazantsev <mkazantsev@azul.com>
Wed, 22 Mar 2023 07:29:12 +0000 (14:29 +0700)
committerMax Kazantsev <mkazantsev@azul.com>
Wed, 22 Mar 2023 08:15:26 +0000 (15:15 +0700)
commit7b83a1438f9af064851bac3d74e05f794088d6d6
tree545eab4692a824d077307e1db578833c1ebfdaea
parentf809eb4db2d14a5a529f9f440b849b7489292976
[GuardWidening] Improve analysis of potential widening into hotter block, try 2

The initial version was reverted because it looped infinitely if the likely successor
isn't properly dominated by the predecessor. In practice it means that we went up the
CFG through backedge and looped infinitely.

I also added some paranoid assertion checks to make sure that every other invariant
holds. I also found a hypothetical situation when we may go past the dominated block
while following the likely successors (it means that in fact the dominated block is
dynamically not reachable from dominating block) and explicitly prohibited this, though
I don't have a motivating test showing that it's a real problem.

https://reviews.llvm.org/D146276
llvm/lib/Transforms/Scalar/GuardWidening.cpp
llvm/test/Transforms/GuardWidening/two_forms_behavior_consistency.ll