diff options
author | Maciej Gabka <maciej.gabka@arm.com> | 2023-07-04 08:43:07 +0000 |
---|---|---|
committer | Maciej Gabka <maciej.gabka@arm.com> | 2023-07-12 12:53:18 +0000 |
commit | 5b0e19a7ab05b51c72a8ae4c7b781438149dba7f (patch) | |
tree | 17eb722aa6b6ded20bfe8f02d3b14462891a386b /llvm/lib/Analysis/TargetLibraryInfo.cpp | |
parent | 221c5fb0a4b82640227f425386ae9dd43636379a (diff) | |
download | llvm-5b0e19a7ab05b51c72a8ae4c7b781438149dba7f.zip llvm-5b0e19a7ab05b51c72a8ae4c7b781438149dba7f.tar.gz llvm-5b0e19a7ab05b51c72a8ae4c7b781438149dba7f.tar.bz2 |
[TLI][AArch64] Add mappings to vectorized functions from ArmPL
Arm Performance Libraries contain math library which provides
vectorized versions of common math functions.
This patch allows to use it with clang and llvm via -fveclib=ArmPL or
-vector-library=ArmPL, so loops with such calls can be vectorized.
The executable needs to be linked with the amath library.
Arm Performance Libraries are available at:
https://developer.arm.com/Tools%20and%20Software/Arm%20Performance%20Libraries
Reviewed by: paulwalker-arm
Differential Revision: https://reviews.llvm.org/D154508
Diffstat (limited to 'llvm/lib/Analysis/TargetLibraryInfo.cpp')
-rw-r--r-- | llvm/lib/Analysis/TargetLibraryInfo.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index 0376c01..05fa67d 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -33,7 +33,9 @@ static cl::opt<TargetLibraryInfoImpl::VectorLibrary> ClVectorLibrary( clEnumValN(TargetLibraryInfoImpl::SVML, "SVML", "Intel SVML library"), clEnumValN(TargetLibraryInfoImpl::SLEEFGNUABI, "sleefgnuabi", - "SIMD Library for Evaluating Elementary Functions"))); + "SIMD Library for Evaluating Elementary Functions"), + clEnumValN(TargetLibraryInfoImpl::ArmPL, "ArmPL", + "Arm Performance Libraries"))); StringLiteral const TargetLibraryInfoImpl::StandardNames[LibFunc::NumLibFuncs] = { @@ -1215,6 +1217,23 @@ void TargetLibraryInfoImpl::addVectorizableFunctionsFromVecLib( } break; } + case ArmPL: { + const VecDesc VecFuncs[] = { +#define TLI_DEFINE_ARMPL_VECFUNCS +#define TLI_DEFINE_VECFUNC(SCAL, VEC, VF, MASK) {SCAL, VEC, VF, MASK}, +#include "llvm/Analysis/VecFuncs.def" + }; + + switch (TargetTriple.getArch()) { + default: + break; + case llvm::Triple::aarch64: + case llvm::Triple::aarch64_be: + addVectorizableFunctions(VecFuncs); + break; + } + break; + } case NoLibrary: break; } |