summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2014-06-11 00:25:19 +0000
committerEric Christopher <echristo@gmail.com>2014-06-11 00:25:19 +0000
commit0166af890c3d713134cd83c365fce8ff60ebf807 (patch)
treea7588849c3b30d154c952298523eff3980466c70 /lib
parent75408c8f80039af85aa26515d19209d1a0f21b43 (diff)
downloadllvm-0166af890c3d713134cd83c365fce8ff60ebf807.tar.gz
llvm-0166af890c3d713134cd83c365fce8ff60ebf807.tar.bz2
llvm-0166af890c3d713134cd83c365fce8ff60ebf807.tar.xz
Move to a private function to initialize the subtarget dependencies
so that we can use initializer lists for the X86Subtarget. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210614 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/X86/X86Subtarget.cpp24
-rw-r--r--lib/Target/X86/X86Subtarget.h23
2 files changed, 25 insertions, 22 deletions
diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp
index f0c939c47d..79b7e68c32 100644
--- a/lib/Target/X86/X86Subtarget.cpp
+++ b/lib/Target/X86/X86Subtarget.cpp
@@ -335,6 +335,13 @@ static std::string computeDataLayout(const X86Subtarget &ST) {
return Ret;
}
+X86Subtarget &X86Subtarget::initializeSubtargetDependencies(StringRef CPU,
+ StringRef FS) {
+ initializeEnvironment();
+ resetSubtargetFeatures(CPU, FS);
+ return *this;
+}
+
X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
const std::string &FS, X86TargetMachine &TM,
unsigned StackAlignOverride)
@@ -346,18 +353,11 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
TargetTriple.getEnvironment() != Triple::CODE16),
In16BitMode(TargetTriple.getArch() == Triple::x86 &&
TargetTriple.getEnvironment() == Triple::CODE16),
- DL(computeDataLayout(*this)), TSInfo(DL) {
- initializeEnvironment();
- resetSubtargetFeatures(CPU, FS);
- // Ordering here is important. X86InstrInfo initializes X86RegisterInfo which
- // X86TargetLowering needs.
- InstrInfo = make_unique<X86InstrInfo>(*this);
- TLInfo = make_unique<X86TargetLowering>(TM);
- FrameLowering =
- make_unique<X86FrameLowering>(TargetFrameLowering::StackGrowsDown,
- getStackAlignment(), is64Bit() ? -8 : -4);
- JITInfo = make_unique<X86JITInfo>(hasSSE1());
-}
+ DL(computeDataLayout(*this)), TSInfo(DL),
+ InstrInfo(initializeSubtargetDependencies(CPU, FS)), TLInfo(TM),
+ FrameLowering(TargetFrameLowering::StackGrowsDown, getStackAlignment(),
+ is64Bit() ? -8 : -4),
+ JITInfo(hasSSE1()) {}
bool
X86Subtarget::enablePostRAScheduler(CodeGenOpt::Level OptLevel,
diff --git a/lib/Target/X86/X86Subtarget.h b/lib/Target/X86/X86Subtarget.h
index 85da720cbc..09db0ebc5a 100644
--- a/lib/Target/X86/X86Subtarget.h
+++ b/lib/Target/X86/X86Subtarget.h
@@ -229,10 +229,12 @@ private:
// Calculates type size & alignment
const DataLayout DL;
X86SelectionDAGInfo TSInfo;
- std::unique_ptr<X86TargetLowering> TLInfo;
- std::unique_ptr<X86InstrInfo> InstrInfo;
- std::unique_ptr<X86FrameLowering> FrameLowering;
- std::unique_ptr<X86JITInfo> JITInfo;
+ // Ordering here is important. X86InstrInfo initializes X86RegisterInfo which
+ // X86TargetLowering needs.
+ X86InstrInfo InstrInfo;
+ X86TargetLowering TLInfo;
+ X86FrameLowering FrameLowering;
+ X86JITInfo JITInfo;
public:
/// This constructor initializes the data members to match that
@@ -242,14 +244,12 @@ public:
const std::string &FS, X86TargetMachine &TM,
unsigned StackAlignOverride);
- const X86TargetLowering *getTargetLowering() const { return TLInfo.get(); }
- const X86InstrInfo *getInstrInfo() const { return InstrInfo.get(); }
+ const X86TargetLowering *getTargetLowering() const { return &TLInfo; }
+ const X86InstrInfo *getInstrInfo() const { return &InstrInfo; }
const DataLayout *getDataLayout() const { return &DL; }
- const X86FrameLowering *getFrameLowering() const {
- return FrameLowering.get();
- }
+ const X86FrameLowering *getFrameLowering() const { return &FrameLowering; }
const X86SelectionDAGInfo *getSelectionDAGInfo() const { return &TSInfo; }
- X86JITInfo *getJITInfo() { return JITInfo.get(); }
+ X86JITInfo *getJITInfo() { return &JITInfo; }
/// getStackAlignment - Returns the minimum alignment known to hold of the
/// stack frame on entry to the function and which must be maintained by every
@@ -267,6 +267,9 @@ public:
/// \brief Reset the features for the X86 target.
void resetSubtargetFeatures(const MachineFunction *MF) override;
private:
+ /// \brief Initialize the full set of dependencies so we can use an initializer
+ /// list for X86Subtarget.
+ X86Subtarget &initializeSubtargetDependencies(StringRef CPU, StringRef FS);
void initializeEnvironment();
void resetSubtargetFeatures(StringRef CPU, StringRef FS);
public: