[llvm] [SimplifyCfg] Add nneg to zext for switch to table conversion (PR #147180)

Andreas Jonson via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 6 08:16:38 PDT 2025


================
@@ -6600,16 +6600,19 @@ Value *SwitchLookupTable::buildLookup(Value *Index, IRBuilder<> &Builder,
   }
   case ArrayKind: {
     Type *IndexTy = DL.getIndexType(Array->getType());
+    auto *ArrayTy = cast<ArrayType>(Array->getValueType());
 
-    if (Index->getType() != IndexTy)
+    if (Index->getType() != IndexTy) {
+      unsigned OldBitWidth = Index->getType()->getIntegerBitWidth();
       Index = Builder.CreateZExtOrTrunc(Index, IndexTy);
+      if (auto *Zext = dyn_cast<ZExtInst>(Index))
+        Zext->setNonNeg(isIntN(OldBitWidth, ArrayTy->getNumElements() - 1));
----------------
andjo403 wrote:

change the isIntN to isUIntN also then like:
```suggestion
        Zext->setNonNeg(isUIntN(OldBitWidth - 1, ArrayTy->getNumElements() - 1));
```

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


More information about the llvm-commits mailing list