diff options
author | Paul Redmond <paul.redmond@intel.com> | 2012-12-09 20:42:17 +0000 |
---|---|---|
committer | Paul Redmond <paul.redmond@intel.com> | 2012-12-09 20:42:17 +0000 |
commit | 880166684e5af0f5b4bfe26870b9f7813e537354 (patch) | |
tree | 51c6a6d48732a0ddf166bb34ac207b59b172d403 /include | |
parent | 855d0255d0bc388da7554d05f8cf184e26f5a00d (diff) | |
download | llvm-880166684e5af0f5b4bfe26870b9f7813e537354.tar.gz llvm-880166684e5af0f5b4bfe26870b9f7813e537354.tar.bz2 llvm-880166684e5af0f5b4bfe26870b9f7813e537354.tar.xz |
LoopVectorize: support vectorizing intrinsic calls
- added function to VectorTargetTransformInfo to query cost of intrinsics
- vectorize trivially vectorizable intrinsic calls such as sin, cos, log, etc.
Reviewed by: Nadav
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169711 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Target/TargetTransformImpl.h | 3 | ||||
-rw-r--r-- | include/llvm/TargetTransformInfo.h | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/include/llvm/Target/TargetTransformImpl.h b/include/llvm/Target/TargetTransformImpl.h index f4ec97ae93..a94278cfa3 100644 --- a/include/llvm/Target/TargetTransformImpl.h +++ b/include/llvm/Target/TargetTransformImpl.h @@ -90,6 +90,9 @@ public: unsigned Alignment, unsigned AddressSpace) const; + virtual unsigned getIntrinsicInstrCost(Intrinsic::ID, Type *RetTy, + ArrayRef<Type*> Tys) const; + virtual unsigned getNumberOfParts(Type *Tp) const; }; diff --git a/include/llvm/TargetTransformInfo.h b/include/llvm/TargetTransformInfo.h index a18cef6d01..519ccb9263 100644 --- a/include/llvm/TargetTransformInfo.h +++ b/include/llvm/TargetTransformInfo.h @@ -23,6 +23,7 @@ #define LLVM_TRANSFORMS_TARGET_TRANSFORM_INTERFACE #include "llvm/AddressingMode.h" +#include "llvm/Intrinsics.h" #include "llvm/Pass.h" #include "llvm/Support/DataTypes.h" #include "llvm/Type.h" @@ -209,6 +210,13 @@ public: return 1; } + /// Returns the cost of Intrinsic instructions. + virtual unsigned getIntrinsicInstrCost(Intrinsic::ID, + Type *RetTy, + ArrayRef<Type*> Tys) const { + return 1; + } + /// Returns the number of pieces into which the provided type must be /// split during legalization. Zero is returned when the answer is unknown. virtual unsigned getNumberOfParts(Type *Tp) const { |