1 //===-- PPCTargetMachine.h - Define TargetMachine for PowerPC -----*- C++ -*-=// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file declares the PowerPC specific subclass of TargetMachine. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef PPC_TARGETMACHINE_H 15 #define PPC_TARGETMACHINE_H 16 17 #include "PPCFrameInfo.h" 18 #include "PPCSubtarget.h" 19 #include "PPCJITInfo.h" 20 #include "PPCInstrInfo.h" 21 #include "PPCISelLowering.h" 22 #include "llvm/Target/TargetMachine.h" 23 #include "llvm/Target/TargetData.h" 24 25 namespace llvm { 26 class PassManager; 27 class GlobalValue; 28 29 /// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets. 30 /// 31 class PPCTargetMachine : public LLVMTargetMachine { 32 PPCSubtarget Subtarget; 33 const TargetData DataLayout; // Calculates type size & alignment 34 PPCInstrInfo InstrInfo; 35 PPCFrameInfo FrameInfo; 36 PPCJITInfo JITInfo; 37 PPCTargetLowering TLInfo; 38 InstrItineraryData InstrItins; 39 40 public: 41 PPCTargetMachine(const Target &T, const std::string &TT, 42 const std::string &FS, bool is64Bit); 43 44 virtual const PPCInstrInfo *getInstrInfo() const { return &InstrInfo; } 45 virtual const PPCFrameInfo *getFrameInfo() const { return &FrameInfo; } 46 virtual PPCJITInfo *getJITInfo() { return &JITInfo; } 47 virtual PPCTargetLowering *getTargetLowering() const { 48 return const_cast<PPCTargetLowering*>(&TLInfo); 49 } 50 virtual const PPCRegisterInfo *getRegisterInfo() const { 51 return &InstrInfo.getRegisterInfo(); 52 } 53 54 virtual const TargetData *getTargetData() const { return &DataLayout; } 55 virtual const PPCSubtarget *getSubtargetImpl() const { return &Subtarget; } 56 virtual const InstrItineraryData getInstrItineraryData() const { 57 return InstrItins; 58 } 59 60 /// getLSDAEncoding - Returns the LSDA pointer encoding. The choices are 61 /// 4-byte, 8-byte, and target default. The CIE is hard-coded to indicate that 62 /// the LSDA pointer in the FDE section is an "sdata4", and should be encoded 63 /// as a 4-byte pointer by default. However, some systems may require a 64 /// different size due to bugs or other conditions. We will default to a 65 /// 4-byte encoding unless the system tells us otherwise. 66 /// 67 /// FIXME: This call-back isn't good! We should be using the correct encoding 68 /// regardless of the system. However, there are some systems which have bugs 69 /// that prevent this from occuring. 70 virtual DwarfLSDAEncoding::Encoding getLSDAEncoding() const; 71 72 // Pass Pipeline Configuration 73 virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 74 virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 75 virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 76 JITCodeEmitter &JCE); 77 virtual bool getEnableTailMergeDefault() const; 78 }; 79 80 /// PPC32TargetMachine - PowerPC 32-bit target machine. 81 /// 82 class PPC32TargetMachine : public PPCTargetMachine { 83 public: 84 PPC32TargetMachine(const Target &T, const std::string &TT, 85 const std::string &FS); 86 }; 87 88 /// PPC64TargetMachine - PowerPC 64-bit target machine. 89 /// 90 class PPC64TargetMachine : public PPCTargetMachine { 91 public: 92 PPC64TargetMachine(const Target &T, const std::string &TT, 93 const std::string &FS); 94 }; 95 96 } // end namespace llvm 97 98 #endif 99