blob: 1db717b7126dbbfc494576dfabae4f3195619117 [file] [log] [blame]
Ulrich Weigand5f613df2013-05-06 16:15:19 +00001//==- 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"
Richard Sandifordd131ff82013-07-08 09:35:23 +000022#include "SystemZSelectionDAGInfo.h"
Chandler Carruth8a8cd2b2014-01-07 11:48:04 +000023#include "SystemZSubtarget.h"
Ulrich Weigand5f613df2013-05-06 16:15:19 +000024#include "llvm/IR/DataLayout.h"
25#include "llvm/Target/TargetFrameLowering.h"
26#include "llvm/Target/TargetMachine.h"
Ulrich Weigand5f613df2013-05-06 16:15:19 +000027
28namespace llvm {
29
30class SystemZTargetMachine : public LLVMTargetMachine {
31 SystemZSubtarget Subtarget;
32 const DataLayout DL;
33 SystemZInstrInfo InstrInfo;
34 SystemZTargetLowering TLInfo;
Richard Sandifordd131ff82013-07-08 09:35:23 +000035 SystemZSelectionDAGInfo TSInfo;
Ulrich Weigand5f613df2013-05-06 16:15:19 +000036 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.
Richard Sandifordb4d67b52014-03-06 12:03:36 +000045 const TargetFrameLowering *getFrameLowering() const override {
Ulrich Weigand5f613df2013-05-06 16:15:19 +000046 return &FrameLowering;
47 }
Richard Sandifordb4d67b52014-03-06 12:03:36 +000048 const SystemZInstrInfo *getInstrInfo() const override {
Ulrich Weigand5f613df2013-05-06 16:15:19 +000049 return &InstrInfo;
50 }
Richard Sandifordb4d67b52014-03-06 12:03:36 +000051 const SystemZSubtarget *getSubtargetImpl() const override {
Ulrich Weigand5f613df2013-05-06 16:15:19 +000052 return &Subtarget;
53 }
Richard Sandifordb4d67b52014-03-06 12:03:36 +000054 const DataLayout *getDataLayout() const override {
Ulrich Weigand5f613df2013-05-06 16:15:19 +000055 return &DL;
56 }
Richard Sandifordb4d67b52014-03-06 12:03:36 +000057 const SystemZRegisterInfo *getRegisterInfo() const override {
Ulrich Weigand5f613df2013-05-06 16:15:19 +000058 return &InstrInfo.getRegisterInfo();
59 }
Richard Sandifordb4d67b52014-03-06 12:03:36 +000060 const SystemZTargetLowering *getTargetLowering() const override {
Ulrich Weigand5f613df2013-05-06 16:15:19 +000061 return &TLInfo;
62 }
Richard Sandifordb4d67b52014-03-06 12:03:36 +000063 const TargetSelectionDAGInfo *getSelectionDAGInfo() const override {
Ulrich Weigand5f613df2013-05-06 16:15:19 +000064 return &TSInfo;
65 }
66
67 // Override LLVMTargetMachine
Richard Sandifordb4d67b52014-03-06 12:03:36 +000068 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
Ulrich Weigand5f613df2013-05-06 16:15:19 +000069};
70
71} // end namespace llvm
72
73#endif