xref: /freebsd/contrib/llvm-project/llvm/lib/Target/NVPTX/NVPTXReplaceImageHandles.cpp (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
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"
16 #include "NVPTXMachineFunctionInfo.h"
17 #include "NVPTXSubtarget.h"
18 #include "NVPTXTargetMachine.h"
19 #include "MCTargetDesc/NVPTXBaseInfo.h"
20 #include "llvm/ADT/DenseSet.h"
21 #include "llvm/CodeGen/MachineFunction.h"
22 #include "llvm/CodeGen/MachineFunctionPass.h"
23 #include "llvm/CodeGen/MachineRegisterInfo.h"
24 #include "llvm/Support/raw_ostream.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:
43   bool processInstr(MachineInstr &MI);
44   bool replaceImageHandle(MachineOperand &Op, MachineFunction &MF);
45   bool findIndexForHandle(MachineOperand &Op, MachineFunction &MF,
46                           unsigned &Idx);
47 };
48 }
49 
50 char NVPTXReplaceImageHandles::ID = 0;
51 
52 NVPTXReplaceImageHandles::NVPTXReplaceImageHandles()
53   : MachineFunctionPass(ID) {}
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 
1729 bool NVPTXReplaceImageHandles::processInstr(MachineInstr &MI) {
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();
1793   NVPTXMachineFunctionInfo *MFI = MF.getInfo<NVPTXMachineFunctionInfo>();
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 
1847 MachineFunctionPass *llvm::createNVPTXReplaceImageHandlesPass() {
1848   return new NVPTXReplaceImageHandles();
1849 }
1850