[Mlir-commits] [mlir] Introduce `arith.scaling_extf` and `arith.scaling_truncf` (PR #141965)
Krzysztof Drewniak
llvmlistbot at llvm.org
Thu May 29 10:29:34 PDT 2025
================
@@ -409,6 +421,112 @@ struct F8E8M0TruncFOpConverter : public OpRewritePattern<arith::TruncFOp> {
}
};
+struct ScalingExtFOpConverter : public OpRewritePattern<arith::ScalingExtFOp> {
+ using OpRewritePattern::OpRewritePattern;
+ LogicalResult matchAndRewrite(arith::ScalingExtFOp op,
+ PatternRewriter &rewriter) const final {
+ ImplicitLocOpBuilder b(op.getLoc(), rewriter);
+ auto inputOperand = op.getIn();
+ auto scaleOperand = op.getScale();
+ if (!llvm::isa<Float8E8M0FNUType>(getElementTypeOrSelf(scaleOperand))) {
+ return rewriter.notifyMatchFailure(
+ op, "scaling extf is not using scale operand of type f8E8M0FNU");
+ }
+ Type resultTy = op.getType();
+ // extf on scale will essentially create f32 number that is 2^scale and will
+ // also propagate NaNs
+ Value scaleExt = b.create<arith::ExtFOp>(resultTy, scaleOperand);
+ Value inputExt = b.create<arith::ExtFOp>(resultTy, inputOperand);
+ Value result = b.create<arith::MulFOp>(inputExt, scaleExt);
+ rewriter.replaceOp(op, result);
+ return success();
+ }
+};
+
+struct ScalingTruncFOpConverter
+ : public OpRewritePattern<arith::ScalingTruncFOp> {
+ using OpRewritePattern::OpRewritePattern;
+ LogicalResult matchAndRewrite(arith::ScalingTruncFOp op,
+ PatternRewriter &rewriter) const final {
+ ImplicitLocOpBuilder b(op.getLoc(), rewriter);
+ auto inputOperand = op.getIn();
+ auto scaleOperand = op.getScale();
+ if (!llvm::isa<Float8E8M0FNUType>(getElementTypeOrSelf(scaleOperand))) {
+ return rewriter.notifyMatchFailure(
+ op, "scaling truncf is not using scale operand of type f8E8M0FNU");
+ }
+ auto scaleTy = scaleOperand.getType();
----------------
krzysz00 wrote:
`Type`
https://github.com/llvm/llvm-project/pull/141965
More information about the Mlir-commits
mailing list