LLVM 19.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
llvm::TargetLibraryInfoImpl Class Reference

Implementation of the target library information. More...

#include "llvm/Analysis/TargetLibraryInfo.h"

Public Types

enum  VectorLibrary {
  NoLibrary , Accelerate , DarwinLibSystemM , LIBMVEC_X86 ,
  MASSV , SVML , SLEEFGNUABI , ArmPL ,
  AMDLIBM
}
 List of known vector-functions libraries. More...
 

Public Member Functions

 TargetLibraryInfoImpl ()
 
 TargetLibraryInfoImpl (const Triple &T)
 
 TargetLibraryInfoImpl (const TargetLibraryInfoImpl &TLI)
 
 TargetLibraryInfoImpl (TargetLibraryInfoImpl &&TLI)
 
TargetLibraryInfoImploperator= (const TargetLibraryInfoImpl &TLI)
 
TargetLibraryInfoImploperator= (TargetLibraryInfoImpl &&TLI)
 
bool getLibFunc (StringRef funcName, LibFunc &F) const
 Searches for a particular function name.
 
bool getLibFunc (const Function &FDecl, LibFunc &F) const
 Searches for a particular function name, also checking that its type is valid for the library function matching that name.
 
bool getLibFunc (unsigned int Opcode, Type *Ty, LibFunc &F) const
 Searches for a function name using an Instruction Opcode.
 
void setUnavailable (LibFunc F)
 Forces a function to be marked as unavailable.
 
void setAvailable (LibFunc F)
 Forces a function to be marked as available.
 
void setAvailableWithName (LibFunc F, StringRef Name)
 Forces a function to be marked as available and provide an alternate name that must be used.
 
void disableAllFunctions ()
 Disables all builtins.
 
void addVectorizableFunctions (ArrayRef< VecDesc > Fns)
 Add a set of scalar -> vector mappings, queryable via getVectorizedFunction and getScalarizedFunction.
 
void addVectorizableFunctionsFromVecLib (enum VectorLibrary VecLib, const llvm::Triple &TargetTriple)
 Calls addVectorizableFunctions with a known preset of functions for the given vector library.
 
bool isFunctionVectorizable (StringRef F, const ElementCount &VF) const
 Return true if the function F has a vector equivalent with vectorization factor VF.
 
bool isFunctionVectorizable (StringRef F) const
 Return true if the function F has a vector equivalent with any vectorization factor.
 
StringRef getVectorizedFunction (StringRef F, const ElementCount &VF, bool Masked) const
 Return the name of the equivalent of F, vectorized with factor VF.
 
const VecDescgetVectorMappingInfo (StringRef F, const ElementCount &VF, bool Masked) const
 Return a pointer to a VecDesc object holding all info for scalar to vector mappings in TLI for the equivalent of F, vectorized with factor VF.
 
void setShouldExtI32Param (bool Val)
 Set to true iff i32 parameters to library functions should have signext or zeroext attributes if they correspond to C-level int or unsigned int, respectively.
 
void setShouldExtI32Return (bool Val)
 Set to true iff i32 results from library functions should have signext or zeroext attributes if they correspond to C-level int or unsigned int, respectively.
 
void setShouldSignExtI32Param (bool Val)
 Set to true iff i32 parameters to library functions should have signext attribute if they correspond to C-level int or unsigned int.
 
void setShouldSignExtI32Return (bool Val)
 Set to true iff i32 results from library functions should have signext attribute if they correspond to C-level int or unsigned int.
 
unsigned getWCharSize (const Module &M) const
 Returns the size of the wchar_t type in bytes or 0 if the size is unknown.
 
unsigned getSizeTSize (const Module &M) const
 Returns the size of the size_t type in bits.
 
unsigned getIntSize () const
 Get size of a C-level int or unsigned int, in bits.
 
void setIntSize (unsigned Bits)
 Initialize the C-level size of an integer.
 
void getWidestVF (StringRef ScalarF, ElementCount &FixedVF, ElementCount &Scalable) const
 Returns the largest vectorization factor used in the list of vector functions.
 

Static Public Member Functions

static bool isCallingConvCCompatible (CallBase *CI)
 Returns true if call site / callee has cdecl-compatible calling conventions.
 
static bool isCallingConvCCompatible (Function *Callee)
 

Friends

class TargetLibraryInfo
 

Detailed Description

Implementation of the target library information.

This class constructs tables that hold the target library information and make it available. However, it is somewhat expensive to compute and only depends on the triple. So users typically interact with the TargetLibraryInfo wrapper below.

Definition at line 83 of file TargetLibraryInfo.h.

Member Enumeration Documentation

◆ VectorLibrary

List of known vector-functions libraries.

The vector-functions library defines, which functions are vectorizable and with which factor. The library can be specified by either frontend, or a commandline option, and then used by addVectorizableFunctionsFromVecLib for filling up the tables of vectorizable functions.

Enumerator
NoLibrary 
Accelerate 
DarwinLibSystemM 
LIBMVEC_X86 
MASSV 
SVML 
SLEEFGNUABI 
ArmPL 
AMDLIBM 

Definition at line 124 of file TargetLibraryInfo.h.

Constructor & Destructor Documentation

◆ TargetLibraryInfoImpl() [1/4]

TargetLibraryInfoImpl::TargetLibraryInfoImpl ( )

Definition at line 900 of file TargetLibraryInfo.cpp.

References initializeBase().

◆ TargetLibraryInfoImpl() [2/4]

TargetLibraryInfoImpl::TargetLibraryInfoImpl ( const Triple T)
explicit

Definition at line 906 of file TargetLibraryInfo.cpp.

References initialize().

◆ TargetLibraryInfoImpl() [3/4]

TargetLibraryInfoImpl::TargetLibraryInfoImpl ( const TargetLibraryInfoImpl TLI)

Definition at line 913 of file TargetLibraryInfo.cpp.

◆ TargetLibraryInfoImpl() [4/4]

TargetLibraryInfoImpl::TargetLibraryInfoImpl ( TargetLibraryInfoImpl &&  TLI)

Definition at line 924 of file TargetLibraryInfo.cpp.

Member Function Documentation

◆ addVectorizableFunctions()

void TargetLibraryInfoImpl::addVectorizableFunctions ( ArrayRef< VecDesc Fns)

Add a set of scalar -> vector mappings, queryable via getVectorizedFunction and getScalarizedFunction.

Definition at line 1196 of file TargetLibraryInfo.cpp.

References llvm::append_range(), compareByScalarFnName(), compareByVectorFnName(), and llvm::sort().

Referenced by addVectorizableFunctionsFromVecLib().

◆ addVectorizableFunctionsFromVecLib()

void TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib ( enum VectorLibrary  VecLib,
const llvm::Triple TargetTriple 
)

◆ disableAllFunctions()

void TargetLibraryInfoImpl::disableAllFunctions ( )

Disables all builtins.

This can be used for options like -fno-builtin.

Definition at line 1180 of file TargetLibraryInfo.cpp.

Referenced by initializeLibCalls().

◆ getIntSize()

unsigned llvm::TargetLibraryInfoImpl::getIntSize ( ) const
inline

Get size of a C-level int or unsigned int, in bits.

Definition at line 256 of file TargetLibraryInfo.h.

Referenced by llvm::TargetLibraryInfo::getIntSize().

◆ getLibFunc() [1/3]

bool TargetLibraryInfoImpl::getLibFunc ( const Function FDecl,
LibFunc F 
) const

Searches for a particular function name, also checking that its type is valid for the library function matching that name.

If it is one of the known library functions, return true and set F to the corresponding value.

FDecl is assumed to have a parent Module when using this function.

Definition at line 1149 of file TargetLibraryInfo.cpp.

References assert(), F, llvm::Function::getFunctionType(), getLibFunc(), llvm::Value::getName(), llvm::GlobalValue::getParent(), llvm::Function::isIntrinsic(), and llvm::NotLibFunc.

◆ getLibFunc() [2/3]

bool TargetLibraryInfoImpl::getLibFunc ( StringRef  funcName,
LibFunc F 
) const

Searches for a particular function name.

If it is one of the known library functions, return true and set F to the corresponding value.

Definition at line 981 of file TargetLibraryInfo.cpp.

References buildIndexMap(), llvm::StringRef::empty(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), F, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), and sanitizeFunctionName().

Referenced by getLibFunc(), and llvm::TargetLibraryInfo::getLibFunc().

◆ getLibFunc() [3/3]

bool TargetLibraryInfoImpl::getLibFunc ( unsigned int  Opcode,
Type Ty,
LibFunc F 
) const

Searches for a function name using an Instruction Opcode.

Currently, only the frem instruction is supported.

Definition at line 1170 of file TargetLibraryInfo.cpp.

References F, llvm::Type::isDoubleTy(), and llvm::Type::isFloatTy().

◆ getSizeTSize()

unsigned TargetLibraryInfoImpl::getSizeTSize ( const Module M) const

Returns the size of the size_t type in bits.

Definition at line 1378 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfo::getSizeTSize().

◆ getVectorizedFunction()

StringRef TargetLibraryInfoImpl::getVectorizedFunction ( StringRef  F,
const ElementCount VF,
bool  Masked 
) const

Return the name of the equivalent of F, vectorized with factor VF.

If no such mapping exists, return the empty string.

Definition at line 1338 of file TargetLibraryInfo.cpp.

References F, llvm::VecDesc::getVectorFnName(), and getVectorMappingInfo().

Referenced by llvm::TargetLibraryInfo::getVectorizedFunction(), and isFunctionVectorizable().

◆ getVectorMappingInfo()

const VecDesc * TargetLibraryInfoImpl::getVectorMappingInfo ( StringRef  F,
const ElementCount VF,
bool  Masked 
) const

Return a pointer to a VecDesc object holding all info for scalar to vector mappings in TLI for the equivalent of F, vectorized with factor VF.

If no such mapping exists, return nullpointer.

Definition at line 1348 of file TargetLibraryInfo.cpp.

References compareWithScalarFnName(), F, I, llvm::lower_bound(), and sanitizeFunctionName().

Referenced by getVectorizedFunction(), and llvm::TargetLibraryInfo::getVectorMappingInfo().

◆ getWCharSize()

unsigned TargetLibraryInfoImpl::getWCharSize ( const Module M) const

Returns the size of the wchar_t type in bytes or 0 if the size is unknown.

This queries the 'wchar_size' metadata.

Definition at line 1371 of file TargetLibraryInfo.cpp.

Referenced by llvm::TargetLibraryInfo::getWCharSize().

◆ getWidestVF()

void TargetLibraryInfoImpl::getWidestVF ( StringRef  ScalarF,
ElementCount FixedVF,
ElementCount Scalable 
) const

◆ isCallingConvCCompatible() [1/2]

bool TargetLibraryInfoImpl::isCallingConvCCompatible ( CallBase CI)
static

◆ isCallingConvCCompatible() [2/2]

bool TargetLibraryInfoImpl::isCallingConvCCompatible ( Function Callee)
static

Definition at line 157 of file TargetLibraryInfo.cpp.

References F.

◆ isFunctionVectorizable() [1/2]

bool TargetLibraryInfoImpl::isFunctionVectorizable ( StringRef  F) const

Return true if the function F has a vector equivalent with any vectorization factor.

Definition at line 1328 of file TargetLibraryInfo.cpp.

References compareWithScalarFnName(), llvm::StringRef::empty(), I, llvm::lower_bound(), and sanitizeFunctionName().

◆ isFunctionVectorizable() [2/2]

bool llvm::TargetLibraryInfoImpl::isFunctionVectorizable ( StringRef  F,
const ElementCount VF 
) const
inline

Return true if the function F has a vector equivalent with vectorization factor VF.

Definition at line 202 of file TargetLibraryInfo.h.

References llvm::StringRef::empty(), F, and getVectorizedFunction().

Referenced by llvm::TargetLibraryInfo::isFunctionVectorizable().

◆ operator=() [1/2]

TargetLibraryInfoImpl & TargetLibraryInfoImpl::operator= ( const TargetLibraryInfoImpl TLI)

Definition at line 937 of file TargetLibraryInfo.cpp.

◆ operator=() [2/2]

TargetLibraryInfoImpl & TargetLibraryInfoImpl::operator= ( TargetLibraryInfoImpl &&  TLI)

Definition at line 948 of file TargetLibraryInfo.cpp.

◆ setAvailable()

void llvm::TargetLibraryInfoImpl::setAvailable ( LibFunc  F)
inline

Forces a function to be marked as available.

Definition at line 170 of file TargetLibraryInfo.h.

References F.

Referenced by initializeLibCalls().

◆ setAvailableWithName()

void llvm::TargetLibraryInfoImpl::setAvailableWithName ( LibFunc  F,
StringRef  Name 
)
inline

Forces a function to be marked as available and provide an alternate name that must be used.

Definition at line 176 of file TargetLibraryInfo.h.

References assert(), F, and Name.

Referenced by initializeLibCalls().

◆ setIntSize()

void llvm::TargetLibraryInfoImpl::setIntSize ( unsigned  Bits)
inline

Initialize the C-level size of an integer.

Definition at line 261 of file TargetLibraryInfo.h.

Referenced by initializeBase().

◆ setShouldExtI32Param()

void llvm::TargetLibraryInfoImpl::setShouldExtI32Param ( bool  Val)
inline

Set to true iff i32 parameters to library functions should have signext or zeroext attributes if they correspond to C-level int or unsigned int, respectively.

Definition at line 225 of file TargetLibraryInfo.h.

Referenced by initializeBase().

◆ setShouldExtI32Return()

void llvm::TargetLibraryInfoImpl::setShouldExtI32Return ( bool  Val)
inline

Set to true iff i32 results from library functions should have signext or zeroext attributes if they correspond to C-level int or unsigned int, respectively.

Definition at line 232 of file TargetLibraryInfo.h.

Referenced by initializeBase().

◆ setShouldSignExtI32Param()

void llvm::TargetLibraryInfoImpl::setShouldSignExtI32Param ( bool  Val)
inline

Set to true iff i32 parameters to library functions should have signext attribute if they correspond to C-level int or unsigned int.

Definition at line 238 of file TargetLibraryInfo.h.

Referenced by initializeBase().

◆ setShouldSignExtI32Return()

void llvm::TargetLibraryInfoImpl::setShouldSignExtI32Return ( bool  Val)
inline

Set to true iff i32 results from library functions should have signext attribute if they correspond to C-level int or unsigned int.

Definition at line 244 of file TargetLibraryInfo.h.

Referenced by initializeBase().

◆ setUnavailable()

void llvm::TargetLibraryInfoImpl::setUnavailable ( LibFunc  F)
inline

Forces a function to be marked as unavailable.

Definition at line 165 of file TargetLibraryInfo.h.

References F, and Unavailable.

Referenced by initializeLibCalls().

Friends And Related Function Documentation

◆ TargetLibraryInfo

friend class TargetLibraryInfo
friend

Definition at line 84 of file TargetLibraryInfo.h.


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