LLVM  15.0.0git
NVPTXReplaceImageHandles.cpp
Go to the documentation of this file.
1 //===-- NVPTXReplaceImageHandles.cpp - Replace image handles for Fermi ----===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // On Fermi, image handles are not supported. To work around this, we traverse
10 // the machine code and replace image handles with concrete symbols. For this
11 // to work reliably, inlining of all function call must be performed.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "NVPTX.h"
17 #include "NVPTXSubtarget.h"
18 #include "NVPTXTargetMachine.h"
20 #include "llvm/ADT/DenseSet.h"
25 
26 using namespace llvm;
27 
28 namespace {
29 class NVPTXReplaceImageHandles : public MachineFunctionPass {
30 private:
31  static char ID;
32  DenseSet<MachineInstr *> InstrsToRemove;
33 
34 public:
35  NVPTXReplaceImageHandles();
36 
37  bool runOnMachineFunction(MachineFunction &MF) override;
38 
39  StringRef getPassName() const override {
40  return "NVPTX Replace Image Handles";
41  }
42 private:
44  bool replaceImageHandle(MachineOperand &Op, MachineFunction &MF);
45  bool findIndexForHandle(MachineOperand &Op, MachineFunction &MF,
46  unsigned &Idx);
47 };
48 }
49 
51 
52 NVPTXReplaceImageHandles::NVPTXReplaceImageHandles()
54 
55 bool NVPTXReplaceImageHandles::runOnMachineFunction(MachineFunction &MF) {
56  bool Changed = false;
57  InstrsToRemove.clear();
58 
59  for (MachineBasicBlock &MBB : MF)
60  for (MachineInstr &MI : MBB)
61  Changed |= processInstr(MI);
62 
63  // Now clean up any handle-access instructions
64  // This is needed in debug mode when code cleanup passes are not executed,
65  // but we need the handle access to be eliminated because they are not
66  // valid instructions when image handles are disabled.
67  for (MachineInstr *MI : InstrsToRemove) {
68  unsigned DefReg = MI->getOperand(0).getReg();
69  // Only these that are not used can be removed.
70  if (MF.getRegInfo().use_nodbg_empty(DefReg))
71  MI->eraseFromParent();
72  }
73  return Changed;
74 }
75 
76 static unsigned suldRegisterToIndexOpcode(unsigned RegOC) {
77  switch (RegOC) {
78  case NVPTX::SULD_1D_I8_CLAMP_R:
79  return NVPTX::SULD_1D_I8_CLAMP_I;
80  case NVPTX::SULD_1D_I16_CLAMP_R:
81  return NVPTX::SULD_1D_I16_CLAMP_I;
82  case NVPTX::SULD_1D_I32_CLAMP_R:
83  return NVPTX::SULD_1D_I32_CLAMP_I;
84  case NVPTX::SULD_1D_I64_CLAMP_R:
85  return NVPTX::SULD_1D_I64_CLAMP_I;
86  case NVPTX::SULD_1D_ARRAY_I8_CLAMP_R:
87  return NVPTX::SULD_1D_ARRAY_I8_CLAMP_I;
88  case NVPTX::SULD_1D_ARRAY_I16_CLAMP_R:
89  return NVPTX::SULD_1D_ARRAY_I16_CLAMP_I;
90  case NVPTX::SULD_1D_ARRAY_I32_CLAMP_R:
91  return NVPTX::SULD_1D_ARRAY_I32_CLAMP_I;
92  case NVPTX::SULD_1D_ARRAY_I64_CLAMP_R:
93  return NVPTX::SULD_1D_ARRAY_I64_CLAMP_I;
94  case NVPTX::SULD_2D_I8_CLAMP_R:
95  return NVPTX::SULD_2D_I8_CLAMP_I;
96  case NVPTX::SULD_2D_I16_CLAMP_R:
97  return NVPTX::SULD_2D_I16_CLAMP_I;
98  case NVPTX::SULD_2D_I32_CLAMP_R:
99  return NVPTX::SULD_2D_I32_CLAMP_I;
100  case NVPTX::SULD_2D_I64_CLAMP_R:
101  return NVPTX::SULD_2D_I64_CLAMP_I;
102  case NVPTX::SULD_2D_ARRAY_I8_CLAMP_R:
103  return NVPTX::SULD_2D_ARRAY_I8_CLAMP_I;
104  case NVPTX::SULD_2D_ARRAY_I16_CLAMP_R:
105  return NVPTX::SULD_2D_ARRAY_I16_CLAMP_I;
106  case NVPTX::SULD_2D_ARRAY_I32_CLAMP_R:
107  return NVPTX::SULD_2D_ARRAY_I32_CLAMP_I;
108  case NVPTX::SULD_2D_ARRAY_I64_CLAMP_R:
109  return NVPTX::SULD_2D_ARRAY_I64_CLAMP_I;
110  case NVPTX::SULD_3D_I8_CLAMP_R:
111  return NVPTX::SULD_3D_I8_CLAMP_I;
112  case NVPTX::SULD_3D_I16_CLAMP_R:
113  return NVPTX::SULD_3D_I16_CLAMP_I;
114  case NVPTX::SULD_3D_I32_CLAMP_R:
115  return NVPTX::SULD_3D_I32_CLAMP_I;
116  case NVPTX::SULD_3D_I64_CLAMP_R:
117  return NVPTX::SULD_3D_I64_CLAMP_I;
118  case NVPTX::SULD_1D_V2I8_CLAMP_R:
119  return NVPTX::SULD_1D_V2I8_CLAMP_I;
120  case NVPTX::SULD_1D_V2I16_CLAMP_R:
121  return NVPTX::SULD_1D_V2I16_CLAMP_I;
122  case NVPTX::SULD_1D_V2I32_CLAMP_R:
123  return NVPTX::SULD_1D_V2I32_CLAMP_I;
124  case NVPTX::SULD_1D_V2I64_CLAMP_R:
125  return NVPTX::SULD_1D_V2I64_CLAMP_I;
126  case NVPTX::SULD_1D_ARRAY_V2I8_CLAMP_R:
127  return NVPTX::SULD_1D_ARRAY_V2I8_CLAMP_I;
128  case NVPTX::SULD_1D_ARRAY_V2I16_CLAMP_R:
129  return NVPTX::SULD_1D_ARRAY_V2I16_CLAMP_I;
130  case NVPTX::SULD_1D_ARRAY_V2I32_CLAMP_R:
131  return NVPTX::SULD_1D_ARRAY_V2I32_CLAMP_I;
132  case NVPTX::SULD_1D_ARRAY_V2I64_CLAMP_R:
133  return NVPTX::SULD_1D_ARRAY_V2I64_CLAMP_I;
134  case NVPTX::SULD_2D_V2I8_CLAMP_R:
135  return NVPTX::SULD_2D_V2I8_CLAMP_I;
136  case NVPTX::SULD_2D_V2I16_CLAMP_R:
137  return NVPTX::SULD_2D_V2I16_CLAMP_I;
138  case NVPTX::SULD_2D_V2I32_CLAMP_R:
139  return NVPTX::SULD_2D_V2I32_CLAMP_I;
140  case NVPTX::SULD_2D_V2I64_CLAMP_R:
141  return NVPTX::SULD_2D_V2I64_CLAMP_I;
142  case NVPTX::SULD_2D_ARRAY_V2I8_CLAMP_R:
143  return NVPTX::SULD_2D_ARRAY_V2I8_CLAMP_I;
144  case NVPTX::SULD_2D_ARRAY_V2I16_CLAMP_R:
145  return NVPTX::SULD_2D_ARRAY_V2I16_CLAMP_I;
146  case NVPTX::SULD_2D_ARRAY_V2I32_CLAMP_R:
147  return NVPTX::SULD_2D_ARRAY_V2I32_CLAMP_I;
148  case NVPTX::SULD_2D_ARRAY_V2I64_CLAMP_R:
149  return NVPTX::SULD_2D_ARRAY_V2I64_CLAMP_I;
150  case NVPTX::SULD_3D_V2I8_CLAMP_R:
151  return NVPTX::SULD_3D_V2I8_CLAMP_I;
152  case NVPTX::SULD_3D_V2I16_CLAMP_R:
153  return NVPTX::SULD_3D_V2I16_CLAMP_I;
154  case NVPTX::SULD_3D_V2I32_CLAMP_R:
155  return NVPTX::SULD_3D_V2I32_CLAMP_I;
156  case NVPTX::SULD_3D_V2I64_CLAMP_R:
157  return NVPTX::SULD_3D_V2I64_CLAMP_I;
158  case NVPTX::SULD_1D_V4I8_CLAMP_R:
159  return NVPTX::SULD_1D_V4I8_CLAMP_I;
160  case NVPTX::SULD_1D_V4I16_CLAMP_R:
161  return NVPTX::SULD_1D_V4I16_CLAMP_I;
162  case NVPTX::SULD_1D_V4I32_CLAMP_R:
163  return NVPTX::SULD_1D_V4I32_CLAMP_I;
164  case NVPTX::SULD_1D_ARRAY_V4I8_CLAMP_R:
165  return NVPTX::SULD_1D_ARRAY_V4I8_CLAMP_I;
166  case NVPTX::SULD_1D_ARRAY_V4I16_CLAMP_R:
167  return NVPTX::SULD_1D_ARRAY_V4I16_CLAMP_I;
168  case NVPTX::SULD_1D_ARRAY_V4I32_CLAMP_R:
169  return NVPTX::SULD_1D_ARRAY_V4I32_CLAMP_I;
170  case NVPTX::SULD_2D_V4I8_CLAMP_R:
171  return NVPTX::SULD_2D_V4I8_CLAMP_I;
172  case NVPTX::SULD_2D_V4I16_CLAMP_R:
173  return NVPTX::SULD_2D_V4I16_CLAMP_I;
174  case NVPTX::SULD_2D_V4I32_CLAMP_R:
175  return NVPTX::SULD_2D_V4I32_CLAMP_I;
176  case NVPTX::SULD_2D_ARRAY_V4I8_CLAMP_R:
177  return NVPTX::SULD_2D_ARRAY_V4I8_CLAMP_I;
178  case NVPTX::SULD_2D_ARRAY_V4I16_CLAMP_R:
179  return NVPTX::SULD_2D_ARRAY_V4I16_CLAMP_I;
180  case NVPTX::SULD_2D_ARRAY_V4I32_CLAMP_R:
181  return NVPTX::SULD_2D_ARRAY_V4I32_CLAMP_I;
182  case NVPTX::SULD_3D_V4I8_CLAMP_R:
183  return NVPTX::SULD_3D_V4I8_CLAMP_I;
184  case NVPTX::SULD_3D_V4I16_CLAMP_R:
185  return NVPTX::SULD_3D_V4I16_CLAMP_I;
186  case NVPTX::SULD_3D_V4I32_CLAMP_R:
187  return NVPTX::SULD_3D_V4I32_CLAMP_I;
188  case NVPTX::SULD_1D_I8_TRAP_R:
189  return NVPTX::SULD_1D_I8_TRAP_I;
190  case NVPTX::SULD_1D_I16_TRAP_R:
191  return NVPTX::SULD_1D_I16_TRAP_I;
192  case NVPTX::SULD_1D_I32_TRAP_R:
193  return NVPTX::SULD_1D_I32_TRAP_I;
194  case NVPTX::SULD_1D_I64_TRAP_R:
195  return NVPTX::SULD_1D_I64_TRAP_I;
196  case NVPTX::SULD_1D_ARRAY_I8_TRAP_R:
197  return NVPTX::SULD_1D_ARRAY_I8_TRAP_I;
198  case NVPTX::SULD_1D_ARRAY_I16_TRAP_R:
199  return NVPTX::SULD_1D_ARRAY_I16_TRAP_I;
200  case NVPTX::SULD_1D_ARRAY_I32_TRAP_R:
201  return NVPTX::SULD_1D_ARRAY_I32_TRAP_I;
202  case NVPTX::SULD_1D_ARRAY_I64_TRAP_R:
203  return NVPTX::SULD_1D_ARRAY_I64_TRAP_I;
204  case NVPTX::SULD_2D_I8_TRAP_R:
205  return NVPTX::SULD_2D_I8_TRAP_I;
206  case NVPTX::SULD_2D_I16_TRAP_R:
207  return NVPTX::SULD_2D_I16_TRAP_I;
208  case NVPTX::SULD_2D_I32_TRAP_R:
209  return NVPTX::SULD_2D_I32_TRAP_I;
210  case NVPTX::SULD_2D_I64_TRAP_R:
211  return NVPTX::SULD_2D_I64_TRAP_I;
212  case NVPTX::SULD_2D_ARRAY_I8_TRAP_R:
213  return NVPTX::SULD_2D_ARRAY_I8_TRAP_I;
214  case NVPTX::SULD_2D_ARRAY_I16_TRAP_R:
215  return NVPTX::SULD_2D_ARRAY_I16_TRAP_I;
216  case NVPTX::SULD_2D_ARRAY_I32_TRAP_R:
217  return NVPTX::SULD_2D_ARRAY_I32_TRAP_I;
218  case NVPTX::SULD_2D_ARRAY_I64_TRAP_R:
219  return NVPTX::SULD_2D_ARRAY_I64_TRAP_I;
220  case NVPTX::SULD_3D_I8_TRAP_R:
221  return NVPTX::SULD_3D_I8_TRAP_I;
222  case NVPTX::SULD_3D_I16_TRAP_R:
223  return NVPTX::SULD_3D_I16_TRAP_I;
224  case NVPTX::SULD_3D_I32_TRAP_R:
225  return NVPTX::SULD_3D_I32_TRAP_I;
226  case NVPTX::SULD_3D_I64_TRAP_R:
227  return NVPTX::SULD_3D_I64_TRAP_I;
228  case NVPTX::SULD_1D_V2I8_TRAP_R:
229  return NVPTX::SULD_1D_V2I8_TRAP_I;
230  case NVPTX::SULD_1D_V2I16_TRAP_R:
231  return NVPTX::SULD_1D_V2I16_TRAP_I;
232  case NVPTX::SULD_1D_V2I32_TRAP_R:
233  return NVPTX::SULD_1D_V2I32_TRAP_I;
234  case NVPTX::SULD_1D_V2I64_TRAP_R:
235  return NVPTX::SULD_1D_V2I64_TRAP_I;
236  case NVPTX::SULD_1D_ARRAY_V2I8_TRAP_R:
237  return NVPTX::SULD_1D_ARRAY_V2I8_TRAP_I;
238  case NVPTX::SULD_1D_ARRAY_V2I16_TRAP_R:
239  return NVPTX::SULD_1D_ARRAY_V2I16_TRAP_I;
240  case NVPTX::SULD_1D_ARRAY_V2I32_TRAP_R:
241  return NVPTX::SULD_1D_ARRAY_V2I32_TRAP_I;
242  case NVPTX::SULD_1D_ARRAY_V2I64_TRAP_R:
243  return NVPTX::SULD_1D_ARRAY_V2I64_TRAP_I;
244  case NVPTX::SULD_2D_V2I8_TRAP_R:
245  return NVPTX::SULD_2D_V2I8_TRAP_I;
246  case NVPTX::SULD_2D_V2I16_TRAP_R:
247  return NVPTX::SULD_2D_V2I16_TRAP_I;
248  case NVPTX::SULD_2D_V2I32_TRAP_R:
249  return NVPTX::SULD_2D_V2I32_TRAP_I;
250  case NVPTX::SULD_2D_V2I64_TRAP_R:
251  return NVPTX::SULD_2D_V2I64_TRAP_I;
252  case NVPTX::SULD_2D_ARRAY_V2I8_TRAP_R:
253  return NVPTX::SULD_2D_ARRAY_V2I8_TRAP_I;
254  case NVPTX::SULD_2D_ARRAY_V2I16_TRAP_R:
255  return NVPTX::SULD_2D_ARRAY_V2I16_TRAP_I;
256  case NVPTX::SULD_2D_ARRAY_V2I32_TRAP_R:
257  return NVPTX::SULD_2D_ARRAY_V2I32_TRAP_I;
258  case NVPTX::SULD_2D_ARRAY_V2I64_TRAP_R:
259  return NVPTX::SULD_2D_ARRAY_V2I64_TRAP_I;
260  case NVPTX::SULD_3D_V2I8_TRAP_R:
261  return NVPTX::SULD_3D_V2I8_TRAP_I;
262  case NVPTX::SULD_3D_V2I16_TRAP_R:
263  return NVPTX::SULD_3D_V2I16_TRAP_I;
264  case NVPTX::SULD_3D_V2I32_TRAP_R:
265  return NVPTX::SULD_3D_V2I32_TRAP_I;
266  case NVPTX::SULD_3D_V2I64_TRAP_R:
267  return NVPTX::SULD_3D_V2I64_TRAP_I;
268  case NVPTX::SULD_1D_V4I8_TRAP_R:
269  return NVPTX::SULD_1D_V4I8_TRAP_I;
270  case NVPTX::SULD_1D_V4I16_TRAP_R:
271  return NVPTX::SULD_1D_V4I16_TRAP_I;
272  case NVPTX::SULD_1D_V4I32_TRAP_R:
273  return NVPTX::SULD_1D_V4I32_TRAP_I;
274  case NVPTX::SULD_1D_ARRAY_V4I8_TRAP_R:
275  return NVPTX::SULD_1D_ARRAY_V4I8_TRAP_I;
276  case NVPTX::SULD_1D_ARRAY_V4I16_TRAP_R:
277  return NVPTX::SULD_1D_ARRAY_V4I16_TRAP_I;
278  case NVPTX::SULD_1D_ARRAY_V4I32_TRAP_R:
279  return NVPTX::SULD_1D_ARRAY_V4I32_TRAP_I;
280  case NVPTX::SULD_2D_V4I8_TRAP_R:
281  return NVPTX::SULD_2D_V4I8_TRAP_I;
282  case NVPTX::SULD_2D_V4I16_TRAP_R:
283  return NVPTX::SULD_2D_V4I16_TRAP_I;
284  case NVPTX::SULD_2D_V4I32_TRAP_R:
285  return NVPTX::SULD_2D_V4I32_TRAP_I;
286  case NVPTX::SULD_2D_ARRAY_V4I8_TRAP_R:
287  return NVPTX::SULD_2D_ARRAY_V4I8_TRAP_I;
288  case NVPTX::SULD_2D_ARRAY_V4I16_TRAP_R:
289  return NVPTX::SULD_2D_ARRAY_V4I16_TRAP_I;
290  case NVPTX::SULD_2D_ARRAY_V4I32_TRAP_R:
291  return NVPTX::SULD_2D_ARRAY_V4I32_TRAP_I;
292  case NVPTX::SULD_3D_V4I8_TRAP_R:
293  return NVPTX::SULD_3D_V4I8_TRAP_I;
294  case NVPTX::SULD_3D_V4I16_TRAP_R:
295  return NVPTX::SULD_3D_V4I16_TRAP_I;
296  case NVPTX::SULD_3D_V4I32_TRAP_R:
297  return NVPTX::SULD_3D_V4I32_TRAP_I;
298  case NVPTX::SULD_1D_I8_ZERO_R:
299  return NVPTX::SULD_1D_I8_ZERO_I;
300  case NVPTX::SULD_1D_I16_ZERO_R:
301  return NVPTX::SULD_1D_I16_ZERO_I;
302  case NVPTX::SULD_1D_I32_ZERO_R:
303  return NVPTX::SULD_1D_I32_ZERO_I;
304  case NVPTX::SULD_1D_I64_ZERO_R:
305  return NVPTX::SULD_1D_I64_ZERO_I;
306  case NVPTX::SULD_1D_ARRAY_I8_ZERO_R:
307  return NVPTX::SULD_1D_ARRAY_I8_ZERO_I;
308  case NVPTX::SULD_1D_ARRAY_I16_ZERO_R:
309  return NVPTX::SULD_1D_ARRAY_I16_ZERO_I;
310  case NVPTX::SULD_1D_ARRAY_I32_ZERO_R:
311  return NVPTX::SULD_1D_ARRAY_I32_ZERO_I;
312  case NVPTX::SULD_1D_ARRAY_I64_ZERO_R:
313  return NVPTX::SULD_1D_ARRAY_I64_ZERO_I;
314  case NVPTX::SULD_2D_I8_ZERO_R:
315  return NVPTX::SULD_2D_I8_ZERO_I;
316  case NVPTX::SULD_2D_I16_ZERO_R:
317  return NVPTX::SULD_2D_I16_ZERO_I;
318  case NVPTX::SULD_2D_I32_ZERO_R:
319  return NVPTX::SULD_2D_I32_ZERO_I;
320  case NVPTX::SULD_2D_I64_ZERO_R:
321  return NVPTX::SULD_2D_I64_ZERO_I;
322  case NVPTX::SULD_2D_ARRAY_I8_ZERO_R:
323  return NVPTX::SULD_2D_ARRAY_I8_ZERO_I;
324  case NVPTX::SULD_2D_ARRAY_I16_ZERO_R:
325  return NVPTX::SULD_2D_ARRAY_I16_ZERO_I;
326  case NVPTX::SULD_2D_ARRAY_I32_ZERO_R:
327  return NVPTX::SULD_2D_ARRAY_I32_ZERO_I;
328  case NVPTX::SULD_2D_ARRAY_I64_ZERO_R:
329  return NVPTX::SULD_2D_ARRAY_I64_ZERO_I;
330  case NVPTX::SULD_3D_I8_ZERO_R:
331  return NVPTX::SULD_3D_I8_ZERO_I;
332  case NVPTX::SULD_3D_I16_ZERO_R:
333  return NVPTX::SULD_3D_I16_ZERO_I;
334  case NVPTX::SULD_3D_I32_ZERO_R:
335  return NVPTX::SULD_3D_I32_ZERO_I;
336  case NVPTX::SULD_3D_I64_ZERO_R:
337  return NVPTX::SULD_3D_I64_ZERO_I;
338  case NVPTX::SULD_1D_V2I8_ZERO_R:
339  return NVPTX::SULD_1D_V2I8_ZERO_I;
340  case NVPTX::SULD_1D_V2I16_ZERO_R:
341  return NVPTX::SULD_1D_V2I16_ZERO_I;
342  case NVPTX::SULD_1D_V2I32_ZERO_R:
343  return NVPTX::SULD_1D_V2I32_ZERO_I;
344  case NVPTX::SULD_1D_V2I64_ZERO_R:
345  return NVPTX::SULD_1D_V2I64_ZERO_I;
346  case NVPTX::SULD_1D_ARRAY_V2I8_ZERO_R:
347  return NVPTX::SULD_1D_ARRAY_V2I8_ZERO_I;
348  case NVPTX::SULD_1D_ARRAY_V2I16_ZERO_R:
349  return NVPTX::SULD_1D_ARRAY_V2I16_ZERO_I;
350  case NVPTX::SULD_1D_ARRAY_V2I32_ZERO_R:
351  return NVPTX::SULD_1D_ARRAY_V2I32_ZERO_I;
352  case NVPTX::SULD_1D_ARRAY_V2I64_ZERO_R:
353  return NVPTX::SULD_1D_ARRAY_V2I64_ZERO_I;
354  case NVPTX::SULD_2D_V2I8_ZERO_R:
355  return NVPTX::SULD_2D_V2I8_ZERO_I;
356  case NVPTX::SULD_2D_V2I16_ZERO_R:
357  return NVPTX::SULD_2D_V2I16_ZERO_I;
358  case NVPTX::SULD_2D_V2I32_ZERO_R:
359  return NVPTX::SULD_2D_V2I32_ZERO_I;
360  case NVPTX::SULD_2D_V2I64_ZERO_R:
361  return NVPTX::SULD_2D_V2I64_ZERO_I;
362  case NVPTX::SULD_2D_ARRAY_V2I8_ZERO_R:
363  return NVPTX::SULD_2D_ARRAY_V2I8_ZERO_I;
364  case NVPTX::SULD_2D_ARRAY_V2I16_ZERO_R:
365  return NVPTX::SULD_2D_ARRAY_V2I16_ZERO_I;
366  case NVPTX::SULD_2D_ARRAY_V2I32_ZERO_R:
367  return NVPTX::SULD_2D_ARRAY_V2I32_ZERO_I;
368  case NVPTX::SULD_2D_ARRAY_V2I64_ZERO_R:
369  return NVPTX::SULD_2D_ARRAY_V2I64_ZERO_I;
370  case NVPTX::SULD_3D_V2I8_ZERO_R:
371  return NVPTX::SULD_3D_V2I8_ZERO_I;
372  case NVPTX::SULD_3D_V2I16_ZERO_R:
373  return NVPTX::SULD_3D_V2I16_ZERO_I;
374  case NVPTX::SULD_3D_V2I32_ZERO_R:
375  return NVPTX::SULD_3D_V2I32_ZERO_I;
376  case NVPTX::SULD_3D_V2I64_ZERO_R:
377  return NVPTX::SULD_3D_V2I64_ZERO_I;
378  case NVPTX::SULD_1D_V4I8_ZERO_R:
379  return NVPTX::SULD_1D_V4I8_ZERO_I;
380  case NVPTX::SULD_1D_V4I16_ZERO_R:
381  return NVPTX::SULD_1D_V4I16_ZERO_I;
382  case NVPTX::SULD_1D_V4I32_ZERO_R:
383  return NVPTX::SULD_1D_V4I32_ZERO_I;
384  case NVPTX::SULD_1D_ARRAY_V4I8_ZERO_R:
385  return NVPTX::SULD_1D_ARRAY_V4I8_ZERO_I;
386  case NVPTX::SULD_1D_ARRAY_V4I16_ZERO_R:
387  return NVPTX::SULD_1D_ARRAY_V4I16_ZERO_I;
388  case NVPTX::SULD_1D_ARRAY_V4I32_ZERO_R:
389  return NVPTX::SULD_1D_ARRAY_V4I32_ZERO_I;
390  case NVPTX::SULD_2D_V4I8_ZERO_R:
391  return NVPTX::SULD_2D_V4I8_ZERO_I;
392  case NVPTX::SULD_2D_V4I16_ZERO_R:
393  return NVPTX::SULD_2D_V4I16_ZERO_I;
394  case NVPTX::SULD_2D_V4I32_ZERO_R:
395  return NVPTX::SULD_2D_V4I32_ZERO_I;
396  case NVPTX::SULD_2D_ARRAY_V4I8_ZERO_R:
397  return NVPTX::SULD_2D_ARRAY_V4I8_ZERO_I;
398  case NVPTX::SULD_2D_ARRAY_V4I16_ZERO_R:
399  return NVPTX::SULD_2D_ARRAY_V4I16_ZERO_I;
400  case NVPTX::SULD_2D_ARRAY_V4I32_ZERO_R:
401  return NVPTX::SULD_2D_ARRAY_V4I32_ZERO_I;
402  case NVPTX::SULD_3D_V4I8_ZERO_R:
403  return NVPTX::SULD_3D_V4I8_ZERO_I;
404  case NVPTX::SULD_3D_V4I16_ZERO_R:
405  return NVPTX::SULD_3D_V4I16_ZERO_I;
406  case NVPTX::SULD_3D_V4I32_ZERO_R:
407  return NVPTX::SULD_3D_V4I32_ZERO_I;
408  default:
409  llvm_unreachable("Unhandled SULD opcode");
410  }
411 }
412 
413 static unsigned sustRegisterToIndexOpcode(unsigned RegOC) {
414  switch (RegOC) {
415  case NVPTX::SUST_B_1D_B8_CLAMP_R:
416  return NVPTX::SUST_B_1D_B8_CLAMP_I;
417  case NVPTX::SUST_B_1D_B16_CLAMP_R:
418  return NVPTX::SUST_B_1D_B16_CLAMP_I;
419  case NVPTX::SUST_B_1D_B32_CLAMP_R:
420  return NVPTX::SUST_B_1D_B32_CLAMP_I;
421  case NVPTX::SUST_B_1D_B64_CLAMP_R:
422  return NVPTX::SUST_B_1D_B64_CLAMP_I;
423  case NVPTX::SUST_B_1D_V2B8_CLAMP_R:
424  return NVPTX::SUST_B_1D_V2B8_CLAMP_I;
425  case NVPTX::SUST_B_1D_V2B16_CLAMP_R:
426  return NVPTX::SUST_B_1D_V2B16_CLAMP_I;
427  case NVPTX::SUST_B_1D_V2B32_CLAMP_R:
428  return NVPTX::SUST_B_1D_V2B32_CLAMP_I;
429  case NVPTX::SUST_B_1D_V2B64_CLAMP_R:
430  return NVPTX::SUST_B_1D_V2B64_CLAMP_I;
431  case NVPTX::SUST_B_1D_V4B8_CLAMP_R:
432  return NVPTX::SUST_B_1D_V4B8_CLAMP_I;
433  case NVPTX::SUST_B_1D_V4B16_CLAMP_R:
434  return NVPTX::SUST_B_1D_V4B16_CLAMP_I;
435  case NVPTX::SUST_B_1D_V4B32_CLAMP_R:
436  return NVPTX::SUST_B_1D_V4B32_CLAMP_I;
437  case NVPTX::SUST_B_1D_ARRAY_B8_CLAMP_R:
438  return NVPTX::SUST_B_1D_ARRAY_B8_CLAMP_I;
439  case NVPTX::SUST_B_1D_ARRAY_B16_CLAMP_R:
440  return NVPTX::SUST_B_1D_ARRAY_B16_CLAMP_I;
441  case NVPTX::SUST_B_1D_ARRAY_B32_CLAMP_R:
442  return NVPTX::SUST_B_1D_ARRAY_B32_CLAMP_I;
443  case NVPTX::SUST_B_1D_ARRAY_B64_CLAMP_R:
444  return NVPTX::SUST_B_1D_ARRAY_B64_CLAMP_I;
445  case NVPTX::SUST_B_1D_ARRAY_V2B8_CLAMP_R:
446  return NVPTX::SUST_B_1D_ARRAY_V2B8_CLAMP_I;
447  case NVPTX::SUST_B_1D_ARRAY_V2B16_CLAMP_R:
448  return NVPTX::SUST_B_1D_ARRAY_V2B16_CLAMP_I;
449  case NVPTX::SUST_B_1D_ARRAY_V2B32_CLAMP_R:
450  return NVPTX::SUST_B_1D_ARRAY_V2B32_CLAMP_I;
451  case NVPTX::SUST_B_1D_ARRAY_V2B64_CLAMP_R:
452  return NVPTX::SUST_B_1D_ARRAY_V2B64_CLAMP_I;
453  case NVPTX::SUST_B_1D_ARRAY_V4B8_CLAMP_R:
454  return NVPTX::SUST_B_1D_ARRAY_V4B8_CLAMP_I;
455  case NVPTX::SUST_B_1D_ARRAY_V4B16_CLAMP_R:
456  return NVPTX::SUST_B_1D_ARRAY_V4B16_CLAMP_I;
457  case NVPTX::SUST_B_1D_ARRAY_V4B32_CLAMP_R:
458  return NVPTX::SUST_B_1D_ARRAY_V4B32_CLAMP_I;
459  case NVPTX::SUST_B_2D_B8_CLAMP_R:
460  return NVPTX::SUST_B_2D_B8_CLAMP_I;
461  case NVPTX::SUST_B_2D_B16_CLAMP_R:
462  return NVPTX::SUST_B_2D_B16_CLAMP_I;
463  case NVPTX::SUST_B_2D_B32_CLAMP_R:
464  return NVPTX::SUST_B_2D_B32_CLAMP_I;
465  case NVPTX::SUST_B_2D_B64_CLAMP_R:
466  return NVPTX::SUST_B_2D_B64_CLAMP_I;
467  case NVPTX::SUST_B_2D_V2B8_CLAMP_R:
468  return NVPTX::SUST_B_2D_V2B8_CLAMP_I;
469  case NVPTX::SUST_B_2D_V2B16_CLAMP_R:
470  return NVPTX::SUST_B_2D_V2B16_CLAMP_I;
471  case NVPTX::SUST_B_2D_V2B32_CLAMP_R:
472  return NVPTX::SUST_B_2D_V2B32_CLAMP_I;
473  case NVPTX::SUST_B_2D_V2B64_CLAMP_R:
474  return NVPTX::SUST_B_2D_V2B64_CLAMP_I;
475  case NVPTX::SUST_B_2D_V4B8_CLAMP_R:
476  return NVPTX::SUST_B_2D_V4B8_CLAMP_I;
477  case NVPTX::SUST_B_2D_V4B16_CLAMP_R:
478  return NVPTX::SUST_B_2D_V4B16_CLAMP_I;
479  case NVPTX::SUST_B_2D_V4B32_CLAMP_R:
480  return NVPTX::SUST_B_2D_V4B32_CLAMP_I;
481  case NVPTX::SUST_B_2D_ARRAY_B8_CLAMP_R:
482  return NVPTX::SUST_B_2D_ARRAY_B8_CLAMP_I;
483  case NVPTX::SUST_B_2D_ARRAY_B16_CLAMP_R:
484  return NVPTX::SUST_B_2D_ARRAY_B16_CLAMP_I;
485  case NVPTX::SUST_B_2D_ARRAY_B32_CLAMP_R:
486  return NVPTX::SUST_B_2D_ARRAY_B32_CLAMP_I;
487  case NVPTX::SUST_B_2D_ARRAY_B64_CLAMP_R:
488  return NVPTX::SUST_B_2D_ARRAY_B64_CLAMP_I;
489  case NVPTX::SUST_B_2D_ARRAY_V2B8_CLAMP_R:
490  return NVPTX::SUST_B_2D_ARRAY_V2B8_CLAMP_I;
491  case NVPTX::SUST_B_2D_ARRAY_V2B16_CLAMP_R:
492  return NVPTX::SUST_B_2D_ARRAY_V2B16_CLAMP_I;
493  case NVPTX::SUST_B_2D_ARRAY_V2B32_CLAMP_R:
494  return NVPTX::SUST_B_2D_ARRAY_V2B32_CLAMP_I;
495  case NVPTX::SUST_B_2D_ARRAY_V2B64_CLAMP_R:
496  return NVPTX::SUST_B_2D_ARRAY_V2B64_CLAMP_I;
497  case NVPTX::SUST_B_2D_ARRAY_V4B8_CLAMP_R:
498  return NVPTX::SUST_B_2D_ARRAY_V4B8_CLAMP_I;
499  case NVPTX::SUST_B_2D_ARRAY_V4B16_CLAMP_R:
500  return NVPTX::SUST_B_2D_ARRAY_V4B16_CLAMP_I;
501  case NVPTX::SUST_B_2D_ARRAY_V4B32_CLAMP_R:
502  return NVPTX::SUST_B_2D_ARRAY_V4B32_CLAMP_I;
503  case NVPTX::SUST_B_3D_B8_CLAMP_R:
504  return NVPTX::SUST_B_3D_B8_CLAMP_I;
505  case NVPTX::SUST_B_3D_B16_CLAMP_R:
506  return NVPTX::SUST_B_3D_B16_CLAMP_I;
507  case NVPTX::SUST_B_3D_B32_CLAMP_R:
508  return NVPTX::SUST_B_3D_B32_CLAMP_I;
509  case NVPTX::SUST_B_3D_B64_CLAMP_R:
510  return NVPTX::SUST_B_3D_B64_CLAMP_I;
511  case NVPTX::SUST_B_3D_V2B8_CLAMP_R:
512  return NVPTX::SUST_B_3D_V2B8_CLAMP_I;
513  case NVPTX::SUST_B_3D_V2B16_CLAMP_R:
514  return NVPTX::SUST_B_3D_V2B16_CLAMP_I;
515  case NVPTX::SUST_B_3D_V2B32_CLAMP_R:
516  return NVPTX::SUST_B_3D_V2B32_CLAMP_I;
517  case NVPTX::SUST_B_3D_V2B64_CLAMP_R:
518  return NVPTX::SUST_B_3D_V2B64_CLAMP_I;
519  case NVPTX::SUST_B_3D_V4B8_CLAMP_R:
520  return NVPTX::SUST_B_3D_V4B8_CLAMP_I;
521  case NVPTX::SUST_B_3D_V4B16_CLAMP_R:
522  return NVPTX::SUST_B_3D_V4B16_CLAMP_I;
523  case NVPTX::SUST_B_3D_V4B32_CLAMP_R:
524  return NVPTX::SUST_B_3D_V4B32_CLAMP_I;
525  case NVPTX::SUST_B_1D_B8_TRAP_R:
526  return NVPTX::SUST_B_1D_B8_TRAP_I;
527  case NVPTX::SUST_B_1D_B16_TRAP_R:
528  return NVPTX::SUST_B_1D_B16_TRAP_I;
529  case NVPTX::SUST_B_1D_B32_TRAP_R:
530  return NVPTX::SUST_B_1D_B32_TRAP_I;
531  case NVPTX::SUST_B_1D_B64_TRAP_R:
532  return NVPTX::SUST_B_1D_B64_TRAP_I;
533  case NVPTX::SUST_B_1D_V2B8_TRAP_R:
534  return NVPTX::SUST_B_1D_V2B8_TRAP_I;
535  case NVPTX::SUST_B_1D_V2B16_TRAP_R:
536  return NVPTX::SUST_B_1D_V2B16_TRAP_I;
537  case NVPTX::SUST_B_1D_V2B32_TRAP_R:
538  return NVPTX::SUST_B_1D_V2B32_TRAP_I;
539  case NVPTX::SUST_B_1D_V2B64_TRAP_R:
540  return NVPTX::SUST_B_1D_V2B64_TRAP_I;
541  case NVPTX::SUST_B_1D_V4B8_TRAP_R:
542  return NVPTX::SUST_B_1D_V4B8_TRAP_I;
543  case NVPTX::SUST_B_1D_V4B16_TRAP_R:
544  return NVPTX::SUST_B_1D_V4B16_TRAP_I;
545  case NVPTX::SUST_B_1D_V4B32_TRAP_R:
546  return NVPTX::SUST_B_1D_V4B32_TRAP_I;
547  case NVPTX::SUST_B_1D_ARRAY_B8_TRAP_R:
548  return NVPTX::SUST_B_1D_ARRAY_B8_TRAP_I;
549  case NVPTX::SUST_B_1D_ARRAY_B16_TRAP_R:
550  return NVPTX::SUST_B_1D_ARRAY_B16_TRAP_I;
551  case NVPTX::SUST_B_1D_ARRAY_B32_TRAP_R:
552  return NVPTX::SUST_B_1D_ARRAY_B32_TRAP_I;
553  case NVPTX::SUST_B_1D_ARRAY_B64_TRAP_R:
554  return NVPTX::SUST_B_1D_ARRAY_B64_TRAP_I;
555  case NVPTX::SUST_B_1D_ARRAY_V2B8_TRAP_R:
556  return NVPTX::SUST_B_1D_ARRAY_V2B8_TRAP_I;
557  case NVPTX::SUST_B_1D_ARRAY_V2B16_TRAP_R:
558  return NVPTX::SUST_B_1D_ARRAY_V2B16_TRAP_I;
559  case NVPTX::SUST_B_1D_ARRAY_V2B32_TRAP_R:
560  return NVPTX::SUST_B_1D_ARRAY_V2B32_TRAP_I;
561  case NVPTX::SUST_B_1D_ARRAY_V2B64_TRAP_R:
562  return NVPTX::SUST_B_1D_ARRAY_V2B64_TRAP_I;
563  case NVPTX::SUST_B_1D_ARRAY_V4B8_TRAP_R:
564  return NVPTX::SUST_B_1D_ARRAY_V4B8_TRAP_I;
565  case NVPTX::SUST_B_1D_ARRAY_V4B16_TRAP_R:
566  return NVPTX::SUST_B_1D_ARRAY_V4B16_TRAP_I;
567  case NVPTX::SUST_B_1D_ARRAY_V4B32_TRAP_R:
568  return NVPTX::SUST_B_1D_ARRAY_V4B32_TRAP_I;
569  case NVPTX::SUST_B_2D_B8_TRAP_R:
570  return NVPTX::SUST_B_2D_B8_TRAP_I;
571  case NVPTX::SUST_B_2D_B16_TRAP_R:
572  return NVPTX::SUST_B_2D_B16_TRAP_I;
573  case NVPTX::SUST_B_2D_B32_TRAP_R:
574  return NVPTX::SUST_B_2D_B32_TRAP_I;
575  case NVPTX::SUST_B_2D_B64_TRAP_R:
576  return NVPTX::SUST_B_2D_B64_TRAP_I;
577  case NVPTX::SUST_B_2D_V2B8_TRAP_R:
578  return NVPTX::SUST_B_2D_V2B8_TRAP_I;
579  case NVPTX::SUST_B_2D_V2B16_TRAP_R:
580  return NVPTX::SUST_B_2D_V2B16_TRAP_I;
581  case NVPTX::SUST_B_2D_V2B32_TRAP_R:
582  return NVPTX::SUST_B_2D_V2B32_TRAP_I;
583  case NVPTX::SUST_B_2D_V2B64_TRAP_R:
584  return NVPTX::SUST_B_2D_V2B64_TRAP_I;
585  case NVPTX::SUST_B_2D_V4B8_TRAP_R:
586  return NVPTX::SUST_B_2D_V4B8_TRAP_I;
587  case NVPTX::SUST_B_2D_V4B16_TRAP_R:
588  return NVPTX::SUST_B_2D_V4B16_TRAP_I;
589  case NVPTX::SUST_B_2D_V4B32_TRAP_R:
590  return NVPTX::SUST_B_2D_V4B32_TRAP_I;
591  case NVPTX::SUST_B_2D_ARRAY_B8_TRAP_R:
592  return NVPTX::SUST_B_2D_ARRAY_B8_TRAP_I;
593  case NVPTX::SUST_B_2D_ARRAY_B16_TRAP_R:
594  return NVPTX::SUST_B_2D_ARRAY_B16_TRAP_I;
595  case NVPTX::SUST_B_2D_ARRAY_B32_TRAP_R:
596  return NVPTX::SUST_B_2D_ARRAY_B32_TRAP_I;
597  case NVPTX::SUST_B_2D_ARRAY_B64_TRAP_R:
598  return NVPTX::SUST_B_2D_ARRAY_B64_TRAP_I;
599  case NVPTX::SUST_B_2D_ARRAY_V2B8_TRAP_R:
600  return NVPTX::SUST_B_2D_ARRAY_V2B8_TRAP_I;
601  case NVPTX::SUST_B_2D_ARRAY_V2B16_TRAP_R:
602  return NVPTX::SUST_B_2D_ARRAY_V2B16_TRAP_I;
603  case NVPTX::SUST_B_2D_ARRAY_V2B32_TRAP_R:
604  return NVPTX::SUST_B_2D_ARRAY_V2B32_TRAP_I;
605  case NVPTX::SUST_B_2D_ARRAY_V2B64_TRAP_R:
606  return NVPTX::SUST_B_2D_ARRAY_V2B64_TRAP_I;
607  case NVPTX::SUST_B_2D_ARRAY_V4B8_TRAP_R:
608  return NVPTX::SUST_B_2D_ARRAY_V4B8_TRAP_I;
609  case NVPTX::SUST_B_2D_ARRAY_V4B16_TRAP_R:
610  return NVPTX::SUST_B_2D_ARRAY_V4B16_TRAP_I;
611  case NVPTX::SUST_B_2D_ARRAY_V4B32_TRAP_R:
612  return NVPTX::SUST_B_2D_ARRAY_V4B32_TRAP_I;
613  case NVPTX::SUST_B_3D_B8_TRAP_R:
614  return NVPTX::SUST_B_3D_B8_TRAP_I;
615  case NVPTX::SUST_B_3D_B16_TRAP_R:
616  return NVPTX::SUST_B_3D_B16_TRAP_I;
617  case NVPTX::SUST_B_3D_B32_TRAP_R:
618  return NVPTX::SUST_B_3D_B32_TRAP_I;
619  case NVPTX::SUST_B_3D_B64_TRAP_R:
620  return NVPTX::SUST_B_3D_B64_TRAP_I;
621  case NVPTX::SUST_B_3D_V2B8_TRAP_R:
622  return NVPTX::SUST_B_3D_V2B8_TRAP_I;
623  case NVPTX::SUST_B_3D_V2B16_TRAP_R:
624  return NVPTX::SUST_B_3D_V2B16_TRAP_I;
625  case NVPTX::SUST_B_3D_V2B32_TRAP_R:
626  return NVPTX::SUST_B_3D_V2B32_TRAP_I;
627  case NVPTX::SUST_B_3D_V2B64_TRAP_R:
628  return NVPTX::SUST_B_3D_V2B64_TRAP_I;
629  case NVPTX::SUST_B_3D_V4B8_TRAP_R:
630  return NVPTX::SUST_B_3D_V4B8_TRAP_I;
631  case NVPTX::SUST_B_3D_V4B16_TRAP_R:
632  return NVPTX::SUST_B_3D_V4B16_TRAP_I;
633  case NVPTX::SUST_B_3D_V4B32_TRAP_R:
634  return NVPTX::SUST_B_3D_V4B32_TRAP_I;
635  case NVPTX::SUST_B_1D_B8_ZERO_R:
636  return NVPTX::SUST_B_1D_B8_ZERO_I;
637  case NVPTX::SUST_B_1D_B16_ZERO_R:
638  return NVPTX::SUST_B_1D_B16_ZERO_I;
639  case NVPTX::SUST_B_1D_B32_ZERO_R:
640  return NVPTX::SUST_B_1D_B32_ZERO_I;
641  case NVPTX::SUST_B_1D_B64_ZERO_R:
642  return NVPTX::SUST_B_1D_B64_ZERO_I;
643  case NVPTX::SUST_B_1D_V2B8_ZERO_R:
644  return NVPTX::SUST_B_1D_V2B8_ZERO_I;
645  case NVPTX::SUST_B_1D_V2B16_ZERO_R:
646  return NVPTX::SUST_B_1D_V2B16_ZERO_I;
647  case NVPTX::SUST_B_1D_V2B32_ZERO_R:
648  return NVPTX::SUST_B_1D_V2B32_ZERO_I;
649  case NVPTX::SUST_B_1D_V2B64_ZERO_R:
650  return NVPTX::SUST_B_1D_V2B64_ZERO_I;
651  case NVPTX::SUST_B_1D_V4B8_ZERO_R:
652  return NVPTX::SUST_B_1D_V4B8_ZERO_I;
653  case NVPTX::SUST_B_1D_V4B16_ZERO_R:
654  return NVPTX::SUST_B_1D_V4B16_ZERO_I;
655  case NVPTX::SUST_B_1D_V4B32_ZERO_R:
656  return NVPTX::SUST_B_1D_V4B32_ZERO_I;
657  case NVPTX::SUST_B_1D_ARRAY_B8_ZERO_R:
658  return NVPTX::SUST_B_1D_ARRAY_B8_ZERO_I;
659  case NVPTX::SUST_B_1D_ARRAY_B16_ZERO_R:
660  return NVPTX::SUST_B_1D_ARRAY_B16_ZERO_I;
661  case NVPTX::SUST_B_1D_ARRAY_B32_ZERO_R:
662  return NVPTX::SUST_B_1D_ARRAY_B32_ZERO_I;
663  case NVPTX::SUST_B_1D_ARRAY_B64_ZERO_R:
664  return NVPTX::SUST_B_1D_ARRAY_B64_ZERO_I;
665  case NVPTX::SUST_B_1D_ARRAY_V2B8_ZERO_R:
666  return NVPTX::SUST_B_1D_ARRAY_V2B8_ZERO_I;
667  case NVPTX::SUST_B_1D_ARRAY_V2B16_ZERO_R:
668  return NVPTX::SUST_B_1D_ARRAY_V2B16_ZERO_I;
669  case NVPTX::SUST_B_1D_ARRAY_V2B32_ZERO_R:
670  return NVPTX::SUST_B_1D_ARRAY_V2B32_ZERO_I;
671  case NVPTX::SUST_B_1D_ARRAY_V2B64_ZERO_R:
672  return NVPTX::SUST_B_1D_ARRAY_V2B64_ZERO_I;
673  case NVPTX::SUST_B_1D_ARRAY_V4B8_ZERO_R:
674  return NVPTX::SUST_B_1D_ARRAY_V4B8_ZERO_I;
675  case NVPTX::SUST_B_1D_ARRAY_V4B16_ZERO_R:
676  return NVPTX::SUST_B_1D_ARRAY_V4B16_ZERO_I;
677  case NVPTX::SUST_B_1D_ARRAY_V4B32_ZERO_R:
678  return NVPTX::SUST_B_1D_ARRAY_V4B32_ZERO_I;
679  case NVPTX::SUST_B_2D_B8_ZERO_R:
680  return NVPTX::SUST_B_2D_B8_ZERO_I;
681  case NVPTX::SUST_B_2D_B16_ZERO_R:
682  return NVPTX::SUST_B_2D_B16_ZERO_I;
683  case NVPTX::SUST_B_2D_B32_ZERO_R:
684  return NVPTX::SUST_B_2D_B32_ZERO_I;
685  case NVPTX::SUST_B_2D_B64_ZERO_R:
686  return NVPTX::SUST_B_2D_B64_ZERO_I;
687  case NVPTX::SUST_B_2D_V2B8_ZERO_R:
688  return NVPTX::SUST_B_2D_V2B8_ZERO_I;
689  case NVPTX::SUST_B_2D_V2B16_ZERO_R:
690  return NVPTX::SUST_B_2D_V2B16_ZERO_I;
691  case NVPTX::SUST_B_2D_V2B32_ZERO_R:
692  return NVPTX::SUST_B_2D_V2B32_ZERO_I;
693  case NVPTX::SUST_B_2D_V2B64_ZERO_R:
694  return NVPTX::SUST_B_2D_V2B64_ZERO_I;
695  case NVPTX::SUST_B_2D_V4B8_ZERO_R:
696  return NVPTX::SUST_B_2D_V4B8_ZERO_I;
697  case NVPTX::SUST_B_2D_V4B16_ZERO_R:
698  return NVPTX::SUST_B_2D_V4B16_ZERO_I;
699  case NVPTX::SUST_B_2D_V4B32_ZERO_R:
700  return NVPTX::SUST_B_2D_V4B32_ZERO_I;
701  case NVPTX::SUST_B_2D_ARRAY_B8_ZERO_R:
702  return NVPTX::SUST_B_2D_ARRAY_B8_ZERO_I;
703  case NVPTX::SUST_B_2D_ARRAY_B16_ZERO_R:
704  return NVPTX::SUST_B_2D_ARRAY_B16_ZERO_I;
705  case NVPTX::SUST_B_2D_ARRAY_B32_ZERO_R:
706  return NVPTX::SUST_B_2D_ARRAY_B32_ZERO_I;
707  case NVPTX::SUST_B_2D_ARRAY_B64_ZERO_R:
708  return NVPTX::SUST_B_2D_ARRAY_B64_ZERO_I;
709  case NVPTX::SUST_B_2D_ARRAY_V2B8_ZERO_R:
710  return NVPTX::SUST_B_2D_ARRAY_V2B8_ZERO_I;
711  case NVPTX::SUST_B_2D_ARRAY_V2B16_ZERO_R:
712  return NVPTX::SUST_B_2D_ARRAY_V2B16_ZERO_I;
713  case NVPTX::SUST_B_2D_ARRAY_V2B32_ZERO_R:
714  return NVPTX::SUST_B_2D_ARRAY_V2B32_ZERO_I;
715  case NVPTX::SUST_B_2D_ARRAY_V2B64_ZERO_R:
716  return NVPTX::SUST_B_2D_ARRAY_V2B64_ZERO_I;
717  case NVPTX::SUST_B_2D_ARRAY_V4B8_ZERO_R:
718  return NVPTX::SUST_B_2D_ARRAY_V4B8_ZERO_I;
719  case NVPTX::SUST_B_2D_ARRAY_V4B16_ZERO_R:
720  return NVPTX::SUST_B_2D_ARRAY_V4B16_ZERO_I;
721  case NVPTX::SUST_B_2D_ARRAY_V4B32_ZERO_R:
722  return NVPTX::SUST_B_2D_ARRAY_V4B32_ZERO_I;
723  case NVPTX::SUST_B_3D_B8_ZERO_R:
724  return NVPTX::SUST_B_3D_B8_ZERO_I;
725  case NVPTX::SUST_B_3D_B16_ZERO_R:
726  return NVPTX::SUST_B_3D_B16_ZERO_I;
727  case NVPTX::SUST_B_3D_B32_ZERO_R:
728  return NVPTX::SUST_B_3D_B32_ZERO_I;
729  case NVPTX::SUST_B_3D_B64_ZERO_R:
730  return NVPTX::SUST_B_3D_B64_ZERO_I;
731  case NVPTX::SUST_B_3D_V2B8_ZERO_R:
732  return NVPTX::SUST_B_3D_V2B8_ZERO_I;
733  case NVPTX::SUST_B_3D_V2B16_ZERO_R:
734  return NVPTX::SUST_B_3D_V2B16_ZERO_I;
735  case NVPTX::SUST_B_3D_V2B32_ZERO_R:
736  return NVPTX::SUST_B_3D_V2B32_ZERO_I;
737  case NVPTX::SUST_B_3D_V2B64_ZERO_R:
738  return NVPTX::SUST_B_3D_V2B64_ZERO_I;
739  case NVPTX::SUST_B_3D_V4B8_ZERO_R:
740  return NVPTX::SUST_B_3D_V4B8_ZERO_I;
741  case NVPTX::SUST_B_3D_V4B16_ZERO_R:
742  return NVPTX::SUST_B_3D_V4B16_ZERO_I;
743  case NVPTX::SUST_B_3D_V4B32_ZERO_R:
744  return NVPTX::SUST_B_3D_V4B32_ZERO_I;
745  case NVPTX::SUST_P_1D_B8_TRAP_R:
746  return NVPTX::SUST_P_1D_B8_TRAP_I;
747  case NVPTX::SUST_P_1D_B16_TRAP_R:
748  return NVPTX::SUST_P_1D_B16_TRAP_I;
749  case NVPTX::SUST_P_1D_B32_TRAP_R:
750  return NVPTX::SUST_P_1D_B32_TRAP_I;
751  case NVPTX::SUST_P_1D_V2B8_TRAP_R:
752  return NVPTX::SUST_P_1D_V2B8_TRAP_I;
753  case NVPTX::SUST_P_1D_V2B16_TRAP_R:
754  return NVPTX::SUST_P_1D_V2B16_TRAP_I;
755  case NVPTX::SUST_P_1D_V2B32_TRAP_R:
756  return NVPTX::SUST_P_1D_V2B32_TRAP_I;
757  case NVPTX::SUST_P_1D_V4B8_TRAP_R:
758  return NVPTX::SUST_P_1D_V4B8_TRAP_I;
759  case NVPTX::SUST_P_1D_V4B16_TRAP_R:
760  return NVPTX::SUST_P_1D_V4B16_TRAP_I;
761  case NVPTX::SUST_P_1D_V4B32_TRAP_R:
762  return NVPTX::SUST_P_1D_V4B32_TRAP_I;
763  case NVPTX::SUST_P_1D_ARRAY_B8_TRAP_R:
764  return NVPTX::SUST_P_1D_ARRAY_B8_TRAP_I;
765  case NVPTX::SUST_P_1D_ARRAY_B16_TRAP_R:
766  return NVPTX::SUST_P_1D_ARRAY_B16_TRAP_I;
767  case NVPTX::SUST_P_1D_ARRAY_B32_TRAP_R:
768  return NVPTX::SUST_P_1D_ARRAY_B32_TRAP_I;
769  case NVPTX::SUST_P_1D_ARRAY_V2B8_TRAP_R:
770  return NVPTX::SUST_P_1D_ARRAY_V2B8_TRAP_I;
771  case NVPTX::SUST_P_1D_ARRAY_V2B16_TRAP_R:
772  return NVPTX::SUST_P_1D_ARRAY_V2B16_TRAP_I;
773  case NVPTX::SUST_P_1D_ARRAY_V2B32_TRAP_R:
774  return NVPTX::SUST_P_1D_ARRAY_V2B32_TRAP_I;
775  case NVPTX::SUST_P_1D_ARRAY_V4B8_TRAP_R:
776  return NVPTX::SUST_P_1D_ARRAY_V4B8_TRAP_I;
777  case NVPTX::SUST_P_1D_ARRAY_V4B16_TRAP_R:
778  return NVPTX::SUST_P_1D_ARRAY_V4B16_TRAP_I;
779  case NVPTX::SUST_P_1D_ARRAY_V4B32_TRAP_R:
780  return NVPTX::SUST_P_1D_ARRAY_V4B32_TRAP_I;
781  case NVPTX::SUST_P_2D_B8_TRAP_R:
782  return NVPTX::SUST_P_2D_B8_TRAP_I;
783  case NVPTX::SUST_P_2D_B16_TRAP_R:
784  return NVPTX::SUST_P_2D_B16_TRAP_I;
785  case NVPTX::SUST_P_2D_B32_TRAP_R:
786  return NVPTX::SUST_P_2D_B32_TRAP_I;
787  case NVPTX::SUST_P_2D_V2B8_TRAP_R:
788  return NVPTX::SUST_P_2D_V2B8_TRAP_I;
789  case NVPTX::SUST_P_2D_V2B16_TRAP_R:
790  return NVPTX::SUST_P_2D_V2B16_TRAP_I;
791  case NVPTX::SUST_P_2D_V2B32_TRAP_R:
792  return NVPTX::SUST_P_2D_V2B32_TRAP_I;
793  case NVPTX::SUST_P_2D_V4B8_TRAP_R:
794  return NVPTX::SUST_P_2D_V4B8_TRAP_I;
795  case NVPTX::SUST_P_2D_V4B16_TRAP_R:
796  return NVPTX::SUST_P_2D_V4B16_TRAP_I;
797  case NVPTX::SUST_P_2D_V4B32_TRAP_R:
798  return NVPTX::SUST_P_2D_V4B32_TRAP_I;
799  case NVPTX::SUST_P_2D_ARRAY_B8_TRAP_R:
800  return NVPTX::SUST_P_2D_ARRAY_B8_TRAP_I;
801  case NVPTX::SUST_P_2D_ARRAY_B16_TRAP_R:
802  return NVPTX::SUST_P_2D_ARRAY_B16_TRAP_I;
803  case NVPTX::SUST_P_2D_ARRAY_B32_TRAP_R:
804  return NVPTX::SUST_P_2D_ARRAY_B32_TRAP_I;
805  case NVPTX::SUST_P_2D_ARRAY_V2B8_TRAP_R:
806  return NVPTX::SUST_P_2D_ARRAY_V2B8_TRAP_I;
807  case NVPTX::SUST_P_2D_ARRAY_V2B16_TRAP_R:
808  return NVPTX::SUST_P_2D_ARRAY_V2B16_TRAP_I;
809  case NVPTX::SUST_P_2D_ARRAY_V2B32_TRAP_R:
810  return NVPTX::SUST_P_2D_ARRAY_V2B32_TRAP_I;
811  case NVPTX::SUST_P_2D_ARRAY_V4B8_TRAP_R:
812  return NVPTX::SUST_P_2D_ARRAY_V4B8_TRAP_I;
813  case NVPTX::SUST_P_2D_ARRAY_V4B16_TRAP_R:
814  return NVPTX::SUST_P_2D_ARRAY_V4B16_TRAP_I;
815  case NVPTX::SUST_P_2D_ARRAY_V4B32_TRAP_R:
816  return NVPTX::SUST_P_2D_ARRAY_V4B32_TRAP_I;
817  case NVPTX::SUST_P_3D_B8_TRAP_R:
818  return NVPTX::SUST_P_3D_B8_TRAP_I;
819  case NVPTX::SUST_P_3D_B16_TRAP_R:
820  return NVPTX::SUST_P_3D_B16_TRAP_I;
821  case NVPTX::SUST_P_3D_B32_TRAP_R:
822  return NVPTX::SUST_P_3D_B32_TRAP_I;
823  case NVPTX::SUST_P_3D_V2B8_TRAP_R:
824  return NVPTX::SUST_P_3D_V2B8_TRAP_I;
825  case NVPTX::SUST_P_3D_V2B16_TRAP_R:
826  return NVPTX::SUST_P_3D_V2B16_TRAP_I;
827  case NVPTX::SUST_P_3D_V2B32_TRAP_R:
828  return NVPTX::SUST_P_3D_V2B32_TRAP_I;
829  case NVPTX::SUST_P_3D_V4B8_TRAP_R:
830  return NVPTX::SUST_P_3D_V4B8_TRAP_I;
831  case NVPTX::SUST_P_3D_V4B16_TRAP_R:
832  return NVPTX::SUST_P_3D_V4B16_TRAP_I;
833  case NVPTX::SUST_P_3D_V4B32_TRAP_R:
834  return NVPTX::SUST_P_3D_V4B32_TRAP_I;
835  default:
836  llvm_unreachable("Unhandled SUST opcode");
837  }
838 }
839 
840 static unsigned texRegisterToIndexOpcode(unsigned RegOC) {
841  switch (RegOC) {
842  case NVPTX::TEX_1D_F32_S32_RR:
843  return NVPTX::TEX_1D_F32_S32_IR;
844  case NVPTX::TEX_1D_F32_S32_RI:
845  return NVPTX::TEX_1D_F32_S32_II;
846  case NVPTX::TEX_1D_F32_F32_RR:
847  return NVPTX::TEX_1D_F32_F32_IR;
848  case NVPTX::TEX_1D_F32_F32_RI:
849  return NVPTX::TEX_1D_F32_F32_II;
850  case NVPTX::TEX_1D_F32_F32_LEVEL_RR:
851  return NVPTX::TEX_1D_F32_F32_LEVEL_IR;
852  case NVPTX::TEX_1D_F32_F32_LEVEL_RI:
853  return NVPTX::TEX_1D_F32_F32_LEVEL_II;
854  case NVPTX::TEX_1D_F32_F32_GRAD_RR:
855  return NVPTX::TEX_1D_F32_F32_GRAD_IR;
856  case NVPTX::TEX_1D_F32_F32_GRAD_RI:
857  return NVPTX::TEX_1D_F32_F32_GRAD_II;
858  case NVPTX::TEX_1D_S32_S32_RR:
859  return NVPTX::TEX_1D_S32_S32_IR;
860  case NVPTX::TEX_1D_S32_S32_RI:
861  return NVPTX::TEX_1D_S32_S32_II;
862  case NVPTX::TEX_1D_S32_F32_RR:
863  return NVPTX::TEX_1D_S32_F32_IR;
864  case NVPTX::TEX_1D_S32_F32_RI:
865  return NVPTX::TEX_1D_S32_F32_II;
866  case NVPTX::TEX_1D_S32_F32_LEVEL_RR:
867  return NVPTX::TEX_1D_S32_F32_LEVEL_IR;
868  case NVPTX::TEX_1D_S32_F32_LEVEL_RI:
869  return NVPTX::TEX_1D_S32_F32_LEVEL_II;
870  case NVPTX::TEX_1D_S32_F32_GRAD_RR:
871  return NVPTX::TEX_1D_S32_F32_GRAD_IR;
872  case NVPTX::TEX_1D_S32_F32_GRAD_RI:
873  return NVPTX::TEX_1D_S32_F32_GRAD_II;
874  case NVPTX::TEX_1D_U32_S32_RR:
875  return NVPTX::TEX_1D_U32_S32_IR;
876  case NVPTX::TEX_1D_U32_S32_RI:
877  return NVPTX::TEX_1D_U32_S32_II;
878  case NVPTX::TEX_1D_U32_F32_RR:
879  return NVPTX::TEX_1D_U32_F32_IR;
880  case NVPTX::TEX_1D_U32_F32_RI:
881  return NVPTX::TEX_1D_U32_F32_II;
882  case NVPTX::TEX_1D_U32_F32_LEVEL_RR:
883  return NVPTX::TEX_1D_U32_F32_LEVEL_IR;
884  case NVPTX::TEX_1D_U32_F32_LEVEL_RI:
885  return NVPTX::TEX_1D_U32_F32_LEVEL_II;
886  case NVPTX::TEX_1D_U32_F32_GRAD_RR:
887  return NVPTX::TEX_1D_U32_F32_GRAD_IR;
888  case NVPTX::TEX_1D_U32_F32_GRAD_RI:
889  return NVPTX::TEX_1D_U32_F32_GRAD_II;
890  case NVPTX::TEX_1D_ARRAY_F32_S32_RR:
891  return NVPTX::TEX_1D_ARRAY_F32_S32_IR;
892  case NVPTX::TEX_1D_ARRAY_F32_S32_RI:
893  return NVPTX::TEX_1D_ARRAY_F32_S32_II;
894  case NVPTX::TEX_1D_ARRAY_F32_F32_RR:
895  return NVPTX::TEX_1D_ARRAY_F32_F32_IR;
896  case NVPTX::TEX_1D_ARRAY_F32_F32_RI:
897  return NVPTX::TEX_1D_ARRAY_F32_F32_II;
898  case NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_RR:
899  return NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_IR;
900  case NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_RI:
901  return NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_II;
902  case NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_RR:
903  return NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_IR;
904  case NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_RI:
905  return NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_II;
906  case NVPTX::TEX_1D_ARRAY_S32_S32_RR:
907  return NVPTX::TEX_1D_ARRAY_S32_S32_IR;
908  case NVPTX::TEX_1D_ARRAY_S32_S32_RI:
909  return NVPTX::TEX_1D_ARRAY_S32_S32_II;
910  case NVPTX::TEX_1D_ARRAY_S32_F32_RR:
911  return NVPTX::TEX_1D_ARRAY_S32_F32_IR;
912  case NVPTX::TEX_1D_ARRAY_S32_F32_RI:
913  return NVPTX::TEX_1D_ARRAY_S32_F32_II;
914  case NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_RR:
915  return NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_IR;
916  case NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_RI:
917  return NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_II;
918  case NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_RR:
919  return NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_IR;
920  case NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_RI:
921  return NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_II;
922  case NVPTX::TEX_1D_ARRAY_U32_S32_RR:
923  return NVPTX::TEX_1D_ARRAY_U32_S32_IR;
924  case NVPTX::TEX_1D_ARRAY_U32_S32_RI:
925  return NVPTX::TEX_1D_ARRAY_U32_S32_II;
926  case NVPTX::TEX_1D_ARRAY_U32_F32_RR:
927  return NVPTX::TEX_1D_ARRAY_U32_F32_IR;
928  case NVPTX::TEX_1D_ARRAY_U32_F32_RI:
929  return NVPTX::TEX_1D_ARRAY_U32_F32_II;
930  case NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_RR:
931  return NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_IR;
932  case NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_RI:
933  return NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_II;
934  case NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_RR:
935  return NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_IR;
936  case NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_RI:
937  return NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_II;
938  case NVPTX::TEX_2D_F32_S32_RR:
939  return NVPTX::TEX_2D_F32_S32_IR;
940  case NVPTX::TEX_2D_F32_S32_RI:
941  return NVPTX::TEX_2D_F32_S32_II;
942  case NVPTX::TEX_2D_F32_F32_RR:
943  return NVPTX::TEX_2D_F32_F32_IR;
944  case NVPTX::TEX_2D_F32_F32_RI:
945  return NVPTX::TEX_2D_F32_F32_II;
946  case NVPTX::TEX_2D_F32_F32_LEVEL_RR:
947  return NVPTX::TEX_2D_F32_F32_LEVEL_IR;
948  case NVPTX::TEX_2D_F32_F32_LEVEL_RI:
949  return NVPTX::TEX_2D_F32_F32_LEVEL_II;
950  case NVPTX::TEX_2D_F32_F32_GRAD_RR:
951  return NVPTX::TEX_2D_F32_F32_GRAD_IR;
952  case NVPTX::TEX_2D_F32_F32_GRAD_RI:
953  return NVPTX::TEX_2D_F32_F32_GRAD_II;
954  case NVPTX::TEX_2D_S32_S32_RR:
955  return NVPTX::TEX_2D_S32_S32_IR;
956  case NVPTX::TEX_2D_S32_S32_RI:
957  return NVPTX::TEX_2D_S32_S32_II;
958  case NVPTX::TEX_2D_S32_F32_RR:
959  return NVPTX::TEX_2D_S32_F32_IR;
960  case NVPTX::TEX_2D_S32_F32_RI:
961  return NVPTX::TEX_2D_S32_F32_II;
962  case NVPTX::TEX_2D_S32_F32_LEVEL_RR:
963  return NVPTX::TEX_2D_S32_F32_LEVEL_IR;
964  case NVPTX::TEX_2D_S32_F32_LEVEL_RI:
965  return NVPTX::TEX_2D_S32_F32_LEVEL_II;
966  case NVPTX::TEX_2D_S32_F32_GRAD_RR:
967  return NVPTX::TEX_2D_S32_F32_GRAD_IR;
968  case NVPTX::TEX_2D_S32_F32_GRAD_RI:
969  return NVPTX::TEX_2D_S32_F32_GRAD_II;
970  case NVPTX::TEX_2D_U32_S32_RR:
971  return NVPTX::TEX_2D_U32_S32_IR;
972  case NVPTX::TEX_2D_U32_S32_RI:
973  return NVPTX::TEX_2D_U32_S32_II;
974  case NVPTX::TEX_2D_U32_F32_RR:
975  return NVPTX::TEX_2D_U32_F32_IR;
976  case NVPTX::TEX_2D_U32_F32_RI:
977  return NVPTX::TEX_2D_U32_F32_II;
978  case NVPTX::TEX_2D_U32_F32_LEVEL_RR:
979  return NVPTX::TEX_2D_U32_F32_LEVEL_IR;
980  case NVPTX::TEX_2D_U32_F32_LEVEL_RI:
981  return NVPTX::TEX_2D_U32_F32_LEVEL_II;
982  case NVPTX::TEX_2D_U32_F32_GRAD_RR:
983  return NVPTX::TEX_2D_U32_F32_GRAD_IR;
984  case NVPTX::TEX_2D_U32_F32_GRAD_RI:
985  return NVPTX::TEX_2D_U32_F32_GRAD_II;
986  case NVPTX::TEX_2D_ARRAY_F32_S32_RR:
987  return NVPTX::TEX_2D_ARRAY_F32_S32_IR;
988  case NVPTX::TEX_2D_ARRAY_F32_S32_RI:
989  return NVPTX::TEX_2D_ARRAY_F32_S32_II;
990  case NVPTX::TEX_2D_ARRAY_F32_F32_RR:
991  return NVPTX::TEX_2D_ARRAY_F32_F32_IR;
992  case NVPTX::TEX_2D_ARRAY_F32_F32_RI:
993  return NVPTX::TEX_2D_ARRAY_F32_F32_II;
994  case NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_RR:
995  return NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_IR;
996  case NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_RI:
997  return NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_II;
998  case NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_RR:
999  return NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_IR;
1000  case NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_RI:
1001  return NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_II;
1002  case NVPTX::TEX_2D_ARRAY_S32_S32_RR:
1003  return NVPTX::TEX_2D_ARRAY_S32_S32_IR;
1004  case NVPTX::TEX_2D_ARRAY_S32_S32_RI:
1005  return NVPTX::TEX_2D_ARRAY_S32_S32_II;
1006  case NVPTX::TEX_2D_ARRAY_S32_F32_RR:
1007  return NVPTX::TEX_2D_ARRAY_S32_F32_IR;
1008  case NVPTX::TEX_2D_ARRAY_S32_F32_RI:
1009  return NVPTX::TEX_2D_ARRAY_S32_F32_II;
1010  case NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_RR:
1011  return NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_IR;
1012  case NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_RI:
1013  return NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_II;
1014  case NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_RR:
1015  return NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_IR;
1016  case NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_RI:
1017  return NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_II;
1018  case NVPTX::TEX_2D_ARRAY_U32_S32_RR:
1019  return NVPTX::TEX_2D_ARRAY_U32_S32_IR;
1020  case NVPTX::TEX_2D_ARRAY_U32_S32_RI:
1021  return NVPTX::TEX_2D_ARRAY_U32_S32_II;
1022  case NVPTX::TEX_2D_ARRAY_U32_F32_RR:
1023  return NVPTX::TEX_2D_ARRAY_U32_F32_IR;
1024  case NVPTX::TEX_2D_ARRAY_U32_F32_RI:
1025  return NVPTX::TEX_2D_ARRAY_U32_F32_II;
1026  case NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_RR:
1027  return NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_IR;
1028  case NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_RI:
1029  return NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_II;
1030  case NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_RR:
1031  return NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_IR;
1032  case NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_RI:
1033  return NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_II;
1034  case NVPTX::TEX_3D_F32_S32_RR:
1035  return NVPTX::TEX_3D_F32_S32_IR;
1036  case NVPTX::TEX_3D_F32_S32_RI:
1037  return NVPTX::TEX_3D_F32_S32_II;
1038  case NVPTX::TEX_3D_F32_F32_RR:
1039  return NVPTX::TEX_3D_F32_F32_IR;
1040  case NVPTX::TEX_3D_F32_F32_RI:
1041  return NVPTX::TEX_3D_F32_F32_II;
1042  case NVPTX::TEX_3D_F32_F32_LEVEL_RR:
1043  return NVPTX::TEX_3D_F32_F32_LEVEL_IR;
1044  case NVPTX::TEX_3D_F32_F32_LEVEL_RI:
1045  return NVPTX::TEX_3D_F32_F32_LEVEL_II;
1046  case NVPTX::TEX_3D_F32_F32_GRAD_RR:
1047  return NVPTX::TEX_3D_F32_F32_GRAD_IR;
1048  case NVPTX::TEX_3D_F32_F32_GRAD_RI:
1049  return NVPTX::TEX_3D_F32_F32_GRAD_II;
1050  case NVPTX::TEX_3D_S32_S32_RR:
1051  return NVPTX::TEX_3D_S32_S32_IR;
1052  case NVPTX::TEX_3D_S32_S32_RI:
1053  return NVPTX::TEX_3D_S32_S32_II;
1054  case NVPTX::TEX_3D_S32_F32_RR:
1055  return NVPTX::TEX_3D_S32_F32_IR;
1056  case NVPTX::TEX_3D_S32_F32_RI:
1057  return NVPTX::TEX_3D_S32_F32_II;
1058  case NVPTX::TEX_3D_S32_F32_LEVEL_RR:
1059  return NVPTX::TEX_3D_S32_F32_LEVEL_IR;
1060  case NVPTX::TEX_3D_S32_F32_LEVEL_RI:
1061  return NVPTX::TEX_3D_S32_F32_LEVEL_II;
1062  case NVPTX::TEX_3D_S32_F32_GRAD_RR:
1063  return NVPTX::TEX_3D_S32_F32_GRAD_IR;
1064  case NVPTX::TEX_3D_S32_F32_GRAD_RI:
1065  return NVPTX::TEX_3D_S32_F32_GRAD_II;
1066  case NVPTX::TEX_3D_U32_S32_RR:
1067  return NVPTX::TEX_3D_U32_S32_IR;
1068  case NVPTX::TEX_3D_U32_S32_RI:
1069  return NVPTX::TEX_3D_U32_S32_II;
1070  case NVPTX::TEX_3D_U32_F32_RR:
1071  return NVPTX::TEX_3D_U32_F32_IR;
1072  case NVPTX::TEX_3D_U32_F32_RI:
1073  return NVPTX::TEX_3D_U32_F32_II;
1074  case NVPTX::TEX_3D_U32_F32_LEVEL_RR:
1075  return NVPTX::TEX_3D_U32_F32_LEVEL_IR;
1076  case NVPTX::TEX_3D_U32_F32_LEVEL_RI:
1077  return NVPTX::TEX_3D_U32_F32_LEVEL_II;
1078  case NVPTX::TEX_3D_U32_F32_GRAD_RR:
1079  return NVPTX::TEX_3D_U32_F32_GRAD_IR;
1080  case NVPTX::TEX_3D_U32_F32_GRAD_RI:
1081  return NVPTX::TEX_3D_U32_F32_GRAD_II;
1082  case NVPTX::TEX_CUBE_F32_F32_RR:
1083  return NVPTX::TEX_CUBE_F32_F32_IR;
1084  case NVPTX::TEX_CUBE_F32_F32_RI:
1085  return NVPTX::TEX_CUBE_F32_F32_II;
1086  case NVPTX::TEX_CUBE_F32_F32_LEVEL_RR:
1087  return NVPTX::TEX_CUBE_F32_F32_LEVEL_IR;
1088  case NVPTX::TEX_CUBE_F32_F32_LEVEL_RI:
1089  return NVPTX::TEX_CUBE_F32_F32_LEVEL_II;
1090  case NVPTX::TEX_CUBE_S32_F32_RR:
1091  return NVPTX::TEX_CUBE_S32_F32_IR;
1092  case NVPTX::TEX_CUBE_S32_F32_RI:
1093  return NVPTX::TEX_CUBE_S32_F32_II;
1094  case NVPTX::TEX_CUBE_S32_F32_LEVEL_RR:
1095  return NVPTX::TEX_CUBE_S32_F32_LEVEL_IR;
1096  case NVPTX::TEX_CUBE_S32_F32_LEVEL_RI:
1097  return NVPTX::TEX_CUBE_S32_F32_LEVEL_II;
1098  case NVPTX::TEX_CUBE_U32_F32_RR:
1099  return NVPTX::TEX_CUBE_U32_F32_IR;
1100  case NVPTX::TEX_CUBE_U32_F32_RI:
1101  return NVPTX::TEX_CUBE_U32_F32_II;
1102  case NVPTX::TEX_CUBE_U32_F32_LEVEL_RR:
1103  return NVPTX::TEX_CUBE_U32_F32_LEVEL_IR;
1104  case NVPTX::TEX_CUBE_U32_F32_LEVEL_RI:
1105  return NVPTX::TEX_CUBE_U32_F32_LEVEL_II;
1106  case NVPTX::TEX_CUBE_ARRAY_F32_F32_RR:
1107  return NVPTX::TEX_CUBE_ARRAY_F32_F32_IR;
1108  case NVPTX::TEX_CUBE_ARRAY_F32_F32_RI:
1109  return NVPTX::TEX_CUBE_ARRAY_F32_F32_II;
1110  case NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_RR:
1111  return NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_IR;
1112  case NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_RI:
1113  return NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_II;
1114  case NVPTX::TEX_CUBE_ARRAY_S32_F32_RR:
1115  return NVPTX::TEX_CUBE_ARRAY_S32_F32_IR;
1116  case NVPTX::TEX_CUBE_ARRAY_S32_F32_RI:
1117  return NVPTX::TEX_CUBE_ARRAY_S32_F32_II;
1118  case NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_RR:
1119  return NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_IR;
1120  case NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_RI:
1121  return NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_II;
1122  case NVPTX::TEX_CUBE_ARRAY_U32_F32_RR:
1123  return NVPTX::TEX_CUBE_ARRAY_U32_F32_IR;
1124  case NVPTX::TEX_CUBE_ARRAY_U32_F32_RI:
1125  return NVPTX::TEX_CUBE_ARRAY_U32_F32_II;
1126  case NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_RR:
1127  return NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_IR;
1128  case NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_RI:
1129  return NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_II;
1130  case NVPTX::TLD4_R_2D_F32_F32_RR:
1131  return NVPTX::TLD4_R_2D_F32_F32_IR;
1132  case NVPTX::TLD4_R_2D_F32_F32_RI:
1133  return NVPTX::TLD4_R_2D_F32_F32_II;
1134  case NVPTX::TLD4_G_2D_F32_F32_RR:
1135  return NVPTX::TLD4_G_2D_F32_F32_IR;
1136  case NVPTX::TLD4_G_2D_F32_F32_RI:
1137  return NVPTX::TLD4_G_2D_F32_F32_II;
1138  case NVPTX::TLD4_B_2D_F32_F32_RR:
1139  return NVPTX::TLD4_B_2D_F32_F32_IR;
1140  case NVPTX::TLD4_B_2D_F32_F32_RI:
1141  return NVPTX::TLD4_B_2D_F32_F32_II;
1142  case NVPTX::TLD4_A_2D_F32_F32_RR:
1143  return NVPTX::TLD4_A_2D_F32_F32_IR;
1144  case NVPTX::TLD4_A_2D_F32_F32_RI:
1145  return NVPTX::TLD4_A_2D_F32_F32_II;
1146  case NVPTX::TLD4_R_2D_S32_F32_RR:
1147  return NVPTX::TLD4_R_2D_S32_F32_IR;
1148  case NVPTX::TLD4_R_2D_S32_F32_RI:
1149  return NVPTX::TLD4_R_2D_S32_F32_II;
1150  case NVPTX::TLD4_G_2D_S32_F32_RR:
1151  return NVPTX::TLD4_G_2D_S32_F32_IR;
1152  case NVPTX::TLD4_G_2D_S32_F32_RI:
1153  return NVPTX::TLD4_G_2D_S32_F32_II;
1154  case NVPTX::TLD4_B_2D_S32_F32_RR:
1155  return NVPTX::TLD4_B_2D_S32_F32_IR;
1156  case NVPTX::TLD4_B_2D_S32_F32_RI:
1157  return NVPTX::TLD4_B_2D_S32_F32_II;
1158  case NVPTX::TLD4_A_2D_S32_F32_RR:
1159  return NVPTX::TLD4_A_2D_S32_F32_IR;
1160  case NVPTX::TLD4_A_2D_S32_F32_RI:
1161  return NVPTX::TLD4_A_2D_S32_F32_II;
1162  case NVPTX::TLD4_R_2D_U32_F32_RR:
1163  return NVPTX::TLD4_R_2D_U32_F32_IR;
1164  case NVPTX::TLD4_R_2D_U32_F32_RI:
1165  return NVPTX::TLD4_R_2D_U32_F32_II;
1166  case NVPTX::TLD4_G_2D_U32_F32_RR:
1167  return NVPTX::TLD4_G_2D_U32_F32_IR;
1168  case NVPTX::TLD4_G_2D_U32_F32_RI:
1169  return NVPTX::TLD4_G_2D_U32_F32_II;
1170  case NVPTX::TLD4_B_2D_U32_F32_RR:
1171  return NVPTX::TLD4_B_2D_U32_F32_IR;
1172  case NVPTX::TLD4_B_2D_U32_F32_RI:
1173  return NVPTX::TLD4_B_2D_U32_F32_II;
1174  case NVPTX::TLD4_A_2D_U32_F32_RR:
1175  return NVPTX::TLD4_A_2D_U32_F32_IR;
1176  case NVPTX::TLD4_A_2D_U32_F32_RI:
1177  return NVPTX::TLD4_A_2D_U32_F32_II;
1178  case NVPTX::TEX_UNIFIED_1D_F32_S32_R:
1179  return NVPTX::TEX_UNIFIED_1D_F32_S32_I;
1180  case NVPTX::TEX_UNIFIED_1D_F32_F32_R:
1181  return NVPTX::TEX_UNIFIED_1D_F32_F32_I;
1182  case NVPTX::TEX_UNIFIED_1D_F32_F32_LEVEL_R:
1183  return NVPTX::TEX_UNIFIED_1D_F32_F32_LEVEL_I;
1184  case NVPTX::TEX_UNIFIED_1D_F32_F32_GRAD_R:
1185  return NVPTX::TEX_UNIFIED_1D_F32_F32_GRAD_I;
1186  case NVPTX::TEX_UNIFIED_1D_S32_S32_R:
1187  return NVPTX::TEX_UNIFIED_1D_S32_S32_I;
1188  case NVPTX::TEX_UNIFIED_1D_S32_F32_R:
1189  return NVPTX::TEX_UNIFIED_1D_S32_F32_I;
1190  case NVPTX::TEX_UNIFIED_1D_S32_F32_LEVEL_R:
1191  return NVPTX::TEX_UNIFIED_1D_S32_F32_LEVEL_I;
1192  case NVPTX::TEX_UNIFIED_1D_S32_F32_GRAD_R:
1193  return NVPTX::TEX_UNIFIED_1D_S32_F32_GRAD_I;
1194  case NVPTX::TEX_UNIFIED_1D_U32_S32_R:
1195  return NVPTX::TEX_UNIFIED_1D_U32_S32_I;
1196  case NVPTX::TEX_UNIFIED_1D_U32_F32_R:
1197  return NVPTX::TEX_UNIFIED_1D_U32_F32_I;
1198  case NVPTX::TEX_UNIFIED_1D_U32_F32_LEVEL_R:
1199  return NVPTX::TEX_UNIFIED_1D_U32_F32_LEVEL_I;
1200  case NVPTX::TEX_UNIFIED_1D_U32_F32_GRAD_R:
1201  return NVPTX::TEX_UNIFIED_1D_U32_F32_GRAD_I;
1202  case NVPTX::TEX_UNIFIED_1D_ARRAY_F32_S32_R:
1203  return NVPTX::TEX_UNIFIED_1D_ARRAY_F32_S32_I;
1204  case NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_R:
1205  return NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_I;
1206  case NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_LEVEL_R:
1207  return NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_LEVEL_I;
1208  case NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_GRAD_R:
1209  return NVPTX::TEX_UNIFIED_1D_ARRAY_F32_F32_GRAD_I;
1210  case NVPTX::TEX_UNIFIED_1D_ARRAY_S32_S32_R:
1211  return NVPTX::TEX_UNIFIED_1D_ARRAY_S32_S32_I;
1212  case NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_R:
1213  return NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_I;
1214  case NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_LEVEL_R:
1215  return NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_LEVEL_I;
1216  case NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_GRAD_R:
1217  return NVPTX::TEX_UNIFIED_1D_ARRAY_S32_F32_GRAD_I;
1218  case NVPTX::TEX_UNIFIED_1D_ARRAY_U32_S32_R:
1219  return NVPTX::TEX_UNIFIED_1D_ARRAY_U32_S32_I;
1220  case NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_R:
1221  return NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_I;
1222  case NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_LEVEL_R:
1223  return NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_LEVEL_I;
1224  case NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_GRAD_R:
1225  return NVPTX::TEX_UNIFIED_1D_ARRAY_U32_F32_GRAD_I;
1226  case NVPTX::TEX_UNIFIED_2D_F32_S32_R:
1227  return NVPTX::TEX_UNIFIED_2D_F32_S32_I;
1228  case NVPTX::TEX_UNIFIED_2D_F32_F32_R:
1229  return NVPTX::TEX_UNIFIED_2D_F32_F32_I;
1230  case NVPTX::TEX_UNIFIED_2D_F32_F32_LEVEL_R:
1231  return NVPTX::TEX_UNIFIED_2D_F32_F32_LEVEL_I;
1232  case NVPTX::TEX_UNIFIED_2D_F32_F32_GRAD_R:
1233  return NVPTX::TEX_UNIFIED_2D_F32_F32_GRAD_I;
1234  case NVPTX::TEX_UNIFIED_2D_S32_S32_R:
1235  return NVPTX::TEX_UNIFIED_2D_S32_S32_I;
1236  case NVPTX::TEX_UNIFIED_2D_S32_F32_R:
1237  return NVPTX::TEX_UNIFIED_2D_S32_F32_I;
1238  case NVPTX::TEX_UNIFIED_2D_S32_F32_LEVEL_R:
1239  return NVPTX::TEX_UNIFIED_2D_S32_F32_LEVEL_I;
1240  case NVPTX::TEX_UNIFIED_2D_S32_F32_GRAD_R:
1241  return NVPTX::TEX_UNIFIED_2D_S32_F32_GRAD_I;
1242  case NVPTX::TEX_UNIFIED_2D_U32_S32_R:
1243  return NVPTX::TEX_UNIFIED_2D_U32_S32_I;
1244  case NVPTX::TEX_UNIFIED_2D_U32_F32_R:
1245  return NVPTX::TEX_UNIFIED_2D_U32_F32_I;
1246  case NVPTX::TEX_UNIFIED_2D_U32_F32_LEVEL_R:
1247  return NVPTX::TEX_UNIFIED_2D_U32_F32_LEVEL_I;
1248  case NVPTX::TEX_UNIFIED_2D_U32_F32_GRAD_R:
1249  return NVPTX::TEX_UNIFIED_2D_U32_F32_GRAD_I;
1250  case NVPTX::TEX_UNIFIED_2D_ARRAY_F32_S32_R:
1251  return NVPTX::TEX_UNIFIED_2D_ARRAY_F32_S32_I;
1252  case NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_R:
1253  return NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_I;
1254  case NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_LEVEL_R:
1255  return NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_LEVEL_I;
1256  case NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_GRAD_R:
1257  return NVPTX::TEX_UNIFIED_2D_ARRAY_F32_F32_GRAD_I;
1258  case NVPTX::TEX_UNIFIED_2D_ARRAY_S32_S32_R:
1259  return NVPTX::TEX_UNIFIED_2D_ARRAY_S32_S32_I;
1260  case NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_R:
1261  return NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_I;
1262  case NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_LEVEL_R:
1263  return NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_LEVEL_I;
1264  case NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_GRAD_R:
1265  return NVPTX::TEX_UNIFIED_2D_ARRAY_S32_F32_GRAD_I;
1266  case NVPTX::TEX_UNIFIED_2D_ARRAY_U32_S32_R:
1267  return NVPTX::TEX_UNIFIED_2D_ARRAY_U32_S32_I;
1268  case NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_R:
1269  return NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_I;
1270  case NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_LEVEL_R:
1271  return NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_LEVEL_I;
1272  case NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_GRAD_R:
1273  return NVPTX::TEX_UNIFIED_2D_ARRAY_U32_F32_GRAD_I;
1274  case NVPTX::TEX_UNIFIED_3D_F32_S32_R:
1275  return NVPTX::TEX_UNIFIED_3D_F32_S32_I;
1276  case NVPTX::TEX_UNIFIED_3D_F32_F32_R:
1277  return NVPTX::TEX_UNIFIED_3D_F32_F32_I;
1278  case NVPTX::TEX_UNIFIED_3D_F32_F32_LEVEL_R:
1279  return NVPTX::TEX_UNIFIED_3D_F32_F32_LEVEL_I;
1280  case NVPTX::TEX_UNIFIED_3D_F32_F32_GRAD_R:
1281  return NVPTX::TEX_UNIFIED_3D_F32_F32_GRAD_I;
1282  case NVPTX::TEX_UNIFIED_3D_S32_S32_R:
1283  return NVPTX::TEX_UNIFIED_3D_S32_S32_I;
1284  case NVPTX::TEX_UNIFIED_3D_S32_F32_R:
1285  return NVPTX::TEX_UNIFIED_3D_S32_F32_I;
1286  case NVPTX::TEX_UNIFIED_3D_S32_F32_LEVEL_R:
1287  return NVPTX::TEX_UNIFIED_3D_S32_F32_LEVEL_I;
1288  case NVPTX::TEX_UNIFIED_3D_S32_F32_GRAD_R:
1289  return NVPTX::TEX_UNIFIED_3D_S32_F32_GRAD_I;
1290  case NVPTX::TEX_UNIFIED_3D_U32_S32_R:
1291  return NVPTX::TEX_UNIFIED_3D_U32_S32_I;
1292  case NVPTX::TEX_UNIFIED_3D_U32_F32_R:
1293  return NVPTX::TEX_UNIFIED_3D_U32_F32_I;
1294  case NVPTX::TEX_UNIFIED_3D_U32_F32_LEVEL_R:
1295  return NVPTX::TEX_UNIFIED_3D_U32_F32_LEVEL_I;
1296  case NVPTX::TEX_UNIFIED_3D_U32_F32_GRAD_R:
1297  return NVPTX::TEX_UNIFIED_3D_U32_F32_GRAD_I;
1298  case NVPTX::TEX_UNIFIED_CUBE_F32_F32_R:
1299  return NVPTX::TEX_UNIFIED_CUBE_F32_F32_I;
1300  case NVPTX::TEX_UNIFIED_CUBE_F32_F32_LEVEL_R:
1301  return NVPTX::TEX_UNIFIED_CUBE_F32_F32_LEVEL_I;
1302  case NVPTX::TEX_UNIFIED_CUBE_S32_F32_R:
1303  return NVPTX::TEX_UNIFIED_CUBE_S32_F32_I;
1304  case NVPTX::TEX_UNIFIED_CUBE_S32_F32_LEVEL_R:
1305  return NVPTX::TEX_UNIFIED_CUBE_S32_F32_LEVEL_I;
1306  case NVPTX::TEX_UNIFIED_CUBE_U32_F32_R:
1307  return NVPTX::TEX_UNIFIED_CUBE_U32_F32_I;
1308  case NVPTX::TEX_UNIFIED_CUBE_U32_F32_LEVEL_R:
1309  return NVPTX::TEX_UNIFIED_CUBE_U32_F32_LEVEL_I;
1310  case NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_R:
1311  return NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_I;
1312  case NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_LEVEL_R:
1313  return NVPTX::TEX_UNIFIED_CUBE_ARRAY_F32_F32_LEVEL_I;
1314  case NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_R:
1315  return NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_I;
1316  case NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_LEVEL_R:
1317  return NVPTX::TEX_UNIFIED_CUBE_ARRAY_S32_F32_LEVEL_I;
1318  case NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_R:
1319  return NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_I;
1320  case NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_LEVEL_R:
1321  return NVPTX::TEX_UNIFIED_CUBE_ARRAY_U32_F32_LEVEL_I;
1322  case NVPTX::TLD4_UNIFIED_R_2D_F32_F32_R:
1323  return NVPTX::TLD4_UNIFIED_R_2D_F32_F32_I;
1324  case NVPTX::TLD4_UNIFIED_G_2D_F32_F32_R:
1325  return NVPTX::TLD4_UNIFIED_G_2D_F32_F32_I;
1326  case NVPTX::TLD4_UNIFIED_B_2D_F32_F32_R:
1327  return NVPTX::TLD4_UNIFIED_B_2D_F32_F32_I;
1328  case NVPTX::TLD4_UNIFIED_A_2D_F32_F32_R:
1329  return NVPTX::TLD4_UNIFIED_A_2D_F32_F32_I;
1330  case NVPTX::TLD4_UNIFIED_R_2D_S32_F32_R:
1331  return NVPTX::TLD4_UNIFIED_R_2D_S32_F32_I;
1332  case NVPTX::TLD4_UNIFIED_G_2D_S32_F32_R:
1333  return NVPTX::TLD4_UNIFIED_G_2D_S32_F32_I;
1334  case NVPTX::TLD4_UNIFIED_B_2D_S32_F32_R:
1335  return NVPTX::TLD4_UNIFIED_B_2D_S32_F32_I;
1336  case NVPTX::TLD4_UNIFIED_A_2D_S32_F32_R:
1337  return NVPTX::TLD4_UNIFIED_A_2D_S32_F32_I;
1338  case NVPTX::TLD4_UNIFIED_R_2D_U32_F32_R:
1339  return NVPTX::TLD4_UNIFIED_R_2D_U32_F32_I;
1340  case NVPTX::TLD4_UNIFIED_G_2D_U32_F32_R:
1341  return NVPTX::TLD4_UNIFIED_G_2D_U32_F32_I;
1342  case NVPTX::TLD4_UNIFIED_B_2D_U32_F32_R:
1343  return NVPTX::TLD4_UNIFIED_B_2D_U32_F32_I;
1344  case NVPTX::TLD4_UNIFIED_A_2D_U32_F32_R:
1345  return NVPTX::TLD4_UNIFIED_A_2D_U32_F32_I;
1346  default:
1347  llvm_unreachable("Unhandled TEX opcode");
1348  };
1349 }
1350 
1351 static unsigned samplerRegisterToIndexOpcode(unsigned RegOC) {
1352  switch (RegOC) {
1353  case NVPTX::TEX_1D_F32_S32_RR:
1354  return NVPTX::TEX_1D_F32_S32_RI;
1355  case NVPTX::TEX_1D_F32_S32_IR:
1356  return NVPTX::TEX_1D_F32_S32_II;
1357  case NVPTX::TEX_1D_F32_F32_RR:
1358  return NVPTX::TEX_1D_F32_F32_RI;
1359  case NVPTX::TEX_1D_F32_F32_IR:
1360  return NVPTX::TEX_1D_F32_F32_II;
1361  case NVPTX::TEX_1D_F32_F32_LEVEL_RR:
1362  return NVPTX::TEX_1D_F32_F32_LEVEL_RI;
1363  case NVPTX::TEX_1D_F32_F32_LEVEL_IR:
1364  return NVPTX::TEX_1D_F32_F32_LEVEL_II;
1365  case NVPTX::TEX_1D_F32_F32_GRAD_RR:
1366  return NVPTX::TEX_1D_F32_F32_GRAD_RI;
1367  case NVPTX::TEX_1D_F32_F32_GRAD_IR:
1368  return NVPTX::TEX_1D_F32_F32_GRAD_II;
1369  case NVPTX::TEX_1D_S32_S32_RR:
1370  return NVPTX::TEX_1D_S32_S32_RI;
1371  case NVPTX::TEX_1D_S32_S32_IR:
1372  return NVPTX::TEX_1D_S32_S32_II;
1373  case NVPTX::TEX_1D_S32_F32_RR:
1374  return NVPTX::TEX_1D_S32_F32_RI;
1375  case NVPTX::TEX_1D_S32_F32_IR:
1376  return NVPTX::TEX_1D_S32_F32_II;
1377  case NVPTX::TEX_1D_S32_F32_LEVEL_RR:
1378  return NVPTX::TEX_1D_S32_F32_LEVEL_RI;
1379  case NVPTX::TEX_1D_S32_F32_LEVEL_IR:
1380  return NVPTX::TEX_1D_S32_F32_LEVEL_II;
1381  case NVPTX::TEX_1D_S32_F32_GRAD_RR:
1382  return NVPTX::TEX_1D_S32_F32_GRAD_RI;
1383  case NVPTX::TEX_1D_S32_F32_GRAD_IR:
1384  return NVPTX::TEX_1D_S32_F32_GRAD_II;
1385  case NVPTX::TEX_1D_U32_S32_RR:
1386  return NVPTX::TEX_1D_U32_S32_RI;
1387  case NVPTX::TEX_1D_U32_S32_IR:
1388  return NVPTX::TEX_1D_U32_S32_II;
1389  case NVPTX::TEX_1D_U32_F32_RR:
1390  return NVPTX::TEX_1D_U32_F32_RI;
1391  case NVPTX::TEX_1D_U32_F32_IR:
1392  return NVPTX::TEX_1D_U32_F32_II;
1393  case NVPTX::TEX_1D_U32_F32_LEVEL_RR:
1394  return NVPTX::TEX_1D_U32_F32_LEVEL_RI;
1395  case NVPTX::TEX_1D_U32_F32_LEVEL_IR:
1396  return NVPTX::TEX_1D_U32_F32_LEVEL_II;
1397  case NVPTX::TEX_1D_U32_F32_GRAD_RR:
1398  return NVPTX::TEX_1D_U32_F32_GRAD_RI;
1399  case NVPTX::TEX_1D_U32_F32_GRAD_IR:
1400  return NVPTX::TEX_1D_U32_F32_GRAD_II;
1401  case NVPTX::TEX_1D_ARRAY_F32_S32_RR:
1402  return NVPTX::TEX_1D_ARRAY_F32_S32_RI;
1403  case NVPTX::TEX_1D_ARRAY_F32_S32_IR:
1404  return NVPTX::TEX_1D_ARRAY_F32_S32_II;
1405  case NVPTX::TEX_1D_ARRAY_F32_F32_RR:
1406  return NVPTX::TEX_1D_ARRAY_F32_F32_RI;
1407  case NVPTX::TEX_1D_ARRAY_F32_F32_IR:
1408  return NVPTX::TEX_1D_ARRAY_F32_F32_II;
1409  case NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_RR:
1410  return NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_RI;
1411  case NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_IR:
1412  return NVPTX::TEX_1D_ARRAY_F32_F32_LEVEL_II;
1413  case NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_RR:
1414  return NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_RI;
1415  case NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_IR:
1416  return NVPTX::TEX_1D_ARRAY_F32_F32_GRAD_II;
1417  case NVPTX::TEX_1D_ARRAY_S32_S32_RR:
1418  return NVPTX::TEX_1D_ARRAY_S32_S32_RI;
1419  case NVPTX::TEX_1D_ARRAY_S32_S32_IR:
1420  return NVPTX::TEX_1D_ARRAY_S32_S32_II;
1421  case NVPTX::TEX_1D_ARRAY_S32_F32_RR:
1422  return NVPTX::TEX_1D_ARRAY_S32_F32_RI;
1423  case NVPTX::TEX_1D_ARRAY_S32_F32_IR:
1424  return NVPTX::TEX_1D_ARRAY_S32_F32_II;
1425  case NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_RR:
1426  return NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_RI;
1427  case NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_IR:
1428  return NVPTX::TEX_1D_ARRAY_S32_F32_LEVEL_II;
1429  case NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_RR:
1430  return NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_RI;
1431  case NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_IR:
1432  return NVPTX::TEX_1D_ARRAY_S32_F32_GRAD_II;
1433  case NVPTX::TEX_1D_ARRAY_U32_S32_RR:
1434  return NVPTX::TEX_1D_ARRAY_U32_S32_RI;
1435  case NVPTX::TEX_1D_ARRAY_U32_S32_IR:
1436  return NVPTX::TEX_1D_ARRAY_U32_S32_II;
1437  case NVPTX::TEX_1D_ARRAY_U32_F32_RR:
1438  return NVPTX::TEX_1D_ARRAY_U32_F32_RI;
1439  case NVPTX::TEX_1D_ARRAY_U32_F32_IR:
1440  return NVPTX::TEX_1D_ARRAY_U32_F32_II;
1441  case NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_RR:
1442  return NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_RI;
1443  case NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_IR:
1444  return NVPTX::TEX_1D_ARRAY_U32_F32_LEVEL_II;
1445  case NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_RR:
1446  return NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_RI;
1447  case NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_IR:
1448  return NVPTX::TEX_1D_ARRAY_U32_F32_GRAD_II;
1449  case NVPTX::TEX_2D_F32_S32_RR:
1450  return NVPTX::TEX_2D_F32_S32_RI;
1451  case NVPTX::TEX_2D_F32_S32_IR:
1452  return NVPTX::TEX_2D_F32_S32_II;
1453  case NVPTX::TEX_2D_F32_F32_RR:
1454  return NVPTX::TEX_2D_F32_F32_RI;
1455  case NVPTX::TEX_2D_F32_F32_IR:
1456  return NVPTX::TEX_2D_F32_F32_II;
1457  case NVPTX::TEX_2D_F32_F32_LEVEL_RR:
1458  return NVPTX::TEX_2D_F32_F32_LEVEL_RI;
1459  case NVPTX::TEX_2D_F32_F32_LEVEL_IR:
1460  return NVPTX::TEX_2D_F32_F32_LEVEL_II;
1461  case NVPTX::TEX_2D_F32_F32_GRAD_RR:
1462  return NVPTX::TEX_2D_F32_F32_GRAD_RI;
1463  case NVPTX::TEX_2D_F32_F32_GRAD_IR:
1464  return NVPTX::TEX_2D_F32_F32_GRAD_II;
1465  case NVPTX::TEX_2D_S32_S32_RR:
1466  return NVPTX::TEX_2D_S32_S32_RI;
1467  case NVPTX::TEX_2D_S32_S32_IR:
1468  return NVPTX::TEX_2D_S32_S32_II;
1469  case NVPTX::TEX_2D_S32_F32_RR:
1470  return NVPTX::TEX_2D_S32_F32_RI;
1471  case NVPTX::TEX_2D_S32_F32_IR:
1472  return NVPTX::TEX_2D_S32_F32_II;
1473  case NVPTX::TEX_2D_S32_F32_LEVEL_RR:
1474  return NVPTX::TEX_2D_S32_F32_LEVEL_RI;
1475  case NVPTX::TEX_2D_S32_F32_LEVEL_IR:
1476  return NVPTX::TEX_2D_S32_F32_LEVEL_II;
1477  case NVPTX::TEX_2D_S32_F32_GRAD_RR:
1478  return NVPTX::TEX_2D_S32_F32_GRAD_RI;
1479  case NVPTX::TEX_2D_S32_F32_GRAD_IR:
1480  return NVPTX::TEX_2D_S32_F32_GRAD_II;
1481  case NVPTX::TEX_2D_U32_S32_RR:
1482  return NVPTX::TEX_2D_U32_S32_RI;
1483  case NVPTX::TEX_2D_U32_S32_IR:
1484  return NVPTX::TEX_2D_U32_S32_II;
1485  case NVPTX::TEX_2D_U32_F32_RR:
1486  return NVPTX::TEX_2D_U32_F32_RI;
1487  case NVPTX::TEX_2D_U32_F32_IR:
1488  return NVPTX::TEX_2D_U32_F32_II;
1489  case NVPTX::TEX_2D_U32_F32_LEVEL_RR:
1490  return NVPTX::TEX_2D_U32_F32_LEVEL_RI;
1491  case NVPTX::TEX_2D_U32_F32_LEVEL_IR:
1492  return NVPTX::TEX_2D_U32_F32_LEVEL_II;
1493  case NVPTX::TEX_2D_U32_F32_GRAD_RR:
1494  return NVPTX::TEX_2D_U32_F32_GRAD_RI;
1495  case NVPTX::TEX_2D_U32_F32_GRAD_IR:
1496  return NVPTX::TEX_2D_U32_F32_GRAD_II;
1497  case NVPTX::TEX_2D_ARRAY_F32_S32_RR:
1498  return NVPTX::TEX_2D_ARRAY_F32_S32_RI;
1499  case NVPTX::TEX_2D_ARRAY_F32_S32_IR:
1500  return NVPTX::TEX_2D_ARRAY_F32_S32_II;
1501  case NVPTX::TEX_2D_ARRAY_F32_F32_RR:
1502  return NVPTX::TEX_2D_ARRAY_F32_F32_RI;
1503  case NVPTX::TEX_2D_ARRAY_F32_F32_IR:
1504  return NVPTX::TEX_2D_ARRAY_F32_F32_II;
1505  case NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_RR:
1506  return NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_RI;
1507  case NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_IR:
1508  return NVPTX::TEX_2D_ARRAY_F32_F32_LEVEL_II;
1509  case NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_RR:
1510  return NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_RI;
1511  case NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_IR:
1512  return NVPTX::TEX_2D_ARRAY_F32_F32_GRAD_II;
1513  case NVPTX::TEX_2D_ARRAY_S32_S32_RR:
1514  return NVPTX::TEX_2D_ARRAY_S32_S32_RI;
1515  case NVPTX::TEX_2D_ARRAY_S32_S32_IR:
1516  return NVPTX::TEX_2D_ARRAY_S32_S32_II;
1517  case NVPTX::TEX_2D_ARRAY_S32_F32_RR:
1518  return NVPTX::TEX_2D_ARRAY_S32_F32_RI;
1519  case NVPTX::TEX_2D_ARRAY_S32_F32_IR:
1520  return NVPTX::TEX_2D_ARRAY_S32_F32_II;
1521  case NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_RR:
1522  return NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_RI;
1523  case NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_IR:
1524  return NVPTX::TEX_2D_ARRAY_S32_F32_LEVEL_II;
1525  case NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_RR:
1526  return NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_RI;
1527  case NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_IR:
1528  return NVPTX::TEX_2D_ARRAY_S32_F32_GRAD_II;
1529  case NVPTX::TEX_2D_ARRAY_U32_S32_RR:
1530  return NVPTX::TEX_2D_ARRAY_U32_S32_RI;
1531  case NVPTX::TEX_2D_ARRAY_U32_S32_IR:
1532  return NVPTX::TEX_2D_ARRAY_U32_S32_II;
1533  case NVPTX::TEX_2D_ARRAY_U32_F32_RR:
1534  return NVPTX::TEX_2D_ARRAY_U32_F32_RI;
1535  case NVPTX::TEX_2D_ARRAY_U32_F32_IR:
1536  return NVPTX::TEX_2D_ARRAY_U32_F32_II;
1537  case NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_RR:
1538  return NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_RI;
1539  case NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_IR:
1540  return NVPTX::TEX_2D_ARRAY_U32_F32_LEVEL_II;
1541  case NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_RR:
1542  return NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_RI;
1543  case NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_IR:
1544  return NVPTX::TEX_2D_ARRAY_U32_F32_GRAD_II;
1545  case NVPTX::TEX_3D_F32_S32_RR:
1546  return NVPTX::TEX_3D_F32_S32_RI;
1547  case NVPTX::TEX_3D_F32_S32_IR:
1548  return NVPTX::TEX_3D_F32_S32_II;
1549  case NVPTX::TEX_3D_F32_F32_RR:
1550  return NVPTX::TEX_3D_F32_F32_RI;
1551  case NVPTX::TEX_3D_F32_F32_IR:
1552  return NVPTX::TEX_3D_F32_F32_II;
1553  case NVPTX::TEX_3D_F32_F32_LEVEL_RR:
1554  return NVPTX::TEX_3D_F32_F32_LEVEL_RI;
1555  case NVPTX::TEX_3D_F32_F32_LEVEL_IR:
1556  return NVPTX::TEX_3D_F32_F32_LEVEL_II;
1557  case NVPTX::TEX_3D_F32_F32_GRAD_RR:
1558  return NVPTX::TEX_3D_F32_F32_GRAD_RI;
1559  case NVPTX::TEX_3D_F32_F32_GRAD_IR:
1560  return NVPTX::TEX_3D_F32_F32_GRAD_II;
1561  case NVPTX::TEX_3D_S32_S32_RR:
1562  return NVPTX::TEX_3D_S32_S32_RI;
1563  case NVPTX::TEX_3D_S32_S32_IR:
1564  return NVPTX::TEX_3D_S32_S32_II;
1565  case NVPTX::TEX_3D_S32_F32_RR:
1566  return NVPTX::TEX_3D_S32_F32_RI;
1567  case NVPTX::TEX_3D_S32_F32_IR:
1568  return NVPTX::TEX_3D_S32_F32_II;
1569  case NVPTX::TEX_3D_S32_F32_LEVEL_RR:
1570  return NVPTX::TEX_3D_S32_F32_LEVEL_RI;
1571  case NVPTX::TEX_3D_S32_F32_LEVEL_IR:
1572  return NVPTX::TEX_3D_S32_F32_LEVEL_II;
1573  case NVPTX::TEX_3D_S32_F32_GRAD_RR:
1574  return NVPTX::TEX_3D_S32_F32_GRAD_RI;
1575  case NVPTX::TEX_3D_S32_F32_GRAD_IR:
1576  return NVPTX::TEX_3D_S32_F32_GRAD_II;
1577  case NVPTX::TEX_3D_U32_S32_RR:
1578  return NVPTX::TEX_3D_U32_S32_RI;
1579  case NVPTX::TEX_3D_U32_S32_IR:
1580  return NVPTX::TEX_3D_U32_S32_II;
1581  case NVPTX::TEX_3D_U32_F32_RR:
1582  return NVPTX::TEX_3D_U32_F32_RI;
1583  case NVPTX::TEX_3D_U32_F32_IR:
1584  return NVPTX::TEX_3D_U32_F32_II;
1585  case NVPTX::TEX_3D_U32_F32_LEVEL_RR:
1586  return NVPTX::TEX_3D_U32_F32_LEVEL_RI;
1587  case NVPTX::TEX_3D_U32_F32_LEVEL_IR:
1588  return NVPTX::TEX_3D_U32_F32_LEVEL_II;
1589  case NVPTX::TEX_3D_U32_F32_GRAD_RR:
1590  return NVPTX::TEX_3D_U32_F32_GRAD_RI;
1591  case NVPTX::TEX_3D_U32_F32_GRAD_IR:
1592  return NVPTX::TEX_3D_U32_F32_GRAD_II;
1593  case NVPTX::TEX_CUBE_F32_F32_RR:
1594  return NVPTX::TEX_CUBE_F32_F32_RI;
1595  case NVPTX::TEX_CUBE_F32_F32_IR:
1596  return NVPTX::TEX_CUBE_F32_F32_II;
1597  case NVPTX::TEX_CUBE_F32_F32_LEVEL_RR:
1598  return NVPTX::TEX_CUBE_F32_F32_LEVEL_RI;
1599  case NVPTX::TEX_CUBE_F32_F32_LEVEL_IR:
1600  return NVPTX::TEX_CUBE_F32_F32_LEVEL_II;
1601  case NVPTX::TEX_CUBE_S32_F32_RR:
1602  return NVPTX::TEX_CUBE_S32_F32_RI;
1603  case NVPTX::TEX_CUBE_S32_F32_IR:
1604  return NVPTX::TEX_CUBE_S32_F32_II;
1605  case NVPTX::TEX_CUBE_S32_F32_LEVEL_RR:
1606  return NVPTX::TEX_CUBE_S32_F32_LEVEL_RI;
1607  case NVPTX::TEX_CUBE_S32_F32_LEVEL_IR:
1608  return NVPTX::TEX_CUBE_S32_F32_LEVEL_II;
1609  case NVPTX::TEX_CUBE_U32_F32_RR:
1610  return NVPTX::TEX_CUBE_U32_F32_RI;
1611  case NVPTX::TEX_CUBE_U32_F32_IR:
1612  return NVPTX::TEX_CUBE_U32_F32_II;
1613  case NVPTX::TEX_CUBE_U32_F32_LEVEL_RR:
1614  return NVPTX::TEX_CUBE_U32_F32_LEVEL_RI;
1615  case NVPTX::TEX_CUBE_U32_F32_LEVEL_IR:
1616  return NVPTX::TEX_CUBE_U32_F32_LEVEL_II;
1617  case NVPTX::TEX_CUBE_ARRAY_F32_F32_RR:
1618  return NVPTX::TEX_CUBE_ARRAY_F32_F32_RI;
1619  case NVPTX::TEX_CUBE_ARRAY_F32_F32_IR:
1620  return NVPTX::TEX_CUBE_ARRAY_F32_F32_II;
1621  case NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_RR:
1622  return NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_RI;
1623  case NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_IR:
1624  return NVPTX::TEX_CUBE_ARRAY_F32_F32_LEVEL_II;
1625  case NVPTX::TEX_CUBE_ARRAY_S32_F32_RR:
1626  return NVPTX::TEX_CUBE_ARRAY_S32_F32_RI;
1627  case NVPTX::TEX_CUBE_ARRAY_S32_F32_IR:
1628  return NVPTX::TEX_CUBE_ARRAY_S32_F32_II;
1629  case NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_RR:
1630  return NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_RI;
1631  case NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_IR:
1632  return NVPTX::TEX_CUBE_ARRAY_S32_F32_LEVEL_II;
1633  case NVPTX::TEX_CUBE_ARRAY_U32_F32_RR:
1634  return NVPTX::TEX_CUBE_ARRAY_U32_F32_RI;
1635  case NVPTX::TEX_CUBE_ARRAY_U32_F32_IR:
1636  return NVPTX::TEX_CUBE_ARRAY_U32_F32_II;
1637  case NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_RR:
1638  return NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_RI;
1639  case NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_IR:
1640  return NVPTX::TEX_CUBE_ARRAY_U32_F32_LEVEL_II;
1641  case NVPTX::TLD4_R_2D_F32_F32_RR:
1642  return NVPTX::TLD4_R_2D_F32_F32_RI;
1643  case NVPTX::TLD4_R_2D_F32_F32_IR:
1644  return NVPTX::TLD4_R_2D_F32_F32_II;
1645  case NVPTX::TLD4_G_2D_F32_F32_RR:
1646  return NVPTX::TLD4_G_2D_F32_F32_RI;
1647  case NVPTX::TLD4_G_2D_F32_F32_IR:
1648  return NVPTX::TLD4_G_2D_F32_F32_II;
1649  case NVPTX::TLD4_B_2D_F32_F32_RR:
1650  return NVPTX::TLD4_B_2D_F32_F32_RI;
1651  case NVPTX::TLD4_B_2D_F32_F32_IR:
1652  return NVPTX::TLD4_B_2D_F32_F32_II;
1653  case NVPTX::TLD4_A_2D_F32_F32_RR:
1654  return NVPTX::TLD4_A_2D_F32_F32_RI;
1655  case NVPTX::TLD4_A_2D_F32_F32_IR:
1656  return NVPTX::TLD4_A_2D_F32_F32_II;
1657  case NVPTX::TLD4_R_2D_S32_F32_RR:
1658  return NVPTX::TLD4_R_2D_S32_F32_RI;
1659  case NVPTX::TLD4_R_2D_S32_F32_IR:
1660  return NVPTX::TLD4_R_2D_S32_F32_II;
1661  case NVPTX::TLD4_G_2D_S32_F32_RR:
1662  return NVPTX::TLD4_G_2D_S32_F32_RI;
1663  case NVPTX::TLD4_G_2D_S32_F32_IR:
1664  return NVPTX::TLD4_G_2D_S32_F32_II;
1665  case NVPTX::TLD4_B_2D_S32_F32_RR:
1666  return NVPTX::TLD4_B_2D_S32_F32_RI;
1667  case NVPTX::TLD4_B_2D_S32_F32_IR:
1668  return NVPTX::TLD4_B_2D_S32_F32_II;
1669  case NVPTX::TLD4_A_2D_S32_F32_RR:
1670  return NVPTX::TLD4_A_2D_S32_F32_RI;
1671  case NVPTX::TLD4_A_2D_S32_F32_IR:
1672  return NVPTX::TLD4_A_2D_S32_F32_II;
1673  case NVPTX::TLD4_R_2D_U32_F32_RR:
1674  return NVPTX::TLD4_R_2D_U32_F32_RI;
1675  case NVPTX::TLD4_R_2D_U32_F32_IR:
1676  return NVPTX::TLD4_R_2D_U32_F32_II;
1677  case NVPTX::TLD4_G_2D_U32_F32_RR:
1678  return NVPTX::TLD4_G_2D_U32_F32_RI;
1679  case NVPTX::TLD4_G_2D_U32_F32_IR:
1680  return NVPTX::TLD4_G_2D_U32_F32_II;
1681  case NVPTX::TLD4_B_2D_U32_F32_RR:
1682  return NVPTX::TLD4_B_2D_U32_F32_RI;
1683  case NVPTX::TLD4_B_2D_U32_F32_IR:
1684  return NVPTX::TLD4_B_2D_U32_F32_II;
1685  case NVPTX::TLD4_A_2D_U32_F32_RR:
1686  return NVPTX::TLD4_A_2D_U32_F32_RI;
1687  case NVPTX::TLD4_A_2D_U32_F32_IR:
1688  return NVPTX::TLD4_A_2D_U32_F32_II;
1689  default:
1690  llvm_unreachable("Unhandled TEX opcode");
1691  };
1692 }
1693 
1694 static unsigned queryRegisterToIndexOpcode(unsigned RegOC) {
1695  switch (RegOC) {
1696  case NVPTX::TXQ_CHANNEL_ORDER_R:
1697  return NVPTX::TXQ_CHANNEL_ORDER_I;
1698  case NVPTX::TXQ_CHANNEL_DATA_TYPE_R:
1699  return NVPTX::TXQ_CHANNEL_DATA_TYPE_I;
1700  case NVPTX::TXQ_WIDTH_R:
1701  return NVPTX::TXQ_WIDTH_I;
1702  case NVPTX::TXQ_HEIGHT_R:
1703  return NVPTX::TXQ_HEIGHT_I;
1704  case NVPTX::TXQ_DEPTH_R:
1705  return NVPTX::TXQ_DEPTH_I;
1706  case NVPTX::TXQ_ARRAY_SIZE_R:
1707  return NVPTX::TXQ_ARRAY_SIZE_I;
1708  case NVPTX::TXQ_NUM_SAMPLES_R:
1709  return NVPTX::TXQ_NUM_SAMPLES_I;
1710  case NVPTX::TXQ_NUM_MIPMAP_LEVELS_R:
1711  return NVPTX::TXQ_NUM_MIPMAP_LEVELS_I;
1712  case NVPTX::SUQ_CHANNEL_ORDER_R:
1713  return NVPTX::SUQ_CHANNEL_ORDER_I;
1714  case NVPTX::SUQ_CHANNEL_DATA_TYPE_R:
1715  return NVPTX::SUQ_CHANNEL_DATA_TYPE_I;
1716  case NVPTX::SUQ_WIDTH_R:
1717  return NVPTX::SUQ_WIDTH_I;
1718  case NVPTX::SUQ_HEIGHT_R:
1719  return NVPTX::SUQ_HEIGHT_I;
1720  case NVPTX::SUQ_DEPTH_R:
1721  return NVPTX::SUQ_DEPTH_I;
1722  case NVPTX::SUQ_ARRAY_SIZE_R:
1723  return NVPTX::SUQ_ARRAY_SIZE_I;
1724  default:
1725  llvm_unreachable("Unhandled TXQ/SUQ opcode");
1726  };
1727 }
1728 
1730  MachineFunction &MF = *MI.getParent()->getParent();
1731  const MCInstrDesc &MCID = MI.getDesc();
1732  const NVPTXInstrInfo *TII = MF.getSubtarget<NVPTXSubtarget>().getInstrInfo();
1733 
1734  if (MCID.TSFlags & NVPTXII::IsTexFlag) {
1735  // This is a texture fetch, so operand 4 is a texref and operand 5 is
1736  // a samplerref
1737  MachineOperand &TexHandle = MI.getOperand(4);
1738  if (replaceImageHandle(TexHandle, MF))
1739  MI.setDesc(TII->get(texRegisterToIndexOpcode(MI.getOpcode())));
1740 
1741  if (!(MCID.TSFlags & NVPTXII::IsTexModeUnifiedFlag)) {
1742  MachineOperand &SampHandle = MI.getOperand(5);
1743  if (replaceImageHandle(SampHandle, MF))
1744  MI.setDesc(TII->get(samplerRegisterToIndexOpcode(MI.getOpcode())));
1745  }
1746 
1747  return true;
1748  } else if (MCID.TSFlags & NVPTXII::IsSuldMask) {
1749  unsigned VecSize =
1750  1 << (((MCID.TSFlags & NVPTXII::IsSuldMask) >> NVPTXII::IsSuldShift) - 1);
1751 
1752  // For a surface load of vector size N, the Nth operand will be the surfref
1753  MachineOperand &SurfHandle = MI.getOperand(VecSize);
1754 
1755  if (replaceImageHandle(SurfHandle, MF))
1756  MI.setDesc(TII->get(suldRegisterToIndexOpcode(MI.getOpcode())));
1757 
1758  return true;
1759  } else if (MCID.TSFlags & NVPTXII::IsSustFlag) {
1760  // This is a surface store, so operand 0 is a surfref
1761  MachineOperand &SurfHandle = MI.getOperand(0);
1762 
1763  if (replaceImageHandle(SurfHandle, MF))
1764  MI.setDesc(TII->get(sustRegisterToIndexOpcode(MI.getOpcode())));
1765 
1766  return true;
1767  } else if (MCID.TSFlags & NVPTXII::IsSurfTexQueryFlag) {
1768  // This is a query, so operand 1 is a surfref/texref
1769  MachineOperand &Handle = MI.getOperand(1);
1770 
1771  if (replaceImageHandle(Handle, MF))
1772  MI.setDesc(TII->get(queryRegisterToIndexOpcode(MI.getOpcode())));
1773 
1774  return true;
1775  }
1776 
1777  return false;
1778 }
1779 
1780 bool NVPTXReplaceImageHandles::replaceImageHandle(MachineOperand &Op,
1781  MachineFunction &MF) {
1782  unsigned Idx;
1783  if (findIndexForHandle(Op, MF, Idx)) {
1784  Op.ChangeToImmediate(Idx);
1785  return true;
1786  }
1787  return false;
1788 }
1789 
1790 bool NVPTXReplaceImageHandles::
1791 findIndexForHandle(MachineOperand &Op, MachineFunction &MF, unsigned &Idx) {
1792  const MachineRegisterInfo &MRI = MF.getRegInfo();
1794 
1795  assert(Op.isReg() && "Handle is not in a reg?");
1796 
1797  // Which instruction defines the handle?
1798  MachineInstr &TexHandleDef = *MRI.getVRegDef(Op.getReg());
1799 
1800  switch (TexHandleDef.getOpcode()) {
1801  case NVPTX::LD_i64_avar: {
1802  // The handle is a parameter value being loaded, replace with the
1803  // parameter symbol
1804  const NVPTXTargetMachine &TM =
1805  static_cast<const NVPTXTargetMachine &>(MF.getTarget());
1806  if (TM.getDrvInterface() == NVPTX::CUDA) {
1807  // For CUDA, we preserve the param loads coming from function arguments
1808  return false;
1809  }
1810 
1811  assert(TexHandleDef.getOperand(6).isSymbol() && "Load is not a symbol!");
1812  StringRef Sym = TexHandleDef.getOperand(6).getSymbolName();
1813  std::string ParamBaseName = std::string(MF.getName());
1814  ParamBaseName += "_param_";
1815  assert(Sym.startswith(ParamBaseName) && "Invalid symbol reference");
1816  unsigned Param = atoi(Sym.data()+ParamBaseName.size());
1817  std::string NewSym;
1818  raw_string_ostream NewSymStr(NewSym);
1819  NewSymStr << MF.getName() << "_param_" << Param;
1820 
1821  InstrsToRemove.insert(&TexHandleDef);
1822  Idx = MFI->getImageHandleSymbolIndex(NewSymStr.str().c_str());
1823  return true;
1824  }
1825  case NVPTX::texsurf_handles: {
1826  // The handle is a global variable, replace with the global variable name
1827  assert(TexHandleDef.getOperand(1).isGlobal() && "Load is not a global!");
1828  const GlobalValue *GV = TexHandleDef.getOperand(1).getGlobal();
1829  assert(GV->hasName() && "Global sampler must be named!");
1830  InstrsToRemove.insert(&TexHandleDef);
1831  Idx = MFI->getImageHandleSymbolIndex(GV->getName().data());
1832  return true;
1833  }
1834  case NVPTX::nvvm_move_i64:
1835  case TargetOpcode::COPY: {
1836  bool Res = findIndexForHandle(TexHandleDef.getOperand(1), MF, Idx);
1837  if (Res) {
1838  InstrsToRemove.insert(&TexHandleDef);
1839  }
1840  return Res;
1841  }
1842  default:
1843  llvm_unreachable("Unknown instruction operating on handle");
1844  }
1845 }
1846 
1848  return new NVPTXReplaceImageHandles();
1849 }
llvm::NVPTXII::IsTexFlag
@ IsTexFlag
Definition: NVPTXBaseInfo.h:35
texRegisterToIndexOpcode
static unsigned texRegisterToIndexOpcode(unsigned RegOC)
Definition: NVPTXReplaceImageHandles.cpp:840
llvm::StringRef::startswith
LLVM_NODISCARD bool startswith(StringRef Prefix) const
Check if this string starts with the given Prefix.
Definition: StringRef.h:290
MI
IRTranslator LLVM IR MI
Definition: IRTranslator.cpp:104
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:17
llvm::ARMII::VecSize
@ VecSize
Definition: ARMBaseInfo.h:421
llvm::MachineOperand::getGlobal
const GlobalValue * getGlobal() const
Definition: MachineOperand.h:572
llvm::MachineRegisterInfo
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
Definition: MachineRegisterInfo.h:50
llvm::NVPTXInstrInfo
Definition: NVPTXInstrInfo.h:25
llvm::raw_string_ostream
A raw_ostream that writes to an std::string.
Definition: raw_ostream.h:632
llvm::Value::hasName
bool hasName() const
Definition: Value.h:261
llvm::MachineFunctionPass
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
Definition: MachineFunctionPass.h:30
llvm::createNVPTXReplaceImageHandlesPass
MachineFunctionPass * createNVPTXReplaceImageHandlesPass()
Definition: NVPTXReplaceImageHandles.cpp:1847
llvm::NVPTXII::IsSustFlag
@ IsSustFlag
Definition: NVPTXBaseInfo.h:38
llvm::MachineOperand::isSymbol
bool isSymbol() const
isSymbol - Tests if this is a MO_ExternalSymbol operand.
Definition: MachineOperand.h:340
llvm::NVPTXII::IsSuldMask
@ IsSuldMask
Definition: NVPTXBaseInfo.h:36
suldRegisterToIndexOpcode
static unsigned suldRegisterToIndexOpcode(unsigned RegOC)
Definition: NVPTXReplaceImageHandles.cpp:76
llvm::NVPTXII::IsSurfTexQueryFlag
@ IsSurfTexQueryFlag
Definition: NVPTXBaseInfo.h:39
llvm::NVPTXTargetMachine
NVPTXTargetMachine.
Definition: NVPTXTargetMachine.h:25
NVPTX.h
MachineRegisterInfo.h
llvm::MachineFunction::getRegInfo
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
Definition: MachineFunction.h:666
llvm::MCInstrDesc::TSFlags
uint64_t TSFlags
Definition: MCInstrDesc.h:205
llvm::MachineFunction::getInfo
Ty * getInfo()
getInfo - Keep track of various per-function pieces of information for backends that would like to do...
Definition: MachineFunction.h:754
llvm::MachineInstr::getOperand
const MachineOperand & getOperand(unsigned i) const
Definition: MachineInstr.h:501
Param
Value * Param
Definition: NVPTXLowerArgs.cpp:164
DenseSet.h
TII
const HexagonInstrInfo * TII
Definition: HexagonCopyToCombine.cpp:125
llvm::MCInstrDesc
Describe properties that are true of each instruction in the target description file.
Definition: MCInstrDesc.h:197
llvm::MachineOperand
MachineOperand class - Representation of each machine instruction operand.
Definition: MachineOperand.h:48
sustRegisterToIndexOpcode
static unsigned sustRegisterToIndexOpcode(unsigned RegOC)
Definition: NVPTXReplaceImageHandles.cpp:413
llvm::MachineRegisterInfo::getVRegDef
MachineInstr * getVRegDef(Register Reg) const
getVRegDef - Return the machine instr that defines the specified virtual register or null if none is ...
Definition: MachineRegisterInfo.cpp:396
llvm::NVPTXII::IsSuldShift
@ IsSuldShift
Definition: NVPTXBaseInfo.h:37
llvm::CallingConv::ID
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition: CallingConv.h:24
NVPTXMachineFunctionInfo.h
llvm::MachineBasicBlock
Definition: MachineBasicBlock.h:94
llvm::NVPTXSubtarget
Definition: NVPTXSubtarget.h:31
llvm::DenseSet
Implements a dense probed hash-table based set.
Definition: DenseSet.h:268
llvm::MachineFunction::getSubtarget
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
Definition: MachineFunction.h:656
llvm::GlobalValue
Definition: GlobalValue.h:44
llvm::MachineInstr
Representation of each machine instruction.
Definition: MachineInstr.h:66
NVPTXBaseInfo.h
MachineFunctionPass.h
llvm::MachineFunction::getName
StringRef getName() const
getName - Return the name of the corresponding LLVM function.
Definition: MachineFunction.cpp:565
assert
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
llvm::NVPTXMachineFunctionInfo::getImageHandleSymbolIndex
unsigned getImageHandleSymbolIndex(const char *Symbol)
Returns the index for the symbol Symbol.
Definition: NVPTXMachineFunctionInfo.h:39
llvm::MachineFunction
Definition: MachineFunction.h:257
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:58
llvm::MachineInstr::getOpcode
unsigned getOpcode() const
Returns the opcode of this MachineInstr.
Definition: MachineInstr.h:491
llvm_unreachable
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Definition: ErrorHandling.h:143
llvm::Value::getName
StringRef getName() const
Return a constant reference to the value's name.
Definition: Value.cpp:305
MRI
unsigned const MachineRegisterInfo * MRI
Definition: AArch64AdvSIMDScalarPass.cpp:105
MBB
MachineBasicBlock & MBB
Definition: AArch64SLSHardening.cpp:74
processInstr
static void processInstr(MachineInstr &MI, MachineIRBuilder &MIB, MachineRegisterInfo &MRI, SPIRVGlobalRegistry *GR)
Definition: SPIRVPreLegalizer.cpp:277
llvm::NVPTX::CUDA
@ CUDA
Definition: NVPTX.h:72
llvm::MachineFunction::getTarget
const LLVMTargetMachine & getTarget() const
getTarget - Return the target machine this machine code is compiled with
Definition: MachineFunction.h:652
llvm::AMDGPU::SendMsg::Op
Op
Definition: SIDefines.h:348
NVPTXTargetMachine.h
llvm::NVPTXII::IsTexModeUnifiedFlag
@ IsTexModeUnifiedFlag
Definition: NVPTXBaseInfo.h:40
llvm::MachineOperand::getSymbolName
const char * getSymbolName() const
Definition: MachineOperand.h:617
queryRegisterToIndexOpcode
static unsigned queryRegisterToIndexOpcode(unsigned RegOC)
Definition: NVPTXReplaceImageHandles.cpp:1694
samplerRegisterToIndexOpcode
static unsigned samplerRegisterToIndexOpcode(unsigned RegOC)
Definition: NVPTXReplaceImageHandles.cpp:1351
NVPTXSubtarget.h
llvm::NVPTXMachineFunctionInfo
Definition: NVPTXMachineFunctionInfo.h:20
llvm::StringRef::data
const LLVM_NODISCARD char * data() const
data - Get a pointer to the start of the string (which may not be null terminated).
Definition: StringRef.h:149
TM
const char LLVMTargetMachineRef TM
Definition: PassBuilderBindings.cpp:47
raw_ostream.h
MachineFunction.h
llvm::MachineOperand::isGlobal
bool isGlobal() const
isGlobal - Tests if this is a MO_GlobalAddress operand.
Definition: MachineOperand.h:338
llvm::Intrinsic::ID
unsigned ID
Definition: TargetTransformInfo.h:38