1 //===-- PPCTargetMachine.h - Define TargetMachine for PowerPC -----*- C++ -*-=// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file was developed by the LLVM research group and is distributed under 6 // the University of Illinois Open Source 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 protected: 41 virtual const TargetAsmInfo *createTargetAsmInfo() const; 42 43 public: 44 PPCTargetMachine(const Module &M, const std::string &FS, bool is64Bit); 45 46 virtual const PPCInstrInfo *getInstrInfo() const { return &InstrInfo; } 47 virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; } 48 virtual TargetJITInfo *getJITInfo() { return &JITInfo; } 49 virtual PPCTargetLowering *getTargetLowering() const { 50 return const_cast<PPCTargetLowering*>(&TLInfo); 51 } 52 virtual const MRegisterInfo *getRegisterInfo() const { 53 return &InstrInfo.getRegisterInfo(); 54 } 55 56 virtual const TargetData *getTargetData() const { return &DataLayout; } 57 virtual const PPCSubtarget *getSubtargetImpl() const { return &Subtarget; } 58 virtual const InstrItineraryData getInstrItineraryData() const { 59 return InstrItins; 60 } 61 62 // Pass Pipeline Configuration 63 virtual bool addInstSelector(FunctionPassManager &PM, bool Fast); 64 virtual bool addPreEmitPass(FunctionPassManager &PM, bool Fast); 65 virtual bool addAssemblyEmitter(FunctionPassManager &PM, bool Fast, 66 std::ostream &Out); 67 virtual bool addObjectWriter(FunctionPassManager &PM, bool Fast, 68 std::ostream &Out); 69 virtual bool addCodeEmitter(FunctionPassManager &PM, bool Fast, 70 MachineCodeEmitter &MCE); 71 }; 72 73 /// PPC32TargetMachine - PowerPC 32-bit target machine. 74 /// 75 class PPC32TargetMachine : public PPCTargetMachine { 76 public: 77 PPC32TargetMachine(const Module &M, const std::string &FS); 78 79 static unsigned getJITMatchQuality(); 80 static unsigned getModuleMatchQuality(const Module &M); 81 }; 82 83 /// PPC64TargetMachine - PowerPC 64-bit target machine. 84 /// 85 class PPC64TargetMachine : public PPCTargetMachine { 86 public: 87 PPC64TargetMachine(const Module &M, const std::string &FS); 88 89 static unsigned getJITMatchQuality(); 90 static unsigned getModuleMatchQuality(const Module &M); 91 }; 92 93 } // end namespace llvm 94 95 #endif 96