FLANG
fir::IntrinsicLibrary Struct Reference
Inheritance diagram for fir::IntrinsicLibrary:
fir::PPCIntrinsicLibrary

Public Types

enum class  NearestProc { Nearest , NextAfter , NextDown , NextUp }
using RuntimeCallGenerator
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

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 >)
mlir::Value genAcospi (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 >)
mlir::Value genAtomicAdd (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genAtomicAnd (mlir::Type, llvm::ArrayRef< mlir::Value >)
fir::ExtendedValue genAtomicCas (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
mlir::Value genAtomicDec (mlir::Type, llvm::ArrayRef< mlir::Value >)
fir::ExtendedValue genAtomicExch (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
mlir::Value genAtomicInc (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genAtomicMax (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genAtomicMin (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genAtomicOr (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genAtomicSub (mlir::Type, llvm::ArrayRef< mlir::Value >)
fir::ExtendedValue genAtomicXor (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
fir::ExtendedValue genCommandArgumentCount (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
mlir::Value genAsind (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genAsinpi (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 >)
fir::ExtendedValue genChdir (std::optional< mlir::Type > resultType, 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 >)
template<const char * fctName, int extent>
fir::ExtendedValue genCUDALDXXFunc (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 >)
void genCoBroadcast (llvm::ArrayRef< fir::ExtendedValue >)
void genCoMax (llvm::ArrayRef< fir::ExtendedValue >)
void genCoMin (llvm::ArrayRef< fir::ExtendedValue >)
void genCoSum (llvm::ArrayRef< fir::ExtendedValue >)
mlir::Value genCosd (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genCospi (mlir::Type, llvm::ArrayRef< mlir::Value >)
void genDateAndTime (llvm::ArrayRef< fir::ExtendedValue >)
fir::ExtendedValue genDsecnds (mlir::Type resultType, llvm::ArrayRef< fir::ExtendedValue > args)
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 genFseek (std::optional< mlir::Type >, mlir::ArrayRef< fir::ExtendedValue > args)
fir::ExtendedValue genFtell (std::optional< mlir::Type >, 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 genHostnm (std::optional< mlir::Type > resultType, llvm::ArrayRef< fir::ExtendedValue > 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 >)
fir::ExtendedValue genIeeeSupportRounding (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
fir::ExtendedValue genIeeeSupportStandard (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
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 >)
mlir::Value genMatchAllSync (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genMatchAnySync (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 genNumImages (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
template<typename OpTy>
mlir::Value genNVVMTime (mlir::Type, llvm::ArrayRef< mlir::Value >)
fir::ExtendedValue genPack (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
fir::ExtendedValue genParity (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
void genPerror (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 >)
fir::ExtendedValue genPutenv (std::optional< 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 genSecnds (mlir::Type resultType, llvm::ArrayRef< fir::ExtendedValue > args)
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 >)
mlir::Value genSinpi (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 >)
void genSyncWarp (llvm::ArrayRef< fir::ExtendedValue >)
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 genTanpi (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genTime (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 >)
mlir::Value genThisGrid (mlir::Type, llvm::ArrayRef< mlir::Value >)
fir::ExtendedValue genThisImage (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
mlir::Value genThisThreadBlock (mlir::Type, llvm::ArrayRef< mlir::Value >)
mlir::Value genThisWarp (mlir::Type, llvm::ArrayRef< mlir::Value >)
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 genUnlink (std::optional< mlir::Type > resultType, llvm::ArrayRef< fir::ExtendedValue > args)
fir::ExtendedValue genUnpack (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
fir::ExtendedValue genVerify (mlir::Type, llvm::ArrayRef< fir::ExtendedValue >)
template<mlir::NVVM::VoteSyncKind kind>
mlir::Value genVoteSync (mlir::Type, llvm::ArrayRef< mlir::Value >)
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.

◆ Generator

using fir::IntrinsicLibrary::Generator
Initial value:
std::variant<ElementalGenerator, ExtendedGenerator,
SubroutineGenerator, DualGenerator>
decltype(&IntrinsicLibrary::genEtime) DualGenerator
The generator for intrinsic that has both function and subroutine form.
Definition IntrinsicCall.h:517
decltype(&IntrinsicLibrary::genAbs) ElementalGenerator
Definition IntrinsicCall.h:513

◆ RuntimeCallGenerator

using fir::IntrinsicLibrary::RuntimeCallGenerator
Initial value:
std::function<mlir::Value(
Definition FIRBuilder.h:55
Definition FIRType.h:89

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: