================
@@ -185,6 +185,60 @@ struct FpToFpConversion final : OpRewritePattern<OpTy> {
SymbolOpInterface symTable;
};
+template <typename OpTy>
+struct FpToIntConversion final : OpRewritePattern<OpTy> {
+ FpToIntConversion(MLIRContext *context, SymbolOpInterface symTable,
+ bool isUnsigned, PatternBenefit benefit = 1)
+ : OpRewritePattern<OpTy>(context, benefit), symTable(symTable),
+ isUnsigned(isUnsigned){};
+
+ LogicalResult matchAndRewrite(OpTy op,
+ PatternRewriter &rewriter) const override {
+ // Get APFloat function from runtime library.
+ auto i1Type = IntegerType::get(symTable->getContext(), 1);
+ auto i32Type = IntegerType::get(symTable->getContext(), 32);
+ auto i64Type = IntegerType::get(symTable->getContext(), 64);
+ FailureOr<FuncOp> fn =
+ lookupOrCreateApFloatFn(rewriter, symTable, "convert_to_int",
+ {i32Type, i32Type, i1Type, i64Type});
+ if (failed(fn))
+ return fn;
+
+ rewriter.setInsertionPoint(op);
+ // Cast operands to 64-bit integers.
+ Location loc = op.getLoc();
+ auto inFloatTy = cast<FloatType>(op.getOperand().getType());
+ auto inIntWType = rewriter.getIntegerType(inFloatTy.getWidth());
+ auto int64Type = rewriter.getI64Type();
----------------
makslevental wrote:
nit: reuse `i64Type` from above?
https://github.com/llvm/llvm-project/pull/169277
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits