[llvm] [InstCombine] Fold select of intrinsic into intrinsic of select (PR #178002)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 28 12:02:23 PST 2026


================
@@ -492,6 +492,55 @@ Instruction *InstCombinerImpl::foldSelectOpOp(SelectInst &SI, Instruction *TI,
   return nullptr;
 }
 
+/// This transforms patterns of the form:
+///   select cond, intrinsic(x, ...), intrinsic(y, ...)
+/// into:
+///   intrinsic(select cond, x, y, ...)
+Instruction *InstCombinerImpl::foldSelectIntrinsic(SelectInst &SI) {
+  auto *LHSIntrinsic = dyn_cast<IntrinsicInst>(SI.getTrueValue());
+  if (!LHSIntrinsic)
+    return nullptr;
+  auto *RHSIntrinsic = dyn_cast<IntrinsicInst>(SI.getFalseValue());
+  if (!RHSIntrinsic ||
+      LHSIntrinsic->getIntrinsicID() != RHSIntrinsic->getIntrinsicID() ||
+      (!LHSIntrinsic->hasOneUse() || !RHSIntrinsic->hasOneUse()))
----------------
dtcxzyw wrote:

```suggestion
      !LHSIntrinsic->hasOneUse() || !RHSIntrinsic->hasOneUse())
```

https://github.com/llvm/llvm-project/pull/178002


More information about the llvm-commits mailing list