LLVM 19.0.0git
Macros | Typedefs | Enumerations | Functions | Variables
TargetLibraryInfo.cpp File Reference
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/IR/Constants.h"
#include "llvm/InitializePasses.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Analysis/TargetLibraryInfo.def"
#include "llvm/Analysis/VecFuncs.def"

Go to the source code of this file.

Macros

#define TLI_DEFINE_STRING
 
#define TLI_DEFINE_SIG
 
#define TLI_DEFINE_ACCELERATE_VECFUNCS
 
#define TLI_DEFINE_DARWIN_LIBSYSTEM_M_VECFUNCS
 
#define TLI_DEFINE_LIBMVEC_X86_VECFUNCS
 
#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)    {SCAL, VEC, VF, /* MASK = */ false, VABI_PREFIX},
 
#define TLI_DEFINE_SLEEFGNUABI_VF4_VECFUNCS
 
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, VABI_PREFIX)    {SCAL, VEC, VF, /* MASK = */ false, VABI_PREFIX},
 
#define TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS
 
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX)    {SCAL, VEC, VF, MASK, VABI_PREFIX},
 
#define TLI_DEFINE_ARMPL_VECFUNCS
 
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX)    {SCAL, VEC, VF, MASK, VABI_PREFIX},
 
#define TLI_DEFINE_AMDLIBM_VECFUNCS
 
#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK, VABI_PREFIX)    {SCAL, VEC, VF, MASK, VABI_PREFIX},
 

Typedefs

typedef std::array< FuncArgTypeID, 8 > FuncProtoTy
 

Enumerations

enum  FuncArgTypeID : char {
  Void = 0 , Bool , Int16 , Int32 ,
  Int , IntPlus , Long , IntX ,
  Int64 , LLong , SizeT , SSizeT ,
  Flt , Dbl , LDbl , Floating ,
  Ptr , Struct , Ellip , Same
}
 

Functions

static bool hasSinCosPiStret (const Triple &T)
 
static bool hasBcmp (const Triple &TT)
 
static bool isCallingConvCCompatible (CallingConv::ID CC, StringRef TT, FunctionType *FuncTy)
 
static void initialize (TargetLibraryInfoImpl &TLI, const Triple &T, ArrayRef< StringLiteral > StandardNames)
 Initialize the set of available library functions based on the specified target triple.
 
static StringRef sanitizeFunctionName (StringRef funcName)
 
static DenseMap< StringRef, LibFuncbuildIndexMap (ArrayRef< StringLiteral > StandardNames)
 
static bool matchType (FuncArgTypeID ArgTy, const Type *Ty, unsigned IntBits, unsigned SizeTBits)
 
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 cl::opt< TargetLibraryInfoImpl::VectorLibraryClVectorLibrary ("vector-library", cl::Hidden, cl::desc("Vector functions library"), cl::init(TargetLibraryInfoImpl::NoLibrary), cl::values(clEnumValN(TargetLibraryInfoImpl::NoLibrary, "none", "No vector functions library"), clEnumValN(TargetLibraryInfoImpl::Accelerate, "Accelerate", "Accelerate framework"), clEnumValN(TargetLibraryInfoImpl::DarwinLibSystemM, "Darwin_libsystem_m", "Darwin libsystem_m"), clEnumValN(TargetLibraryInfoImpl::LIBMVEC_X86, "LIBMVEC-X86", "GLIBC Vector Math library"), clEnumValN(TargetLibraryInfoImpl::MASSV, "MASSV", "IBM MASS vector library"), clEnumValN(TargetLibraryInfoImpl::SVML, "SVML", "Intel SVML library"), clEnumValN(TargetLibraryInfoImpl::SLEEFGNUABI, "sleefgnuabi", "SIMD Library for Evaluating Elementary Functions"), clEnumValN(TargetLibraryInfoImpl::ArmPL, "ArmPL", "Arm Performance Libraries"), clEnumValN(TargetLibraryInfoImpl::AMDLIBM, "AMDLIBM", "AMD vector math library")))
 
static const FuncProtoTy Signatures []
 

Macro Definition Documentation

◆ 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_X86_VECFUNCS

#define TLI_DEFINE_LIBMVEC_X86_VECFUNCS

◆ TLI_DEFINE_MASSV_VECFUNCS

#define TLI_DEFINE_MASSV_VECFUNCS

◆ TLI_DEFINE_SIG

#define TLI_DEFINE_SIG

◆ TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS

#define TLI_DEFINE_SLEEFGNUABI_SCALABLE_VECFUNCS

◆ TLI_DEFINE_SLEEFGNUABI_VF2_VECFUNCS

#define TLI_DEFINE_SLEEFGNUABI_VF2_VECFUNCS

◆ TLI_DEFINE_SLEEFGNUABI_VF4_VECFUNCS

#define TLI_DEFINE_SLEEFGNUABI_VF4_VECFUNCS

◆ TLI_DEFINE_STRING

#define TLI_DEFINE_STRING

◆ TLI_DEFINE_SVML_VECFUNCS

#define TLI_DEFINE_SVML_VECFUNCS

◆ TLI_DEFINE_VECFUNC [1/5]

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

◆ TLI_DEFINE_VECFUNC [2/5]

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

◆ TLI_DEFINE_VECFUNC [3/5]

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

◆ TLI_DEFINE_VECFUNC [4/5]

#define TLI_DEFINE_VECFUNC (   SCAL,
  VEC,
  VF,
  VABI_PREFIX 
)     {SCAL, VEC, VF, /* MASK = */ false, VABI_PREFIX},

◆ TLI_DEFINE_VECFUNC [5/5]

#define TLI_DEFINE_VECFUNC (   SCAL,
  VEC,
  VF,
  VABI_PREFIX 
)     {SCAL, VEC, VF, /* MASK = */ false, VABI_PREFIX},

Typedef Documentation

◆ FuncProtoTy

typedef std::array<FuncArgTypeID, 8> FuncProtoTy

Definition at line 82 of file TargetLibraryInfo.cpp.

Enumeration Type Documentation

◆ FuncArgTypeID

Enumerator
Void 
Bool 
Int16 
Int32 
Int 
IntPlus 
Long 
IntX 
Int64 
LLong 
SizeT 
SSizeT 
Flt 
Dbl 
LDbl 
Floating 
Ptr 
Struct 
Ellip 
Same 

Definition at line 59 of file TargetLibraryInfo.cpp.

Function Documentation

◆ buildIndexMap()

static DenseMap< StringRef, LibFunc > buildIndexMap ( ArrayRef< StringLiteral StandardNames)
static

◆ compareByScalarFnName()

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

Definition at line 1173 of file TargetLibraryInfo.cpp.

References LHS, and RHS.

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

◆ compareByVectorFnName()

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

Definition at line 1177 of file TargetLibraryInfo.cpp.

References LHS, and RHS.

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

◆ compareWithScalarFnName()

static bool compareWithScalarFnName ( const VecDesc LHS,
StringRef  S 
)
static

◆ hasBcmp()

static bool hasBcmp ( const Triple TT)
static

Definition at line 110 of file TargetLibraryInfo.cpp.

Referenced by initialize().

◆ hasSinCosPiStret()

static bool hasSinCosPiStret ( const Triple T)
static

Definition at line 92 of file TargetLibraryInfo.cpp.

References llvm::Triple::x86.

Referenced by initialize().

◆ initialize()

static void initialize ( TargetLibraryInfoImpl TLI,
const Triple T,
ArrayRef< StringLiteral StandardNames 
)
static

Initialize the set of available library functions based on the specified target triple.

This should be carefully written so that a missing target triple gets a sane set of defaults.

Definition at line 166 of file TargetLibraryInfo.cpp.

References llvm::Triple::aarch64, llvm::TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib(), llvm::Triple::arm, ClVectorLibrary, llvm::Triple::Darwin, llvm::TargetLibraryInfoImpl::disableAllFunctions(), llvm::Triple::Emscripten, llvm::Triple::FreeBSD, hasBcmp(), hasSinCosPiStret(), llvm::TargetLibraryInfo::initExtensionsForTriple(), llvm::Triple::IOS, llvm::Triple::Linux, llvm::Triple::MacOSX, llvm::TargetLibraryInfoImpl::setAvailable(), llvm::TargetLibraryInfoImpl::setAvailableWithName(), llvm::TargetLibraryInfoImpl::setIntSize(), llvm::TargetLibraryInfoImpl::setShouldExtI32Param(), llvm::TargetLibraryInfoImpl::setShouldExtI32Return(), llvm::TargetLibraryInfoImpl::setShouldSignExtI32Param(), llvm::TargetLibraryInfoImpl::setShouldSignExtI32Return(), llvm::TargetLibraryInfoImpl::setUnavailable(), llvm::Triple::tce, llvm::Triple::TvOS, llvm::Triple::WatchOS, llvm::Triple::x86, llvm::Triple::x86_64, llvm::Triple::xcore, and llvm::Triple::XROS.

Referenced by llvm::OProfileWrapper::op_close_agent(), llvm::OProfileWrapper::op_major_version(), llvm::OProfileWrapper::op_minor_version(), llvm::OProfileWrapper::op_open_agent(), llvm::OProfileWrapper::op_unload_native_code(), llvm::OProfileWrapper::op_write_debug_line_info(), llvm::OProfileWrapper::op_write_native_code(), and llvm::TargetLibraryInfoImpl::TargetLibraryInfoImpl().

◆ isCallingConvCCompatible()

static bool isCallingConvCCompatible ( CallingConv::ID  CC,
StringRef  TT,
FunctionType FuncTy 
)
static

◆ matchType()

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

◆ sanitizeFunctionName()

static StringRef sanitizeFunctionName ( StringRef  funcName)
static

Variable Documentation

◆ ClVectorLibrary

cl::opt< TargetLibraryInfoImpl::VectorLibrary > ClVectorLibrary("vector-library", cl::Hidden, cl::desc("Vector functions library"), cl::init(TargetLibraryInfoImpl::NoLibrary), cl::values(clEnumValN(TargetLibraryInfoImpl::NoLibrary, "none", "No vector functions library"), clEnumValN(TargetLibraryInfoImpl::Accelerate, "Accelerate", "Accelerate framework"), clEnumValN(TargetLibraryInfoImpl::DarwinLibSystemM, "Darwin_libsystem_m", "Darwin libsystem_m"), clEnumValN(TargetLibraryInfoImpl::LIBMVEC_X86, "LIBMVEC-X86", "GLIBC Vector Math library"), clEnumValN(TargetLibraryInfoImpl::MASSV, "MASSV", "IBM MASS vector library"), clEnumValN(TargetLibraryInfoImpl::SVML, "SVML", "Intel SVML library"), clEnumValN(TargetLibraryInfoImpl::SLEEFGNUABI, "sleefgnuabi", "SIMD Library for Evaluating Elementary Functions"), clEnumValN(TargetLibraryInfoImpl::ArmPL, "ArmPL", "Arm Performance Libraries"), clEnumValN(TargetLibraryInfoImpl::AMDLIBM, "AMDLIBM", "AMD vector math library"))) ( "vector-library"  ,
cl::Hidden  ,
cl::desc("Vector functions library")  ,
cl::init(TargetLibraryInfoImpl::NoLibrary)  ,
cl::values(clEnumValN(TargetLibraryInfoImpl::NoLibrary, "none", "No vector functions library"), clEnumValN(TargetLibraryInfoImpl::Accelerate, "Accelerate", "Accelerate framework"), clEnumValN(TargetLibraryInfoImpl::DarwinLibSystemM, "Darwin_libsystem_m", "Darwin libsystem_m"), clEnumValN(TargetLibraryInfoImpl::LIBMVEC_X86, "LIBMVEC-X86", "GLIBC Vector Math library"), clEnumValN(TargetLibraryInfoImpl::MASSV, "MASSV", "IBM MASS vector library"), clEnumValN(TargetLibraryInfoImpl::SVML, "SVML", "Intel SVML library"), clEnumValN(TargetLibraryInfoImpl::SLEEFGNUABI, "sleefgnuabi", "SIMD Library for Evaluating Elementary Functions"), clEnumValN(TargetLibraryInfoImpl::ArmPL, "ArmPL", "Arm Performance Libraries"), clEnumValN(TargetLibraryInfoImpl::AMDLIBM, "AMDLIBM", "AMD vector math library"))   
)
static

Referenced by initialize().

◆ Signatures

const FuncProtoTy Signatures[]
static
Initial value:
= {
#define TLI_DEFINE_SIG
}

Definition at line 84 of file TargetLibraryInfo.cpp.

Referenced by llvm::WebAssemblyAsmPrinter::addSignature(), and llvm::BalancedPartitioning::moveGain().