blob: f1c381739796636347da9db7c769bc78cf2cf2f7 [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 Dunbar51b198a2009-07-15 20:24:03 +000043 SPUTargetMachine(const Target &T, const Module &M, const std::string &FS);
Scott Michel564427e2007-12-05 01:24:05 +000044
45 /// Return the subtarget implementation object
46 virtual const SPUSubtarget *getSubtargetImpl() const {
47 return &Subtarget;
48 }
49 virtual const SPUInstrInfo *getInstrInfo() const {
50 return &InstrInfo;
51 }
Dan Gohmanc9f5f3f2008-05-14 01:58:56 +000052 virtual const SPUFrameInfo *getFrameInfo() const {
Scott Michel564427e2007-12-05 01:24:05 +000053 return &FrameInfo;
54 }
55 /*!
56 \note Cell SPU does not support JIT today. It could support JIT at some
57 point.
58 */
59 virtual TargetJITInfo *getJITInfo() {
60 return NULL;
61 }
Scott Michel564427e2007-12-05 01:24:05 +000062
63 virtual SPUTargetLowering *getTargetLowering() const {
64 return const_cast<SPUTargetLowering*>(&TLInfo);
65 }
66
Dan Gohmanc9f5f3f2008-05-14 01:58:56 +000067 virtual const SPURegisterInfo *getRegisterInfo() const {
Scott Michel564427e2007-12-05 01:24:05 +000068 return &InstrInfo.getRegisterInfo();
69 }
70
71 virtual const TargetData *getTargetData() const {
72 return &DataLayout;
73 }
74
Anton Korobeynikove494b9e2009-06-19 19:36:55 +000075 virtual const InstrItineraryData getInstrItineraryData() const {
Scott Michel564427e2007-12-05 01:24:05 +000076 return InstrItins;
77 }
78
79 // Pass Pipeline Configuration
Bill Wendling98a366d2009-04-29 23:29:43 +000080 virtual bool addInstSelector(PassManagerBase &PM,
81 CodeGenOpt::Level OptLevel);
Scott Michel564427e2007-12-05 01:24:05 +000082};
83
84} // end namespace llvm
85
86#endif