[flang-commits] [flang] [flang][OpenMP] Rewrite min/max with more than 2 arguments (PR #146423)
Tom Eccles via flang-commits
flang-commits at lists.llvm.org
Tue Jul 1 03:35:35 PDT 2025
================
@@ -237,6 +411,85 @@ makeMemOrderAttr(lower::AbstractConverter &converter,
return nullptr;
}
+static bool replaceArgs(semantics::SomeExpr &expr,
+ evaluate::ActualArguments &&newArgs) {
+ return ArgumentReplacer(std::move(newArgs))(expr);
+}
+
+static semantics::SomeExpr makeCall(const evaluate::DynamicType &type,
+ const evaluate::ProcedureDesignator &proc,
+ const evaluate::ActualArguments &args) {
+ return WithType(type).visit([&](auto &&s) -> semantics::SomeExpr {
+ using Type = typename llvm::remove_cvref_t<decltype(s)>::type;
+ return evaluate::AsGenericExpr(
+ evaluate::FunctionRef<Type>(AsRvalue(proc), AsRvalue(args)));
+ });
+}
+
+static const evaluate::ProcedureDesignator &
+getProcedureDesignator(const semantics::SomeExpr &call) {
+ const evaluate::ProcedureDesignator *proc = GetProc{}(call);
+ assert(proc && "Call has no procedure designator");
+ return *proc;
+}
+
+static semantics::SomeExpr //
+genReducedMinMax(const semantics::SomeExpr &orig,
+ const semantics::SomeExpr *atomArg,
+ const std::vector<semantics::SomeExpr> &args) {
+ // Take a list of arguments to a min/max operation, e.g. [a0, a1, ...]
+ // One of the a_i's, say a_t, must be atom (or a convert of atom).
----------------
tblah wrote:
ultra-nit
```suggestion
// One of the a_i's, say a_t, must be atomArg (or a convert of atomArg).
```
https://github.com/llvm/llvm-project/pull/146423
More information about the flang-commits
mailing list