blob: 71adc9a4d1f63c018a8dfcc6d45902993105191a [file] [log] [blame]
Matt Arsenaultd82c1832013-11-10 01:03:59 +00001//===-- AMDGPUAsmPrinter.h - Print AMDGPU assembly code ---------*- C++ -*-===//
Tom Stellard75aadc22012-12-11 21:25:42 +00002//
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 AMDGPU Assembly printer class.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef AMDGPU_ASMPRINTER_H
16#define AMDGPU_ASMPRINTER_H
17
18#include "llvm/CodeGen/AsmPrinter.h"
Tom Stellarded699252013-10-12 05:02:51 +000019#include <string>
20#include <vector>
Tom Stellard75aadc22012-12-11 21:25:42 +000021
22namespace llvm {
23
24class AMDGPUAsmPrinter : public AsmPrinter {
Matt Arsenault89cc49f2013-12-05 05:15:35 +000025private:
26 struct SIProgramInfo {
Matt Arsenaulte500e322014-04-15 22:40:47 +000027 SIProgramInfo() :
28 CodeLen(0),
29 NumSGPR(0),
30 NumVGPR(0) {}
31
32 uint64_t CodeLen;
Matt Arsenault89cc49f2013-12-05 05:15:35 +000033 unsigned NumSGPR;
34 unsigned NumVGPR;
35 };
36
37 void getSIProgramInfo(SIProgramInfo &Out, MachineFunction &MF) const;
38 void findNumUsedRegistersSI(MachineFunction &MF,
39 unsigned &NumSGPR,
40 unsigned &NumVGPR) const;
41
42 /// \brief Emit register usage information so that the GPU driver
43 /// can correctly setup the GPU state.
44 void EmitProgramInfoR600(MachineFunction &MF);
45 void EmitProgramInfoSI(MachineFunction &MF, const SIProgramInfo &KernelInfo);
Tom Stellard75aadc22012-12-11 21:25:42 +000046
47public:
Tom Stellarded699252013-10-12 05:02:51 +000048 explicit AMDGPUAsmPrinter(TargetMachine &TM, MCStreamer &Streamer);
Tom Stellard75aadc22012-12-11 21:25:42 +000049
Craig Topper5656db42014-04-29 07:57:24 +000050 bool runOnMachineFunction(MachineFunction &MF) override;
Tom Stellard75aadc22012-12-11 21:25:42 +000051
Craig Topper5656db42014-04-29 07:57:24 +000052 const char *getPassName() const override {
Tom Stellard75aadc22012-12-11 21:25:42 +000053 return "AMDGPU Assembly Printer";
54 }
55
Tom Stellard75aadc22012-12-11 21:25:42 +000056 /// Implemented in AMDGPUMCInstLower.cpp
Craig Topper5656db42014-04-29 07:57:24 +000057 void EmitInstruction(const MachineInstr *MI) override;
Tom Stellarded699252013-10-12 05:02:51 +000058
59protected:
60 bool DisasmEnabled;
61 std::vector<std::string> DisasmLines, HexLines;
62 size_t DisasmLineMaxLen;
Tom Stellard75aadc22012-12-11 21:25:42 +000063};
64
65} // End anonymous llvm
66
67#endif //AMDGPU_ASMPRINTER_H