[llvm] [SimplifyCFG] Simplify switch with implicit default (PR #95665)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 15 09:38:47 PDT 2024


================
@@ -7104,6 +7104,48 @@ static bool simplifySwitchOfPowersOfTwo(SwitchInst *SI, IRBuilder<> &Builder,
   return true;
 }
 
+// Try to fold switch with manually selecting default branch
+// For example, for the switch
+//   switch (v) { case 0: case 1: case 2: ... case MaxC: default: }
+//     (continuous cases value from 0 to MaxC)
+//   and, v = select (x u<= MaxC), x, AnotherC.
+// so "AnotherC" is the de-facto default branch, and it will be folded to
+//   switch (x) { case 0: case 1: case 2: ... case MaxC:  default -> AnotherC: }
+static bool simplifySwitchWithImplicitDefault(SwitchInst *SI) {
+  Value *Cond;
+  ConstantInt *Bound, *DefaultCase;
+  ICmpInst::Predicate Pred;
+  if (!(match(SI->getCondition(),
----------------
nikic wrote:

de morgan please

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


More information about the llvm-commits mailing list