PPCTargetMachine.h revision 203954
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 25namespace llvm { 26class PassManager; 27class GlobalValue; 28 29/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets. 30/// 31class 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 40public: 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 // Pass Pipeline Configuration 61 virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 62 virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 63 virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel, 64 JITCodeEmitter &JCE); 65 virtual bool getEnableTailMergeDefault() const; 66}; 67 68/// PPC32TargetMachine - PowerPC 32-bit target machine. 69/// 70class PPC32TargetMachine : public PPCTargetMachine { 71public: 72 PPC32TargetMachine(const Target &T, const std::string &TT, 73 const std::string &FS); 74}; 75 76/// PPC64TargetMachine - PowerPC 64-bit target machine. 77/// 78class PPC64TargetMachine : public PPCTargetMachine { 79public: 80 PPC64TargetMachine(const Target &T, const std::string &TT, 81 const std::string &FS); 82}; 83 84} // end namespace llvm 85 86#endif 87