blob: 58fb9ffb5faf044f628c51ca01f51be19b4f36c3 [file] [log] [blame]
Tom Stellard75aadc22012-12-11 21:25:42 +00001//===-- AMDGPUTargetMachine.h - AMDGPU TargetMachine Interface --*- 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/// \file
11/// \brief The AMDGPU TargetMachine interface definition for hw codgen targets.
12//
13//===----------------------------------------------------------------------===//
14
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000015#ifndef LLVM_LIB_TARGET_R600_AMDGPUTARGETMACHINE_H
16#define LLVM_LIB_TARGET_R600_AMDGPUTARGETMACHINE_H
Tom Stellard75aadc22012-12-11 21:25:42 +000017
Tom Stellardf3b2a1e2013-02-06 17:32:29 +000018#include "AMDGPUFrameLowering.h"
Tom Stellard75aadc22012-12-11 21:25:42 +000019#include "AMDGPUInstrInfo.h"
Matt Arsenaultc791f392014-06-23 18:00:31 +000020#include "AMDGPUIntrinsicInfo.h"
Tom Stellard75aadc22012-12-11 21:25:42 +000021#include "AMDGPUSubtarget.h"
Tom Stellard75aadc22012-12-11 21:25:42 +000022#include "R600ISelLowering.h"
Chandler Carruth9fb823b2013-01-02 11:36:10 +000023#include "llvm/IR/DataLayout.h"
Tom Stellard75aadc22012-12-11 21:25:42 +000024
25namespace llvm {
26
Tom Stellard49f8bfd2015-01-06 18:00:21 +000027//===----------------------------------------------------------------------===//
28// AMDGPU Target Machine (R600+)
29//===----------------------------------------------------------------------===//
30
Tom Stellard75aadc22012-12-11 21:25:42 +000031class AMDGPUTargetMachine : public LLVMTargetMachine {
Tom Stellard40ce8af2015-01-28 16:04:26 +000032private:
Tom Stellard40ce8af2015-01-28 16:04:26 +000033
Tom Stellard49f8bfd2015-01-06 18:00:21 +000034protected:
Tom Stellarde135ffd2015-09-25 21:41:28 +000035 std::unique_ptr<TargetLoweringObjectFile> TLOF;
Tom Stellard75aadc22012-12-11 21:25:42 +000036 AMDGPUSubtarget Subtarget;
Eric Christopher34aaf972014-08-04 17:37:43 +000037 AMDGPUIntrinsicInfo IntrinsicInfo;
Tom Stellard75aadc22012-12-11 21:25:42 +000038
39public:
Tom Stellard5dde1d22016-02-05 18:29:17 +000040 AMDGPUTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
41 StringRef FS, TargetOptions Options, Reloc::Model RM,
Rafael Espindolabd6847f2013-05-23 03:28:39 +000042 CodeModel::Model CM, CodeGenOpt::Level OL);
43 ~AMDGPUTargetMachine();
Mehdi Amini93e1ea12015-03-12 00:07:24 +000044
Eric Christopher4d0f35a2015-03-21 04:22:23 +000045 const AMDGPUSubtarget *getSubtargetImpl() const { return &Subtarget; }
46 const AMDGPUSubtarget *getSubtargetImpl(const Function &) const override {
Craig Topper5656db42014-04-29 07:57:24 +000047 return &Subtarget;
48 }
Benjamin Kramer8c90fd72014-09-03 11:41:21 +000049 const AMDGPUIntrinsicInfo *getIntrinsicInfo() const override {
50 return &IntrinsicInfo;
51 }
Chandler Carruth8b04c0d2015-02-01 13:20:00 +000052 TargetIRAnalysis getTargetIRAnalysis() override;
Chandler Carruth93dcdc42015-01-31 11:17:59 +000053
Aditya Nandakumara2719322014-11-13 09:26:31 +000054 TargetLoweringObjectFile *getObjFileLowering() const override {
Tom Stellarde135ffd2015-09-25 21:41:28 +000055 return TLOF.get();
Aditya Nandakumara2719322014-11-13 09:26:31 +000056 }
Tom Stellard75aadc22012-12-11 21:25:42 +000057};
58
Tom Stellard49f8bfd2015-01-06 18:00:21 +000059//===----------------------------------------------------------------------===//
Tom Stellardc65b3602015-02-11 17:11:50 +000060// R600 Target Machine (R600 -> Cayman)
61//===----------------------------------------------------------------------===//
62
63class R600TargetMachine : public AMDGPUTargetMachine {
64
65public:
Tom Stellard5dde1d22016-02-05 18:29:17 +000066 R600TargetMachine(const Target &T, const Triple &TT, StringRef CPU,
67 StringRef FS, TargetOptions Options, Reloc::Model RM,
Tom Stellardc65b3602015-02-11 17:11:50 +000068 CodeModel::Model CM, CodeGenOpt::Level OL);
Tom Stellardde5b7b12015-02-11 17:11:51 +000069
70 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
Tom Stellardc65b3602015-02-11 17:11:50 +000071};
72
73//===----------------------------------------------------------------------===//
Tom Stellard49f8bfd2015-01-06 18:00:21 +000074// GCN Target Machine (SI+)
75//===----------------------------------------------------------------------===//
76
77class GCNTargetMachine : public AMDGPUTargetMachine {
78
79public:
Tom Stellard5dde1d22016-02-05 18:29:17 +000080 GCNTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
81 StringRef FS, TargetOptions Options, Reloc::Model RM,
Daniel Sanders3e5de882015-06-11 19:41:26 +000082 CodeModel::Model CM, CodeGenOpt::Level OL);
Tom Stellardde5b7b12015-02-11 17:11:51 +000083
84 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
Tom Stellard49f8bfd2015-01-06 18:00:21 +000085};
86
Tom Stellard75aadc22012-12-11 21:25:42 +000087} // End namespace llvm
88
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000089#endif