PPCTargetMachine.h revision 198090
1193326Sed//===-- PPCTargetMachine.h - Define TargetMachine for PowerPC -----*- C++ -*-=//
2193326Sed//
3193326Sed//                     The LLVM Compiler Infrastructure
4193326Sed//
5193326Sed// This file is distributed under the University of Illinois Open Source
6193326Sed// License. See LICENSE.TXT for details.
7193326Sed//
8193326Sed//===----------------------------------------------------------------------===//
9193326Sed//
10193326Sed// This file declares the PowerPC specific subclass of TargetMachine.
11193326Sed//
12193326Sed//===----------------------------------------------------------------------===//
13193326Sed
14193326Sed#ifndef PPC_TARGETMACHINE_H
15193326Sed#define PPC_TARGETMACHINE_H
16193326Sed
17193326Sed#include "PPCFrameInfo.h"
18193326Sed#include "PPCSubtarget.h"
19193326Sed#include "PPCJITInfo.h"
20193326Sed#include "PPCInstrInfo.h"
21193326Sed#include "PPCISelLowering.h"
22193326Sed#include "PPCMachOWriterInfo.h"
23193326Sed#include "llvm/Target/TargetMachine.h"
24193326Sed#include "llvm/Target/TargetData.h"
25193326Sed
26193326Sednamespace llvm {
27193326Sedclass PassManager;
28193326Sedclass GlobalValue;
29193326Sed
30193326Sed/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets.
31193326Sed///
32193326Sedclass PPCTargetMachine : public LLVMTargetMachine {
33193326Sed  PPCSubtarget        Subtarget;
34193326Sed  const TargetData    DataLayout;       // Calculates type size & alignment
35193326Sed  PPCInstrInfo        InstrInfo;
36193326Sed  PPCFrameInfo        FrameInfo;
37193326Sed  PPCJITInfo          JITInfo;
38193326Sed  PPCTargetLowering   TLInfo;
39193326Sed  InstrItineraryData  InstrItins;
40193326Sed  PPCMachOWriterInfo  MachOWriterInfo;
41193326Sed
42193326Sedpublic:
43193326Sed  PPCTargetMachine(const Target &T, const std::string &TT,
44193326Sed                   const std::string &FS, bool is64Bit);
45193326Sed
46193326Sed  virtual const PPCInstrInfo     *getInstrInfo() const { return &InstrInfo; }
47193326Sed  virtual const PPCFrameInfo     *getFrameInfo() const { return &FrameInfo; }
48193326Sed  virtual       PPCJITInfo       *getJITInfo()         { return &JITInfo; }
49193326Sed  virtual       PPCTargetLowering *getTargetLowering() const {
50193326Sed   return const_cast<PPCTargetLowering*>(&TLInfo);
51193326Sed  }
52193326Sed  virtual const PPCRegisterInfo  *getRegisterInfo() const {
53193326Sed    return &InstrInfo.getRegisterInfo();
54193326Sed  }
55193326Sed
56193326Sed  virtual const TargetData    *getTargetData() const    { return &DataLayout; }
57193326Sed  virtual const PPCSubtarget  *getSubtargetImpl() const { return &Subtarget; }
58193326Sed  virtual const InstrItineraryData getInstrItineraryData() const {
59193326Sed    return InstrItins;
60193326Sed  }
61193326Sed  virtual const PPCMachOWriterInfo *getMachOWriterInfo() const {
62193326Sed    return &MachOWriterInfo;
63193326Sed  }
64193326Sed
65193326Sed  // Pass Pipeline Configuration
66193326Sed  virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
67193326Sed  virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
68193326Sed  virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel,
69193326Sed                              MachineCodeEmitter &MCE);
70193326Sed  virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel,
71193326Sed                              JITCodeEmitter &JCE);
72193326Sed  virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel,
73193326Sed                              ObjectCodeEmitter &OCE);
74193326Sed  virtual bool addSimpleCodeEmitter(PassManagerBase &PM,
75193326Sed                                    CodeGenOpt::Level OptLevel,
76193326Sed                                    MachineCodeEmitter &MCE);
77193326Sed  virtual bool addSimpleCodeEmitter(PassManagerBase &PM,
78193326Sed                                    CodeGenOpt::Level OptLevel,
79193326Sed                                    JITCodeEmitter &JCE);
80193326Sed  virtual bool addSimpleCodeEmitter(PassManagerBase &PM,
81193326Sed                                    CodeGenOpt::Level OptLevel,
82193326Sed                                    ObjectCodeEmitter &OCE);
83193326Sed  virtual bool getEnableTailMergeDefault() const;
84193326Sed};
85193326Sed
86193326Sed/// PPC32TargetMachine - PowerPC 32-bit target machine.
87193326Sed///
88193326Sedclass PPC32TargetMachine : public PPCTargetMachine {
89193326Sedpublic:
90193326Sed  PPC32TargetMachine(const Target &T, const std::string &TT,
91193326Sed                     const std::string &FS);
92193326Sed};
93193326Sed
94193326Sed/// PPC64TargetMachine - PowerPC 64-bit target machine.
95193326Sed///
96193326Sedclass PPC64TargetMachine : public PPCTargetMachine {
97193326Sedpublic:
98193326Sed  PPC64TargetMachine(const Target &T, const std::string &TT,
99193326Sed                     const std::string &FS);
100193326Sed};
101193326Sed
102193326Sed} // end namespace llvm
103193326Sed
104193326Sed#endif
105193326Sed