X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FTarget%2FAArch64%2FAArch64TargetMachine.h;h=8d49a29386ac8458811417dd32cb1b5322791950;hp=14c3f6c6ded1293e130ce94d8e75f5149be6853a;hb=8323bc089786c4b1b1f35a958613de895a78d295;hpb=fda2dfbca7ba09177f876e6a7cc3140be800ae0d diff --git a/lib/Target/AArch64/AArch64TargetMachine.h b/lib/Target/AArch64/AArch64TargetMachine.h index 14c3f6c6ded..8d49a29386a 100644 --- a/lib/Target/AArch64/AArch64TargetMachine.h +++ b/lib/Target/AArch64/AArch64TargetMachine.h @@ -1,4 +1,4 @@ -//=== AArch64TargetMachine.h - Define TargetMachine for AArch64 -*- C++ -*-===// +//==-- AArch64TargetMachine.h - Define TargetMachine for AArch64 -*- C++ -*-==// // // The LLVM Compiler Infrastructure // @@ -11,13 +11,10 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_AARCH64TARGETMACHINE_H -#define LLVM_AARCH64TARGETMACHINE_H +#ifndef LLVM_LIB_TARGET_AARCH64_AARCH64TARGETMACHINE_H +#define LLVM_LIB_TARGET_AARCH64_AARCH64TARGETMACHINE_H -#include "AArch64FrameLowering.h" -#include "AArch64ISelLowering.h" #include "AArch64InstrInfo.h" -#include "AArch64SelectionDAGInfo.h" #include "AArch64Subtarget.h" #include "llvm/IR/DataLayout.h" #include "llvm/Target/TargetMachine.h" @@ -25,47 +22,55 @@ namespace llvm { class AArch64TargetMachine : public LLVMTargetMachine { - AArch64Subtarget Subtarget; - AArch64InstrInfo InstrInfo; - const DataLayout DL; - AArch64TargetLowering TLInfo; - AArch64SelectionDAGInfo TSInfo; - AArch64FrameLowering FrameLowering; +protected: + std::unique_ptr TLOF; + mutable StringMap> SubtargetMap; public: - AArch64TargetMachine(const Target &T, StringRef TT, StringRef CPU, + AArch64TargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, - CodeGenOpt::Level OL); + CodeGenOpt::Level OL, bool IsLittleEndian); - const AArch64InstrInfo *getInstrInfo() const { - return &InstrInfo; - } + ~AArch64TargetMachine() override; + const AArch64Subtarget *getSubtargetImpl(const Function &F) const override; - const AArch64FrameLowering *getFrameLowering() const { - return &FrameLowering; - } + // Pass Pipeline Configuration + TargetPassConfig *createPassConfig(PassManagerBase &PM) override; - const AArch64TargetLowering *getTargetLowering() const { - return &TLInfo; - } + /// \brief Get the TargetIRAnalysis for this target. + TargetIRAnalysis getTargetIRAnalysis() override; - const AArch64SelectionDAGInfo *getSelectionDAGInfo() const { - return &TSInfo; + TargetLoweringObjectFile* getObjFileLowering() const override { + return TLOF.get(); } - const AArch64Subtarget *getSubtargetImpl() const { return &Subtarget; } - - const DataLayout *getDataLayout() const { return &DL; } +private: + bool isLittle; +}; - const TargetRegisterInfo *getRegisterInfo() const { - return &InstrInfo.getRegisterInfo(); - } - TargetPassConfig *createPassConfig(PassManagerBase &PM); +// AArch64leTargetMachine - AArch64 little endian target machine. +// +class AArch64leTargetMachine : public AArch64TargetMachine { + virtual void anchor(); +public: + AArch64leTargetMachine(const Target &T, const Triple &TT, StringRef CPU, + StringRef FS, const TargetOptions &Options, + Reloc::Model RM, CodeModel::Model CM, + CodeGenOpt::Level OL); +}; - virtual void addAnalysisPasses(PassManagerBase &PM); +// AArch64beTargetMachine - AArch64 big endian target machine. +// +class AArch64beTargetMachine : public AArch64TargetMachine { + virtual void anchor(); +public: + AArch64beTargetMachine(const Target &T, const Triple &TT, StringRef CPU, + StringRef FS, const TargetOptions &Options, + Reloc::Model RM, CodeModel::Model CM, + CodeGenOpt::Level OL); }; -} +} // end namespace llvm #endif