blob: a0e71307493fcfdf4318ab9d9bab68726e940568 [file] [log] [blame]
Scott Michel564427e2007-12-05 01:24:05 +00001//===-- SPUTargetMachine.h - Define TargetMachine for Cell SPU ----*- C++ -*-=//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner4ee451d2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Scott Michel564427e2007-12-05 01:24:05 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file declares the CellSPU-specific subclass of TargetMachine.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef SPU_TARGETMACHINE_H
15#define SPU_TARGETMACHINE_H
16
17#include "SPUSubtarget.h"
18#include "SPUInstrInfo.h"
19#include "SPUISelLowering.h"
20#include "SPUFrameInfo.h"
21#include "llvm/Target/TargetMachine.h"
22#include "llvm/Target/TargetData.h"
23
24namespace llvm {
25class PassManager;
26class GlobalValue;
27class TargetFrameInfo;
28
29/// SPUTargetMachine
30///
31class SPUTargetMachine : public LLVMTargetMachine {
32 SPUSubtarget Subtarget;
33 const TargetData DataLayout;
34 SPUInstrInfo InstrInfo;
35 SPUFrameInfo FrameInfo;
36 SPUTargetLowering TLInfo;
37 InstrItineraryData InstrItins;
Anton Korobeynikove494b9e2009-06-19 19:36:55 +000038
Scott Michel564427e2007-12-05 01:24:05 +000039protected:
40 virtual const TargetAsmInfo *createTargetAsmInfo() const;
Anton Korobeynikove494b9e2009-06-19 19:36:55 +000041
Scott Michel564427e2007-12-05 01:24:05 +000042public:
Daniel Dunbare28039c2009-08-02 23:37:13 +000043 SPUTargetMachine(const Target &T, const std::string &TT,
44 const std::string &FS);
Scott Michel564427e2007-12-05 01:24:05 +000045
46 /// Return the subtarget implementation object
47 virtual const SPUSubtarget *getSubtargetImpl() const {
48 return &Subtarget;
49 }
50 virtual const SPUInstrInfo *getInstrInfo() const {
51 return &InstrInfo;
52 }
Dan Gohmanc9f5f3f2008-05-14 01:58:56 +000053 virtual const SPUFrameInfo *getFrameInfo() const {
Scott Michel564427e2007-12-05 01:24:05 +000054 return &FrameInfo;
55 }
56 /*!
57 \note Cell SPU does not support JIT today. It could support JIT at some
58 point.
59 */
60 virtual TargetJITInfo *getJITInfo() {
61 return NULL;
62 }
Scott Michel564427e2007-12-05 01:24:05 +000063
64 virtual SPUTargetLowering *getTargetLowering() const {
65 return const_cast<SPUTargetLowering*>(&TLInfo);
66 }
67
Dan Gohmanc9f5f3f2008-05-14 01:58:56 +000068 virtual const SPURegisterInfo *getRegisterInfo() const {
Scott Michel564427e2007-12-05 01:24:05 +000069 return &InstrInfo.getRegisterInfo();
70 }
71
72 virtual const TargetData *getTargetData() const {
73 return &DataLayout;
74 }
75
Anton Korobeynikove494b9e2009-06-19 19:36:55 +000076 virtual const InstrItineraryData getInstrItineraryData() const {
Scott Michel564427e2007-12-05 01:24:05 +000077 return InstrItins;
78 }
79
80 // Pass Pipeline Configuration
Bill Wendling98a366d2009-04-29 23:29:43 +000081 virtual bool addInstSelector(PassManagerBase &PM,
82 CodeGenOpt::Level OptLevel);
Scott Michel564427e2007-12-05 01:24:05 +000083};
84
85} // end namespace llvm
86
87#endif