PPCTargetMachine.h revision 226633
1202375Srdivacky//===-- PPCTargetMachine.h - Define TargetMachine for PowerPC -----*- C++ -*-=//
2202375Srdivacky//
3202375Srdivacky//                     The LLVM Compiler Infrastructure
4202375Srdivacky//
5202375Srdivacky// This file is distributed under the University of Illinois Open Source
6202375Srdivacky// License. See LICENSE.TXT for details.
7202375Srdivacky//
8202375Srdivacky//===----------------------------------------------------------------------===//
9202375Srdivacky//
10202375Srdivacky// This file declares the PowerPC specific subclass of TargetMachine.
11202375Srdivacky//
12202375Srdivacky//===----------------------------------------------------------------------===//
13202375Srdivacky
14202375Srdivacky#ifndef PPC_TARGETMACHINE_H
15202375Srdivacky#define PPC_TARGETMACHINE_H
16226633Sdim
17207618Srdivacky#include "PPCFrameLowering.h"
18202375Srdivacky#include "PPCSubtarget.h"
19202375Srdivacky#include "PPCJITInfo.h"
20202375Srdivacky#include "PPCInstrInfo.h"
21202375Srdivacky#include "PPCISelLowering.h"
22202375Srdivacky#include "PPCSelectionDAGInfo.h"
23202375Srdivacky#include "llvm/Target/TargetMachine.h"
24202375Srdivacky#include "llvm/Target/TargetData.h"
25202375Srdivacky
26202375Srdivackynamespace llvm {
27202375Srdivackyclass PassManager;
28218893Sdimclass GlobalValue;
29202375Srdivacky
30202375Srdivacky/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets.
31218893Sdim///
32202375Srdivackyclass PPCTargetMachine : public LLVMTargetMachine {
33202375Srdivacky  PPCSubtarget        Subtarget;
34218893Sdim  const TargetData    DataLayout;       // Calculates type size & alignment
35218893Sdim  PPCInstrInfo        InstrInfo;
36202375Srdivacky  PPCFrameLowering    FrameLowering;
37202375Srdivacky  PPCJITInfo          JITInfo;
38202375Srdivacky  PPCTargetLowering   TLInfo;
39202375Srdivacky  PPCSelectionDAGInfo TSInfo;
40202375Srdivacky  InstrItineraryData  InstrItins;
41202375Srdivacky
42202375Srdivackypublic:
43202375Srdivacky  PPCTargetMachine(const Target &T, StringRef TT,
44202375Srdivacky                   StringRef CPU, StringRef FS,
45202375Srdivacky                   Reloc::Model RM, CodeModel::Model CM, bool is64Bit);
46202375Srdivacky
47202375Srdivacky  virtual const PPCInstrInfo      *getInstrInfo() const { return &InstrInfo; }
48202375Srdivacky  virtual const PPCFrameLowering  *getFrameLowering() const {
49202375Srdivacky    return &FrameLowering;
50218893Sdim  }
51218893Sdim  virtual       PPCJITInfo        *getJITInfo()         { return &JITInfo; }
52202375Srdivacky  virtual const PPCTargetLowering *getTargetLowering() const {
53202375Srdivacky   return &TLInfo;
54202375Srdivacky  }
55202375Srdivacky  virtual const PPCSelectionDAGInfo* getSelectionDAGInfo() const {
56202375Srdivacky    return &TSInfo;
57202375Srdivacky  }
58202375Srdivacky  virtual const PPCRegisterInfo   *getRegisterInfo() const {
59202375Srdivacky    return &InstrInfo.getRegisterInfo();
60202375Srdivacky  }
61202375Srdivacky
62202375Srdivacky  virtual const TargetData    *getTargetData() const    { return &DataLayout; }
63202375Srdivacky  virtual const PPCSubtarget  *getSubtargetImpl() const { return &Subtarget; }
64202375Srdivacky  virtual const InstrItineraryData *getInstrItineraryData() const {
65202375Srdivacky    return &InstrItins;
66218893Sdim  }
67202375Srdivacky
68218893Sdim  // Pass Pipeline Configuration
69202375Srdivacky  virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
70202375Srdivacky  virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
71202375Srdivacky  virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel,
72202375Srdivacky                              JITCodeEmitter &JCE);
73202375Srdivacky  virtual bool getEnableTailMergeDefault() const;
74202375Srdivacky};
75202375Srdivacky
76202375Srdivacky/// PPC32TargetMachine - PowerPC 32-bit target machine.
77202375Srdivacky///
78202375Srdivackyclass PPC32TargetMachine : public PPCTargetMachine {
79202375Srdivackypublic:
80202375Srdivacky  PPC32TargetMachine(const Target &T, StringRef TT,
81202375Srdivacky                     StringRef CPU, StringRef FS,
82202375Srdivacky                     Reloc::Model RM, CodeModel::Model CM);
83202375Srdivacky};
84202375Srdivacky
85202375Srdivacky/// PPC64TargetMachine - PowerPC 64-bit target machine.
86202375Srdivacky///
87202375Srdivackyclass PPC64TargetMachine : public PPCTargetMachine {
88202375Srdivackypublic:
89202375Srdivacky  PPC64TargetMachine(const Target &T, StringRef TT,
90202375Srdivacky                     StringRef CPU, StringRef FS,
91202375Srdivacky                     Reloc::Model RM, CodeModel::Model CM);
92202375Srdivacky};
93202375Srdivacky
94202375Srdivacky} // end namespace llvm
95202375Srdivacky
96202375Srdivacky#endif
97202375Srdivacky