blob: 8aa97cfd987bbfebfb2adecc731f406ccf609517 [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:
33 const DataLayout DL;
34
Tom Stellard49f8bfd2015-01-06 18:00:21 +000035protected:
Aditya Nandakumara2719322014-11-13 09:26:31 +000036 TargetLoweringObjectFile *TLOF;
Tom Stellard75aadc22012-12-11 21:25:42 +000037 AMDGPUSubtarget Subtarget;
Eric Christopher34aaf972014-08-04 17:37:43 +000038 AMDGPUIntrinsicInfo IntrinsicInfo;
Tom Stellard75aadc22012-12-11 21:25:42 +000039
40public:
Rafael Espindolabd6847f2013-05-23 03:28:39 +000041 AMDGPUTargetMachine(const Target &T, StringRef TT, StringRef FS,
42 StringRef CPU, TargetOptions Options, Reloc::Model RM,
43 CodeModel::Model CM, CodeGenOpt::Level OL);
44 ~AMDGPUTargetMachine();
Eric Christopher8b770652015-01-26 19:03:15 +000045 // FIXME: This is currently broken, the DataLayout needs to move to
46 // the target machine.
47 const DataLayout *getDataLayout() const override {
Tom Stellard40ce8af2015-01-28 16:04:26 +000048 return &DL;
Eric Christopher8b770652015-01-26 19:03:15 +000049 }
Craig Topper5656db42014-04-29 07:57:24 +000050 const AMDGPUSubtarget *getSubtargetImpl() const override {
51 return &Subtarget;
52 }
Benjamin Kramer8c90fd72014-09-03 11:41:21 +000053 const AMDGPUIntrinsicInfo *getIntrinsicInfo() const override {
54 return &IntrinsicInfo;
55 }
Craig Topper5656db42014-04-29 07:57:24 +000056 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
Tom Stellard8b1e0212013-07-27 00:01:07 +000057
58 /// \brief Register R600 analysis passes with a pass manager.
Craig Topper5656db42014-04-29 07:57:24 +000059 void addAnalysisPasses(PassManagerBase &PM) override;
Aditya Nandakumara2719322014-11-13 09:26:31 +000060 TargetLoweringObjectFile *getObjFileLowering() const override {
61 return TLOF;
62 }
Tom Stellard75aadc22012-12-11 21:25:42 +000063};
64
Tom Stellard49f8bfd2015-01-06 18:00:21 +000065//===----------------------------------------------------------------------===//
66// GCN Target Machine (SI+)
67//===----------------------------------------------------------------------===//
68
69class GCNTargetMachine : public AMDGPUTargetMachine {
70
71public:
72 GCNTargetMachine(const Target &T, StringRef TT, StringRef FS,
73 StringRef CPU, TargetOptions Options, Reloc::Model RM,
74 CodeModel::Model CM, CodeGenOpt::Level OL);
75};
76
Tom Stellard75aadc22012-12-11 21:25:42 +000077} // End namespace llvm
78
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000079#endif