blob: c3c67f0aee4fd53dbc79488e1891ee4f6d2a850d [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();
Eric Christopher8b770652015-01-26 19:03:15 +000042 // FIXME: This is currently broken, the DataLayout needs to move to
43 // the target machine.
44 const DataLayout *getDataLayout() const override {
45 return getSubtargetImpl()->getDataLayout();
46 }
Craig Topper5656db42014-04-29 07:57:24 +000047 const AMDGPUSubtarget *getSubtargetImpl() const override {
48 return &Subtarget;
49 }
Benjamin Kramer8c90fd72014-09-03 11:41:21 +000050 const AMDGPUIntrinsicInfo *getIntrinsicInfo() const override {
51 return &IntrinsicInfo;
52 }
Craig Topper5656db42014-04-29 07:57:24 +000053 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
Tom Stellard8b1e0212013-07-27 00:01:07 +000054
55 /// \brief Register R600 analysis passes with a pass manager.
Craig Topper5656db42014-04-29 07:57:24 +000056 void addAnalysisPasses(PassManagerBase &PM) override;
Aditya Nandakumara2719322014-11-13 09:26:31 +000057 TargetLoweringObjectFile *getObjFileLowering() const override {
58 return TLOF;
59 }
Tom Stellard75aadc22012-12-11 21:25:42 +000060};
61
Tom Stellard49f8bfd2015-01-06 18:00:21 +000062//===----------------------------------------------------------------------===//
63// GCN Target Machine (SI+)
64//===----------------------------------------------------------------------===//
65
66class GCNTargetMachine : public AMDGPUTargetMachine {
67
68public:
69 GCNTargetMachine(const Target &T, StringRef TT, StringRef FS,
70 StringRef CPU, TargetOptions Options, Reloc::Model RM,
71 CodeModel::Model CM, CodeGenOpt::Level OL);
72};
73
Tom Stellard75aadc22012-12-11 21:25:42 +000074} // End namespace llvm
75
Benjamin Kramera7c40ef2014-08-13 16:26:38 +000076#endif