LLVM  8.0.1
AMDGPUInstPrinter.h
Go to the documentation of this file.
1 //===-- AMDGPUInstPrinter.h - AMDGPU MC Inst -> ASM 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 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_LIB_TARGET_AMDGPU_INSTPRINTER_AMDGPUINSTPRINTER_H
14 #define LLVM_LIB_TARGET_AMDGPU_INSTPRINTER_AMDGPUINSTPRINTER_H
15 
16 #include "llvm/MC/MCInstPrinter.h"
17 
18 namespace llvm {
19 
21 public:
23  const MCInstrInfo &MII, const MCRegisterInfo &MRI)
24  : MCInstPrinter(MAI, MII, MRI) {}
25 
26  //Autogenerated by tblgen
27  void printInstruction(const MCInst *MI, const MCSubtargetInfo &STI,
28  raw_ostream &O);
29  static const char *getRegisterName(unsigned RegNo);
30 
31  void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
32  const MCSubtargetInfo &STI) override;
33  static void printRegOperand(unsigned RegNo, raw_ostream &O,
34  const MCRegisterInfo &MRI);
35 
36 private:
37  void printU4ImmOperand(const MCInst *MI, unsigned OpNo,
38  const MCSubtargetInfo &STI, raw_ostream &O);
39  void printU8ImmOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
40  void printU16ImmOperand(const MCInst *MI, unsigned OpNo,
41  const MCSubtargetInfo &STI, raw_ostream &O);
42  void printU4ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
43  void printU8ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
44  void printU16ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
45  void printS13ImmDecOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
46  void printU32ImmOperand(const MCInst *MI, unsigned OpNo,
47  const MCSubtargetInfo &STI, raw_ostream &O);
48  void printNamedBit(const MCInst *MI, unsigned OpNo, raw_ostream &O,
49  StringRef BitName);
50  void printOffen(const MCInst *MI, unsigned OpNo, raw_ostream &O);
51  void printIdxen(const MCInst *MI, unsigned OpNo, raw_ostream &O);
52  void printAddr64(const MCInst *MI, unsigned OpNo, raw_ostream &O);
53  void printMBUFOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O);
54  void printOffset(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
55  raw_ostream &O);
56  void printOffsetS13(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
57  raw_ostream &O);
58 
59  void printOffset0(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
60  raw_ostream &O);
61  void printOffset1(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
62  raw_ostream &O);
63  void printSMRDOffset8(const MCInst *MI, unsigned OpNo,
64  const MCSubtargetInfo &STI, raw_ostream &O);
65  void printSMRDOffset20(const MCInst *MI, unsigned OpNo,
66  const MCSubtargetInfo &STI, raw_ostream &O);
67  void printSMRDLiteralOffset(const MCInst *MI, unsigned OpNo,
68  const MCSubtargetInfo &STI, raw_ostream &O);
69  void printGDS(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
70  raw_ostream &O);
71  void printGLC(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
72  raw_ostream &O);
73  void printSLC(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
74  raw_ostream &O);
75  void printTFE(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
76  raw_ostream &O);
77  void printDMask(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
78  raw_ostream &O);
79  void printUNorm(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
80  raw_ostream &O);
81  void printDA(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
82  raw_ostream &O);
83  void printR128A16(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
84  raw_ostream &O);
85  void printLWE(const MCInst *MI, unsigned OpNo,
86  const MCSubtargetInfo &STI, raw_ostream &O);
87  void printD16(const MCInst *MI, unsigned OpNo,
88  const MCSubtargetInfo &STI, raw_ostream &O);
89  void printExpCompr(const MCInst *MI, unsigned OpNo,
90  const MCSubtargetInfo &STI, raw_ostream &O);
91  void printExpVM(const MCInst *MI, unsigned OpNo,
92  const MCSubtargetInfo &STI, raw_ostream &O);
93  void printFORMAT(const MCInst *MI, unsigned OpNo,
94  const MCSubtargetInfo &STI, raw_ostream &O);
95 
96  void printRegOperand(unsigned RegNo, raw_ostream &O);
97  void printVOPDst(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
98  raw_ostream &O);
99  void printVINTRPDst(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
100  raw_ostream &O);
101  void printImmediate16(uint32_t Imm, const MCSubtargetInfo &STI,
102  raw_ostream &O);
103  void printImmediateV216(uint32_t Imm, const MCSubtargetInfo &STI,
104  raw_ostream &O);
105  void printImmediate32(uint32_t Imm, const MCSubtargetInfo &STI,
106  raw_ostream &O);
107  void printImmediate64(uint64_t Imm, const MCSubtargetInfo &STI,
108  raw_ostream &O);
109  void printOperand(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
110  raw_ostream &O);
111  void printOperandAndFPInputMods(const MCInst *MI, unsigned OpNo,
112  const MCSubtargetInfo &STI, raw_ostream &O);
113  void printOperandAndIntInputMods(const MCInst *MI, unsigned OpNo,
114  const MCSubtargetInfo &STI, raw_ostream &O);
115  void printDPPCtrl(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
116  raw_ostream &O);
117  void printRowMask(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
118  raw_ostream &O);
119  void printBankMask(const MCInst *MI, unsigned OpNo,
120  const MCSubtargetInfo &STI, raw_ostream &O);
121  void printBoundCtrl(const MCInst *MI, unsigned OpNo,
122  const MCSubtargetInfo &STI, raw_ostream &O);
123  void printSDWASel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
124  void printSDWADstSel(const MCInst *MI, unsigned OpNo,
125  const MCSubtargetInfo &STI, raw_ostream &O);
126  void printSDWASrc0Sel(const MCInst *MI, unsigned OpNo,
127  const MCSubtargetInfo &STI, raw_ostream &O);
128  void printSDWASrc1Sel(const MCInst *MI, unsigned OpNo,
129  const MCSubtargetInfo &STI, raw_ostream &O);
130  void printSDWADstUnused(const MCInst *MI, unsigned OpNo,
131  const MCSubtargetInfo &STI, raw_ostream &O);
132  void printPackedModifier(const MCInst *MI, StringRef Name, unsigned Mod,
133  raw_ostream &O);
134  void printOpSel(const MCInst *MI, unsigned OpNo,
135  const MCSubtargetInfo &STI, raw_ostream &O);
136  void printOpSelHi(const MCInst *MI, unsigned OpNo,
137  const MCSubtargetInfo &STI, raw_ostream &O);
138  void printNegLo(const MCInst *MI, unsigned OpNo,
139  const MCSubtargetInfo &STI, raw_ostream &O);
140  void printNegHi(const MCInst *MI, unsigned OpNo,
141  const MCSubtargetInfo &STI, raw_ostream &O);
142  void printInterpSlot(const MCInst *MI, unsigned OpNo,
143  const MCSubtargetInfo &STI, raw_ostream &O);
144  void printInterpAttr(const MCInst *MI, unsigned OpNo,
145  const MCSubtargetInfo &STI, raw_ostream &O);
146  void printInterpAttrChan(const MCInst *MI, unsigned OpNo,
147  const MCSubtargetInfo &STI, raw_ostream &O);
148 
149  void printVGPRIndexMode(const MCInst *MI, unsigned OpNo,
150  const MCSubtargetInfo &STI, raw_ostream &O);
151  void printMemOperand(const MCInst *MI, unsigned OpNo,
152  const MCSubtargetInfo &STI, raw_ostream &O);
153 
154 
155  template <unsigned N>
156  void printExpSrcN(const MCInst *MI, unsigned OpNo,
157  const MCSubtargetInfo &STI, raw_ostream &O);
158  void printExpSrc0(const MCInst *MI, unsigned OpNo,
159  const MCSubtargetInfo &STI, raw_ostream &O);
160  void printExpSrc1(const MCInst *MI, unsigned OpNo,
161  const MCSubtargetInfo &STI, raw_ostream &O);
162  void printExpSrc2(const MCInst *MI, unsigned OpNo,
163  const MCSubtargetInfo &STI, raw_ostream &O);
164  void printExpSrc3(const MCInst *MI, unsigned OpNo,
165  const MCSubtargetInfo &STI, raw_ostream &O);
166  void printExpTgt(const MCInst *MI, unsigned OpNo,
167  const MCSubtargetInfo &STI, raw_ostream &O);
168 
169 public:
170  static void printIfSet(const MCInst *MI, unsigned OpNo, raw_ostream &O,
172  static void printIfSet(const MCInst *MI, unsigned OpNo, raw_ostream &O,
173  char Asm);
174 protected:
175  void printAbs(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
176  raw_ostream &O);
177  void printHigh(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
178  raw_ostream &O);
179  void printClamp(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
180  raw_ostream &O);
181  void printClampSI(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
182  raw_ostream &O);
183  void printOModSI(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
184  raw_ostream &O);
185  void printLiteral(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
186  raw_ostream &O);
187  void printLast(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
188  raw_ostream &O);
189  void printNeg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
190  raw_ostream &O);
191  void printOMOD(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
192  raw_ostream &O);
193  void printRel(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
194  raw_ostream &O);
195  void printUpdateExecMask(const MCInst *MI, unsigned OpNo,
196  const MCSubtargetInfo &STI, raw_ostream &O);
197  void printUpdatePred(const MCInst *MI, unsigned OpNo,
198  const MCSubtargetInfo &STI, raw_ostream &O);
199  void printWrite(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
200  raw_ostream &O);
201  void printBankSwizzle(const MCInst *MI, unsigned OpNo,
202  const MCSubtargetInfo &STI, raw_ostream &O);
203  void printRSel(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
204  raw_ostream &O);
205  void printCT(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
206  raw_ostream &O);
207  void printKCache(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
208  raw_ostream &O);
209  void printSendMsg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
210  raw_ostream &O);
211  void printSwizzle(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
212  raw_ostream &O);
213  void printWaitFlag(const MCInst *MI, unsigned OpNo,
214  const MCSubtargetInfo &STI, raw_ostream &O);
215  void printHwreg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI,
216  raw_ostream &O);
217 };
218 
220 public:
222  const MCRegisterInfo &MRI)
223  : MCInstPrinter(MAI, MII, MRI) {}
224 
225  void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot,
226  const MCSubtargetInfo &STI) override;
227  void printInstruction(const MCInst *MI, raw_ostream &O);
228  static const char *getRegisterName(unsigned RegNo);
229 
230  void printAbs(const MCInst *MI, unsigned OpNo, raw_ostream &O);
231  void printBankSwizzle(const MCInst *MI, unsigned OpNo, raw_ostream &O);
232  void printClamp(const MCInst *MI, unsigned OpNo, raw_ostream &O);
233  void printCT(const MCInst *MI, unsigned OpNo, raw_ostream &O);
234  void printKCache(const MCInst *MI, unsigned OpNo, raw_ostream &O);
235  void printLast(const MCInst *MI, unsigned OpNo, raw_ostream &O);
236  void printLiteral(const MCInst *MI, unsigned OpNo, raw_ostream &O);
237  void printMemOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
238  void printNeg(const MCInst *MI, unsigned OpNo, raw_ostream &O);
239  void printOMOD(const MCInst *MI, unsigned OpNo, raw_ostream &O);
240  void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O);
241  void printRel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
242  void printRSel(const MCInst *MI, unsigned OpNo, raw_ostream &O);
243  void printUpdateExecMask(const MCInst *MI, unsigned OpNo, raw_ostream &O);
244  void printUpdatePred(const MCInst *MI, unsigned OpNo, raw_ostream &O);
245  void printWrite(const MCInst *MI, unsigned OpNo, raw_ostream &O);
246 };
247 
248 } // End namespace llvm
249 
250 #endif
This class represents lattice values for constants.
Definition: AllocatorList.h:24
static void printIfSet(const MCInst *MI, unsigned OpNo, raw_ostream &O, StringRef Asm, StringRef Default="")
void printWaitFlag(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
amdgpu Simplify well known AMD library false Value Value const Twine & Name
void printAbs(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
static void printRegOperand(unsigned RegNo, raw_ostream &O, const MCRegisterInfo &MRI)
void printOModSI(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printClamp(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
AMDGPUInstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI)
static const char * getRegisterName(unsigned RegNo)
void printUpdateExecMask(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printCT(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
Instances of this class represent a single low-level machine instruction.
Definition: MCInst.h:161
void printBankSwizzle(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition: MCAsmInfo.h:56
void printWrite(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printHwreg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
Interface to description of machine instruction set.
Definition: MCInstrInfo.h:24
void printLiteral(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printClampSI(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
R600InstPrinter(const MCAsmInfo &MAI, const MCInstrInfo &MII, const MCRegisterInfo &MRI)
void printUpdatePred(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printNeg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printRSel(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
The access may modify the value stored in memory.
void printSwizzle(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printInstruction(const MCInst *MI, const MCSubtargetInfo &STI, raw_ostream &O)
const MCAsmInfo & MAI
Definition: MCInstPrinter.h:46
This is an instance of a target assembly language printer that converts an MCInst to valid target ass...
Definition: MCInstPrinter.h:40
void printOMOD(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printKCache(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printInst(const MCInst *MI, raw_ostream &O, StringRef Annot, const MCSubtargetInfo &STI) override
Print the specified MCInst to the specified raw_ostream.
Generic base class for all target subtargets.
const MCInstrInfo & MII
Definition: MCInstPrinter.h:47
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:46
void printHigh(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
IRTranslator LLVM IR MI
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
void printLast(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printRel(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
void printSendMsg(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O)
const MCRegisterInfo & MRI
Definition: MCInstPrinter.h:48