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)