PPCTargetMachine.h revision a1514e24cc24b050f53a12650e047799358833a1
1//===-- PPCTargetMachine.h - Define TargetMachine for PowerPC ---*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file declares the PowerPC specific subclass of TargetMachine.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef PPC_TARGETMACHINE_H
15#define PPC_TARGETMACHINE_H
16
17#include "PPCFrameLowering.h"
18#include "PPCISelLowering.h"
19#include "PPCInstrInfo.h"
20#include "PPCJITInfo.h"
21#include "PPCSelectionDAGInfo.h"
22#include "PPCSubtarget.h"
23#include "llvm/DataLayout.h"
24#include "llvm/Target/TargetMachine.h"
25#include "llvm/Target/TargetTransformImpl.h"
26
27namespace llvm {
28
29/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets.
30///
31class PPCTargetMachine : public LLVMTargetMachine {
32  PPCSubtarget        Subtarget;
33  const DataLayout    DL;       // Calculates type size & alignment
34  PPCInstrInfo        InstrInfo;
35  PPCFrameLowering    FrameLowering;
36  PPCJITInfo          JITInfo;
37  PPCTargetLowering   TLInfo;
38  PPCSelectionDAGInfo TSInfo;
39  InstrItineraryData  InstrItins;
40  ScalarTargetTransformImpl STTI;
41  VectorTargetTransformImpl VTTI;
42
43public:
44  PPCTargetMachine(const Target &T, StringRef TT,
45                   StringRef CPU, StringRef FS, const TargetOptions &Options,
46                   Reloc::Model RM, CodeModel::Model CM,
47                   CodeGenOpt::Level OL, bool is64Bit);
48
49  virtual const PPCInstrInfo      *getInstrInfo() const { return &InstrInfo; }
50  virtual const PPCFrameLowering  *getFrameLowering() const {
51    return &FrameLowering;
52  }
53  virtual       PPCJITInfo        *getJITInfo()         { return &JITInfo; }
54  virtual const PPCTargetLowering *getTargetLowering() const {
55   return &TLInfo;
56  }
57  virtual const PPCSelectionDAGInfo* getSelectionDAGInfo() const {
58    return &TSInfo;
59  }
60  virtual const PPCRegisterInfo   *getRegisterInfo() const {
61    return &InstrInfo.getRegisterInfo();
62  }
63
64  virtual const DataLayout    *getDataLayout() const    { return &DL; }
65  virtual const PPCSubtarget  *getSubtargetImpl() const { return &Subtarget; }
66  virtual const InstrItineraryData *getInstrItineraryData() const {
67    return &InstrItins;
68  }
69  virtual const ScalarTargetTransformInfo *getScalarTargetTransformInfo()const {
70    return &STTI;
71  }
72  virtual const VectorTargetTransformInfo *getVectorTargetTransformInfo()const {
73    return &VTTI;
74  }
75
76  // Pass Pipeline Configuration
77  virtual TargetPassConfig *createPassConfig(PassManagerBase &PM);
78  virtual bool addCodeEmitter(PassManagerBase &PM,
79                              JITCodeEmitter &JCE);
80};
81
82/// PPC32TargetMachine - PowerPC 32-bit target machine.
83///
84class PPC32TargetMachine : public PPCTargetMachine {
85  virtual void anchor();
86public:
87  PPC32TargetMachine(const Target &T, StringRef TT,
88                     StringRef CPU, StringRef FS, const TargetOptions &Options,
89                     Reloc::Model RM, CodeModel::Model CM,
90                     CodeGenOpt::Level OL);
91};
92
93/// PPC64TargetMachine - PowerPC 64-bit target machine.
94///
95class PPC64TargetMachine : public PPCTargetMachine {
96  virtual void anchor();
97public:
98  PPC64TargetMachine(const Target &T, StringRef TT,
99                     StringRef CPU, StringRef FS, const TargetOptions &Options,
100                     Reloc::Model RM, CodeModel::Model CM,
101                     CodeGenOpt::Level OL);
102};
103
104} // end namespace llvm
105
106#endif
107