[llvm] [SimplifyCFG]: Switch on umin replaces default (PR #164097)
Hongyu Chen via llvm-commits
llvm-commits at lists.llvm.org
Sat Oct 18 10:30:06 PDT 2025
================
@@ -7540,6 +7540,62 @@ static bool reduceSwitchRange(SwitchInst *SI, IRBuilder<> &Builder,
return true;
}
+/// Tries to transform the switch when the condition is umin and a constant.
+/// In that case, the default branch can be replaced by the constant's branch.
+/// For example:
+/// switch(umin(a, 3)) {
+/// case 0:
+/// case 1:
+/// case 2:
+/// case 3:
+/// // ...
+/// default:
+/// unreachable
+/// }
+///
+/// Transforms into:
+///
+/// switch(umin(a, 3)) {
+/// case 0:
+/// case 1:
+/// case 2:
+/// default:
+/// // This is case 3
+/// }
+static bool simplifySwitchWhenUMin(SwitchInst *SI, IRBuilder<> &Builder) {
+ auto *Call = dyn_cast<IntrinsicInst>(SI->getCondition());
+
+ if (!Call)
+ return false;
+
+ if (Call->getIntrinsicID() != Intrinsic::umin)
+ return false;
----------------
XChy wrote:
Use `match(m_UMin(m_Value(), m_ConstantInt(Constant)))` instead?
https://github.com/llvm/llvm-project/pull/164097
More information about the llvm-commits
mailing list