diff --git a/flang/include/flang/Lower/IntrinsicCall.h b/flang/include/flang/Optimizer/Builder/IntrinsicCall.h rename from flang/include/flang/Lower/IntrinsicCall.h rename to flang/include/flang/Optimizer/Builder/IntrinsicCall.h --- a/flang/include/flang/Lower/IntrinsicCall.h +++ b/flang/include/flang/Optimizer/Builder/IntrinsicCall.h @@ -1,4 +1,4 @@ -//===-- Lower/IntrinsicCall.h -- lowering of intrinsics ---------*- C++ -*-===// +//===-- Builder/IntrinsicCall.h -- lowering of intrinsics -------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -12,7 +12,7 @@ #include "flang/Optimizer/Builder/FIRBuilder.h" #include -namespace Fortran::lower { +namespace fir { class StatementContext; @@ -103,6 +103,6 @@ mlir::Value genPow(fir::FirOpBuilder &, mlir::Location, mlir::Type resultType, mlir::Value x, mlir::Value y); -} // namespace Fortran::lower +} // namespace fir #endif // FORTRAN_LOWER_INTRINSICCALL_H diff --git a/flang/lib/Lower/CMakeLists.txt b/flang/lib/Lower/CMakeLists.txt --- a/flang/lib/Lower/CMakeLists.txt +++ b/flang/lib/Lower/CMakeLists.txt @@ -15,7 +15,6 @@ CustomIntrinsicCall.cpp DumpEvaluateExpr.cpp HostAssociations.cpp - IntrinsicCall.cpp IO.cpp IterationSpace.cpp LoweringOptions.cpp diff --git a/flang/lib/Lower/ConvertCall.cpp b/flang/lib/Lower/ConvertCall.cpp --- a/flang/lib/Lower/ConvertCall.cpp +++ b/flang/lib/Lower/ConvertCall.cpp @@ -14,12 +14,12 @@ #include "flang/Lower/ConvertExprToHLFIR.h" #include "flang/Lower/ConvertVariable.h" #include "flang/Lower/CustomIntrinsicCall.h" -#include "flang/Lower/IntrinsicCall.h" #include "flang/Lower/StatementContext.h" #include "flang/Lower/SymbolMap.h" #include "flang/Optimizer/Builder/BoxValue.h" #include "flang/Optimizer/Builder/Character.h" #include "flang/Optimizer/Builder/FIRBuilder.h" +#include "flang/Optimizer/Builder/IntrinsicCall.h" #include "flang/Optimizer/Builder/LowLevelIntrinsics.h" #include "flang/Optimizer/Builder/MutableBox.h" #include "flang/Optimizer/Builder/Runtime/Derived.h" @@ -1074,11 +1074,11 @@ /// Lower calls to intrinsic procedures with actual arguments that have been /// pre-lowered but have not yet been prepared according to the interface. -static std::optional genIntrinsicRefCore( - PreparedActualArguments &loweredActuals, - const Fortran::evaluate::SpecificIntrinsic &intrinsic, - const Fortran::lower::IntrinsicArgumentLoweringRules *argLowering, - CallContext &callContext) { +static std::optional +genIntrinsicRefCore(PreparedActualArguments &loweredActuals, + const Fortran::evaluate::SpecificIntrinsic &intrinsic, + const fir::IntrinsicArgumentLoweringRules *argLowering, + CallContext &callContext) { llvm::SmallVector operands; auto &stmtCtx = callContext.stmtCtx; auto &converter = callContext.converter; @@ -1086,7 +1086,7 @@ mlir::Location loc = callContext.loc; for (auto arg : llvm::enumerate(loweredActuals)) { if (!arg.value()) { - operands.emplace_back(Fortran::lower::getAbsentIntrinsicArgument()); + operands.emplace_back(fir::getAbsentIntrinsicArgument()); continue; } if (arg.value()->handleDynamicOptional()) @@ -1099,22 +1099,22 @@ continue; } // Ad-hoc argument lowering handling. - Fortran::lower::ArgLoweringRule argRules = - Fortran::lower::lowerIntrinsicArgumentAs(*argLowering, arg.index()); + fir::ArgLoweringRule argRules = + fir::lowerIntrinsicArgumentAs(*argLowering, arg.index()); switch (argRules.lowerAs) { - case Fortran::lower::LowerIntrinsicArgAs::Value: + case fir::LowerIntrinsicArgAs::Value: operands.emplace_back( Fortran::lower::convertToValue(loc, converter, actual, stmtCtx)); continue; - case Fortran::lower::LowerIntrinsicArgAs::Addr: + case fir::LowerIntrinsicArgAs::Addr: operands.emplace_back( Fortran::lower::convertToAddress(loc, converter, actual, stmtCtx)); continue; - case Fortran::lower::LowerIntrinsicArgAs::Box: + case fir::LowerIntrinsicArgAs::Box: operands.emplace_back( Fortran::lower::convertToBox(loc, converter, actual, stmtCtx)); continue; - case Fortran::lower::LowerIntrinsicArgAs::Inquired: + case fir::LowerIntrinsicArgAs::Inquired: // Place hlfir.expr in memory, and unbox fir.boxchar. Other entities // are translated to fir::ExtendedValue without transformation (notably, // pointers/allocatable are not dereferenced). @@ -1134,9 +1134,9 @@ if (callContext.resultType) scalarResultType = hlfir::getFortranElementType(*callContext.resultType); // Let the intrinsic library lower the intrinsic procedure call. - auto [resultExv, mustBeFreed] = Fortran::lower::genIntrinsicCall( - callContext.getBuilder(), loc, intrinsic.name, scalarResultType, - operands); + auto [resultExv, mustBeFreed] = + genIntrinsicCall(callContext.getBuilder(), loc, intrinsic.name, + scalarResultType, operands); if (!fir::getBase(resultExv)) return std::nullopt; hlfir::EntityWithAttributes resultEntity = extendedValueToHlfirEntity( @@ -1326,8 +1326,7 @@ public: ElementalIntrinsicCallBuilder( const Fortran::evaluate::SpecificIntrinsic &intrinsic, - const Fortran::lower::IntrinsicArgumentLoweringRules *argLowering, - bool isFunction) + const fir::IntrinsicArgumentLoweringRules *argLowering, bool isFunction) : intrinsic{intrinsic}, argLowering{argLowering}, isFunction{isFunction} { } std::optional @@ -1360,7 +1359,7 @@ private: const Fortran::evaluate::SpecificIntrinsic &intrinsic; - const Fortran::lower::IntrinsicArgumentLoweringRules *argLowering; + const fir::IntrinsicArgumentLoweringRules *argLowering; const bool isFunction; }; } // namespace @@ -1408,8 +1407,8 @@ TODO(loc, "special cases of intrinsic with optional arguments"); PreparedActualArguments loweredActuals; - const Fortran::lower::IntrinsicArgumentLoweringRules *argLowering = - Fortran::lower::getIntrinsicArgumentLowering(intrinsic.name); + const fir::IntrinsicArgumentLoweringRules *argLowering = + fir::getIntrinsicArgumentLowering(intrinsic.name); for (const auto &arg : llvm::enumerate(callContext.procRef.arguments())) { auto *expr = Fortran::evaluate::UnwrapExpr(arg.value()); @@ -1423,8 +1422,8 @@ callContext.stmtCtx); std::optional isPresent; if (argLowering) { - Fortran::lower::ArgLoweringRule argRules = - Fortran::lower::lowerIntrinsicArgumentAs(*argLowering, arg.index()); + fir::ArgLoweringRule argRules = + fir::lowerIntrinsicArgumentAs(*argLowering, arg.index()); if (argRules.handleDynamicOptional) isPresent = genIsPresentIfArgMaybeAbsent(loc, loweredActual, *expr, callContext, diff --git a/flang/lib/Lower/ConvertExpr.cpp b/flang/lib/Lower/ConvertExpr.cpp --- a/flang/lib/Lower/ConvertExpr.cpp +++ b/flang/lib/Lower/ConvertExpr.cpp @@ -28,13 +28,13 @@ #include "flang/Lower/ConvertVariable.h" #include "flang/Lower/CustomIntrinsicCall.h" #include "flang/Lower/DumpEvaluateExpr.h" -#include "flang/Lower/IntrinsicCall.h" #include "flang/Lower/Mangler.h" #include "flang/Lower/Runtime.h" #include "flang/Lower/Support/Utils.h" #include "flang/Optimizer/Builder/Character.h" #include "flang/Optimizer/Builder/Complex.h" #include "flang/Optimizer/Builder/Factory.h" +#include "flang/Optimizer/Builder/IntrinsicCall.h" #include "flang/Optimizer/Builder/Runtime/Assign.h" #include "flang/Optimizer/Builder/Runtime/Character.h" #include "flang/Optimizer/Builder/Runtime/Derived.h" @@ -897,8 +897,8 @@ converter.getFoldingContext().intrinsics().GetGenericIntrinsicName( intrinsic->name); mlir::SymbolRefAttr symbolRefAttr = - Fortran::lower::getUnrestrictedIntrinsicSymbolRefAttr( - builder, loc, genericName, signature); + fir::getUnrestrictedIntrinsicSymbolRefAttr(builder, loc, genericName, + signature); mlir::Value funcPtr = builder.create(loc, signature, symbolRefAttr); return funcPtr; @@ -1150,7 +1150,7 @@ mlir::Type ty = converter.genType(TC, KIND); mlir::Value lhs = genunbox(op.left()); mlir::Value rhs = genunbox(op.right()); - return Fortran::lower::genPow(builder, getLoc(), ty, lhs, rhs); + return fir::genPow(builder, getLoc(), ty, lhs, rhs); } template @@ -1160,7 +1160,7 @@ mlir::Type ty = converter.genType(TC, KIND); mlir::Value lhs = genunbox(op.left()); mlir::Value rhs = genunbox(op.right()); - return Fortran::lower::genPow(builder, getLoc(), ty, lhs, rhs); + return fir::genPow(builder, getLoc(), ty, lhs, rhs); } template @@ -1191,11 +1191,11 @@ mlir::Value rhs = genunbox(op.right()); switch (op.ordering) { case Fortran::evaluate::Ordering::Greater: - return Fortran::lower::genMax(builder, getLoc(), - llvm::ArrayRef{lhs, rhs}); + return fir::genMax(builder, getLoc(), + llvm::ArrayRef{lhs, rhs}); case Fortran::evaluate::Ordering::Less: - return Fortran::lower::genMin(builder, getLoc(), - llvm::ArrayRef{lhs, rhs}); + return fir::genMin(builder, getLoc(), + llvm::ArrayRef{lhs, rhs}); case Fortran::evaluate::Ordering::Equal: llvm_unreachable("Equal is not a valid ordering in this context"); } @@ -1879,14 +1879,14 @@ operands.size(), stmtCtx); } - const Fortran::lower::IntrinsicArgumentLoweringRules *argLowering = - Fortran::lower::getIntrinsicArgumentLowering(name); + const fir::IntrinsicArgumentLoweringRules *argLowering = + fir::getIntrinsicArgumentLowering(name); for (const auto &arg : llvm::enumerate(procRef.arguments())) { auto *expr = Fortran::evaluate::UnwrapExpr(arg.value()); if (!expr) { // Absent optional. - operands.emplace_back(Fortran::lower::getAbsentIntrinsicArgument()); + operands.emplace_back(fir::getAbsentIntrinsicArgument()); continue; } if (!argLowering) { @@ -1895,43 +1895,43 @@ continue; } // Ad-hoc argument lowering handling. - Fortran::lower::ArgLoweringRule argRules = - Fortran::lower::lowerIntrinsicArgumentAs(*argLowering, arg.index()); + fir::ArgLoweringRule argRules = + fir::lowerIntrinsicArgumentAs(*argLowering, arg.index()); if (argRules.handleDynamicOptional && Fortran::evaluate::MayBePassedAsAbsentOptional( *expr, converter.getFoldingContext())) { ExtValue optional = lowerIntrinsicArgumentAsInquired(*expr); mlir::Value isPresent = genActualIsPresentTest(builder, loc, optional); switch (argRules.lowerAs) { - case Fortran::lower::LowerIntrinsicArgAs::Value: + case fir::LowerIntrinsicArgAs::Value: operands.emplace_back( genOptionalValue(builder, loc, optional, isPresent)); continue; - case Fortran::lower::LowerIntrinsicArgAs::Addr: + case fir::LowerIntrinsicArgAs::Addr: operands.emplace_back( genOptionalAddr(builder, loc, optional, isPresent)); continue; - case Fortran::lower::LowerIntrinsicArgAs::Box: + case fir::LowerIntrinsicArgAs::Box: operands.emplace_back( genOptionalBox(builder, loc, optional, isPresent)); continue; - case Fortran::lower::LowerIntrinsicArgAs::Inquired: + case fir::LowerIntrinsicArgAs::Inquired: operands.emplace_back(optional); continue; } llvm_unreachable("bad switch"); } switch (argRules.lowerAs) { - case Fortran::lower::LowerIntrinsicArgAs::Value: + case fir::LowerIntrinsicArgAs::Value: operands.emplace_back(genval(*expr)); continue; - case Fortran::lower::LowerIntrinsicArgAs::Addr: + case fir::LowerIntrinsicArgAs::Addr: operands.emplace_back(gen(*expr)); continue; - case Fortran::lower::LowerIntrinsicArgAs::Box: + case fir::LowerIntrinsicArgAs::Box: operands.emplace_back(lowerIntrinsicArgumentAsBox(*expr)); continue; - case Fortran::lower::LowerIntrinsicArgAs::Inquired: + case fir::LowerIntrinsicArgAs::Inquired: operands.emplace_back(lowerIntrinsicArgumentAsInquired(*expr)); continue; } @@ -4477,8 +4477,8 @@ std::string name = intrinsic ? intrinsic->name : procRef.proc().GetSymbol()->GetUltimate().name().ToString(); - const Fortran::lower::IntrinsicArgumentLoweringRules *argLowering = - Fortran::lower::getIntrinsicArgumentLowering(name); + const fir::IntrinsicArgumentLoweringRules *argLowering = + fir::getIntrinsicArgumentLowering(name); mlir::Location loc = getLoc(); if (intrinsic && Fortran::lower::intrinsicRequiresCustomOptionalHandling( procRef, *intrinsic, converter)) { @@ -4533,15 +4533,15 @@ operands.emplace_back(genElementalArgument(*expr)); } else { // Ad-hoc argument lowering handling. - Fortran::lower::ArgLoweringRule argRules = - Fortran::lower::lowerIntrinsicArgumentAs(*argLowering, arg.index()); + fir::ArgLoweringRule argRules = + fir::lowerIntrinsicArgumentAs(*argLowering, arg.index()); if (argRules.handleDynamicOptional && Fortran::evaluate::MayBePassedAsAbsentOptional( *expr, converter.getFoldingContext())) { // Currently, there is not elemental intrinsic that requires lowering // a potentially absent argument to something else than a value (apart // from character MAX/MIN that are handled elsewhere.) - if (argRules.lowerAs != Fortran::lower::LowerIntrinsicArgAs::Value) + if (argRules.lowerAs != fir::LowerIntrinsicArgAs::Value) TODO(loc, "non trivial optional elemental intrinsic array " "argument"); PushSemantics(ConstituentSemantics::RefTransparent); @@ -4549,23 +4549,23 @@ continue; } switch (argRules.lowerAs) { - case Fortran::lower::LowerIntrinsicArgAs::Value: { + case fir::LowerIntrinsicArgAs::Value: { PushSemantics(ConstituentSemantics::RefTransparent); operands.emplace_back(genElementalArgument(*expr)); } break; - case Fortran::lower::LowerIntrinsicArgAs::Addr: { + case fir::LowerIntrinsicArgAs::Addr: { // Note: assume does not have Fortran VALUE attribute semantics. PushSemantics(ConstituentSemantics::RefOpaque); operands.emplace_back(genElementalArgument(*expr)); } break; - case Fortran::lower::LowerIntrinsicArgAs::Box: { + case fir::LowerIntrinsicArgAs::Box: { PushSemantics(ConstituentSemantics::RefOpaque); auto lambda = genElementalArgument(*expr); operands.emplace_back([=](IterSpace iters) { return builder.createBox(loc, lambda(iters)); }); } break; - case Fortran::lower::LowerIntrinsicArgAs::Inquired: + case fir::LowerIntrinsicArgAs::Inquired: TODO(loc, "intrinsic function with inquired argument"); break; } @@ -5045,7 +5045,7 @@ return [=](IterSpace iters) -> ExtValue { mlir::Value lhs = fir::getBase(lf(iters)); mlir::Value rhs = fir::getBase(rf(iters)); - return Fortran::lower::genPow(builder, loc, ty, lhs, rhs); + return fir::genPow(builder, loc, ty, lhs, rhs); }; } template @@ -5059,15 +5059,13 @@ return [=](IterSpace iters) -> ExtValue { mlir::Value lhs = fir::getBase(lf(iters)); mlir::Value rhs = fir::getBase(rf(iters)); - return Fortran::lower::genMax(builder, loc, - llvm::ArrayRef{lhs, rhs}); + return fir::genMax(builder, loc, llvm::ArrayRef{lhs, rhs}); }; case Fortran::evaluate::Ordering::Less: return [=](IterSpace iters) -> ExtValue { mlir::Value lhs = fir::getBase(lf(iters)); mlir::Value rhs = fir::getBase(rf(iters)); - return Fortran::lower::genMin(builder, loc, - llvm::ArrayRef{lhs, rhs}); + return fir::genMin(builder, loc, llvm::ArrayRef{lhs, rhs}); }; case Fortran::evaluate::Ordering::Equal: llvm_unreachable("Equal is not a valid ordering in this context"); @@ -5085,7 +5083,7 @@ return [=](IterSpace iters) { mlir::Value lhs = fir::getBase(lf(iters)); mlir::Value rhs = fir::getBase(rf(iters)); - return Fortran::lower::genPow(builder, loc, ty, lhs, rhs); + return fir::genPow(builder, loc, ty, lhs, rhs); }; } template diff --git a/flang/lib/Lower/ConvertExprToHLFIR.cpp b/flang/lib/Lower/ConvertExprToHLFIR.cpp --- a/flang/lib/Lower/ConvertExprToHLFIR.cpp +++ b/flang/lib/Lower/ConvertExprToHLFIR.cpp @@ -18,10 +18,10 @@ #include "flang/Lower/ConvertConstant.h" #include "flang/Lower/ConvertType.h" #include "flang/Lower/ConvertVariable.h" -#include "flang/Lower/IntrinsicCall.h" #include "flang/Lower/StatementContext.h" #include "flang/Lower/SymbolMap.h" #include "flang/Optimizer/Builder/Complex.h" +#include "flang/Optimizer/Builder/IntrinsicCall.h" #include "flang/Optimizer/Builder/MutableBox.h" #include "flang/Optimizer/Builder/Runtime/Character.h" #include "flang/Optimizer/Builder/Todo.h" @@ -614,8 +614,7 @@ hlfir::Entity lhs, hlfir::Entity rhs) { mlir::Type ty = Fortran::lower::getFIRType(builder.getContext(), TC, KIND, /*params=*/std::nullopt); - return hlfir::EntityWithAttributes{ - Fortran::lower::genPow(builder, loc, ty, lhs, rhs)}; + return hlfir::EntityWithAttributes{fir::genPow(builder, loc, ty, lhs, rhs)}; } }; @@ -629,8 +628,7 @@ hlfir::Entity lhs, hlfir::Entity rhs) { mlir::Type ty = Fortran::lower::getFIRType(builder.getContext(), TC, KIND, /*params=*/std::nullopt); - return hlfir::EntityWithAttributes{ - Fortran::lower::genPow(builder, loc, ty, lhs, rhs)}; + return hlfir::EntityWithAttributes{fir::genPow(builder, loc, ty, lhs, rhs)}; } }; @@ -644,8 +642,8 @@ hlfir::Entity rhs) { llvm::SmallVector args{lhs, rhs}; fir::ExtendedValue res = op.ordering == Fortran::evaluate::Ordering::Greater - ? Fortran::lower::genMax(builder, loc, args) - : Fortran::lower::genMin(builder, loc, args); + ? fir::genMax(builder, loc, args) + : fir::genMin(builder, loc, args); return hlfir::EntityWithAttributes{fir::getBase(res)}; } }; diff --git a/flang/lib/Lower/ConvertVariable.cpp b/flang/lib/Lower/ConvertVariable.cpp --- a/flang/lib/Lower/ConvertVariable.cpp +++ b/flang/lib/Lower/ConvertVariable.cpp @@ -18,7 +18,6 @@ #include "flang/Lower/ConvertConstant.h" #include "flang/Lower/ConvertExpr.h" #include "flang/Lower/ConvertExprToHLFIR.h" -#include "flang/Lower/IntrinsicCall.h" #include "flang/Lower/Mangler.h" #include "flang/Lower/PFTBuilder.h" #include "flang/Lower/StatementContext.h" @@ -27,6 +26,7 @@ #include "flang/Optimizer/Builder/Character.h" #include "flang/Optimizer/Builder/FIRBuilder.h" #include "flang/Optimizer/Builder/HLFIRTools.h" +#include "flang/Optimizer/Builder/IntrinsicCall.h" #include "flang/Optimizer/Builder/Runtime/Derived.h" #include "flang/Optimizer/Builder/Todo.h" #include "flang/Optimizer/Dialect/FIRAttr.h" diff --git a/flang/lib/Lower/CustomIntrinsicCall.cpp b/flang/lib/Lower/CustomIntrinsicCall.cpp --- a/flang/lib/Lower/CustomIntrinsicCall.cpp +++ b/flang/lib/Lower/CustomIntrinsicCall.cpp @@ -14,8 +14,8 @@ #include "flang/Evaluate/expression.h" #include "flang/Evaluate/fold.h" #include "flang/Evaluate/tools.h" -#include "flang/Lower/IntrinsicCall.h" #include "flang/Lower/StatementContext.h" +#include "flang/Optimizer/Builder/IntrinsicCall.h" #include "flang/Optimizer/Builder/Todo.h" #include @@ -74,7 +74,7 @@ llvm::ArrayRef args, Fortran::lower::StatementContext &stmtCtx) { auto [result, mustBeFreed] = - Fortran::lower::genIntrinsicCall(builder, loc, name, resultType, args); + fir::genIntrinsicCall(builder, loc, name, resultType, args); if (mustBeFreed) { mlir::Value addr = fir::getBase(result); if (auto *box = result.getBoxOf()) diff --git a/flang/lib/Optimizer/Builder/CMakeLists.txt b/flang/lib/Optimizer/Builder/CMakeLists.txt --- a/flang/lib/Optimizer/Builder/CMakeLists.txt +++ b/flang/lib/Optimizer/Builder/CMakeLists.txt @@ -7,6 +7,7 @@ DoLoopHelper.cpp FIRBuilder.cpp HLFIRTools.cpp + IntrinsicCall.cpp LowLevelIntrinsics.cpp MutableBox.cpp Runtime/Allocatable.cpp diff --git a/flang/lib/Lower/IntrinsicCall.cpp b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp rename from flang/lib/Lower/IntrinsicCall.cpp rename to flang/lib/Optimizer/Builder/IntrinsicCall.cpp --- a/flang/lib/Lower/IntrinsicCall.cpp +++ b/flang/lib/Optimizer/Builder/IntrinsicCall.cpp @@ -13,7 +13,7 @@ // //===----------------------------------------------------------------------===// -#include "flang/Lower/IntrinsicCall.h" +#include "flang/Optimizer/Builder/IntrinsicCall.h" #include "flang/Common/static-multimap-view.h" #include "flang/Optimizer/Builder/BoxValue.h" #include "flang/Optimizer/Builder/Character.h" @@ -101,7 +101,7 @@ // possible to implement it without some target dependent runtime. }; -fir::ExtendedValue Fortran::lower::getAbsentIntrinsicArgument() { +fir::ExtendedValue fir::getAbsentIntrinsicArgument() { return fir::UnboxedValue{}; } @@ -411,13 +411,12 @@ struct IntrinsicDummyArgument { const char *name = nullptr; - Fortran::lower::LowerIntrinsicArgAs lowerAs = - Fortran::lower::LowerIntrinsicArgAs::Value; + fir::LowerIntrinsicArgAs lowerAs = fir::LowerIntrinsicArgAs::Value; bool handleDynamicOptional = false; }; /// This is shared by intrinsics and intrinsic module procedures. -struct Fortran::lower::IntrinsicArgumentLoweringRules { +struct fir::IntrinsicArgumentLoweringRules { /// There is no more than 7 non repeated arguments in Fortran intrinsics. IntrinsicDummyArgument args[7]; constexpr bool hasDefaultRules() const { return args[0].name == nullptr; } @@ -429,17 +428,17 @@ const char *name; IntrinsicLibrary::Generator generator; // The following may be omitted in the table below. - Fortran::lower::IntrinsicArgumentLoweringRules argLoweringRules = {}; + fir::IntrinsicArgumentLoweringRules argLoweringRules = {}; bool isElemental = true; /// Code heavy intrinsic can be outlined to make FIR /// more readable. bool outline = false; }; -constexpr auto asValue = Fortran::lower::LowerIntrinsicArgAs::Value; -constexpr auto asAddr = Fortran::lower::LowerIntrinsicArgAs::Addr; -constexpr auto asBox = Fortran::lower::LowerIntrinsicArgAs::Box; -constexpr auto asInquired = Fortran::lower::LowerIntrinsicArgAs::Inquired; +constexpr auto asValue = fir::LowerIntrinsicArgAs::Value; +constexpr auto asAddr = fir::LowerIntrinsicArgAs::Addr; +constexpr auto asBox = fir::LowerIntrinsicArgAs::Box; +constexpr auto asInquired = fir::LowerIntrinsicArgAs::Inquired; using I = IntrinsicLibrary; /// Flag to indicate that an intrinsic argument has to be handled as @@ -5335,8 +5334,8 @@ // procedure. //===----------------------------------------------------------------------===// -const Fortran::lower::IntrinsicArgumentLoweringRules * -Fortran::lower::getIntrinsicArgumentLowering(llvm::StringRef specificName) { +const fir::IntrinsicArgumentLoweringRules * +fir::getIntrinsicArgumentLowering(llvm::StringRef specificName) { llvm::StringRef name = genericName(specificName); if (const IntrinsicHandler *handler = findIntrinsicHandler(name)) if (!handler->argLoweringRules.hasDefaultRules()) @@ -5346,8 +5345,9 @@ /// Return how argument \p argName should be lowered given the rules for the /// intrinsic function. -Fortran::lower::ArgLoweringRule Fortran::lower::lowerIntrinsicArgumentAs( - const IntrinsicArgumentLoweringRules &rules, unsigned position) { +fir::ArgLoweringRule +fir::lowerIntrinsicArgumentAs(const IntrinsicArgumentLoweringRules &rules, + unsigned position) { assert(position < sizeof(rules.args) / (sizeof(decltype(*rules.args))) && "invalid argument"); return {rules.args[position].lowerAs, @@ -5359,35 +5359,32 @@ //===----------------------------------------------------------------------===// std::pair -Fortran::lower::genIntrinsicCall(fir::FirOpBuilder &builder, mlir::Location loc, - llvm::StringRef name, - std::optional resultType, - llvm::ArrayRef args) { +fir::genIntrinsicCall(fir::FirOpBuilder &builder, mlir::Location loc, + llvm::StringRef name, + std::optional resultType, + llvm::ArrayRef args) { return IntrinsicLibrary{builder, loc}.genIntrinsicCall(name, resultType, args); } -mlir::Value Fortran::lower::genMax(fir::FirOpBuilder &builder, - mlir::Location loc, - llvm::ArrayRef args) { +mlir::Value fir::genMax(fir::FirOpBuilder &builder, mlir::Location loc, + llvm::ArrayRef args) { assert(args.size() > 0 && "max requires at least one argument"); return IntrinsicLibrary{builder, loc} .genExtremum(args[0].getType(), args); } -mlir::Value Fortran::lower::genMin(fir::FirOpBuilder &builder, - mlir::Location loc, - llvm::ArrayRef args) { +mlir::Value fir::genMin(fir::FirOpBuilder &builder, mlir::Location loc, + llvm::ArrayRef args) { assert(args.size() > 0 && "min requires at least one argument"); return IntrinsicLibrary{builder, loc} .genExtremum(args[0].getType(), args); } -mlir::Value Fortran::lower::genPow(fir::FirOpBuilder &builder, - mlir::Location loc, mlir::Type type, - mlir::Value x, mlir::Value y) { +mlir::Value fir::genPow(fir::FirOpBuilder &builder, mlir::Location loc, + mlir::Type type, mlir::Value x, mlir::Value y) { // TODO: since there is no libm version of pow with integer exponent, // we have to provide an alternative implementation for // "precise/strict" FP mode. @@ -5398,7 +5395,7 @@ return IntrinsicLibrary{builder, loc}.genRuntimeCall("pow", type, {x, y}); } -mlir::SymbolRefAttr Fortran::lower::getUnrestrictedIntrinsicSymbolRefAttr( +mlir::SymbolRefAttr fir::getUnrestrictedIntrinsicSymbolRefAttr( fir::FirOpBuilder &builder, mlir::Location loc, llvm::StringRef name, mlir::FunctionType signature) { return IntrinsicLibrary{builder, loc}.getUnrestrictedIntrinsicSymbolRefAttr(