[Mlir-commits] [mlir] [mlir][amdgpu] Sink op creation in scaled conversion intrinsics (NFC) (PR #168542)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Nov 18 06:25:39 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Erick Ochoa Lopez (amd-eochoalo)
<details>
<summary>Changes</summary>
Where possible:
* notifyMatchFailure happen first
* then op.emitOpError
* finally assertions / op creation.
---
Full diff: https://github.com/llvm/llvm-project/pull/168542.diff
1 Files Affected:
- (modified) mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp (+10-8)
``````````diff
diff --git a/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp b/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp
index edc6565f44f00..97487c727f999 100644
--- a/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp
+++ b/mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp
@@ -1738,15 +1738,11 @@ LogicalResult ScaledExtPacked816OpLowering::matchAndRewrite(
auto sourceType = cast<VectorType>(op.getSource().getType());
auto srcElemType = cast<FloatType>(sourceType.getElementType());
unsigned bitWidth = srcElemType.getWidth();
- int32_t scaleSel =
- getScaleSel(blockSize, bitWidth, firstScaleLane, firstScaleByte);
auto targetType = cast<VectorType>(op.getResult().getType());
auto destElemType = cast<FloatType>(targetType.getElementType());
- IntegerType i32 = rewriter.getI32Type();
- Value castedScale =
- LLVM::BitcastOp::create(rewriter, loc, i32, adaptor.getScale());
+ IntegerType i32 = rewriter.getI32Type();
Value source = adaptor.getSource();
Type llvmResultType = typeConverter->convertType(op.getResult().getType());
Type packedType = nullptr;
@@ -1767,15 +1763,21 @@ LogicalResult ScaledExtPacked816OpLowering::matchAndRewrite(
return rewriter.notifyMatchFailure(op, "type conversion failed");
}
- Value castedSource =
- LLVM::BitcastOp::create(rewriter, loc, packedType, source);
-
std::optional<StringRef> maybeIntrinsic =
scaledExtPacked816ToIntrinsic(srcElemType, destElemType);
if (!maybeIntrinsic.has_value())
return op.emitOpError(
"no intrinsic matching packed scaled conversion on the given chipset");
+ int32_t scaleSel =
+ getScaleSel(blockSize, bitWidth, firstScaleLane, firstScaleByte);
+
+ Value castedScale =
+ LLVM::BitcastOp::create(rewriter, loc, i32, adaptor.getScale());
+
+ Value castedSource =
+ LLVM::BitcastOp::create(rewriter, loc, packedType, source);
+
OperationState loweredOp(loc, *maybeIntrinsic);
loweredOp.addTypes({llvmResultType});
loweredOp.addOperands({castedSource, castedScale});
``````````
</details>
https://github.com/llvm/llvm-project/pull/168542
More information about the Mlir-commits
mailing list