[AArch64] Enable libm vectorized functions via SLEEF
authorJoel Jones <joelkevinjones@gmail.com>
Sat, 24 Nov 2018 06:41:39 +0000 (06:41 +0000)
committerJoel Jones <joelkevinjones@gmail.com>
Sat, 24 Nov 2018 06:41:39 +0000 (06:41 +0000)
commit5f533c5fe1e2e683eb345d7ad97b33334163a8f8
tree63a2de403e1394b5a896521aa379348a4d0be270
parent479f018b2b8944128bdbdb9e0e686662e457ee93
[AArch64] Enable libm vectorized functions via SLEEF

This changeset is modeled after Intel's submission for SVML. It enables
trigonometry functions vectorization via SLEEF: http://sleef.org/.

 * A new vectorization library enum is added to TargetLibraryInfo.h: SLEEF.
 * A new option is added to TargetLibraryInfoImpl - ClVectorLibrary: SLEEF.
 * A comprehensive test case is included in this changeset.
 * In a separate changeset (for clang), a new vectorization library argument is
   added to -fveclib: -fveclib=SLEEF.

Trigonometry functions that are vectorized by sleef:

acos
asin
atan
atanh
cos
cosh
exp
exp2
exp10
lgamma
log10
log2
log
sin
sinh
sqrt
tan
tanh
tgamma

Patch by Stefan Teleman
Differential Revision: https://reviews.llvm.org/D53927

llvm-svn: 347510
llvm/include/llvm/Analysis/TargetLibraryInfo.h
llvm/include/llvm/IR/Intrinsics.td
llvm/lib/Analysis/TargetLibraryInfo.cpp
llvm/test/Transforms/LoopVectorize/AArch64/sleef-calls-aarch64.ll [new file with mode: 0644]