blob: 1a8f1f7f3aaa083b4593e3f7f5bf5dbf68983e3c [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
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000015#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZTARGETMACHINE_H
16#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZTARGETMACHINE_H
Ulrich Weigand5f613df2013-05-06 16:15:19 +000017
Chandler Carruth8a8cd2b2014-01-07 11:48:04 +000018#include "SystemZSubtarget.h"
Ulrich Weigand5f613df2013-05-06 16:15:19 +000019#include "llvm/Target/TargetMachine.h"
Ulrich Weigand5f613df2013-05-06 16:15:19 +000020
21namespace llvm {
22
Eric Christopher52349952014-07-01 20:19:02 +000023class TargetFrameLowering;
24
Ulrich Weigand5f613df2013-05-06 16:15:19 +000025class SystemZTargetMachine : public LLVMTargetMachine {
Aditya Nandakumara2719322014-11-13 09:26:31 +000026 std::unique_ptr<TargetLoweringObjectFile> TLOF;
Ulrich Weigand5f613df2013-05-06 16:15:19 +000027 SystemZSubtarget Subtarget;
Ulrich Weigand5f613df2013-05-06 16:15:19 +000028
29public:
Daniel Sanders3e5de882015-06-11 19:41:26 +000030 SystemZTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
Ulrich Weigand5f613df2013-05-06 16:15:19 +000031 StringRef FS, const TargetOptions &Options,
32 Reloc::Model RM, CodeModel::Model CM,
33 CodeGenOpt::Level OL);
Reid Kleckner357600e2014-11-20 23:37:18 +000034 ~SystemZTargetMachine() override;
Ulrich Weigand5f613df2013-05-06 16:15:19 +000035
Eric Christopher4d0f35a2015-03-21 04:22:23 +000036 const SystemZSubtarget *getSubtargetImpl() const { return &Subtarget; }
37 const SystemZSubtarget *getSubtargetImpl(const Function &) const override {
Ulrich Weigand5f613df2013-05-06 16:15:19 +000038 return &Subtarget;
39 }
Ulrich Weigand5f613df2013-05-06 16:15:19 +000040 // Override LLVMTargetMachine
Richard Sandifordb4d67b52014-03-06 12:03:36 +000041 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
Ulrich Weigand1f6666a2015-03-31 12:52:27 +000042 TargetIRAnalysis getTargetIRAnalysis() override;
Aditya Nandakumara2719322014-11-13 09:26:31 +000043 TargetLoweringObjectFile *getObjFileLowering() const override {
44 return TLOF.get();
45 }
Jonas Paulssone451eef2015-12-10 09:10:07 +000046
47 bool targetSchedulesPostRAScheduling() const override { return true; };
48
Ulrich Weigand5f613df2013-05-06 16:15:19 +000049};
50
51} // end namespace llvm
52
53#endif