ARMTargetMachine.h revision 847b99b2df4534498b514c439324e7c60de5c3b7
1//===-- ARMTargetMachine.h - Define TargetMachine for ARM -------*- 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 ARM specific subclass of TargetMachine. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef ARMTARGETMACHINE_H 15#define ARMTARGETMACHINE_H 16 17#include "llvm/Target/TargetMachine.h" 18#include "llvm/Target/TargetData.h" 19#include "llvm/Target/TargetFrameInfo.h" 20#include "ARMInstrInfo.h" 21#include "ARMFrameInfo.h" 22#include "ARMJITInfo.h" 23#include "ARMSubtarget.h" 24#include "ARMISelLowering.h" 25 26namespace llvm { 27 28class Module; 29 30class ARMTargetMachine : public LLVMTargetMachine { 31 ARMSubtarget Subtarget; 32 const TargetData DataLayout; // Calculates type size & alignment 33 ARMInstrInfo InstrInfo; 34 ARMFrameInfo FrameInfo; 35 ARMJITInfo JITInfo; 36 ARMTargetLowering TLInfo; 37 38protected: 39 // To avoid having target depend on the asmprinter stuff libraries, asmprinter 40 // set this functions to ctor pointer at startup time if they are linked in. 41 typedef FunctionPass *(*AsmPrinterCtorFn)(raw_ostream &o, 42 ARMTargetMachine &tm); 43 static AsmPrinterCtorFn AsmPrinterCtor; 44 45public: 46 ARMTargetMachine(const Module &M, const std::string &FS, bool isThumb = false); 47 48 virtual const ARMInstrInfo *getInstrInfo() const { return &InstrInfo; } 49 virtual const ARMFrameInfo *getFrameInfo() const { return &FrameInfo; } 50 virtual ARMJITInfo *getJITInfo() { return &JITInfo; } 51 virtual const ARMRegisterInfo *getRegisterInfo() const { 52 return &InstrInfo.getRegisterInfo(); 53 } 54 virtual const TargetData *getTargetData() const { return &DataLayout; } 55 virtual const ARMSubtarget *getSubtargetImpl() const { return &Subtarget; } 56 virtual ARMTargetLowering *getTargetLowering() const { 57 return const_cast<ARMTargetLowering*>(&TLInfo); 58 } 59 60 static void registerAsmPrinter(AsmPrinterCtorFn F) { 61 AsmPrinterCtor = F; 62 } 63 64 static unsigned getModuleMatchQuality(const Module &M); 65 static unsigned getJITMatchQuality(); 66 67 virtual const TargetAsmInfo *createTargetAsmInfo() const; 68 69 // Pass Pipeline Configuration 70 virtual bool addInstSelector(PassManagerBase &PM, bool Fast); 71 virtual bool addPreEmitPass(PassManagerBase &PM, bool Fast); 72 virtual bool addAssemblyEmitter(PassManagerBase &PM, bool Fast, 73 raw_ostream &Out); 74 virtual bool addCodeEmitter(PassManagerBase &PM, bool Fast, 75 bool DumpAsm, MachineCodeEmitter &MCE); 76 virtual bool addSimpleCodeEmitter(PassManagerBase &PM, bool Fast, 77 bool DumpAsm, MachineCodeEmitter &MCE); 78}; 79 80/// ThumbTargetMachine - Thumb target machine. 81/// 82class ThumbTargetMachine : public ARMTargetMachine { 83public: 84 ThumbTargetMachine(const Module &M, const std::string &FS); 85 86 static unsigned getJITMatchQuality(); 87 static unsigned getModuleMatchQuality(const Module &M); 88}; 89 90} // end namespace llvm 91 92#endif 93