diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Analysis/TargetLibraryInfo.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Analysis/TargetLibraryInfo.cpp | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/contrib/llvm-project/llvm/lib/Analysis/TargetLibraryInfo.cpp b/contrib/llvm-project/llvm/lib/Analysis/TargetLibraryInfo.cpp index 60cfb04634c4..a4de21a2541e 100644 --- a/contrib/llvm-project/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/contrib/llvm-project/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -24,6 +24,8 @@ static cl::opt<TargetLibraryInfoImpl::VectorLibrary> ClVectorLibrary( "No vector functions library"), clEnumValN(TargetLibraryInfoImpl::Accelerate, "Accelerate", "Accelerate framework"), + clEnumValN(TargetLibraryInfoImpl::LIBMVEC_X86, "LIBMVEC-X86", + "GLIBC Vector Math library"), clEnumValN(TargetLibraryInfoImpl::MASSV, "MASSV", "IBM MASS vector library"), clEnumValN(TargetLibraryInfoImpl::SVML, "SVML", @@ -549,6 +551,14 @@ static void initialize(TargetLibraryInfoImpl &TLI, const Triple &T, TLI.setUnavailable(LibFunc_nvvm_reflect); } + // These vec_malloc/free routines are only available on AIX. + if (!T.isOSAIX()) { + TLI.setUnavailable(LibFunc_vec_calloc); + TLI.setUnavailable(LibFunc_vec_malloc); + TLI.setUnavailable(LibFunc_vec_realloc); + TLI.setUnavailable(LibFunc_vec_free); + } + TLI.addVectorizableFunctionsFromVecLib(ClVectorLibrary); } @@ -636,7 +646,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, const DataLayout *DL) const { LLVMContext &Ctx = FTy.getContext(); Type *PCharTy = Type::getInt8PtrTy(Ctx); - Type *SizeTTy = DL ? DL->getIntPtrType(Ctx, /*AS=*/0) : nullptr; + Type *SizeTTy = DL ? DL->getIntPtrType(Ctx, /*AddressSpace=*/0) : nullptr; auto IsSizeTTy = [SizeTTy](Type *Ty) { return SizeTTy ? Ty == SizeTTy : Ty->isIntegerTy(); }; @@ -829,6 +839,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, case LibFunc_system: return (NumParams == 1 && FTy.getParamType(0)->isPointerTy()); case LibFunc_malloc: + case LibFunc_vec_malloc: return (NumParams == 1 && FTy.getReturnType()->isPointerTy()); case LibFunc_memcmp: return (NumParams == 3 && FTy.getReturnType()->isIntegerTy(32) && @@ -847,6 +858,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, return (NumParams >= 2 && FTy.getParamType(1)->isPointerTy()); case LibFunc_memcpy_chk: + case LibFunc_mempcpy_chk: case LibFunc_memmove_chk: --NumParams; if (!IsSizeTTy(FTy.getParamType(NumParams))) @@ -882,6 +894,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, return (FTy.getReturnType()->isPointerTy()); case LibFunc_realloc: case LibFunc_reallocf: + case LibFunc_vec_realloc: return (NumParams == 2 && FTy.getReturnType() == PCharTy && FTy.getParamType(0) == FTy.getReturnType() && IsSizeTTy(FTy.getParamType(1))); @@ -909,6 +922,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, case LibFunc_bzero: return (NumParams == 2 && FTy.getParamType(0)->isPointerTy()); case LibFunc_calloc: + case LibFunc_vec_calloc: return (NumParams == 2 && FTy.getReturnType()->isPointerTy()); case LibFunc_atof: @@ -959,6 +973,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, case LibFunc_mkdir: case LibFunc_mktime: case LibFunc_times: + case LibFunc_vec_free: return (NumParams != 0 && FTy.getParamType(0)->isPointerTy()); case LibFunc_fopen: @@ -1228,6 +1243,15 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, case LibFunc_ZdaPvmSt11align_val_t: return (NumParams == 3 && FTy.getParamType(0)->isPointerTy()); + // void __atomic_load(size_t, void *, void *, int) + case LibFunc_atomic_load: + // void __atomic_store(size_t, void *, void *, int) + case LibFunc_atomic_store: + return (NumParams == 4 && FTy.getParamType(0)->isIntegerTy() && + FTy.getParamType(1)->isPointerTy() && + FTy.getParamType(2)->isPointerTy() && + FTy.getParamType(3)->isIntegerTy()); + case LibFunc_memset_pattern16: return (!FTy.isVarArg() && NumParams == 3 && FTy.getParamType(0)->isPointerTy() && @@ -1531,10 +1555,10 @@ static bool compareWithVectorFnName(const VecDesc &LHS, StringRef S) { } void TargetLibraryInfoImpl::addVectorizableFunctions(ArrayRef<VecDesc> Fns) { - VectorDescs.insert(VectorDescs.end(), Fns.begin(), Fns.end()); + llvm::append_range(VectorDescs, Fns); llvm::sort(VectorDescs, compareByScalarFnName); - ScalarDescs.insert(ScalarDescs.end(), Fns.begin(), Fns.end()); + llvm::append_range(ScalarDescs, Fns); llvm::sort(ScalarDescs, compareByVectorFnName); } @@ -1549,6 +1573,14 @@ void TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib( addVectorizableFunctions(VecFuncs); break; } + case LIBMVEC_X86: { + const VecDesc VecFuncs[] = { + #define TLI_DEFINE_LIBMVEC_X86_VECFUNCS + #include "llvm/Analysis/VecFuncs.def" + }; + addVectorizableFunctions(VecFuncs); + break; + } case MASSV: { const VecDesc VecFuncs[] = { #define TLI_DEFINE_MASSV_VECFUNCS |