FLANG
Public Types | Public Member Functions | Public Attributes | List of all members
fir::IntrinsicLibrary Struct Reference
Inheritance diagram for fir::IntrinsicLibrary:
fir::PPCIntrinsicLibrary

Public Types

enum class  NearestProc { Nearest , NextAfter , NextDown , NextUp }
 
using RuntimeCallGenerator = std::function< mlir::Value(fir::FirOpBuilder &, mlir::Location, llvm::ArrayRef< mlir::Value >)>
 
using ElementalGenerator = decltype(&IntrinsicLibrary::genAbs)
 
using ExtendedGenerator = decltype(&IntrinsicLibrary::genLenTrim)
 
using SubroutineGenerator = decltype(&IntrinsicLibrary::genDateAndTime)
 
using DualGenerator = decltype(&IntrinsicLibrary::genEtime)
 The generator for intrinsic that has both function and subroutine form.
 
using Generator = std::variant< ElementalGenerator, ExtendedGenerator, SubroutineGenerator, DualGenerator >
 

Public Member Functions

 IntrinsicLibrary (fir::FirOpBuilder &builder, mlir::Location loc, Fortran::lower::AbstractConverter *converter=nullptr)
 
 IntrinsicLibrary (const IntrinsicLibrary &)=delete
 
std::pair< fir::ExtendedValue, bool > genIntrinsicCall (llvm::StringRef name, std::optional< mlir::Type > resultType, llvm::ArrayRef< fir::ExtendedValue > arg)
 
mlir::Value genRuntimeCall (llvm::StringRef name, mlir::Type, llvm::ArrayRef< mlir::Value >)
 
RuntimeCallGenerator getRuntimeCallGenerator (llvm::StringRef name, mlir::FunctionType soughtFuncType)
 
void genAbort (llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genAbs (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genAcosd (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
template<void(*)(fir::FirOpBuilder &, mlir::Location loc, mlir::Value, mlir::Value) CallRuntime>
fir::ExtendedValue genAdjustRtCall (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genAimag (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genAint (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genAll (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genAllocated (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genAnint (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genAny (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genAtanpi (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genCommandArgumentCount (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genAsind (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genAssociated (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genAtand (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genBesselJn (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genBesselYn (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
template<mlir::arith::CmpIPredicate pred>
mlir::Value genBitwiseCompare (mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
mlir::Value genBtest (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genCeiling (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genChar (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
template<mlir::arith::CmpIPredicate pred>
fir::ExtendedValue genCharacterCompare (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genCmplx (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genConjg (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genCount (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
void genCpuTime (llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genCshift (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genCAssociatedCFunPtr (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 C_ASSOCIATED (C_FUNPTR [, C_FUNPTR])
 
fir::ExtendedValue genCAssociatedCPtr (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 C_ASSOCIATED (C_PTR [, C_PTR])
 
fir::ExtendedValue genCDevLoc (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genErfcScaled (mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
void genCFPointer (llvm::ArrayRef< fir::ExtendedValue >)
 
void genCFProcPointer (llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genCFunLoc (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genCLoc (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
template<mlir::arith::CmpIPredicate pred>
fir::ExtendedValue genCPtrCompare (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genCosd (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
void genDateAndTime (llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genDim (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genDotProduct (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genDprod (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genDshiftl (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genDshiftr (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genEoshift (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
void genExit (llvm::ArrayRef< fir::ExtendedValue >)
 
void genExecuteCommandLine (mlir::ArrayRef< fir::ExtendedValue > args)
 
fir::ExtendedValue genEtime (std::optional< mlir::Type >, mlir::ArrayRef< fir::ExtendedValue > args)
 
mlir::Value genExponent (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genExtendsTypeOf (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
template<Extremum , ExtremumBehavior >
mlir::Value genExtremum (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genFloor (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genFraction (mlir::Type resultType, mlir::ArrayRef< mlir::Value > args)
 
void genFree (mlir::ArrayRef< fir::ExtendedValue > args)
 
fir::ExtendedValue genGetCwd (std::optional< mlir::Type > resultType, llvm::ArrayRef< fir::ExtendedValue > args)
 
void genGetCommand (mlir::ArrayRef< fir::ExtendedValue > args)
 
mlir::Value genGetPID (mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
void genGetCommandArgument (mlir::ArrayRef< fir::ExtendedValue > args)
 
void genGetEnvironmentVariable (llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genGetGID (mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
mlir::Value genGetUID (mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
fir::ExtendedValue genIall (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genIand (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genIany (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genIbclr (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIbits (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIbset (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genIchar (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genFindloc (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genIeeeClass (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeCopySign (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
void genIeeeGetFlag (llvm::ArrayRef< fir::ExtendedValue >)
 
void genIeeeGetHaltingMode (llvm::ArrayRef< fir::ExtendedValue >)
 
template<bool isGet, bool isModes>
void genIeeeGetOrSetModesOrStatus (llvm::ArrayRef< fir::ExtendedValue >)
 
void genIeeeGetRoundingMode (llvm::ArrayRef< fir::ExtendedValue >)
 
void genIeeeGetUnderflowMode (llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genIeeeInt (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeIsFinite (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeIsNan (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeIsNegative (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeIsNormal (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeLogb (mlir::Type, mlir::ArrayRef< mlir::Value >)
 
template<bool isMax, bool isNum, bool isMag>
mlir::Value genIeeeMaxMin (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
template<mlir::arith::CmpFPredicate pred>
mlir::Value genIeeeQuietCompare (mlir::Type resultType, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeReal (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeRem (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeRint (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
template<bool isFlag>
void genIeeeSetFlagOrHaltingMode (llvm::ArrayRef< fir::ExtendedValue >)
 
void genIeeeSetRoundingMode (llvm::ArrayRef< fir::ExtendedValue >)
 
void genIeeeSetUnderflowMode (llvm::ArrayRef< fir::ExtendedValue >)
 
template<mlir::arith::CmpFPredicate pred>
mlir::Value genIeeeSignalingCompare (mlir::Type resultType, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeSignbit (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genIeeeSupportFlag (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genIeeeSupportHalting (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genIeeeSupportRounding (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
template<mlir::arith::CmpIPredicate pred>
mlir::Value genIeeeTypeCompare (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeUnordered (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeeeValue (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIeor (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genIndex (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genIor (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genIparity (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genIsContiguous (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
template<Fortran::runtime::io::Iostat value>
mlir::Value genIsIostatValue (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIsFPClass (mlir::Type, llvm::ArrayRef< mlir::Value >, int fpclass)
 
mlir::Value genIshft (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genIshftc (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genLbound (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genLeadz (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genLen (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genLenTrim (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genLoc (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genMalloc (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
template<typename Shift >
mlir::Value genMask (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genMatmul (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genMatmulTranspose (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genMaxloc (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genMaxval (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genMerge (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genMergeBits (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genMinloc (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genMinval (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genMod (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genModulo (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
void genMoveAlloc (llvm::ArrayRef< fir::ExtendedValue >)
 
void genMvbits (llvm::ArrayRef< fir::ExtendedValue >)
 
template<NearestProc >
mlir::Value genNearest (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genNint (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genNorm2 (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genNot (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genNull (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genPack (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genParity (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genPopcnt (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genPoppar (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genPresent (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genProduct (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
void genRandomInit (llvm::ArrayRef< fir::ExtendedValue >)
 
void genRandomNumber (llvm::ArrayRef< fir::ExtendedValue >)
 
void genRandomSeed (llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genReduce (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genReduceDim (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genRename (std::optional< mlir::Type >, mlir::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genRepeat (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genReshape (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genRRSpacing (mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
fir::ExtendedValue genSameTypeAs (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genScale (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genScan (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genSecond (std::optional< mlir::Type >, mlir::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genSelectedCharKind (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genSelectedIntKind (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genSelectedLogicalKind (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genSelectedRealKind (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genSetExponent (mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
fir::ExtendedValue genShape (mlir::Type resultType, llvm::ArrayRef< fir::ExtendedValue >)
 
template<typename Shift >
mlir::Value genShift (mlir::Type resultType, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genShiftA (mlir::Type resultType, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genSign (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genSind (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genSize (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genSizeOf (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genSpacing (mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
fir::ExtendedValue genSpread (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genStorageSize (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genSum (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
void genSignalSubroutine (llvm::ArrayRef< fir::ExtendedValue >)
 
void genSleep (llvm::ArrayRef< fir::ExtendedValue >)
 
void genSyncThreads (llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genSyncThreadsAnd (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genSyncThreadsCount (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genSyncThreadsOr (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genSystem (std::optional< mlir::Type >, mlir::ArrayRef< fir::ExtendedValue > args)
 
void genSystemClock (llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genTand (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
mlir::Value genTrailz (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
fir::ExtendedValue genTransfer (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genTranspose (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
void genThreadFence (llvm::ArrayRef< fir::ExtendedValue >)
 
void genThreadFenceBlock (llvm::ArrayRef< fir::ExtendedValue >)
 
void genThreadFenceSystem (llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genTrim (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genUbound (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genUnpack (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
fir::ExtendedValue genVerify (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 
mlir::Value genConversion (mlir::Type, llvm::ArrayRef< mlir::Value >)
 
template<typename FN , typename FD >
fir::ExtendedValue genExtremumloc (FN func, FD funcDim, llvm::StringRef errMsg, mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
 Process calls to Minloc, Maxloc intrinsic functions.
 
template<typename FN , typename FD , typename FC >
fir::ExtendedValue genExtremumVal (FN func, FD funcDim, FC funcChar, llvm::StringRef errMsg, mlir::Type resultType, llvm::ArrayRef< fir::ExtendedValue > args)
 Helper for MinVal/MaxVal.
 
template<typename FN , typename FD >
fir::ExtendedValue genReduction (FN func, FD funcDim, llvm::StringRef errMsg, mlir::Type resultType, llvm::ArrayRef< fir::ExtendedValue > args)
 Process calls to Product, Sum, IAll, IAny, IParity intrinsic functions.
 
void genRaiseExcept (int excepts, mlir::Value cond={})
 
mlir::Value genQNan (mlir::Type resultType)
 Generate a quiet NaN of a given floating point type.
 
template<typename GeneratorType >
mlir::Value outlineInWrapper (GeneratorType, llvm::StringRef name, mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
template<typename GeneratorType >
fir::ExtendedValue outlineInExtendedWrapper (GeneratorType, llvm::StringRef name, std::optional< mlir::Type > resultType, llvm::ArrayRef< fir::ExtendedValue > args)
 
template<typename GeneratorType >
mlir::func::FuncOp getWrapper (GeneratorType, llvm::StringRef name, mlir::FunctionType, bool loadRefArguments=false)
 
template<typename GeneratorType >
fir::ExtendedValue genElementalCall (GeneratorType, llvm::StringRef name, mlir::Type resultType, llvm::ArrayRef< fir::ExtendedValue > args, bool outline)
 Generate calls to ElementalGenerator, handling the elemental aspects.
 
mlir::Value invokeGenerator (ElementalGenerator generator, mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 Helper to invoke code generator for the intrinsics given arguments.
 
mlir::Value invokeGenerator (RuntimeCallGenerator generator, mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
mlir::Value invokeGenerator (ExtendedGenerator generator, mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
mlir::Value invokeGenerator (SubroutineGenerator generator, llvm::ArrayRef< mlir::Value > args)
 
mlir::Value invokeGenerator (DualGenerator generator, llvm::ArrayRef< mlir::Value > args)
 
mlir::Value invokeGenerator (DualGenerator generator, mlir::Type resultType, llvm::ArrayRef< mlir::Value > args)
 
mlir::SymbolRefAttr getUnrestrictedIntrinsicSymbolRefAttr (llvm::StringRef name, mlir::FunctionType signature)
 
fir::ExtendedValue readAndAddCleanUp (fir::MutableBoxValue resultMutableBox, mlir::Type resultType, llvm::StringRef errMsg)
 Helper function for generating code clean-up for result descriptors.
 
void setResultMustBeFreed ()
 

Public Attributes

fir::FirOpBuilderbuilder
 
mlir::Location loc
 
bool resultMustBeFreed = false
 
Fortran::lower::AbstractConverterconverter = nullptr
 

Member Typedef Documentation

◆ ElementalGenerator

Define the different FIR generators that can be mapped to intrinsic to generate the related code.

Member Function Documentation

◆ genAbs()

mlir::Value fir::IntrinsicLibrary::genAbs ( mlir::Type  resultType,
llvm::ArrayRef< mlir::Value >  args 
)

Lowering for the ABS intrinsic. The ABS intrinsic expects one argument in the llvm::ArrayRef. The ABS intrinsic is lowered into MLIR/FIR operation if the argument is an integer, into llvm intrinsics if the argument is real and to the hypot math routine if the argument is of complex type.

◆ genConversion()

mlir::Value fir::IntrinsicLibrary::genConversion ( mlir::Type  resultType,
llvm::ArrayRef< mlir::Value >  args 
)

Implement all conversion functions like DBLE, the first argument is the value to convert. There may be an additional KIND arguments that is ignored because this is already reflected in the result type.

◆ genExtremumloc()

template<typename FN , typename FD >
fir::ExtendedValue fir::IntrinsicLibrary::genExtremumloc ( FN  func,
FD  funcDim,
llvm::StringRef  errMsg,
mlir::Type  resultType,
llvm::ArrayRef< fir::ExtendedValue args 
)

Process calls to Minloc, Maxloc intrinsic functions.

In the template helper below:

  • "FN func" is a callback to generate the related intrinsic runtime call.
  • "FD funcDim" is a callback to generate the "dim" runtime call.
  • "FC funcChar" is a callback to generate the character runtime call. Helper for MinLoc/MaxLoc.

◆ genExtremumVal()

template<typename FN , typename FD , typename FC >
fir::ExtendedValue fir::IntrinsicLibrary::genExtremumVal ( FN  func,
FD  funcDim,
FC  funcChar,
llvm::StringRef  errMsg,
mlir::Type  resultType,
llvm::ArrayRef< fir::ExtendedValue args 
)

Helper for MinVal/MaxVal.

Process calls to Maxval and Minval.

◆ genIntrinsicCall()

std::pair< fir::ExtendedValue, bool > fir::IntrinsicLibrary::genIntrinsicCall ( llvm::StringRef  name,
std::optional< mlir::Type >  resultType,
llvm::ArrayRef< fir::ExtendedValue arg 
)

Generate FIR for call to Fortran intrinsic name with arguments arg and expected result type resultType. Return the result and a boolean that, if true, indicates that the result must be freed after use.

◆ genRaiseExcept()

void fir::IntrinsicLibrary::genRaiseExcept ( int  excepts,
mlir::Value  cond = {} 
)

Generate code to raise excepts if cond is absent, or present and true.

◆ genRuntimeCall()

mlir::Value fir::IntrinsicLibrary::genRuntimeCall ( llvm::StringRef  name,
mlir::Type  resultType,
llvm::ArrayRef< mlir::Value >  args 
)

Search a runtime function that is associated to the generic intrinsic name and whose signature matches the intrinsic arguments and result types. If no such runtime function is found but a runtime function associated with the Fortran generic exists and has the same number of arguments, conversions will be inserted before and/or after the call. This is to mainly to allow 16 bits float support even-though little or no math runtime is currently available for it.

◆ getUnrestrictedIntrinsicSymbolRefAttr()

mlir::SymbolRefAttr fir::IntrinsicLibrary::getUnrestrictedIntrinsicSymbolRefAttr ( llvm::StringRef  name,
mlir::FunctionType  signature 
)

Get pointer to unrestricted intrinsic. Generate the related unrestricted intrinsic if it is not defined yet.

◆ outlineInWrapper()

template<typename GeneratorType >
mlir::Value fir::IntrinsicLibrary::outlineInWrapper ( GeneratorType  generator,
llvm::StringRef  name,
mlir::Type  resultType,
llvm::ArrayRef< mlir::Value >  args 
)

All generators can be outlined. This will build a function named "fir."+ <generic name> + "." + <result type code> and generate the intrinsic implementation inside instead of at the intrinsic call sites. This can be used to keep the FIR more readable. Only one function will be generated for all the similar calls in a program. If the Generator is nullptr, the wrapper uses genRuntimeCall.


The documentation for this struct was generated from the following files: