[Mlir-commits] [mlir] [mlir][emitc] Support convert arith.extf and arith.truncf to emitc (PR #121184)
Tina Jung
llvmlistbot at llvm.org
Thu Jan 2 01:39:04 PST 2025
================
@@ -733,6 +733,43 @@ class ItoFCastOpConversion : public OpConversionPattern<CastOp> {
}
};
+// Floating-point to floating-point conversions.
+template <typename CastOp>
+class FpCastOpConversion : public OpConversionPattern<CastOp> {
+public:
+ FpCastOpConversion(const TypeConverter &typeConverter, MLIRContext *context)
+ : OpConversionPattern<CastOp>(typeConverter, context) {}
+
+ LogicalResult
+ matchAndRewrite(CastOp castOp, typename CastOp::Adaptor adaptor,
+ ConversionPatternRewriter &rewriter) const override {
+ // Vectors in particular are not supported
+ Type operandType = adaptor.getIn().getType();
+ if (!emitc::isSupportedFloatType(operandType))
+ return rewriter.notifyMatchFailure(castOp,
+ "unsupported cast source type");
+ if (auto roundingModeOp =
+ dyn_cast<arith::ArithRoundingModeInterface>(*castOp)) {
+ // Only supporting default rounding mode as of now.
+ if (roundingModeOp.getRoundingModeAttr())
+ return rewriter.notifyMatchFailure(castOp, "unsupported rounding mode");
+ }
+
+ Type dstType = this->getTypeConverter()->convertType(castOp.getType());
+ if (!dstType)
+ return rewriter.notifyMatchFailure(castOp, "type conversion failed");
+
+ if (!emitc::isSupportedFloatType(dstType))
+ return rewriter.notifyMatchFailure(castOp,
+ "unsupported cast destination type");
+
----------------
TinaAMD wrote:
Yes, you're right, it will rule out the tensor case I had in mind already.
https://github.com/llvm/llvm-project/pull/121184
More information about the Mlir-commits
mailing list