X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=lib%2FTarget%2FPowerPC%2FPPCTargetMachine.h;h=65084842bc846c8876093c083dd15fc50d9c3f07;hb=6de800e0566f1cbd3e8e51137fb8943ac1608724;hp=3cf8063b70ef6c99f7bd717553fd4450c108ab73;hpb=cccc317ee06643fd6cb8dff4bdb93a687c0e4fb3;p=oota-llvm.git diff --git a/lib/Target/PowerPC/PPCTargetMachine.h b/lib/Target/PowerPC/PPCTargetMachine.h index 3cf8063b70e..65084842bc8 100644 --- a/lib/Target/PowerPC/PPCTargetMachine.h +++ b/lib/Target/PowerPC/PPCTargetMachine.h @@ -11,14 +11,10 @@ // //===----------------------------------------------------------------------===// -#ifndef PPC_TARGETMACHINE_H -#define PPC_TARGETMACHINE_H +#ifndef LLVM_LIB_TARGET_POWERPC_PPCTARGETMACHINE_H +#define LLVM_LIB_TARGET_POWERPC_PPCTARGETMACHINE_H -#include "PPCFrameLowering.h" -#include "PPCISelLowering.h" #include "PPCInstrInfo.h" -#include "PPCJITInfo.h" -#include "PPCSelectionDAGInfo.h" #include "PPCSubtarget.h" #include "llvm/IR/DataLayout.h" #include "llvm/Target/TargetMachine.h" @@ -28,46 +24,41 @@ namespace llvm { /// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets. /// class PPCTargetMachine : public LLVMTargetMachine { - PPCSubtarget Subtarget; +public: + enum PPCABI { PPC_ABI_UNKNOWN, PPC_ABI_ELFv1, PPC_ABI_ELFv2 }; +private: + std::unique_ptr TLOF; + PPCABI TargetABI; + // Calculates type size & alignment + const DataLayout DL; + PPCSubtarget Subtarget; + + mutable StringMap> SubtargetMap; public: - PPCTargetMachine(const Target &T, StringRef TT, - StringRef CPU, StringRef FS, const TargetOptions &Options, - Reloc::Model RM, CodeModel::Model CM, - CodeGenOpt::Level OL, bool is64Bit); + PPCTargetMachine(const Target &T, StringRef TT, StringRef CPU, StringRef FS, + const TargetOptions &Options, Reloc::Model RM, + CodeModel::Model CM, CodeGenOpt::Level OL); - const PPCInstrInfo *getInstrInfo() const override { - return getSubtargetImpl()->getInstrInfo(); - } - const PPCFrameLowering *getFrameLowering() const override { - return getSubtargetImpl()->getFrameLowering(); - } - PPCJITInfo *getJITInfo() override { return Subtarget.getJITInfo(); } - const PPCTargetLowering *getTargetLowering() const override { - return getSubtargetImpl()->getTargetLowering(); - } - const PPCSelectionDAGInfo* getSelectionDAGInfo() const override { - return getSubtargetImpl()->getSelectionDAGInfo(); - } - const PPCRegisterInfo *getRegisterInfo() const override { - return &getInstrInfo()->getRegisterInfo(); - } + ~PPCTargetMachine() override; - const DataLayout *getDataLayout() const override { - return getSubtargetImpl()->getDataLayout(); - } - const PPCSubtarget *getSubtargetImpl() const override { return &Subtarget; } - const InstrItineraryData *getInstrItineraryData() const override { - return &getSubtargetImpl()->getInstrItineraryData(); - } + const DataLayout *getDataLayout() const override { return &DL; } + const PPCSubtarget *getSubtargetImpl() const override { return &Subtarget; } + const PPCSubtarget *getSubtargetImpl(const Function &F) const override; // Pass Pipeline Configuration TargetPassConfig *createPassConfig(PassManagerBase &PM) override; - bool addCodeEmitter(PassManagerBase &PM, - JITCodeEmitter &JCE) override; - /// \brief Register PPC analysis passes with a pass manager. - void addAnalysisPasses(PassManagerBase &PM) override; + TargetIRAnalysis getTargetIRAnalysis() override; + + TargetLoweringObjectFile *getObjFileLowering() const override { + return TLOF.get(); + } + bool isELFv2ABI() const { return TargetABI == PPC_ABI_ELFv2; } + bool isPPC64() const { + Triple TT(getTargetTriple()); + return (TT.getArch() == Triple::ppc64 || TT.getArch() == Triple::ppc64le); + }; }; /// PPC32TargetMachine - PowerPC 32-bit target machine.