SparcTargetMachine.h revision 2d24e2a396a1d211baaeedf32148a3b657240170
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- SparcTargetMachine.h - Define TargetMachine for Sparc ---*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file declares the Sparc specific subclass of TargetMachine. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//===----------------------------------------------------------------------===// 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#ifndef SPARCTARGETMACHINE_H 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SPARCTARGETMACHINE_H 16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "SparcInstrInfo.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "SparcISelLowering.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SparcFrameLowering.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SparcSelectionDAGInfo.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "SparcSubtarget.h" 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "llvm/Target/TargetMachine.h" 23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "llvm/Target/TargetData.h" 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "llvm/Target/TargetFrameLowering.h" 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace llvm { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SparcTargetMachine : public LLVMTargetMachine { 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SparcSubtarget Subtarget; 30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const TargetData DataLayout; // Calculates type size & alignment 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SparcTargetLowering TLInfo; 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SparcSelectionDAGInfo TSInfo; 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SparcInstrInfo InstrInfo; 3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SparcFrameLowering FrameLowering; 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)public: 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SparcTargetMachine(const Target &T, StringRef TT, 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) StringRef CPU, StringRef FS, const TargetOptions &Options, 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Reloc::Model RM, CodeModel::Model CM, 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) CodeGenOpt::Level OL, bool is64bit); 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual const SparcInstrInfo *getInstrInfo() const { return &InstrInfo; } 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual const TargetFrameLowering *getFrameLowering() const { 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return &FrameLowering; 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual const SparcSubtarget *getSubtargetImpl() const{ return &Subtarget; } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const SparcRegisterInfo *getRegisterInfo() const { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &InstrInfo.getRegisterInfo(); 48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual const SparcTargetLowering* getTargetLowering() const { 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return &TLInfo; 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual const SparcSelectionDAGInfo* getSelectionDAGInfo() const { 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return &TSInfo; 5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual const TargetData *getTargetData() const { return &DataLayout; } 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Pass Pipeline Configuration 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual bool addInstSelector(PassManagerBase &PM); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool addPreEmitPass(PassManagerBase &PM); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)/// SparcV8TargetMachine - Sparc 32-bit target machine 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)/// 6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class SparcV8TargetMachine : public SparcTargetMachine { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void anchor(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SparcV8TargetMachine(const Target &T, StringRef TT, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringRef CPU, StringRef FS, 6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const TargetOptions &Options, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Reloc::Model RM, CodeModel::Model CM, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CodeGenOpt::Level OL); 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}; 73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)/// SparcV9TargetMachine - Sparc 64-bit target machine 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SparcV9TargetMachine : public SparcTargetMachine { 77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void anchor(); 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)public: 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SparcV9TargetMachine(const Target &T, StringRef TT, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringRef CPU, StringRef FS, 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const TargetOptions &Options, 82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Reloc::Model RM, CodeModel::Model CM, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CodeGenOpt::Level OL); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // end namespace llvm 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)