[flang-commits] [flang] [mlir] [RFC][mlir] Conditional support for fast-math attributes. (PR #125620)
Slava Zakharin via flang-commits
flang-commits at lists.llvm.org
Wed Feb 5 08:50:25 PST 2025
================
@@ -66,3 +67,49 @@ Operation *arith::ArithDialect::materializeConstant(OpBuilder &builder,
return ConstantOp::materialize(builder, value, type, loc);
}
+
+/// Return true if the type is compatible with fast math, i.e.
+/// it is a float type or contains a float type.
+bool arith::ArithFastMathInterface::isCompatibleType(Type type) {
+ if (isa<FloatType>(type))
+ return true;
+
+ // ShapeType's with ValueSemantics represent containers
+ // passed around as values (not references), so look inside
+ // them to see if the element type is compatible with FastMath.
+ if (type.hasTrait<ValueSemantics>())
+ if (auto shapedType = dyn_cast<ShapedType>(type))
+ return isCompatibleType(shapedType.getElementType());
+
+ // ComplexType's element type is always a FloatType.
+ if (auto complexType = dyn_cast<ComplexType>(type))
+ return true;
+
+ // TODO: what about TupleType and custom dialect struct-like types?
+ // It seems that they worth an interface to get to the list of element types.
----------------
vzakhari wrote:
Any suggestions about this?
https://github.com/llvm/llvm-project/pull/125620
More information about the flang-commits
mailing list