From fe801852732c4f6f2e8467da7d525c7d1109cc77 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Tue, 10 Jun 2014 23:26:45 +0000 Subject: [PATCH] Move AArch64TargetLowering to AArch64Subtarget. This currently necessitates a TargetMachine for the TargetLowering constructor and TLOF. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210605 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/AArch64/AArch64ISelLowering.cpp | 2 +- lib/Target/AArch64/AArch64ISelLowering.h | 2 +- lib/Target/AArch64/AArch64Subtarget.cpp | 4 +++- lib/Target/AArch64/AArch64Subtarget.h | 7 ++++++- lib/Target/AArch64/AArch64TargetMachine.cpp | 2 +- lib/Target/AArch64/AArch64TargetMachine.h | 5 +---- 6 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/Target/AArch64/AArch64ISelLowering.cpp b/lib/Target/AArch64/AArch64ISelLowering.cpp index e2ed20d8615..79312adbd2c 100644 --- a/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -74,7 +74,7 @@ static TargetLoweringObjectFile *createTLOF(const Triple &TT) { return new AArch64_ELFTargetObjectFile(); } -AArch64TargetLowering::AArch64TargetLowering(AArch64TargetMachine &TM) +AArch64TargetLowering::AArch64TargetLowering(TargetMachine &TM) : TargetLowering(TM, createTLOF(Triple(TM.getTargetTriple()))) { Subtarget = &TM.getSubtarget(); diff --git a/lib/Target/AArch64/AArch64ISelLowering.h b/lib/Target/AArch64/AArch64ISelLowering.h index de16c4d9d4b..139217d3440 100644 --- a/lib/Target/AArch64/AArch64ISelLowering.h +++ b/lib/Target/AArch64/AArch64ISelLowering.h @@ -197,7 +197,7 @@ class AArch64TargetLowering : public TargetLowering { bool RequireStrictAlign; public: - explicit AArch64TargetLowering(AArch64TargetMachine &TM); + explicit AArch64TargetLowering(TargetMachine &TM); /// Selects the correct CCAssignFn for a the given CallingConvention /// value. diff --git a/lib/Target/AArch64/AArch64Subtarget.cpp b/lib/Target/AArch64/AArch64Subtarget.cpp index f01a70b65c1..a1e8b87ed9c 100644 --- a/lib/Target/AArch64/AArch64Subtarget.cpp +++ b/lib/Target/AArch64/AArch64Subtarget.cpp @@ -32,7 +32,8 @@ EnableEarlyIfConvert("aarch64-early-ifcvt", cl::desc("Enable the early if " AArch64Subtarget::AArch64Subtarget(const std::string &TT, const std::string &CPU, - const std::string &FS, bool LittleEndian) + const std::string &FS, TargetMachine &TM, + bool LittleEndian) : AArch64GenSubtargetInfo(TT, CPU, FS), ARMProcFamily(Others), HasFPARMv8(false), HasNEON(false), HasCrypto(false), HasCRC(false), HasZeroCycleRegMove(false), HasZeroCycleZeroing(false), CPUString(CPU), @@ -51,6 +52,7 @@ AArch64Subtarget::AArch64Subtarget(const std::string &TT, CPUString = "generic"; ParseSubtargetFeatures(CPUString, FS); + TLInfo = make_unique(TM); } /// ClassifyGlobalReference - Find the target operand flags that describe diff --git a/lib/Target/AArch64/AArch64Subtarget.h b/lib/Target/AArch64/AArch64Subtarget.h index d8930706cfe..3eef2488067 100644 --- a/lib/Target/AArch64/AArch64Subtarget.h +++ b/lib/Target/AArch64/AArch64Subtarget.h @@ -16,6 +16,7 @@ #include "AArch64InstrInfo.h" #include "AArch64FrameLowering.h" +#include "AArch64ISelLowering.h" #include "AArch64RegisterInfo.h" #include "AArch64SelectionDAGInfo.h" #include "llvm/IR/DataLayout.h" @@ -57,17 +58,21 @@ protected: AArch64FrameLowering FrameLowering; AArch64InstrInfo InstrInfo; AArch64SelectionDAGInfo TSInfo; + std::unique_ptr TLInfo; public: /// This constructor initializes the data members to match that /// of the specified triple. AArch64Subtarget(const std::string &TT, const std::string &CPU, - const std::string &FS, bool LittleEndian); + const std::string &FS, TargetMachine &TM, bool LittleEndian); const AArch64SelectionDAGInfo *getSelectionDAGInfo() const { return &TSInfo; } const AArch64FrameLowering *getFrameLowering() const { return &FrameLowering; } + const AArch64TargetLowering *getTargetLowering() const { + return TLInfo.get(); + } const AArch64InstrInfo *getInstrInfo() const { return &InstrInfo; } const DataLayout *getDataLayout() const { return &DL; } bool enableMachineScheduler() const override { return true; } diff --git a/lib/Target/AArch64/AArch64TargetMachine.cpp b/lib/Target/AArch64/AArch64TargetMachine.cpp index 7a8d0e79d44..f99b90b800f 100644 --- a/lib/Target/AArch64/AArch64TargetMachine.cpp +++ b/lib/Target/AArch64/AArch64TargetMachine.cpp @@ -77,7 +77,7 @@ AArch64TargetMachine::AArch64TargetMachine(const Target &T, StringRef TT, CodeGenOpt::Level OL, bool LittleEndian) : LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL), - Subtarget(TT, CPU, FS, LittleEndian), TLInfo(*this) { + Subtarget(TT, CPU, FS, *this, LittleEndian) { initAsmInfo(); } diff --git a/lib/Target/AArch64/AArch64TargetMachine.h b/lib/Target/AArch64/AArch64TargetMachine.h index 937c17ffd11..6a159e91e22 100644 --- a/lib/Target/AArch64/AArch64TargetMachine.h +++ b/lib/Target/AArch64/AArch64TargetMachine.h @@ -29,9 +29,6 @@ class AArch64TargetMachine : public LLVMTargetMachine { protected: AArch64Subtarget Subtarget; -private: - AArch64TargetLowering TLInfo; - public: AArch64TargetMachine(const Target &T, StringRef TT, StringRef CPU, StringRef FS, const TargetOptions &Options, @@ -42,7 +39,7 @@ public: return &Subtarget; } const AArch64TargetLowering *getTargetLowering() const override { - return &TLInfo; + return getSubtargetImpl()->getTargetLowering(); } const DataLayout *getDataLayout() const override { return getSubtargetImpl()->getDataLayout(); -- 2.34.1