[Mlir-commits] [mlir] [mlir][amdgpu] implement amdgpu.sparse_mfma wrapper for smfmac instructions (PR #171968)
Jakub Kuderski
llvmlistbot at llvm.org
Fri Dec 12 07:21:27 PST 2025
================
@@ -1291,6 +1413,49 @@ struct ScaledMFMAOpLowering : public ConvertOpToLLVMPattern<ScaledMFMAOp> {
}
};
+struct SparseMFMAOpLowering : public ConvertOpToLLVMPattern<SparseMFMAOp> {
+ SparseMFMAOpLowering(const LLVMTypeConverter &converter, Chipset chipset)
+ : ConvertOpToLLVMPattern<SparseMFMAOp>(converter), chipset(chipset) {}
+
+ Chipset chipset;
+
+ LogicalResult
+ matchAndRewrite(SparseMFMAOp op, SparseMFMAOpAdaptor adaptor,
+ ConversionPatternRewriter &rewriter) const override {
+ Location loc = op.getLoc();
+ auto outType =
+ typeConverter->convertType<VectorType>(op.getDestC().getType());
+ if (!outType)
+ return rewriter.notifyMatchFailure(op, "type conversion failed");
+
+ // smfmac is supported on gfx942 and gfx950
+ if (chipset.majorVersion != 9 || chipset < kGfx942)
+ return op->emitOpError("sparse MFMA (smfmac) only supported on gfx942+");
+ bool isGfx950 = chipset >= kGfx950;
+
+ Value a = convertSparseMFMAVectorOperand(rewriter, loc,
+ adaptor.getSourceA(), isGfx950);
+ Value b = convertSparseMFMAVectorOperand(rewriter, loc,
+ adaptor.getSourceB(), isGfx950);
+ Value c = adaptor.getDestC();
+
+ std::optional<StringRef> maybeIntrinsic = smfmacOpToIntrinsic(op, isGfx950);
+
+ if (!maybeIntrinsic.has_value())
----------------
kuhar wrote:
```suggestion
std::optional<StringRef> maybeIntrinsic = smfmacOpToIntrinsic(op, isGfx950);
if (!maybeIntrinsic.has_value())
```
https://github.com/llvm/llvm-project/pull/171968
More information about the Mlir-commits
mailing list