[Mlir-commits] [mlir] [mlir][spirv-to-llvm] Add conversion for spirv.Switch (PR #232941)
Arseniy Obolenskiy
llvmlistbot at llvm.org
Mon Oct 19 22:13:17 PDT 2026
================
@@ -612,6 +612,35 @@ class BranchConditionalConversionPattern
}
};
+class SwitchConversionPattern : public SPIRVToLLVMConversion<spirv::SwitchOp> {
+public:
+ using SPIRVToLLVMConversion<spirv::SwitchOp>::SPIRVToLLVMConversion;
+
+ LogicalResult
+ matchAndRewrite(spirv::SwitchOp op, OpAdaptor adaptor,
+ ConversionPatternRewriter &rewriter) const override {
+ Value selector = adaptor.getSelector();
+ auto selectorType = dyn_cast<IntegerType>(selector.getType());
+ if (!selectorType)
+ return rewriter.notifyMatchFailure(op, "selector is not an integer");
+
+ SmallVector<APInt> caseValues;
+ if (auto literals = op.getLiterals()) {
+ unsigned width = selectorType.getWidth();
+ bool isSigned = op.getSelector().getType().isSignedInteger();
+ for (const APInt &val : literals->getValues<APInt>())
+ caseValues.push_back(isSigned ? val.sextOrTrunc(width)
+ : val.zextOrTrunc(width));
----------------
aobolensk wrote:
```suggestion
caseValues = llvm::to_vector(literals->getValues<APInt>());
```
https://github.com/llvm/llvm-project/pull/232941
More information about the Mlir-commits
mailing list