[Mlir-commits] [mlir] [MLIR][Arith] Add denormal attribute to binary/unary operations (PR #112700)
lorenzo chelini
llvmlistbot at llvm.org
Fri Nov 22 12:06:04 PST 2024
================
@@ -53,22 +53,49 @@ struct ConstrainedVectorConvertToLLVMPattern
}
};
+template <typename SourceOp, typename TargetOp,
+ template <typename, typename> typename AttrConvert =
+ AttrConvertPassThrough>
+struct DenormalOpConversionToLLVMPattern
+ : public VectorConvertToLLVMPattern<SourceOp, TargetOp, AttrConvert> {
+ using VectorConvertToLLVMPattern<SourceOp, TargetOp,
+ AttrConvert>::VectorConvertToLLVMPattern;
+
+ LogicalResult
+ matchAndRewrite(SourceOp op, typename SourceOp::Adaptor adaptor,
+ ConversionPatternRewriter &rewriter) const override {
+ // TODO: Here, we need a legalization step. LLVM provides a function-level
+ // attribute for denormal; here, we need to move this information from the
+ // operation to the function, making sure all the operations in the same
+ // function are consistent.
+ if (op.getDenormalModeAttr().getValue() != arith::DenormalMode::ieee)
+ return rewriter.notifyMatchFailure(
+ op, "only ieee denormal mode is supported at the moment");
+
+ StringRef arithDenormalAttrName = SourceOp::getDenormalModeAttrName();
+ op->removeAttr(arithDenormalAttrName);
+ return VectorConvertToLLVMPattern<SourceOp, TargetOp,
+ AttrConvert>::matchAndRewrite(op, adaptor,
+ rewriter);
----------------
chelini wrote:
scratch what I said default value are not printed if the value is equal to the default, but there was a confusing bug in the linalg logic, now is fixed.
https://github.com/llvm/llvm-project/pull/112700
More information about the Mlir-commits
mailing list