Move to a private function to initialize the subtarget dependencies
authorEric Christopher <echristo@gmail.com>
Wed, 11 Jun 2014 00:25:19 +0000 (00:25 +0000)
committerEric Christopher <echristo@gmail.com>
Wed, 11 Jun 2014 00:25:19 +0000 (00:25 +0000)
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

lib/Target/X86/X86Subtarget.cpp
lib/Target/X86/X86Subtarget.h

index f0c939c47d881373e35d22e3dd7078fb4aca01d5..79b7e68c320ba0a79737935fb320011aebfb1cf4 100644 (file)
@@ -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,
index 85da720cbc2faef5e068033d9d7324879fe06174..09db0ebc5a9bb78c7444a94d1bc8c9f2b7dd270a 100644 (file)
@@ -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: