1//==- SystemZTargetMachine.h - Define TargetMachine for SystemZ ---*- 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 SystemZ specific subclass of TargetMachine.
11//
12//===----------------------------------------------------------------------===//
13
14
15#ifndef SYSTEMZTARGETMACHINE_H
16#define SYSTEMZTARGETMACHINE_H
17
18#include "SystemZFrameLowering.h"
19#include "SystemZISelLowering.h"
20#include "SystemZInstrInfo.h"
21#include "SystemZRegisterInfo.h"
22#include "SystemZSubtarget.h"
23#include "SystemZSelectionDAGInfo.h"
24#include "llvm/IR/DataLayout.h"
25#include "llvm/Target/TargetFrameLowering.h"
26#include "llvm/Target/TargetMachine.h"
27
28namespace llvm {
29
30class SystemZTargetMachine : public LLVMTargetMachine {
31  SystemZSubtarget        Subtarget;
32  const DataLayout        DL;
33  SystemZInstrInfo        InstrInfo;
34  SystemZTargetLowering   TLInfo;
35  SystemZSelectionDAGInfo TSInfo;
36  SystemZFrameLowering    FrameLowering;
37
38public:
39  SystemZTargetMachine(const Target &T, StringRef TT, StringRef CPU,
40                       StringRef FS, const TargetOptions &Options,
41                       Reloc::Model RM, CodeModel::Model CM,
42                       CodeGenOpt::Level OL);
43
44  // Override TargetMachine.
45  virtual const TargetFrameLowering *getFrameLowering() const LLVM_OVERRIDE {
46    return &FrameLowering;
47  }
48  virtual const SystemZInstrInfo *getInstrInfo() const LLVM_OVERRIDE {
49    return &InstrInfo;
50  }
51  virtual const SystemZSubtarget *getSubtargetImpl() const LLVM_OVERRIDE {
52    return &Subtarget;
53  }
54  virtual const DataLayout *getDataLayout() const LLVM_OVERRIDE {
55    return &DL;
56  }
57  virtual const SystemZRegisterInfo *getRegisterInfo() const LLVM_OVERRIDE {
58    return &InstrInfo.getRegisterInfo();
59  }
60  virtual const SystemZTargetLowering *getTargetLowering() const LLVM_OVERRIDE {
61    return &TLInfo;
62  }
63  virtual const TargetSelectionDAGInfo *getSelectionDAGInfo() const
64    LLVM_OVERRIDE {
65    return &TSInfo;
66  }
67
68  // Override LLVMTargetMachine
69  virtual TargetPassConfig *createPassConfig(PassManagerBase &PM) LLVM_OVERRIDE;
70};
71
72} // end namespace llvm
73
74#endif
75