PPCTargetMachine.h revision 203954
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 "PPCFrameInfo.h"
18#include "PPCSubtarget.h"
19#include "PPCJITInfo.h"
20#include "PPCInstrInfo.h"
21#include "PPCISelLowering.h"
22#include "llvm/Target/TargetMachine.h"
23#include "llvm/Target/TargetData.h"
24
25namespace llvm {
26class PassManager;
27class GlobalValue;
28
29/// PPCTargetMachine - Common code between 32-bit and 64-bit PowerPC targets.
30///
31class PPCTargetMachine : public LLVMTargetMachine {
32  PPCSubtarget        Subtarget;
33  const TargetData    DataLayout;       // Calculates type size & alignment
34  PPCInstrInfo        InstrInfo;
35  PPCFrameInfo        FrameInfo;
36  PPCJITInfo          JITInfo;
37  PPCTargetLowering   TLInfo;
38  InstrItineraryData  InstrItins;
39
40public:
41  PPCTargetMachine(const Target &T, const std::string &TT,
42                   const std::string &FS, bool is64Bit);
43
44  virtual const PPCInstrInfo     *getInstrInfo() const { return &InstrInfo; }
45  virtual const PPCFrameInfo     *getFrameInfo() const { return &FrameInfo; }
46  virtual       PPCJITInfo       *getJITInfo()         { return &JITInfo; }
47  virtual       PPCTargetLowering *getTargetLowering() const {
48   return const_cast<PPCTargetLowering*>(&TLInfo);
49  }
50  virtual const PPCRegisterInfo  *getRegisterInfo() const {
51    return &InstrInfo.getRegisterInfo();
52  }
53
54  virtual const TargetData    *getTargetData() const    { return &DataLayout; }
55  virtual const PPCSubtarget  *getSubtargetImpl() const { return &Subtarget; }
56  virtual const InstrItineraryData getInstrItineraryData() const {
57    return InstrItins;
58  }
59
60  // Pass Pipeline Configuration
61  virtual bool addInstSelector(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
62  virtual bool addPreEmitPass(PassManagerBase &PM, CodeGenOpt::Level OptLevel);
63  virtual bool addCodeEmitter(PassManagerBase &PM, CodeGenOpt::Level OptLevel,
64                              JITCodeEmitter &JCE);
65  virtual bool getEnableTailMergeDefault() const;
66};
67
68/// PPC32TargetMachine - PowerPC 32-bit target machine.
69///
70class PPC32TargetMachine : public PPCTargetMachine {
71public:
72  PPC32TargetMachine(const Target &T, const std::string &TT,
73                     const std::string &FS);
74};
75
76/// PPC64TargetMachine - PowerPC 64-bit target machine.
77///
78class PPC64TargetMachine : public PPCTargetMachine {
79public:
80  PPC64TargetMachine(const Target &T, const std::string &TT,
81                     const std::string &FS);
82};
83
84} // end namespace llvm
85
86#endif
87