LLVM 22.0.0git
TargetLibraryInfo.cpp File Reference
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringTable.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/SystemLibraries.h"
#include "llvm/InitializePasses.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Analysis/TargetLibraryInfo.inc"
#include "llvm/Analysis/VecFuncs.def"

Go to the source code of this file.

Macros

#define GET_TARGET_LIBRARY_INFO_STRING_TABLE
#define GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE
#define TLI_DEFINE_ACCELERATE_VECFUNCS
#define TLI_DEFINE_DARWIN_LIBSYSTEM_M_VECFUNCS
#define TLI_DEFINE_LIBMVEC_X86_VECFUNCS
#define TLI_DEFINE_LIBMVEC_AARCH64_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX, CC)
#define TLI_DEFINE_MASSV_VECFUNCS
#define TLI_DEFINE_SVML_VECFUNCS
#define TLI_DEFINE_SLEEFGNUABI_VF2_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, VABI_PREFIX)
#define TLI_DEFINE_SLEEFGNUABI_VF4_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, VABI_PREFIX)
#define TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX)
#define TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS_RISCV
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX)
#define TLI_DEFINE_ARMPL_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX, CC)
#define TLI_DEFINE_AMDLIBM_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX)

Functions

static bool hasSinCosPiStret (const Triple &T)
static bool hasBcmp (const Triple &TT)
static bool isCallingConvCCompatible (CallingConv::ID CC, const Triple &TT, FunctionType *FuncTy)
static void initializeBase (TargetLibraryInfoImpl &TLI, const Triple &T)
static void initializeLibCalls (TargetLibraryInfoImpl &TLI, const Triple &T, const llvm::StringTable &StandardNames, VectorLibrary VecLib)
 Initialize the set of available library functions based on the specified target triple.
static void initialize (TargetLibraryInfoImpl &TLI, const Triple &T, const llvm::StringTable &StandardNames, VectorLibrary VecLib)
 Initialize the set of available library functions based on the specified target triple.
static StringRef sanitizeFunctionName (StringRef funcName)
static DenseMap< StringRef, LibFunc > buildIndexMap (const llvm::StringTable &StandardNames)
static bool matchType (FuncArgTypeID ArgTy, const Type *Ty, unsigned IntBits, unsigned SizeTBits)
static bool isValidProtoForSizeReturningNew (const FunctionType &FTy, LibFunc F, const Module &M, int SizeTSizeBits)
static bool compareByScalarFnName (const VecDesc &LHS, const VecDesc &RHS)
static bool compareByVectorFnName (const VecDesc &LHS, const VecDesc &RHS)
static bool compareWithScalarFnName (const VecDesc &LHS, StringRef S)

Variables

static const VecDesc VecFuncs_Accelerate []
static const VecDesc VecFuncs_DarwinLibSystemM []
static const VecDesc VecFuncs_LIBMVEC_X86 []
static const VecDesc VecFuncs_LIBMVEC_AARCH64 []
static const VecDesc VecFuncs_MASSV []
static const VecDesc VecFuncs_SVML []
static const VecDesc VecFuncs_SLEEFGNUABI_VF2 []
static const VecDesc VecFuncs_SLEEFGNUABI_VF4 []
static const VecDesc VecFuncs_SLEEFGNUABI_VFScalable []
static const VecDesc VecFuncs_SLEEFGNUABI_VFScalableRISCV []
static const VecDesc VecFuncs_ArmPL []
const VecDesc VecFuncs_AMDLIBM []

Macro Definition Documentation

◆ GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE

#define GET_TARGET_LIBRARY_INFO_SIGNATURE_TABLE

Definition at line 35 of file TargetLibraryInfo.cpp.

◆ GET_TARGET_LIBRARY_INFO_STRING_TABLE

#define GET_TARGET_LIBRARY_INFO_STRING_TABLE

Definition at line 24 of file TargetLibraryInfo.cpp.

◆ TLI_DEFINE_ACCELERATE_VECFUNCS

#define TLI_DEFINE_ACCELERATE_VECFUNCS

◆ TLI_DEFINE_AMDLIBM_VECFUNCS

#define TLI_DEFINE_AMDLIBM_VECFUNCS

◆ TLI_DEFINE_ARMPL_VECFUNCS

#define TLI_DEFINE_ARMPL_VECFUNCS

◆ TLI_DEFINE_DARWIN_LIBSYSTEM_M_VECFUNCS

#define TLI_DEFINE_DARWIN_LIBSYSTEM_M_VECFUNCS

◆ TLI_DEFINE_LIBMVEC_AARCH64_VECFUNCS

#define TLI_DEFINE_LIBMVEC_AARCH64_VECFUNCS

◆ TLI_DEFINE_LIBMVEC_X86_VECFUNCS

#define TLI_DEFINE_LIBMVEC_X86_VECFUNCS

◆ TLI_DEFINE_MASSV_VECFUNCS

#define TLI_DEFINE_MASSV_VECFUNCS

◆ TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS

#define TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS

◆ TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS_RISCV

#define TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS_RISCV

◆ TLI_DEFINE_SLEEFGNUABI_VF2_VECFUNCS

#define TLI_DEFINE_SLEEFGNUABI_VF2_VECFUNCS

◆ TLI_DEFINE_SLEEFGNUABI_VF4_VECFUNCS

#define TLI_DEFINE_SLEEFGNUABI_VF4_VECFUNCS

◆ TLI_DEFINE_SVML_VECFUNCS

#define TLI_DEFINE_SVML_VECFUNCS

◆ TLI_DEFINE_VECFUNC [1/7]

#define TLI_DEFINE_VECFUNC ( SCAL,
VEC,
VF,
MASK,
VABI_PREFIX )
Value:
{SCAL, VEC, VF, MASK, VABI_PREFIX, /* CC = */ std::nullopt},

◆ TLI_DEFINE_VECFUNC [2/7]

#define TLI_DEFINE_VECFUNC ( SCAL,
VEC,
VF,
MASK,
VABI_PREFIX )
Value:
{SCAL, VEC, VF, MASK, VABI_PREFIX, /* CC = */ std::nullopt},

◆ TLI_DEFINE_VECFUNC [3/7]

#define TLI_DEFINE_VECFUNC ( SCAL,
VEC,
VF,
MASK,
VABI_PREFIX )
Value:
{SCAL, VEC, VF, MASK, VABI_PREFIX, /* CC = */ std::nullopt},

◆ TLI_DEFINE_VECFUNC [4/7]

#define TLI_DEFINE_VECFUNC ( SCAL,
VEC,
VF,
MASK,
VABI_PREFIX,
CC )
Value:
{SCAL, VEC, VF, MASK, VABI_PREFIX, CC},

◆ TLI_DEFINE_VECFUNC [5/7]

#define TLI_DEFINE_VECFUNC ( SCAL,
VEC,
VF,
MASK,
VABI_PREFIX,
CC )
Value:
{SCAL, VEC, VF, MASK, VABI_PREFIX, CC},

◆ TLI_DEFINE_VECFUNC [6/7]

#define TLI_DEFINE_VECFUNC ( SCAL,
VEC,
VF,
VABI_PREFIX )
Value:
{SCAL, VEC, VF, /* MASK = */ false, VABI_PREFIX, /* CC = */ std::nullopt},

◆ TLI_DEFINE_VECFUNC [7/7]

#define TLI_DEFINE_VECFUNC ( SCAL,
VEC,
VF,
VABI_PREFIX )
Value:
{SCAL, VEC, VF, /* MASK = */ false, VABI_PREFIX, /* CC = */ std::nullopt},

Function Documentation

◆ buildIndexMap()

◆ compareByScalarFnName()

bool compareByScalarFnName ( const VecDesc & LHS,
const VecDesc & RHS )
static

Definition at line 1235 of file TargetLibraryInfo.cpp.

References LHS, and RHS.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctions().

◆ compareByVectorFnName()

bool compareByVectorFnName ( const VecDesc & LHS,
const VecDesc & RHS )
static

Definition at line 1239 of file TargetLibraryInfo.cpp.

References LHS, and RHS.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctions().

◆ compareWithScalarFnName()

◆ hasBcmp()

bool hasBcmp ( const Triple & TT)
static

Definition at line 56 of file TargetLibraryInfo.cpp.

Referenced by initializeLibCalls().

◆ hasSinCosPiStret()

bool hasSinCosPiStret ( const Triple & T)
static

Definition at line 38 of file TargetLibraryInfo.cpp.

References T, and llvm::Triple::x86.

Referenced by initializeLibCalls().

◆ initialize()

void initialize ( TargetLibraryInfoImpl & TLI,
const Triple & T,
const llvm::StringTable & StandardNames,
VectorLibrary VecLib )
static

◆ initializeBase()

◆ initializeLibCalls()

◆ isCallingConvCCompatible()

bool isCallingConvCCompatible ( CallingConv::ID CC,
const Triple & TT,
FunctionType * FuncTy )
static

◆ isValidProtoForSizeReturningNew()

bool isValidProtoForSizeReturningNew ( const FunctionType & FTy,
LibFunc F,
const Module & M,
int SizeTSizeBits )
static

◆ matchType()

bool matchType ( FuncArgTypeID ArgTy,
const Type * Ty,
unsigned IntBits,
unsigned SizeTBits )
static

Definition at line 1001 of file TargetLibraryInfo.cpp.

References Floating, Int, and llvm_unreachable.

◆ sanitizeFunctionName()

Variable Documentation

◆ VecFuncs_Accelerate

const VecDesc VecFuncs_Accelerate[]
static
Initial value:
= {
#define TLI_DEFINE_ACCELERATE_VECFUNCS
}

Definition at line 1255 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_AMDLIBM

const VecDesc VecFuncs_AMDLIBM[]
Initial value:
= {
#define TLI_DEFINE_AMDLIBM_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX) \
}

Definition at line 1331 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_ArmPL

const VecDesc VecFuncs_ArmPL[]
static
Initial value:
= {
#define TLI_DEFINE_ARMPL_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX, CC) \
}

Definition at line 1323 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_DarwinLibSystemM

const VecDesc VecFuncs_DarwinLibSystemM[]
static
Initial value:
= {
#define TLI_DEFINE_DARWIN_LIBSYSTEM_M_VECFUNCS
}

Definition at line 1261 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_LIBMVEC_AARCH64

const VecDesc VecFuncs_LIBMVEC_AARCH64[]
static
Initial value:
= {
#define TLI_DEFINE_LIBMVEC_AARCH64_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX, CC) \
}

Definition at line 1273 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_LIBMVEC_X86

const VecDesc VecFuncs_LIBMVEC_X86[]
static
Initial value:
= {
#define TLI_DEFINE_LIBMVEC_X86_VECFUNCS
}

Definition at line 1267 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_MASSV

const VecDesc VecFuncs_MASSV[]
static
Initial value:
= {
#define TLI_DEFINE_MASSV_VECFUNCS
}

Definition at line 1281 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_SLEEFGNUABI_VF2

const VecDesc VecFuncs_SLEEFGNUABI_VF2[]
static
Initial value:
= {
#define TLI_DEFINE_SLEEFGNUABI_VF2_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, VABI_PREFIX) \
}

Definition at line 1293 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_SLEEFGNUABI_VF4

const VecDesc VecFuncs_SLEEFGNUABI_VF4[]
static
Initial value:
= {
#define TLI_DEFINE_SLEEFGNUABI_VF4_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, VABI_PREFIX) \
}

Definition at line 1300 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_SLEEFGNUABI_VFScalable

const VecDesc VecFuncs_SLEEFGNUABI_VFScalable[]
static
Initial value:
= {
#define TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX) \
}

Definition at line 1307 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_SLEEFGNUABI_VFScalableRISCV

const VecDesc VecFuncs_SLEEFGNUABI_VFScalableRISCV[]
static
Initial value:
= {
#define TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS_RISCV
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX) \
}

Definition at line 1315 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().

◆ VecFuncs_SVML

const VecDesc VecFuncs_SVML[]
static
Initial value:
= {
#define TLI_DEFINE_SVML_VECFUNCS
}

Definition at line 1287 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib().