diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2015-02-01 14:01:15 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2015-02-01 14:01:15 +0000 |
commit | c340ca839c083970e3ff0d123c771fe01e43c808 (patch) | |
tree | ecde5e58d22c8d4144cd54f992234a258ea8ee93 /llvm/lib | |
parent | 0ef5e3916667d586d4844ccef5adbe2e3579051f (diff) | |
download | bcm5719-llvm-c340ca839c083970e3ff0d123c771fe01e43c808.tar.gz bcm5719-llvm-c340ca839c083970e3ff0d123c771fe01e43c808.zip |
[multiversion] Remove the cached TargetMachine pointer from the
intermediate TTI implementation template and instead query up to the
derived class for both the TargetMachine and the TargetLowering.
Most of the derived types had a TLI cached already and there is no need
to store a less precisely typed target machine pointer.
This will in turn make it much cleaner to look up the TLI via
a per-function subtarget instead of the generic subtarget, and it will
pave the way toward pulling the subtarget used for unroll preferences
into the same form once we are *always* using the function to look up
the correct subtarget.
llvm-svn: 227737
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/BasicTargetTransformInfo.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h | 17 | ||||
-rw-r--r-- | llvm/lib/Target/ARM/ARMTargetTransformInfo.h | 16 | ||||
-rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXTargetTransformInfo.h | 13 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCTargetTransformInfo.h | 17 | ||||
-rw-r--r-- | llvm/lib/Target/R600/AMDGPUTargetTransformInfo.h | 19 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86TargetTransformInfo.h | 17 | ||||
-rw-r--r-- | llvm/lib/Target/XCore/XCoreTargetTransformInfo.h | 19 |
8 files changed, 95 insertions, 26 deletions
diff --git a/llvm/lib/CodeGen/BasicTargetTransformInfo.cpp b/llvm/lib/CodeGen/BasicTargetTransformInfo.cpp index a9fe43c6605..e0334732fdc 100644 --- a/llvm/lib/CodeGen/BasicTargetTransformInfo.cpp +++ b/llvm/lib/CodeGen/BasicTargetTransformInfo.cpp @@ -33,4 +33,5 @@ cl::opt<unsigned> cl::desc("Threshold for partial unrolling"), cl::Hidden); -BasicTTIImpl::BasicTTIImpl(const TargetMachine *TM) : BaseT(TM) {} +BasicTTIImpl::BasicTTIImpl(const TargetMachine *TM) + : BaseT(TM), TM(TM), TLI(TM->getSubtargetImpl()->getTargetLowering()) {} diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h index 8a98779d95b..5d83e5e433d 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h +++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.h @@ -29,7 +29,9 @@ namespace llvm { class AArch64TTIImpl : public BasicTTIImplBase<AArch64TTIImpl> { typedef BasicTTIImplBase<AArch64TTIImpl> BaseT; typedef TargetTransformInfo TTI; + friend BaseT; + const AArch64TargetMachine *TM; const AArch64Subtarget *ST; const AArch64TargetLowering *TLI; @@ -37,6 +39,9 @@ class AArch64TTIImpl : public BasicTTIImplBase<AArch64TTIImpl> { /// are set if the result needs to be inserted and/or extracted from vectors. unsigned getScalarizationOverhead(Type *Ty, bool Insert, bool Extract); + const AArch64TargetMachine *getTM() const { return TM; } + const AArch64TargetLowering *getTLI() const { return TLI; } + enum MemIntrinsicType { VECTOR_LDST_TWO_ELEMENTS, VECTOR_LDST_THREE_ELEMENTS, @@ -45,22 +50,26 @@ class AArch64TTIImpl : public BasicTTIImplBase<AArch64TTIImpl> { public: explicit AArch64TTIImpl(const AArch64TargetMachine *TM, Function &F) - : BaseT(TM), ST(TM->getSubtargetImpl(F)), TLI(ST->getTargetLowering()) {} + : BaseT(TM), TM(TM), ST(TM->getSubtargetImpl(F)), + TLI(ST->getTargetLowering()) {} // Provide value semantics. MSVC requires that we spell all of these out. AArch64TTIImpl(const AArch64TTIImpl &Arg) - : BaseT(static_cast<const BaseT &>(Arg)), ST(Arg.ST), TLI(Arg.TLI) {} + : BaseT(static_cast<const BaseT &>(Arg)), TM(Arg.TM), ST(Arg.ST), + TLI(Arg.TLI) {} AArch64TTIImpl(AArch64TTIImpl &&Arg) - : BaseT(std::move(static_cast<BaseT &>(Arg))), ST(std::move(Arg.ST)), - TLI(std::move(Arg.TLI)) {} + : BaseT(std::move(static_cast<BaseT &>(Arg))), TM(std::move(Arg.TM)), + ST(std::move(Arg.ST)), TLI(std::move(Arg.TLI)) {} AArch64TTIImpl &operator=(const AArch64TTIImpl &RHS) { BaseT::operator=(static_cast<const BaseT &>(RHS)); + TM = RHS.TM; ST = RHS.ST; TLI = RHS.TLI; return *this; } AArch64TTIImpl &operator=(AArch64TTIImpl &&RHS) { BaseT::operator=(std::move(static_cast<BaseT &>(RHS))); + TM = std::move(RHS.TM); ST = std::move(RHS.ST); TLI = std::move(RHS.TLI); return *this; diff --git a/llvm/lib/Target/ARM/ARMTargetTransformInfo.h b/llvm/lib/Target/ARM/ARMTargetTransformInfo.h index 8dcba8dca85..b9e52914d2a 100644 --- a/llvm/lib/Target/ARM/ARMTargetTransformInfo.h +++ b/llvm/lib/Target/ARM/ARMTargetTransformInfo.h @@ -28,7 +28,9 @@ namespace llvm { class ARMTTIImpl : public BasicTTIImplBase<ARMTTIImpl> { typedef BasicTTIImplBase<ARMTTIImpl> BaseT; typedef TargetTransformInfo TTI; + friend BaseT; + const ARMBaseTargetMachine *TM; const ARMSubtarget *ST; const ARMTargetLowering *TLI; @@ -36,24 +38,30 @@ class ARMTTIImpl : public BasicTTIImplBase<ARMTTIImpl> { /// are set if the result needs to be inserted and/or extracted from vectors. unsigned getScalarizationOverhead(Type *Ty, bool Insert, bool Extract); + const ARMBaseTargetMachine *getTM() const { return TM; } + const ARMTargetLowering *getTLI() const { return TLI; } + public: explicit ARMTTIImpl(const ARMBaseTargetMachine *TM, Function &F) - : BaseT(TM), ST(TM->getSubtargetImpl(F)), TLI(ST->getTargetLowering()) {} + : BaseT(TM), TM(TM), ST(TM->getSubtargetImpl(F)), + TLI(ST->getTargetLowering()) {} // Provide value semantics. MSVC requires that we spell all of these out. ARMTTIImpl(const ARMTTIImpl &Arg) - : BaseT(static_cast<const BaseT &>(Arg)), ST(Arg.ST), TLI(Arg.TLI) {} + : BaseT(static_cast<const BaseT &>(Arg)), TM(Arg.TM), ST(Arg.ST), TLI(Arg.TLI) {} ARMTTIImpl(ARMTTIImpl &&Arg) - : BaseT(std::move(static_cast<BaseT &>(Arg))), ST(std::move(Arg.ST)), - TLI(std::move(Arg.TLI)) {} + : BaseT(std::move(static_cast<BaseT &>(Arg))), TM(std::move(Arg.TM)), + ST(std::move(Arg.ST)), TLI(std::move(Arg.TLI)) {} ARMTTIImpl &operator=(const ARMTTIImpl &RHS) { BaseT::operator=(static_cast<const BaseT &>(RHS)); + TM = RHS.TM; ST = RHS.ST; TLI = RHS.TLI; return *this; } ARMTTIImpl &operator=(ARMTTIImpl &&RHS) { BaseT::operator=(std::move(static_cast<BaseT &>(RHS))); + TM = std::move(RHS.TM); ST = std::move(RHS.ST); TLI = std::move(RHS.TLI); return *this; diff --git a/llvm/lib/Target/NVPTX/NVPTXTargetTransformInfo.h b/llvm/lib/Target/NVPTX/NVPTXTargetTransformInfo.h index f18b5f01799..3e96979f086 100644 --- a/llvm/lib/Target/NVPTX/NVPTXTargetTransformInfo.h +++ b/llvm/lib/Target/NVPTX/NVPTXTargetTransformInfo.h @@ -28,25 +28,32 @@ namespace llvm { class NVPTXTTIImpl : public BasicTTIImplBase<NVPTXTTIImpl> { typedef BasicTTIImplBase<NVPTXTTIImpl> BaseT; typedef TargetTransformInfo TTI; + friend BaseT; + const NVPTXTargetMachine *TM; const NVPTXTargetLowering *TLI; + const NVPTXTargetMachine *getTM() const { return TM; }; + const NVPTXTargetLowering *getTLI() const { return TLI; }; + public: explicit NVPTXTTIImpl(const NVPTXTargetMachine *TM) - : BaseT(TM), TLI(TM->getSubtargetImpl()->getTargetLowering()) {} + : BaseT(TM), TM(TM), TLI(TM->getSubtargetImpl()->getTargetLowering()) {} // Provide value semantics. MSVC requires that we spell all of these out. NVPTXTTIImpl(const NVPTXTTIImpl &Arg) - : BaseT(static_cast<const BaseT &>(Arg)), TLI(Arg.TLI) {} + : BaseT(static_cast<const BaseT &>(Arg)), TM(Arg.TM), TLI(Arg.TLI) {} NVPTXTTIImpl(NVPTXTTIImpl &&Arg) - : BaseT(std::move(static_cast<BaseT &>(Arg))), TLI(std::move(Arg.TLI)) {} + : BaseT(std::move(static_cast<BaseT &>(Arg))), TM(std::move(Arg.TM)), TLI(std::move(Arg.TLI)) {} NVPTXTTIImpl &operator=(const NVPTXTTIImpl &RHS) { BaseT::operator=(static_cast<const BaseT &>(RHS)); + TM = RHS.TM; TLI = RHS.TLI; return *this; } NVPTXTTIImpl &operator=(NVPTXTTIImpl &&RHS) { BaseT::operator=(std::move(static_cast<BaseT &>(RHS))); + TM = std::move(RHS.TM); TLI = std::move(RHS.TLI); return *this; } diff --git a/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.h b/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.h index 7238460467d..83cb5e5d113 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.h +++ b/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.h @@ -28,28 +28,37 @@ namespace llvm { class PPCTTIImpl : public BasicTTIImplBase<PPCTTIImpl> { typedef BasicTTIImplBase<PPCTTIImpl> BaseT; typedef TargetTransformInfo TTI; + friend BaseT; + const PPCTargetMachine *TM; const PPCSubtarget *ST; const PPCTargetLowering *TLI; + const PPCTargetMachine *getTM() const { return TM; } + const PPCTargetLowering *getTLI() const { return TLI; } + public: explicit PPCTTIImpl(const PPCTargetMachine *TM, Function &F) - : BaseT(TM), ST(TM->getSubtargetImpl(F)), TLI(ST->getTargetLowering()) {} + : BaseT(TM), TM(TM), ST(TM->getSubtargetImpl(F)), + TLI(ST->getTargetLowering()) {} // Provide value semantics. MSVC requires that we spell all of these out. PPCTTIImpl(const PPCTTIImpl &Arg) - : BaseT(static_cast<const BaseT &>(Arg)), ST(Arg.ST), TLI(Arg.TLI) {} + : BaseT(static_cast<const BaseT &>(Arg)), TM(Arg.TM), ST(Arg.ST), + TLI(Arg.TLI) {} PPCTTIImpl(PPCTTIImpl &&Arg) - : BaseT(std::move(static_cast<BaseT &>(Arg))), ST(std::move(Arg.ST)), - TLI(std::move(Arg.TLI)) {} + : BaseT(std::move(static_cast<BaseT &>(Arg))), TM(std::move(Arg.TM)), + ST(std::move(Arg.ST)), TLI(std::move(Arg.TLI)) {} PPCTTIImpl &operator=(const PPCTTIImpl &RHS) { BaseT::operator=(static_cast<const BaseT &>(RHS)); + TM = RHS.TM; ST = RHS.ST; TLI = RHS.TLI; return *this; } PPCTTIImpl &operator=(PPCTTIImpl &&RHS) { BaseT::operator=(std::move(static_cast<BaseT &>(RHS))); + TM = std::move(RHS.TM); ST = std::move(RHS.ST); TLI = std::move(RHS.TLI); return *this; diff --git a/llvm/lib/Target/R600/AMDGPUTargetTransformInfo.h b/llvm/lib/Target/R600/AMDGPUTargetTransformInfo.h index c35bfab67a7..3d3f86e5d0e 100644 --- a/llvm/lib/Target/R600/AMDGPUTargetTransformInfo.h +++ b/llvm/lib/Target/R600/AMDGPUTargetTransformInfo.h @@ -28,26 +28,39 @@ namespace llvm { class AMDGPUTTIImpl : public BasicTTIImplBase<AMDGPUTTIImpl> { typedef BasicTTIImplBase<AMDGPUTTIImpl> BaseT; typedef TargetTransformInfo TTI; + friend BaseT; + const AMDGPUTargetMachine *TM; const AMDGPUSubtarget *ST; + const AMDGPUTargetLowering *TLI; + + const AMDGPUTargetMachine *getTM() const { return TM; } + const AMDGPUTargetLowering *getTLI() const { return TLI; } public: explicit AMDGPUTTIImpl(const AMDGPUTargetMachine *TM) - : BaseT(TM), ST(TM->getSubtargetImpl()) {} + : BaseT(TM), TM(TM), ST(TM->getSubtargetImpl()), + TLI(ST->getTargetLowering()) {} // Provide value semantics. MSVC requires that we spell all of these out. AMDGPUTTIImpl(const AMDGPUTTIImpl &Arg) - : BaseT(static_cast<const BaseT &>(Arg)), ST(Arg.ST) {} + : BaseT(static_cast<const BaseT &>(Arg)), TM(Arg.TM), ST(Arg.ST), + TLI(Arg.TLI) {} AMDGPUTTIImpl(AMDGPUTTIImpl &&Arg) - : BaseT(std::move(static_cast<BaseT &>(Arg))), ST(std::move(Arg.ST)) {} + : BaseT(std::move(static_cast<BaseT &>(Arg))), TM(std::move(Arg.TM)), + ST(std::move(Arg.ST)), TLI(std::move(Arg.TLI)) {} AMDGPUTTIImpl &operator=(const AMDGPUTTIImpl &RHS) { BaseT::operator=(static_cast<const BaseT &>(RHS)); + TM = RHS.TM; ST = RHS.ST; + TLI = RHS.TLI; return *this; } AMDGPUTTIImpl &operator=(AMDGPUTTIImpl &&RHS) { BaseT::operator=(std::move(static_cast<BaseT &>(RHS))); + TM = std::move(RHS.TM); ST = std::move(RHS.ST); + TLI = std::move(RHS.TLI); return *this; } diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.h b/llvm/lib/Target/X86/X86TargetTransformInfo.h index 3c1f5c0167a..57d40581a23 100644 --- a/llvm/lib/Target/X86/X86TargetTransformInfo.h +++ b/llvm/lib/Target/X86/X86TargetTransformInfo.h @@ -28,30 +28,39 @@ namespace llvm { class X86TTIImpl : public BasicTTIImplBase<X86TTIImpl> { typedef BasicTTIImplBase<X86TTIImpl> BaseT; typedef TargetTransformInfo TTI; + friend BaseT; + const X86TargetMachine *TM; const X86Subtarget *ST; const X86TargetLowering *TLI; unsigned getScalarizationOverhead(Type *Ty, bool Insert, bool Extract); + const X86TargetMachine *getTM() const { return TM; } + const X86TargetLowering *getTLI() const { return TLI; } + public: explicit X86TTIImpl(const X86TargetMachine *TM, Function &F) - : BaseT(TM), ST(TM->getSubtargetImpl(F)), TLI(ST->getTargetLowering()) {} + : BaseT(TM), TM(TM), ST(TM->getSubtargetImpl(F)), + TLI(ST->getTargetLowering()) {} // Provide value semantics. MSVC requires that we spell all of these out. X86TTIImpl(const X86TTIImpl &Arg) - : BaseT(static_cast<const BaseT &>(Arg)), ST(Arg.ST), TLI(Arg.TLI) {} + : BaseT(static_cast<const BaseT &>(Arg)), TM(Arg.TM), ST(Arg.ST), + TLI(Arg.TLI) {} X86TTIImpl(X86TTIImpl &&Arg) - : BaseT(std::move(static_cast<BaseT &>(Arg))), ST(std::move(Arg.ST)), - TLI(std::move(Arg.TLI)) {} + : BaseT(std::move(static_cast<BaseT &>(Arg))), TM(std::move(Arg.TM)), + ST(std::move(Arg.ST)), TLI(std::move(Arg.TLI)) {} X86TTIImpl &operator=(const X86TTIImpl &RHS) { BaseT::operator=(static_cast<const BaseT &>(RHS)); + TM = RHS.TM; ST = RHS.ST; TLI = RHS.TLI; return *this; } X86TTIImpl &operator=(X86TTIImpl &&RHS) { BaseT::operator=(std::move(static_cast<BaseT &>(RHS))); + TM = std::move(RHS.TM); ST = std::move(RHS.ST); TLI = std::move(RHS.TLI); return *this; diff --git a/llvm/lib/Target/XCore/XCoreTargetTransformInfo.h b/llvm/lib/Target/XCore/XCoreTargetTransformInfo.h index adb21cf467e..8a0c58ffaba 100644 --- a/llvm/lib/Target/XCore/XCoreTargetTransformInfo.h +++ b/llvm/lib/Target/XCore/XCoreTargetTransformInfo.h @@ -28,21 +28,34 @@ namespace llvm { class XCoreTTIImpl : public BasicTTIImplBase<XCoreTTIImpl> { typedef BasicTTIImplBase<XCoreTTIImpl> BaseT; typedef TargetTransformInfo TTI; + friend BaseT; + + const XCoreTargetMachine *TM; + const XCoreTargetLowering *TLI; + + const XCoreTargetMachine *getTM() const { return TM; } + const XCoreTargetLowering *getTLI() const { return TLI; } public: - explicit XCoreTTIImpl(const XCoreTargetMachine *TM) : BaseT(TM) {} + explicit XCoreTTIImpl(const XCoreTargetMachine *TM) + : BaseT(TM), TM(TM), TLI(TM->getSubtargetImpl()->getTargetLowering()) {} // Provide value semantics. MSVC requires that we spell all of these out. XCoreTTIImpl(const XCoreTTIImpl &Arg) - : BaseT(static_cast<const BaseT &>(Arg)) {} + : BaseT(static_cast<const BaseT &>(Arg)), TM(Arg.TM), TLI(Arg.TLI) {} XCoreTTIImpl(XCoreTTIImpl &&Arg) - : BaseT(std::move(static_cast<BaseT &>(Arg))) {} + : BaseT(std::move(static_cast<BaseT &>(Arg))), TM(std::move(Arg.TM)), + TLI(std::move(Arg.TLI)) {} XCoreTTIImpl &operator=(const XCoreTTIImpl &RHS) { BaseT::operator=(static_cast<const BaseT &>(RHS)); + TM = RHS.TM; + TLI = RHS.TLI; return *this; } XCoreTTIImpl &operator=(XCoreTTIImpl &&RHS) { BaseT::operator=(std::move(static_cast<BaseT &>(RHS))); + TM = std::move(RHS.TM); + TLI = std::move(RHS.TLI); return *this; } |