blob: 66b30700d883a11a6ede3aea5ca6b4ed53dbf05f [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 Stellard49f8bfd2015-01-06 18:00:21 +000032protected:
Aditya Nandakumara2719322014-11-13 09:26:31 +000033 TargetLoweringObjectFile *TLOF;
Tom Stellard75aadc22012-12-11 21:25:42 +000034 AMDGPUSubtarget Subtarget;
Eric Christopher34aaf972014-08-04 17:37:43 +000035 AMDGPUIntrinsicInfo IntrinsicInfo;
Tom Stellard75aadc22012-12-11 21:25:42 +000036
37public:
Rafael Espindolabd6847f2013-05-23 03:28:39 +000038 AMDGPUTargetMachine(const Target &T, StringRef TT, StringRef FS,
39 StringRef CPU, TargetOptions Options, Reloc::Model RM,
40 CodeModel::Model CM, CodeGenOpt::Level OL);
41 ~AMDGPUTargetMachine();
Craig Topper5656db42014-04-29 07:57:24 +000042 const AMDGPUSubtarget *getSubtargetImpl() const override {
43 return &Subtarget;
44 }
Benjamin Kramer8c90fd72014-09-03 11:41:21 +000045 const AMDGPUIntrinsicInfo *getIntrinsicInfo() const override {
46 return &IntrinsicInfo;
47 }
Craig Topper5656db42014-04-29 07:57:24 +000048 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
Tom Stellard8b1e0212013-07-27 00:01:07 +000049
50 /// \brief Register R600 analysis passes with a pass manager.
Craig Topper5656db42014-04-29 07:57:24 +000051 void addAnalysisPasses(PassManagerBase &PM) override;
Aditya Nandakumara2719322014-11-13 09:26:31 +000052 TargetLoweringObjectFile *getObjFileLowering() const override {
53 return TLOF;
54 }
Tom Stellard75aadc22012-12-11 21:25:42 +000055};
56
Tom Stellard49f8bfd2015-01-06 18:00:21 +000057//===----------------------------------------------------------------------===//
58// GCN Target Machine (SI+)
59//===----------------------------------------------------------------------===//
60
61class GCNTargetMachine : public AMDGPUTargetMachine {
62
63public:
64 GCNTargetMachine(const Target &T, StringRef TT, StringRef FS,
65 StringRef CPU, TargetOptions Options, Reloc::Model RM,
66 CodeModel::Model CM, CodeGenOpt::Level OL);
67};
68
Tom Stellard75aadc22012-12-11 21:25:42 +000069} // End namespace llvm
70
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000071#endif