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