[llvm] [InstCombine] Fold (X == 0 ? Y : 0) | X to X == 0 ? Y : X (PR #138373)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Sun May 4 13:52:47 PDT 2025
================
@@ -3658,6 +3658,15 @@ Instruction *InstCombinerImpl::visitOr(BinaryOperator &I) {
return R;
}
+ // (X == 0 ? Y : 0) | X -> X == 0 ? Y : X
+ // X | (X == 0 ? Y : 0) -> X == 0 ? Y : X
+ for (Value *Op : {Op0, Op1}) {
+ if (auto *SI = dyn_cast<SelectInst>(Op)) {
+ if (auto *R = FoldOpIntoSelect(I, SI, /* FoldWithMultiUse */ false))
+ return R;
+ }
+ }
----------------
nikic wrote:
We are already calling FoldOpIntoSelect via foldBinOpIntoSelectOrPhi. But that function currently only calls FoldOpIntoSelect if the RHS is a constant.
I think to enable this fold be basically just need to lift that restriction.
https://github.com/llvm/llvm-project/pull/138373
More information about the llvm-commits
mailing list