[Mlir-commits] [mlir] [MLIR][GPU] Support bf16 and i1 gpu::shuffles to LLVMSPIRV conversion (PR #119675)

Victor Perez llvmlistbot at llvm.org
Wed Jan 8 03:06:48 PST 2025


================
@@ -286,33 +287,70 @@ struct GPUShuffleConversion final : ConvertOpToLLVMPattern<gpu::ShuffleOp> {
            val == getSubgroupSize(op);
   }
 
+  static Value bitcastOrExtBeforeShuffle(Value oldVal, Location loc,
+                                         ConversionPatternRewriter &rewriter) {
+    return TypeSwitch<Type, Value>(oldVal.getType())
+        .Case([&](BFloat16Type) {
+          return rewriter.create<LLVM::BitcastOp>(
+              loc, rewriter.getIntegerType(16), oldVal);
+        })
+        .Case([&](IntegerType intTy) -> Value {
+          if (intTy.getWidth() == 1)
+            return rewriter.create<LLVM::ZExtOp>(
+                loc, rewriter.getIntegerType(8), oldVal);
+          return oldVal;
+        })
+        .Default([&](auto) { return oldVal; });
----------------
victor-eds wrote:

```suggestion
    return TypeSwitch<Type, Value>(oldVal.getType())
        .Case([&](BFloat16Type) {
          return rewriter.create<LLVM::BitcastOp>(
              loc, rewriter.getI16Type(), oldVal);
        })
        .Case([&](IntegerType intTy) -> Value {
          if (intTy.getWidth() == 1)
            return rewriter.create<LLVM::ZExtOp>(
                loc, rewriter.getI8Type(), oldVal);
          return oldVal;
        })
        .Default(oldVal);
```

NITs. Not sure `.Default(oldVal);` works, but I think it should.

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


More information about the Mlir-commits mailing list