This patch adds a function to detect guards expressed in explicit form:
%wc = call i1 @llvm.experimental.widenable.condition() %guard_cond = and i1, %some_cond, %wc br i1 %guard_cond, label %guarded, label %deopt deopt: <maybe some non-side-effecting instructions> deoptimize()
This form can be used as alternative to implicit control flow guard
representation expressed by experimental_guard intrinsic.
This comment applies to your whole set of reviews.
I would suggest avoiding the term "explicit". Despite glancing at your patch titles a few times over the last week, I still get confused each time. Is explicit the guard? Or the widenable condition? Possible alternate wording:
isWidenableBranchToDeopt?
isGuardAsWidenableBranch?