SparcTargetMachine.h revision 5d77cad60bd82dfa2d00f78e26443d667922efbf
151d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne//===-- SparcTargetMachine.h - Define TargetMachine for Sparc ---*- C++ -*-===// 251d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne// 351d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne// The LLVM Compiler Infrastructure 451d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne// 551d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne// This file is distributed under the University of Illinois Open Source 651d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne// License. See LICENSE.TXT for details. 751d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne// 851d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne//===----------------------------------------------------------------------===// 951d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne// 1051d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne// This file declares the Sparc specific subclass of TargetMachine. 1151d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne// 1251d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne//===----------------------------------------------------------------------===// 1351d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne 1451d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne#ifndef SPARCTARGETMACHINE_H 1530bc63ffbab71522e5c5a9adc5054e462a0cbf65Chandler Carruth#define SPARCTARGETMACHINE_H 1630bc63ffbab71522e5c5a9adc5054e462a0cbf65Chandler Carruth 1798e7369d9ef5e53964cc8ae48ec2dfcf6c4633c0Jordan Rose#include "llvm/Target/TargetMachine.h" 1898e7369d9ef5e53964cc8ae48ec2dfcf6c4633c0Jordan Rose#include "llvm/Target/TargetData.h" 1951d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne#include "llvm/Target/TargetFrameInfo.h" 2098e7369d9ef5e53964cc8ae48ec2dfcf6c4633c0Jordan Rose#include "SparcInstrInfo.h" 213cc509b5ac0e99ef44c1bf8b57cd403b546abc3dJakob Stoklund Olesen#include "SparcSubtarget.h" 2298e7369d9ef5e53964cc8ae48ec2dfcf6c4633c0Jordan Rose#include "SparcISelLowering.h" 233cc509b5ac0e99ef44c1bf8b57cd403b546abc3dJakob Stoklund Olesen 243cc509b5ac0e99ef44c1bf8b57cd403b546abc3dJakob Stoklund Olesennamespace llvm { 2538859ee4a3c1253d5a45ed3f6b52e77702bfd913Joerg Sonnenberger 263cc509b5ac0e99ef44c1bf8b57cd403b546abc3dJakob Stoklund Olesenclass Module; 27354f20a8720732aa1745d1ff9595382cee324ee2Craig Topper 283cc509b5ac0e99ef44c1bf8b57cd403b546abc3dJakob Stoklund Olesenclass SparcTargetMachine : public LLVMTargetMachine { 2951d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne const TargetData DataLayout; // Calculates type size & alignment 307094dee95f8c915d27097ac18b47d1ef31fd72edJoerg Sonnenberger SparcSubtarget Subtarget; 3151d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne SparcTargetLowering TLInfo; 323cc509b5ac0e99ef44c1bf8b57cd403b546abc3dJakob Stoklund Olesen SparcInstrInfo InstrInfo; 33d49cb20288b2dbc222aaf5673c1a4738c151b7bfBenjamin Kramer TargetFrameInfo FrameInfo; 3451d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne 3551d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourneprotected: 3651d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne virtual const TargetAsmInfo *createTargetAsmInfo() const; 3751d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne 3851d7777a21b9706d503496c650af06f80d278c1aPeter Collingbournepublic: 3951d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne SparcTargetMachine(const Target &T, const Module &M, const std::string &FS); 4051d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne 4151d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne virtual const SparcInstrInfo *getInstrInfo() const { return &InstrInfo; } 4251d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne virtual const TargetFrameInfo *getFrameInfo() const { return &FrameInfo; } 4351d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne virtual const SparcSubtarget *getSubtargetImpl() const{ return &Subtarget; } 4451d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne virtual const SparcRegisterInfo *getRegisterInfo() const { 4551d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne return &InstrInfo.getRegisterInfo(); 4651d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne } 4751d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne virtual SparcTargetLowering* getTargetLowering() const { 4851d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne return const_cast<SparcTargetLowering*>(&TLInfo); 4951d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne } 5051d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne virtual const TargetData *getTargetData() const { return &DataLayout; } 5151d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne 5251d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne // Pass Pipeline Configuration 5351d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 5451d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel); 55519f26bd78c4743bb56e6fb74d9c5163f73d859cCraig Topper}; 5651d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne 5751d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne} // end namespace llvm 5851d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne 5951d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne#endif 6051d7777a21b9706d503496c650af06f80d278c1aPeter Collingbourne