1251607Sdim//==- SystemZTargetMachine.h - Define TargetMachine for SystemZ ---*- C++ -*-=//
2251607Sdim//
3251607Sdim//                     The LLVM Compiler Infrastructure
4251607Sdim//
5251607Sdim// This file is distributed under the University of Illinois Open Source
6251607Sdim// License. See LICENSE.TXT for details.
7251607Sdim//
8251607Sdim//===----------------------------------------------------------------------===//
9251607Sdim//
10251607Sdim// This file declares the SystemZ specific subclass of TargetMachine.
11251607Sdim//
12251607Sdim//===----------------------------------------------------------------------===//
13251607Sdim
14251607Sdim
15251607Sdim#ifndef SYSTEMZTARGETMACHINE_H
16251607Sdim#define SYSTEMZTARGETMACHINE_H
17251607Sdim
18251607Sdim#include "SystemZFrameLowering.h"
19251607Sdim#include "SystemZISelLowering.h"
20251607Sdim#include "SystemZInstrInfo.h"
21251607Sdim#include "SystemZRegisterInfo.h"
22251607Sdim#include "SystemZSubtarget.h"
23263509Sdim#include "SystemZSelectionDAGInfo.h"
24251607Sdim#include "llvm/IR/DataLayout.h"
25251607Sdim#include "llvm/Target/TargetFrameLowering.h"
26251607Sdim#include "llvm/Target/TargetMachine.h"
27251607Sdim
28251607Sdimnamespace llvm {
29251607Sdim
30251607Sdimclass SystemZTargetMachine : public LLVMTargetMachine {
31251607Sdim  SystemZSubtarget        Subtarget;
32251607Sdim  const DataLayout        DL;
33251607Sdim  SystemZInstrInfo        InstrInfo;
34251607Sdim  SystemZTargetLowering   TLInfo;
35263509Sdim  SystemZSelectionDAGInfo TSInfo;
36251607Sdim  SystemZFrameLowering    FrameLowering;
37251607Sdim
38251607Sdimpublic:
39251607Sdim  SystemZTargetMachine(const Target &T, StringRef TT, StringRef CPU,
40251607Sdim                       StringRef FS, const TargetOptions &Options,
41251607Sdim                       Reloc::Model RM, CodeModel::Model CM,
42251607Sdim                       CodeGenOpt::Level OL);
43251607Sdim
44251607Sdim  // Override TargetMachine.
45251607Sdim  virtual const TargetFrameLowering *getFrameLowering() const LLVM_OVERRIDE {
46251607Sdim    return &FrameLowering;
47251607Sdim  }
48251607Sdim  virtual const SystemZInstrInfo *getInstrInfo() const LLVM_OVERRIDE {
49251607Sdim    return &InstrInfo;
50251607Sdim  }
51251607Sdim  virtual const SystemZSubtarget *getSubtargetImpl() const LLVM_OVERRIDE {
52251607Sdim    return &Subtarget;
53251607Sdim  }
54251607Sdim  virtual const DataLayout *getDataLayout() const LLVM_OVERRIDE {
55251607Sdim    return &DL;
56251607Sdim  }
57251607Sdim  virtual const SystemZRegisterInfo *getRegisterInfo() const LLVM_OVERRIDE {
58251607Sdim    return &InstrInfo.getRegisterInfo();
59251607Sdim  }
60251607Sdim  virtual const SystemZTargetLowering *getTargetLowering() const LLVM_OVERRIDE {
61251607Sdim    return &TLInfo;
62251607Sdim  }
63251607Sdim  virtual const TargetSelectionDAGInfo *getSelectionDAGInfo() const
64251607Sdim    LLVM_OVERRIDE {
65251607Sdim    return &TSInfo;
66251607Sdim  }
67251607Sdim
68251607Sdim  // Override LLVMTargetMachine
69251607Sdim  virtual TargetPassConfig *createPassConfig(PassManagerBase &PM) LLVM_OVERRIDE;
70251607Sdim};
71251607Sdim
72251607Sdim} // end namespace llvm
73251607Sdim
74251607Sdim#endif
75