blob: 14792e347a7a075357aff7e39b7d7ddcd42ea896 [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:
Aditya Nandakumara2719322014-11-13 09:26:31 +000035 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:
Daniel Sanders3e5de882015-06-11 19:41:26 +000040 AMDGPUTargetMachine(const Target &T, const Triple &TT, StringRef FS,
Rafael Espindolabd6847f2013-05-23 03:28:39 +000041 StringRef CPU, TargetOptions Options, Reloc::Model RM,
42 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 {
55 return TLOF;
56 }
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:
Daniel Sanders3e5de882015-06-11 19:41:26 +000066 R600TargetMachine(const Target &T, const Triple &TT, StringRef FS,
Tom Stellardc65b3602015-02-11 17:11:50 +000067 StringRef CPU, TargetOptions Options, Reloc::Model RM,
68 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:
Daniel Sanders3e5de882015-06-11 19:41:26 +000080 GCNTargetMachine(const Target &T, const Triple &TT, StringRef FS,
81 StringRef CPU, TargetOptions Options, Reloc::Model RM,
82 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