1//===- IntrinsicsNVVM.td - Defines NVVM intrinsics ---------*- tablegen -*-===//
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// This file defines all of the NVVM-specific intrinsics for use with NVPTX.
10//
11//===----------------------------------------------------------------------===//
12
13// The following intrinsics were once defined here, but are now auto-upgraded
14// to target-generic LLVM intrinsics.
15//
16//   * llvm.nvvm.brev32  --> llvm.bitreverse.i32
17//   * llvm.nvvm.brev64  --> llvm.bitreverse.i64
18//   * llvm.nvvm.clz.i   --> llvm.ctlz.i32
19//   * llvm.nvvm.clz.ll  --> trunc i64 llvm.ctlz.i64(x) to i32
20//   * llvm.nvvm.popc.i  --> llvm.ctpop.i32
21//   * llvm.nvvm.popc.ll --> trunc i64 llvm.ctpop.i64 to i32
22//   * llvm.nvvm.abs.i   --> select(x >= -x, x, -x)
23//   * llvm.nvvm.abs.ll  --> ibid.
24//   * llvm.nvvm.max.i   --> select(x sge y, x, y)
25//   * llvm.nvvm.max.ll  --> ibid.
26//   * llvm.nvvm.max.ui  --> select(x uge y, x, y)
27//   * llvm.nvvm.max.ull --> ibid.
28//   * llvm.nvvm.max.i   --> select(x sle y, x, y)
29//   * llvm.nvvm.max.ll  --> ibid.
30//   * llvm.nvvm.max.ui  --> select(x ule y, x, y)
31//   * llvm.nvvm.max.ull --> ibid.
32//   * llvm.nvvm.h2f     --> llvm.convert.to.fp16.f32
33
34def llvm_global_ptr_ty  : LLVMQualPointerType<1>;  // (global)ptr
35def llvm_shared_ptr_ty  : LLVMQualPointerType<3>;  // (shared)ptr
36
37//
38// MISC
39//
40
41// Helper class that represents a 'fragment' of an NVPTX *MMA instruction.
42// Geom: m<M>n<N>k<K>. E.g. m8n32k16
43// Frag: [a|b|c|d] ([x1|x2|x4] for ldmatrix)
44// PtxEltType: PTX type for the element.
45class WMMA_REGS<string Geom, string Frag, string PtxEltType> {
46  string geom = Geom;
47  string frag = Frag;
48  string ptx_elt_type = PtxEltType;
49  string gft = Geom#":"#Frag#":"#ptx_elt_type;
50  string ft = frag#":"#ptx_elt_type;
51  list<LLVMType> regs = !cond(
52    // mma fp ops use smaller fragments than wmma fp ops
53    !eq(gft,"m8n8k4:a:f16") : !listsplat(llvm_v2f16_ty, 2),
54    !eq(gft,"m8n8k4:b:f16") : !listsplat(llvm_v2f16_ty, 2),
55    !eq(gft,"m16n8k8:a:f16") : !listsplat(llvm_v2f16_ty, 2),
56    !eq(gft,"m16n8k8:b:f16") : [llvm_v2f16_ty],
57    !eq(gft,"m16n8k8:c:f16") : !listsplat(llvm_v2f16_ty, 2),
58    !eq(gft,"m16n8k8:d:f16") : !listsplat(llvm_v2f16_ty, 2),
59    !eq(gft,"m16n8k8:c:f32") : !listsplat(llvm_float_ty, 4),
60    !eq(gft,"m16n8k8:d:f32") : !listsplat(llvm_float_ty, 4),
61    !eq(gft,"m16n8k16:a:f16") : !listsplat(llvm_v2f16_ty, 4),
62    !eq(gft,"m16n8k16:b:f16") : !listsplat(llvm_v2f16_ty, 2),
63    !eq(gft,"m16n8k16:c:f16") : !listsplat(llvm_v2f16_ty, 2),
64    !eq(gft,"m16n8k16:d:f16") : !listsplat(llvm_v2f16_ty, 2),
65    !eq(gft,"m16n8k16:c:f32") : !listsplat(llvm_float_ty, 4),
66    !eq(gft,"m16n8k16:d:f32") : !listsplat(llvm_float_ty, 4),
67    !eq(gft,"m16n8k4:c:f32") : !listsplat(llvm_float_ty, 4),
68    !eq(gft,"m16n8k4:d:f32") : !listsplat(llvm_float_ty, 4),
69
70    // wmma fp16 -> fp16/fp32 @  m16n16k16/m8n32k16/m32n8k16
71    // All other supported geometries use the same fragment format for f32 and
72    // f16, so we only need to consider {fragment, type}.
73    !eq(ft,"a:f16") : !listsplat(llvm_v2f16_ty, 8),
74    !eq(ft,"b:f16") : !listsplat(llvm_v2f16_ty, 8),
75    !eq(ft,"c:f16") : !listsplat(llvm_v2f16_ty, 4),
76    !eq(ft,"d:f16") : !listsplat(llvm_v2f16_ty, 4),
77    !eq(ft,"c:f32") : !listsplat(llvm_float_ty, 8),
78    !eq(ft,"d:f32") : !listsplat(llvm_float_ty, 8),
79
80    // wmma tf32 -> s32 @ m16n16k8
81    !eq(gft,"m16n16k8:a:tf32") : !listsplat(llvm_i32_ty, 4),
82    !eq(gft,"m16n16k8:b:tf32") : !listsplat(llvm_i32_ty, 4),
83
84    // mma tf32 -> s32 @ m16n16k8/m16n8k8
85    !eq(gft,"m16n8k4:a:tf32") : !listsplat(llvm_i32_ty, 2),
86    !eq(gft,"m16n8k4:b:tf32") : [llvm_i32_ty],
87    !eq(gft,"m16n8k8:a:tf32") : !listsplat(llvm_i32_ty, 4),
88    !eq(gft,"m16n8k8:b:tf32") : !listsplat(llvm_i32_ty, 2),
89
90    !eq(gft,"m8n8k4:a:f64") : [llvm_double_ty],
91    !eq(gft,"m8n8k4:b:f64") : [llvm_double_ty],
92    !eq(gft,"m8n8k4:c:f64") : !listsplat(llvm_double_ty, 2),
93    !eq(gft,"m8n8k4:d:f64") : !listsplat(llvm_double_ty, 2),
94
95    // wmma bf16 -> s32 @ m16n16k16/m8n32k16/m32n8k16
96    !eq(gft,"m16n16k16:a:bf16") : !listsplat(llvm_i32_ty, 4),
97    !eq(gft,"m16n16k16:b:bf16") : !listsplat(llvm_i32_ty, 4),
98    !eq(gft,"m8n32k16:a:bf16") : !listsplat(llvm_i32_ty, 2),
99    !eq(gft,"m8n32k16:b:bf16") : !listsplat(llvm_i32_ty, 8),
100    !eq(gft,"m32n8k16:a:bf16") : !listsplat(llvm_i32_ty, 8),
101    !eq(gft,"m32n8k16:b:bf16") : !listsplat(llvm_i32_ty, 2),
102
103    // mma bf16 -> s32 @ m16n8k16/m16n8k8
104    !eq(gft,"m16n8k16:a:bf16") : !listsplat(llvm_i32_ty, 4),
105    !eq(gft,"m16n8k16:b:bf16") : !listsplat(llvm_i32_ty, 2),
106    !eq(gft,"m16n8k8:a:bf16") : !listsplat(llvm_i32_ty, 2),
107    !eq(gft,"m16n8k8:b:bf16") : [llvm_i32_ty],
108
109    // wmma u8/s8 -> s32 @ m16n16k16/m8n32k16/m32n8k16
110    !eq(gft,"m16n16k16:a:u8") : !listsplat(llvm_i32_ty, 2),
111    !eq(gft,"m16n16k16:a:s8") : !listsplat(llvm_i32_ty, 2),
112    !eq(gft,"m16n16k16:b:u8") : !listsplat(llvm_i32_ty, 2),
113    !eq(gft,"m16n16k16:b:s8") : !listsplat(llvm_i32_ty, 2),
114    !eq(gft,"m16n16k16:c:s32") : !listsplat(llvm_i32_ty, 8),
115    !eq(gft,"m16n16k16:d:s32") : !listsplat(llvm_i32_ty, 8),
116
117    !eq(gft,"m8n32k16:a:u8") : [llvm_i32_ty],
118    !eq(gft,"m8n32k16:a:s8") : [llvm_i32_ty],
119    !eq(gft,"m8n32k16:b:u8") : !listsplat(llvm_i32_ty, 4),
120    !eq(gft,"m8n32k16:b:s8") : !listsplat(llvm_i32_ty, 4),
121    !eq(gft,"m8n32k16:c:s32") : !listsplat(llvm_i32_ty, 8),
122    !eq(gft,"m8n32k16:d:s32") : !listsplat(llvm_i32_ty, 8),
123
124    !eq(gft,"m32n8k16:a:u8") : !listsplat(llvm_i32_ty, 4),
125    !eq(gft,"m32n8k16:a:s8") : !listsplat(llvm_i32_ty, 4),
126    !eq(gft,"m32n8k16:b:u8") : [llvm_i32_ty],
127    !eq(gft,"m32n8k16:b:s8") : [llvm_i32_ty],
128    !eq(gft,"m32n8k16:c:s32") : !listsplat(llvm_i32_ty, 8),
129    !eq(gft,"m32n8k16:d:s32") : !listsplat(llvm_i32_ty, 8),
130
131    // mma u8/s8 -> s32 @ m8n8k16/m16n8k16/m16n8k32
132    !eq(gft,"m8n8k16:a:u8") : [llvm_i32_ty],
133    !eq(gft,"m8n8k16:a:s8") : [llvm_i32_ty],
134    !eq(gft,"m8n8k16:b:u8") : [llvm_i32_ty],
135    !eq(gft,"m8n8k16:b:s8") : [llvm_i32_ty],
136    !eq(gft,"m8n8k16:c:s32") : !listsplat(llvm_i32_ty, 2),
137    !eq(gft,"m8n8k16:d:s32") : !listsplat(llvm_i32_ty, 2),
138
139    !eq(gft,"m16n8k16:a:u8") : !listsplat(llvm_i32_ty, 2),
140    !eq(gft,"m16n8k16:a:s8") : !listsplat(llvm_i32_ty, 2),
141    !eq(gft,"m16n8k16:b:u8") : [llvm_i32_ty],
142    !eq(gft,"m16n8k16:b:s8") : [llvm_i32_ty],
143    !eq(gft,"m16n8k16:c:s32") : !listsplat(llvm_i32_ty, 4),
144    !eq(gft,"m16n8k16:d:s32") : !listsplat(llvm_i32_ty, 4),
145
146    !eq(gft,"m16n8k32:a:u8") : !listsplat(llvm_i32_ty, 4),
147    !eq(gft,"m16n8k32:a:s8") : !listsplat(llvm_i32_ty, 4),
148    !eq(gft,"m16n8k32:b:u8") : !listsplat(llvm_i32_ty, 2),
149    !eq(gft,"m16n8k32:b:s8") : !listsplat(llvm_i32_ty, 2),
150    !eq(gft,"m16n8k32:c:s32") : !listsplat(llvm_i32_ty, 4),
151    !eq(gft,"m16n8k32:d:s32") : !listsplat(llvm_i32_ty, 4),
152
153    // wmma/mma u4/s4 -> s32 @ m8n8k32 (u4/s4)
154    !eq(gft,"m8n8k32:a:u4") : [llvm_i32_ty],
155    !eq(gft,"m8n8k32:a:s4") : [llvm_i32_ty],
156    !eq(gft,"m8n8k32:b:u4") : [llvm_i32_ty],
157    !eq(gft,"m8n8k32:b:s4") : [llvm_i32_ty],
158    !eq(gft,"m8n8k32:c:s32") : !listsplat(llvm_i32_ty, 2),
159    !eq(gft,"m8n8k32:d:s32") : !listsplat(llvm_i32_ty, 2),
160
161    !eq(gft,"m16n8k32:a:u4") : !listsplat(llvm_i32_ty, 2),
162    !eq(gft,"m16n8k32:a:s4") : !listsplat(llvm_i32_ty, 2),
163    !eq(gft,"m16n8k32:b:u4") : [llvm_i32_ty],
164    !eq(gft,"m16n8k32:b:s4") : [llvm_i32_ty],
165    !eq(gft,"m16n8k32:c:s32") : !listsplat(llvm_i32_ty, 4),
166    !eq(gft,"m16n8k32:d:s32") : !listsplat(llvm_i32_ty, 4),
167
168    !eq(gft,"m16n8k64:a:u4") : !listsplat(llvm_i32_ty, 4),
169    !eq(gft,"m16n8k64:a:s4") : !listsplat(llvm_i32_ty, 4),
170    !eq(gft,"m16n8k64:b:u4") : !listsplat(llvm_i32_ty, 2),
171    !eq(gft,"m16n8k64:b:s4") : !listsplat(llvm_i32_ty, 2),
172    !eq(gft,"m16n8k64:c:s32") : !listsplat(llvm_i32_ty, 4),
173    !eq(gft,"m16n8k64:d:s32") : !listsplat(llvm_i32_ty, 4),
174
175    // wmma/mma b1 -> s32 @ m8n8k128(b1)
176    !eq(gft,"m8n8k128:a:b1") : [llvm_i32_ty],
177    !eq(gft,"m8n8k128:b:b1") : [llvm_i32_ty],
178    !eq(gft,"m8n8k128:c:s32") : !listsplat(llvm_i32_ty, 2),
179    !eq(gft,"m8n8k128:d:s32") : !listsplat(llvm_i32_ty, 2),
180
181    !eq(gft,"m16n8k128:a:b1") : !listsplat(llvm_i32_ty, 2),
182    !eq(gft,"m16n8k128:b:b1") : [llvm_i32_ty],
183    !eq(gft,"m16n8k128:c:s32") : !listsplat(llvm_i32_ty, 4),
184    !eq(gft,"m16n8k128:d:s32") : !listsplat(llvm_i32_ty, 4),
185
186    !eq(gft,"m16n8k256:a:b1") : !listsplat(llvm_i32_ty, 4),
187    !eq(gft,"m16n8k256:b:b1") : !listsplat(llvm_i32_ty, 2),
188    !eq(gft,"m16n8k256:c:s32") : !listsplat(llvm_i32_ty, 4),
189    !eq(gft,"m16n8k256:d:s32") : !listsplat(llvm_i32_ty, 4),
190
191    // ldmatrix b16 -> s32 @ m8n8
192    !eq(gft,"m8n8:x1:b16") : !listsplat(llvm_i32_ty, 1),
193    !eq(gft,"m8n8:x2:b16") : !listsplat(llvm_i32_ty, 2),
194    !eq(gft,"m8n8:x4:b16") : !listsplat(llvm_i32_ty, 4),
195  );
196}
197
198class WMMA_NAME_LDST<string Op, WMMA_REGS Frag, string Layout, int WithStride> {
199  string intr = "llvm.nvvm.wmma."
200                # Frag.geom
201                # "." # Op
202                # "." # Frag.frag
203                # "." # Layout
204                # !if(WithStride, ".stride", "")
205                # "." # Frag.ptx_elt_type
206                ;
207  // TODO(tra): record name should ideally use the same field order as the intrinsic.
208  // E.g. string record = !subst("llvm", "int",
209  //                      !subst(".", "_", llvm));
210  string record = "int_nvvm_wmma_"
211                # Frag.geom
212                # "_" # Op
213                # "_" # Frag.frag
214                # "_" # Frag.ptx_elt_type
215                # "_" # Layout
216                # !if(WithStride, "_stride", "");
217}
218
219class MMA_SIGNATURE<WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D> {
220  list<WMMA_REGS> id_frags = !cond(
221     // FP16 ops are identified by accumulator & result type.
222     !eq(A.ptx_elt_type, "f16") : [D, C],
223     // other ops are identified by input types.
224     !ne(A.ptx_elt_type, B.ptx_elt_type): [A, B],
225     true: [A]
226     );
227   string ret = !foldl("", id_frags, a, b, !strconcat(a, ".", b.ptx_elt_type));
228}
229
230class WMMA_NAME<string ALayout, string BLayout, int Satfinite, string Rnd, string b1op,
231                WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D> {
232  string signature = MMA_SIGNATURE<A, B, C, D>.ret;
233  string llvm = "llvm.nvvm.wmma."
234                # A.geom
235                # ".mma"
236                # b1op
237                # "." # ALayout
238                # "." # BLayout
239                # !if(!ne(Rnd, ""), !strconcat(".", Rnd), "")
240                # signature
241                # !if(Satfinite, ".satfinite", "");
242
243  string record = !subst(".", "_",
244                  !subst("llvm.", "int_", llvm));
245}
246
247class MMA_NAME<string ALayout, string BLayout, int Satfinite, string b1op,
248               WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D> {
249  string signature = MMA_SIGNATURE<A, B, C, D>.ret;
250  string llvm = "llvm.nvvm.mma"
251                # b1op
252                # "." # A.geom
253                # "." # ALayout
254                # "." # BLayout
255                # !if(Satfinite, ".satfinite", "")
256                # signature;
257  string record = !subst(".", "_",
258                  !subst("llvm.", "int_", llvm));
259}
260
261class LDMATRIX_NAME<WMMA_REGS Frag, int Trans> {
262  string intr = "llvm.nvvm.ldmatrix.sync.aligned"
263                # "." # Frag.geom
264                # "." # Frag.frag
265                # !if(Trans, ".trans", "")
266                # "." # Frag.ptx_elt_type
267                ;
268  string record = !subst(".", "_",
269                  !subst("llvm.", "int_", intr));
270}
271
272// Generates list of 4-tuples of WMMA_REGS representing a valid MMA op.
273//   Geom: list of supported geometries.
274//   TypeN: PTX type of the corresponding fragment's element.
275//   TypeB and TypeD may be empty if it must match that of TypeA or TypeC.
276class MMA_OPS<list<string> Geom, list<string> TypeA, list<string> TypeB,
277            list<string> TypeC, list<string> TypeD> {
278  list<list<WMMA_REGS>> ret =
279     !foldl([]<list<WMMA_REGS>>, Geom, t1, geom, !listconcat(t1,
280     !foldl([]<list<WMMA_REGS>>, TypeA, t2, type_a, !listconcat(t2,
281     !foldl([]<list<WMMA_REGS>>, !if(!size(TypeB), TypeB, [type_a]), t3, type_b, !listconcat(t3,
282     !foldl([]<list<WMMA_REGS>>, TypeC, t4, type_c, !listconcat(t4,
283     !foldl([]<list<WMMA_REGS>>, !if(!size(TypeD), TypeD, [type_c]), t5, type_d, !listconcat(t5,
284            [[WMMA_REGS<geom, "a", type_a>,
285              WMMA_REGS<geom, "b", type_b>,
286              WMMA_REGS<geom, "c", type_c>,
287              WMMA_REGS<geom, "d", type_d>]]))))))))));
288   // Debugging aid for readable representation of the list above.
289   list<list<string>> ops = !foreach(x, ret, [x[0].gft, x[1].gft, x[2].gft, x[3].gft]);
290}
291
292class MMA_LDST_OPS<list<string> Geom, list<string> Frags, list<string> Types> {
293  list<WMMA_REGS> ret =
294     !foldl([]<WMMA_REGS>, Geom, t1, geom, !listconcat(t1,
295     !foldl([]<WMMA_REGS>, Frags, t2, frag, !listconcat(t2,
296     !foldl([]<WMMA_REGS>, Types, t3, type, !listconcat(t3,
297            [WMMA_REGS<geom, frag, type>]))))));
298   // Debugging aid for readable representation of the list above.
299   list<string> ops = !foreach(x, ret, x.gft);
300}
301
302class LDMATRIX_OPS<list<string> Geom, list<string> Frags, list<string> Types> {
303  list<WMMA_REGS> ret =
304     !foldl([]<WMMA_REGS>, Geom, t1, geom, !listconcat(t1,
305     !foldl([]<WMMA_REGS>, Frags, t2, frag, !listconcat(t2,
306     !foldl([]<WMMA_REGS>, Types, t3, type, !listconcat(t3,
307            [WMMA_REGS<geom, frag, type>]))))));
308   // Debugging aid for readable representation of the list above.
309   list<string> ops = !foreach(x, ret, x.gft);
310}
311
312// Creates list of valid combinations of fragments. This is the main list that
313// drives generation of corresponding intrinsics and instructions.
314class NVVM_MMA_OPS {
315  list<list<WMMA_REGS>> tf32_wmma_ops = MMA_OPS<
316            ["m16n16k8"],
317            ["tf32"], [], ["f32"], []>.ret;
318  list<list<WMMA_REGS>> bf16_wmma_ops = MMA_OPS<
319            ["m16n16k16", "m32n8k16", "m8n32k16"],
320            ["bf16"], [], ["f32"], []>.ret;
321  list<list<WMMA_REGS>> f64_wmma_ops = MMA_OPS<
322            ["m8n8k4"],
323            ["f64"], [], ["f64"], []>.ret;
324  list<list<WMMA_REGS>> fp_wmma_ops = MMA_OPS<
325            ["m16n16k16", "m32n8k16", "m8n32k16"],
326            ["f16"], [], ["f16", "f32"], ["f16", "f32"]>.ret;
327  list<list<WMMA_REGS>> int_wmma_ops = MMA_OPS<
328            ["m16n16k16", "m32n8k16", "m8n32k16"],
329            ["s8", "u8"], [], ["s32"], []>.ret;
330  list<list<WMMA_REGS>> subint_wmma_ops = MMA_OPS<
331            ["m8n8k32"],
332            ["s4", "u4"], [], ["s32"], []>.ret;
333  list<list<WMMA_REGS>> bit_wmma_ops = MMA_OPS<
334            ["m8n8k128"],
335            ["b1"], [], ["s32"], []>.ret;
336  list<list<WMMA_REGS>> all_wmma_ops = !listconcat(
337            tf32_wmma_ops, bf16_wmma_ops, f64_wmma_ops,
338            fp_wmma_ops, int_wmma_ops, subint_wmma_ops, bit_wmma_ops);
339
340  list<list<WMMA_REGS>> tf32_mma_ops = MMA_OPS<
341            ["m16n8k4", "m16n8k8"],
342            ["tf32"], [], ["f32"], []>.ret;
343  list<list<WMMA_REGS>> bf16_mma_ops = MMA_OPS<
344            ["m16n8k16", "m16n8k8"],
345            ["bf16"], [], ["f32"], []>.ret;
346  list<list<WMMA_REGS>> f64_mma_ops = MMA_OPS<
347            ["m8n8k4"],
348            ["f64"], [], ["f64"], []>.ret;
349  list<list<WMMA_REGS>> fp_mma_ops = MMA_OPS<
350            ["m8n8k4", "m16n8k8", "m16n8k16"],
351            ["f16"], [], ["f16", "f32"], ["f16", "f32"]>.ret;
352  list<list<WMMA_REGS>> int_mma_ops = MMA_OPS<
353            ["m8n8k16", "m16n8k16", "m16n8k32"],
354            ["s8", "u8"], ["s8", "u8"], ["s32"], []>.ret;
355  list<list<WMMA_REGS>> subint_mma_ops = MMA_OPS<
356            ["m8n8k32", "m16n8k32", "m16n8k64"],
357            ["s4", "u4"], ["s4", "u4"], ["s32"], []>.ret;
358  list<list<WMMA_REGS>> bit_mma_ops = MMA_OPS<
359            ["m8n8k128", "m16n8k128", "m16n8k256"],
360            ["b1"], [], ["s32"], []>.ret;
361  list<list<WMMA_REGS>> all_mma_ops = !listconcat(
362            tf32_mma_ops, bf16_mma_ops, f64_mma_ops,
363            fp_mma_ops, int_mma_ops, subint_mma_ops, bit_mma_ops);
364
365  list<WMMA_REGS> ldst_ab_ops = MMA_LDST_OPS<
366            ["m16n16k16", "m32n8k16", "m8n32k16"],
367            ["a", "b"], ["f16", "u8", "s8", "bf16"]>.ret;
368  list<WMMA_REGS> ldst_cd_ops = MMA_LDST_OPS<
369            ["m16n16k16", "m32n8k16", "m8n32k16"],
370            ["c", "d"], ["f16", "f32", "s32"]>.ret;
371  list<WMMA_REGS> ldst_tf32_ab_ops = MMA_LDST_OPS<
372            ["m16n16k8"],
373            ["a", "b"], ["tf32"]>.ret;
374  list<WMMA_REGS> ldst_tf32_cd_ops = MMA_LDST_OPS<
375            ["m16n16k8"],
376            ["c", "d"], ["f32"]>.ret;
377  list<WMMA_REGS> ldst_f64_abcd_ops = MMA_LDST_OPS<
378            ["m8n8k4"],
379            ["a", "b", "c", "d"], ["f64"]>.ret;
380  list<WMMA_REGS> ldst_subint_ab_ops = MMA_LDST_OPS<
381            ["m8n8k32"], ["a", "b"], ["s4","u4"]>.ret;
382  list<WMMA_REGS> ldst_bit_ab_ops = MMA_LDST_OPS<
383            ["m8n8k128"], ["a", "b"], ["b1"]>.ret;
384  list<WMMA_REGS> ldst_subint_cd_ops = MMA_LDST_OPS<
385            ["m8n8k32", "m8n8k128"],  ["c", "d"], ["s32"]>.ret;
386  list<WMMA_REGS> all_ldst_ops = !listconcat(ldst_ab_ops, ldst_cd_ops,
387                                             ldst_tf32_ab_ops,
388                                             ldst_tf32_cd_ops,
389                                             ldst_f64_abcd_ops,
390                                             ldst_subint_ab_ops,
391                                             ldst_bit_ab_ops,
392                                             ldst_subint_cd_ops);
393  // Separate A/B/C fragments (loads) from D (stores).
394  list<WMMA_REGS> all_ld_ops = !filter(op, all_ldst_ops, !ne(op.frag, "d"));
395  list<WMMA_REGS> all_st_ops = !filter(op, all_ldst_ops, !eq(op.frag, "d"));
396
397  list<WMMA_REGS> ldmatrix_b16_ops = LDMATRIX_OPS<
398    ["m8n8"], ["x1", "x2", "x4"], ["b16"]>.ret;
399  list<WMMA_REGS> all_ldmatrix_ops = ldmatrix_b16_ops;
400}
401
402def NVVM_MMA_OPS : NVVM_MMA_OPS;
403
404// Returns true if this combination of fragment and layout for WMMA load/store
405// ops is supported; false otherwise.
406// E.g.
407// if NVVM_WMMA_LDST_SUPPORTED<...>.ret then
408//   def : FOO<>; // The record will only be defined for supported ops.
409//
410class NVVM_WMMA_LDST_SUPPORTED<WMMA_REGS frag, string layout> {
411  string f = frag.frag;
412  string t = frag.ptx_elt_type;
413
414  bit ret = !cond(
415    // Sub-int load and store requires A fragment to be of row layout and B
416    // fragments to be of column layout.
417    !and(!or(!eq(t, "b1"),
418             !eq(t, "u4"),
419             !eq(t, "s4")),
420         !or(!and(!eq(f, "a"),
421                  !ne(layout, "row")),
422             !and(!eq(f, "b"),
423                  !ne(layout, "col")))) : false,
424    true: true
425  );
426}
427
428// Returns true if this combination of layout/satf/rnd for WMMA ops is
429// supported; false otherwise.
430// E.g.
431// if NVVM_WMMA_SUPPORTED<...>.ret then
432//   def : FOO<>; // The record will only be defined for supported ops.
433//
434class NVVM_WMMA_SUPPORTED<list<WMMA_REGS> frags, string layout_a, string layout_b, int satf, string rnd> {
435  // WMMA ops check both layouts.
436  string layout = layout_a # ":" # layout_b;
437  string t = frags[0].ptx_elt_type;
438
439  bit ret = !cond(
440    // only f64 wmma functions support rnd options
441    // any non f64 type that uses a rnd value is invalid
442    !and(!ne(t, "f64"), !ne(rnd, "")) : false,
443
444    // satf is only valid for select types
445    !and(!eq(satf, 1),
446         !ne(t, "s8"),
447         !ne(t, "u8"),
448         !ne(t, "s4"),
449         !ne(t, "u4"),
450         !ne(t, "f16")): false,
451
452    // Sub-int wmma requires row/column layout
453    !and(!or(!eq(t, "s4"),
454             !eq(t, "u4"),
455             !eq(t, "b1")),
456         !ne(layout, "row:col")) : false,
457    true: true
458  );
459}
460
461class NVVM_MMA_B1OPS<list<WMMA_REGS> frags> {
462  list<string> ret = !cond(
463    !eq(frags[0].ptx_elt_type, "b1") : [".xor.popc", ".and.popc"],
464    true: [""]
465  );
466}
467
468// Returns true if this combination of layout/satf for MMA ops is supported;
469// false otherwise.
470// E.g.
471// if NVVM_MMA_SUPPORTED<...>.ret then
472//   def : FOO<>; // The record will only be defined for supported ops.
473//
474class NVVM_MMA_SUPPORTED<list<WMMA_REGS> frags, string layout_a, string layout_b, int satf> {
475  // MMA ops check both layouts.
476  string layout = layout_a # ":" # layout_b;
477  string a_type = frags[0].ptx_elt_type;
478  string b_type = frags[1].ptx_elt_type;
479  string c_type = frags[2].ptx_elt_type;
480  string d_type = frags[3].ptx_elt_type;
481  string geom = frags[0].geom;
482
483  // gcd is a shortcut used to identify instructions that depend on
484  // geom+frag_c+frag_d.
485  string gcd = geom # ":" # c_type # d_type;
486  bit ret = !cond(
487
488    // Limit satf to valid types
489    !and(!eq(satf, 1),
490         !ne(a_type, "s8"),
491         !ne(a_type, "u8"),
492         !ne(a_type, "s4"),
493         !ne(a_type, "u4")): false,
494
495    // m8n8k4 has no C=f32 D=f16 variant.
496    !eq(gcd, "m8n8k4:f32f16"): false,
497
498    // only m8n8k4 for f16 does not require row:col layout
499    !and(!ne(layout, "row:col"),
500         !or(!ne(geom, "m8n8k4"),
501             !ne(a_type, "f16"))) : false,
502
503    // m16n8k8 requires A and B to be the same type and C and D to be the same
504    // type.
505    !and(!eq(geom, "m16n8k8"),
506         !or(!ne(a_type, b_type),
507             !ne(c_type, d_type))): false,
508
509    // m16n8k8 requires C and D to be the same type.
510    !and(!eq(geom, "m16n8k8"),
511         !ne(c_type, d_type)): false,
512
513    // All other are OK.
514    true: true
515  );
516}
517
518// Returns true if the fragment is valid for ldmatrix ops is supported;
519// false otherwise.
520// E.g.
521// if NVVM_LDMATRIX_SUPPORTED<...>.ret then
522//   def : FOO<>; // The record will only be defined for supported ops.
523//
524class NVVM_LDMATRIX_SUPPORTED<WMMA_REGS frag> {
525  string g = frag.geom;
526  string t = frag.ptx_elt_type;
527
528  bit ret = !cond(
529    // Only currently support m8n8 and b16
530    !and(!eq(g, "m8n8"), !eq(t, "b16")): true,
531    true: false
532  );
533}
534
535class SHFL_INFO<bit sync, string mode, string type, bit return_pred> {
536  string Suffix = !if(sync, "sync_", "")
537                  # mode # "_"
538                  # type
539                  # !if(return_pred, "p", "");
540
541  string Name = "int_nvvm_shfl_" # Suffix;
542  string Builtin = "__nvvm_shfl_" # Suffix;
543  string IntrName = "llvm.nvvm.shfl." # !subst("_",".", Suffix);
544  bit withGccBuiltin = !not(return_pred);
545  bit withoutGccBuiltin = return_pred;
546  LLVMType OpType = !cond(
547    !eq(type,"i32"): llvm_i32_ty,
548    !eq(type,"f32"): llvm_float_ty);
549  list<LLVMType> RetTy = !if(return_pred, [OpType, llvm_i1_ty], [OpType]);
550  list<LLVMType> ArgsTy = !if(sync,
551    [llvm_i32_ty, OpType, llvm_i32_ty, llvm_i32_ty],
552    [OpType, llvm_i32_ty, llvm_i32_ty]);
553}
554
555let TargetPrefix = "nvvm" in {
556  def int_nvvm_prmt : ClangBuiltin<"__nvvm_prmt">,
557      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
558        [IntrNoMem, IntrSpeculatable]>;
559
560//
561// Min Max
562//
563
564  foreach operation = ["min", "max"] in {
565    def int_nvvm_f # operation # _d :
566      ClangBuiltin<!strconcat("__nvvm_f", operation, "_d")>,
567      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
568        [IntrNoMem, IntrSpeculatable, Commutative]>;
569
570    foreach variant = ["_f", "_ftz_f", "_nan_f", "_ftz_nan_f",
571      "_xorsign_abs_f", "_ftz_xorsign_abs_f", "_nan_xorsign_abs_f",
572      "_ftz_nan_xorsign_abs_f"] in {
573      def int_nvvm_f # operation # variant :
574        ClangBuiltin<!strconcat("__nvvm_f", operation, variant)>,
575        DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
576          [IntrNoMem, IntrSpeculatable, Commutative]>;
577    }
578
579    foreach variant = ["_f16", "_ftz_f16", "_nan_f16", "_ftz_nan_f16",
580      "_xorsign_abs_f16", "_ftz_xorsign_abs_f16", "_nan_xorsign_abs_f16",
581      "_ftz_nan_xorsign_abs_f16"] in {
582      def int_nvvm_f # operation # variant :
583        DefaultAttrsIntrinsic<[llvm_half_ty], [llvm_half_ty, llvm_half_ty],
584          [IntrNoMem, IntrSpeculatable, Commutative]>;
585    }
586
587    foreach variant = ["_f16x2", "_ftz_f16x2", "_nan_f16x2",
588      "_ftz_nan_f16x2", "_xorsign_abs_f16x2", "_ftz_xorsign_abs_f16x2",
589      "_nan_xorsign_abs_f16x2", "_ftz_nan_xorsign_abs_f16x2"] in {
590      def int_nvvm_f # operation # variant :
591        DefaultAttrsIntrinsic<[llvm_v2f16_ty], [llvm_v2f16_ty, llvm_v2f16_ty],
592          [IntrNoMem, IntrSpeculatable, Commutative]>;
593    }
594
595    foreach variant = ["_bf16", "_ftz_bf16", "_nan_bf16", "_ftz_nan_bf16",
596      "_xorsign_abs_bf16", "_ftz_xorsign_abs_bf16", "_nan_xorsign_abs_bf16",
597      "_ftz_nan_xorsign_abs_bf16"] in {
598      def int_nvvm_f # operation # variant :
599        ClangBuiltin<!strconcat("__nvvm_f", operation, variant)>,
600        DefaultAttrsIntrinsic<[llvm_bfloat_ty], [llvm_bfloat_ty, llvm_bfloat_ty],
601          [IntrNoMem, IntrSpeculatable, Commutative]>;
602    }
603
604    foreach variant = ["_bf16x2", "_ftz_bf16x2", "_nan_bf16x2",
605      "_ftz_nan_bf16x2", "_xorsign_abs_bf16x2", "_ftz_xorsign_abs_bf16x2",
606      "_nan_xorsign_abs_bf16x2", "_ftz_nan_xorsign_abs_bf16x2"]  in {
607      def int_nvvm_f # operation # variant :
608        ClangBuiltin<!strconcat("__nvvm_f", operation, variant)>,
609        DefaultAttrsIntrinsic<[llvm_v2bf16_ty], [llvm_v2bf16_ty, llvm_v2bf16_ty],
610          [IntrNoMem, IntrSpeculatable, Commutative]>;
611    }
612  }
613
614//
615// Multiplication
616//
617
618  def int_nvvm_mulhi_i : ClangBuiltin<"__nvvm_mulhi_i">,
619      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
620        [IntrNoMem, IntrSpeculatable, Commutative]>;
621  def int_nvvm_mulhi_ui : ClangBuiltin<"__nvvm_mulhi_ui">,
622      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
623        [IntrNoMem, IntrSpeculatable, Commutative]>;
624
625  def int_nvvm_mulhi_ll : ClangBuiltin<"__nvvm_mulhi_ll">,
626      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
627        [IntrNoMem, IntrSpeculatable, Commutative]>;
628  def int_nvvm_mulhi_ull : ClangBuiltin<"__nvvm_mulhi_ull">,
629      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
630        [IntrNoMem, IntrSpeculatable, Commutative]>;
631
632  def int_nvvm_mul_rn_ftz_f : ClangBuiltin<"__nvvm_mul_rn_ftz_f">,
633      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
634        [IntrNoMem, IntrSpeculatable, Commutative]>;
635  def int_nvvm_mul_rn_f : ClangBuiltin<"__nvvm_mul_rn_f">,
636      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
637        [IntrNoMem, IntrSpeculatable, Commutative]>;
638  def int_nvvm_mul_rz_ftz_f : ClangBuiltin<"__nvvm_mul_rz_ftz_f">,
639      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
640        [IntrNoMem, IntrSpeculatable, Commutative]>;
641  def int_nvvm_mul_rz_f : ClangBuiltin<"__nvvm_mul_rz_f">,
642      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
643        [IntrNoMem, IntrSpeculatable, Commutative]>;
644  def int_nvvm_mul_rm_ftz_f : ClangBuiltin<"__nvvm_mul_rm_ftz_f">,
645      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
646        [IntrNoMem, IntrSpeculatable, Commutative]>;
647  def int_nvvm_mul_rm_f : ClangBuiltin<"__nvvm_mul_rm_f">,
648      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
649        [IntrNoMem, IntrSpeculatable, Commutative]>;
650  def int_nvvm_mul_rp_ftz_f : ClangBuiltin<"__nvvm_mul_rp_ftz_f">,
651      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
652        [IntrNoMem, IntrSpeculatable, Commutative]>;
653  def int_nvvm_mul_rp_f : ClangBuiltin<"__nvvm_mul_rp_f">,
654      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
655        [IntrNoMem, IntrSpeculatable, Commutative]>;
656
657  def int_nvvm_mul_rn_d : ClangBuiltin<"__nvvm_mul_rn_d">,
658      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
659        [IntrNoMem, IntrSpeculatable, Commutative]>;
660  def int_nvvm_mul_rz_d : ClangBuiltin<"__nvvm_mul_rz_d">,
661      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
662        [IntrNoMem, IntrSpeculatable, Commutative]>;
663  def int_nvvm_mul_rm_d : ClangBuiltin<"__nvvm_mul_rm_d">,
664      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
665        [IntrNoMem, IntrSpeculatable, Commutative]>;
666  def int_nvvm_mul_rp_d : ClangBuiltin<"__nvvm_mul_rp_d">,
667      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
668        [IntrNoMem, IntrSpeculatable, Commutative]>;
669
670  def int_nvvm_mul24_i : ClangBuiltin<"__nvvm_mul24_i">,
671      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
672        [IntrNoMem, IntrSpeculatable, Commutative]>;
673  def int_nvvm_mul24_ui : ClangBuiltin<"__nvvm_mul24_ui">,
674      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
675        [IntrNoMem, IntrSpeculatable, Commutative]>;
676
677//
678// Div
679//
680
681  def int_nvvm_div_approx_ftz_f : ClangBuiltin<"__nvvm_div_approx_ftz_f">,
682      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
683        [IntrNoMem]>;
684  def int_nvvm_div_approx_f : ClangBuiltin<"__nvvm_div_approx_f">,
685      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
686        [IntrNoMem]>;
687
688  def int_nvvm_div_rn_ftz_f : ClangBuiltin<"__nvvm_div_rn_ftz_f">,
689      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
690        [IntrNoMem]>;
691  def int_nvvm_div_rn_f : ClangBuiltin<"__nvvm_div_rn_f">,
692      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
693        [IntrNoMem]>;
694
695  def int_nvvm_div_rz_ftz_f : ClangBuiltin<"__nvvm_div_rz_ftz_f">,
696      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
697        [IntrNoMem]>;
698  def int_nvvm_div_rz_f : ClangBuiltin<"__nvvm_div_rz_f">,
699      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
700        [IntrNoMem]>;
701
702  def int_nvvm_div_rm_ftz_f : ClangBuiltin<"__nvvm_div_rm_ftz_f">,
703      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
704        [IntrNoMem]>;
705  def int_nvvm_div_rm_f : ClangBuiltin<"__nvvm_div_rm_f">,
706      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
707        [IntrNoMem]>;
708
709  def int_nvvm_div_rp_ftz_f : ClangBuiltin<"__nvvm_div_rp_ftz_f">,
710      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
711        [IntrNoMem]>;
712  def int_nvvm_div_rp_f : ClangBuiltin<"__nvvm_div_rp_f">,
713      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
714        [IntrNoMem]>;
715
716  def int_nvvm_div_rn_d : ClangBuiltin<"__nvvm_div_rn_d">,
717      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
718        [IntrNoMem]>;
719  def int_nvvm_div_rz_d : ClangBuiltin<"__nvvm_div_rz_d">,
720      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
721        [IntrNoMem]>;
722  def int_nvvm_div_rm_d : ClangBuiltin<"__nvvm_div_rm_d">,
723      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
724        [IntrNoMem]>;
725  def int_nvvm_div_rp_d : ClangBuiltin<"__nvvm_div_rp_d">,
726      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
727        [IntrNoMem]>;
728
729//
730// Sad
731//
732
733  def int_nvvm_sad_i : ClangBuiltin<"__nvvm_sad_i">,
734      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
735        [IntrNoMem, Commutative]>;
736  def int_nvvm_sad_ui : ClangBuiltin<"__nvvm_sad_ui">,
737      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
738        [IntrNoMem, Commutative]>;
739
740//
741// Floor  Ceil
742//
743
744  def int_nvvm_floor_ftz_f : ClangBuiltin<"__nvvm_floor_ftz_f">,
745      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
746  def int_nvvm_floor_f : ClangBuiltin<"__nvvm_floor_f">,
747      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
748  def int_nvvm_floor_d : ClangBuiltin<"__nvvm_floor_d">,
749      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
750
751  def int_nvvm_ceil_ftz_f : ClangBuiltin<"__nvvm_ceil_ftz_f">,
752      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
753  def int_nvvm_ceil_f : ClangBuiltin<"__nvvm_ceil_f">,
754      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
755  def int_nvvm_ceil_d : ClangBuiltin<"__nvvm_ceil_d">,
756      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
757
758//
759// Abs
760//
761
762  def int_nvvm_fabs_ftz_f : ClangBuiltin<"__nvvm_fabs_ftz_f">,
763      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
764  def int_nvvm_fabs_f : ClangBuiltin<"__nvvm_fabs_f">,
765      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
766  def int_nvvm_fabs_d : ClangBuiltin<"__nvvm_fabs_d">,
767      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
768
769//
770// Abs, Neg bf16, bf16x2
771//
772
773  foreach unary = ["abs", "neg"] in {
774    def int_nvvm_ # unary # _bf16 :
775      ClangBuiltin<!strconcat("__nvvm_", unary, "_bf16")>,
776      DefaultAttrsIntrinsic<[llvm_bfloat_ty], [llvm_bfloat_ty], [IntrNoMem]>;
777    def int_nvvm_ # unary # _bf16x2 :
778      ClangBuiltin<!strconcat("__nvvm_", unary, "_bf16x2")>,
779      DefaultAttrsIntrinsic<[llvm_v2bf16_ty], [llvm_v2bf16_ty], [IntrNoMem]>;
780  }
781
782//
783// Round
784//
785
786  def int_nvvm_round_ftz_f : ClangBuiltin<"__nvvm_round_ftz_f">,
787      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
788  def int_nvvm_round_f : ClangBuiltin<"__nvvm_round_f">,
789      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
790
791  def int_nvvm_round_d : ClangBuiltin<"__nvvm_round_d">,
792      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
793
794//
795// Trunc
796//
797
798  def int_nvvm_trunc_ftz_f : ClangBuiltin<"__nvvm_trunc_ftz_f">,
799      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
800  def int_nvvm_trunc_f : ClangBuiltin<"__nvvm_trunc_f">,
801      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
802
803  def int_nvvm_trunc_d : ClangBuiltin<"__nvvm_trunc_d">,
804      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
805
806//
807// Saturate
808//
809
810  def int_nvvm_saturate_ftz_f : ClangBuiltin<"__nvvm_saturate_ftz_f">,
811      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
812  def int_nvvm_saturate_f : ClangBuiltin<"__nvvm_saturate_f">,
813      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
814
815  def int_nvvm_saturate_d : ClangBuiltin<"__nvvm_saturate_d">,
816      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
817
818//
819// Exp2  Log2
820//
821
822  def int_nvvm_ex2_approx_ftz_f : ClangBuiltin<"__nvvm_ex2_approx_ftz_f">,
823      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
824  def int_nvvm_ex2_approx_f : ClangBuiltin<"__nvvm_ex2_approx_f">,
825      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
826  def int_nvvm_ex2_approx_d : ClangBuiltin<"__nvvm_ex2_approx_d">,
827      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
828  def int_nvvm_ex2_approx_f16 :
829      DefaultAttrsIntrinsic<[llvm_half_ty], [llvm_half_ty], [IntrNoMem]>;
830  def int_nvvm_ex2_approx_f16x2 :
831      DefaultAttrsIntrinsic<[llvm_v2f16_ty], [llvm_v2f16_ty], [IntrNoMem]>;
832
833  def int_nvvm_lg2_approx_ftz_f : ClangBuiltin<"__nvvm_lg2_approx_ftz_f">,
834      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
835  def int_nvvm_lg2_approx_f : ClangBuiltin<"__nvvm_lg2_approx_f">,
836      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
837  def int_nvvm_lg2_approx_d : ClangBuiltin<"__nvvm_lg2_approx_d">,
838      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
839
840//
841// Sin  Cos
842//
843
844  def int_nvvm_sin_approx_ftz_f : ClangBuiltin<"__nvvm_sin_approx_ftz_f">,
845      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
846  def int_nvvm_sin_approx_f : ClangBuiltin<"__nvvm_sin_approx_f">,
847      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
848
849  def int_nvvm_cos_approx_ftz_f : ClangBuiltin<"__nvvm_cos_approx_ftz_f">,
850      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
851  def int_nvvm_cos_approx_f : ClangBuiltin<"__nvvm_cos_approx_f">,
852      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
853
854//
855// Fma
856//
857
858  foreach variant = ["_rn_f16", "_rn_ftz_f16", "_rn_sat_f16",
859    "_rn_ftz_sat_f16", "_rn_relu_f16", "_rn_ftz_relu_f16"] in {
860    def int_nvvm_fma # variant : DefaultAttrsIntrinsic<[llvm_half_ty],
861      [llvm_half_ty, llvm_half_ty, llvm_half_ty],
862      [IntrNoMem, IntrSpeculatable]>;
863  }
864
865  foreach variant = ["_rn_f16x2", "_rn_ftz_f16x2", "_rn_sat_f16x2",
866    "_rn_ftz_sat_f16x2", "_rn_relu_f16x2", "_rn_ftz_relu_f16x2"] in {
867    def int_nvvm_fma # variant : DefaultAttrsIntrinsic<[llvm_v2f16_ty],
868      [llvm_v2f16_ty, llvm_v2f16_ty, llvm_v2f16_ty],
869      [IntrNoMem, IntrSpeculatable]>;
870  }
871
872  foreach variant = ["_rn_bf16", "_rn_ftz_bf16", "_rn_sat_bf16",
873    "_rn_ftz_sat_bf16", "_rn_relu_bf16", "_rn_ftz_relu_bf16"] in {
874    def int_nvvm_fma # variant : ClangBuiltin<!strconcat("__nvvm_fma", variant)>,
875      DefaultAttrsIntrinsic<[llvm_bfloat_ty],
876        [llvm_bfloat_ty, llvm_bfloat_ty, llvm_bfloat_ty],
877        [IntrNoMem, IntrSpeculatable]>;
878  }
879
880  foreach variant = ["_rn_bf16x2", "_rn_ftz_bf16x2", "_rn_sat_bf16x2",
881    "_rn_ftz_sat_bf16x2", "_rn_relu_bf16x2", "_rn_ftz_relu_bf16x2"] in {
882    def int_nvvm_fma # variant : ClangBuiltin<!strconcat("__nvvm_fma", variant)>,
883      DefaultAttrsIntrinsic<[llvm_v2bf16_ty],
884        [llvm_v2bf16_ty, llvm_v2bf16_ty, llvm_v2bf16_ty],
885        [IntrNoMem, IntrSpeculatable]>;
886  }
887
888  foreach variant = ["_rn_ftz_f", "_rn_f", "_rz_ftz_f", "_rz_f", "_rm_ftz_f",
889    "_rm_f", "_rp_ftz_f", "_rp_f"] in {
890    def int_nvvm_fma # variant : ClangBuiltin<!strconcat("__nvvm_fma", variant)>,
891      DefaultAttrsIntrinsic<[llvm_float_ty],
892        [llvm_float_ty, llvm_float_ty, llvm_float_ty],
893        [IntrNoMem, IntrSpeculatable]>;
894  }
895
896  foreach variant = ["_rn_d", "_rz_d", "_rm_d", "_rp_d"] in {
897    def int_nvvm_fma # variant : ClangBuiltin<!strconcat("__nvvm_fma", variant)>,
898      DefaultAttrsIntrinsic<[llvm_double_ty],
899        [llvm_double_ty, llvm_double_ty, llvm_double_ty],
900        [IntrNoMem, IntrSpeculatable]>;
901  }
902
903//
904// Rcp
905//
906
907  def int_nvvm_rcp_rn_ftz_f : ClangBuiltin<"__nvvm_rcp_rn_ftz_f">,
908      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
909  def int_nvvm_rcp_rn_f : ClangBuiltin<"__nvvm_rcp_rn_f">,
910      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
911  def int_nvvm_rcp_rz_ftz_f : ClangBuiltin<"__nvvm_rcp_rz_ftz_f">,
912      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
913  def int_nvvm_rcp_rz_f : ClangBuiltin<"__nvvm_rcp_rz_f">,
914      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
915  def int_nvvm_rcp_rm_ftz_f : ClangBuiltin<"__nvvm_rcp_rm_ftz_f">,
916      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
917  def int_nvvm_rcp_rm_f : ClangBuiltin<"__nvvm_rcp_rm_f">,
918      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
919  def int_nvvm_rcp_rp_ftz_f : ClangBuiltin<"__nvvm_rcp_rp_ftz_f">,
920      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
921  def int_nvvm_rcp_rp_f : ClangBuiltin<"__nvvm_rcp_rp_f">,
922      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
923
924  def int_nvvm_rcp_rn_d : ClangBuiltin<"__nvvm_rcp_rn_d">,
925      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
926  def int_nvvm_rcp_rz_d : ClangBuiltin<"__nvvm_rcp_rz_d">,
927      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
928  def int_nvvm_rcp_rm_d : ClangBuiltin<"__nvvm_rcp_rm_d">,
929      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
930  def int_nvvm_rcp_rp_d : ClangBuiltin<"__nvvm_rcp_rp_d">,
931      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
932
933  def int_nvvm_rcp_approx_ftz_f : ClangBuiltin<"__nvvm_rcp_approx_ftz_f">,
934      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
935  def int_nvvm_rcp_approx_ftz_d : ClangBuiltin<"__nvvm_rcp_approx_ftz_d">,
936      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
937
938//
939// Sqrt
940//
941
942  def int_nvvm_sqrt_f : ClangBuiltin<"__nvvm_sqrt_f">,
943      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
944  def int_nvvm_sqrt_rn_ftz_f : ClangBuiltin<"__nvvm_sqrt_rn_ftz_f">,
945      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
946  def int_nvvm_sqrt_rn_f : ClangBuiltin<"__nvvm_sqrt_rn_f">,
947      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
948  def int_nvvm_sqrt_rz_ftz_f : ClangBuiltin<"__nvvm_sqrt_rz_ftz_f">,
949      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
950  def int_nvvm_sqrt_rz_f : ClangBuiltin<"__nvvm_sqrt_rz_f">,
951      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
952  def int_nvvm_sqrt_rm_ftz_f : ClangBuiltin<"__nvvm_sqrt_rm_ftz_f">,
953      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
954  def int_nvvm_sqrt_rm_f : ClangBuiltin<"__nvvm_sqrt_rm_f">,
955      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
956  def int_nvvm_sqrt_rp_ftz_f : ClangBuiltin<"__nvvm_sqrt_rp_ftz_f">,
957      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
958  def int_nvvm_sqrt_rp_f : ClangBuiltin<"__nvvm_sqrt_rp_f">,
959      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
960  def int_nvvm_sqrt_approx_ftz_f : ClangBuiltin<"__nvvm_sqrt_approx_ftz_f">,
961      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
962  def int_nvvm_sqrt_approx_f : ClangBuiltin<"__nvvm_sqrt_approx_f">,
963      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
964
965  def int_nvvm_sqrt_rn_d : ClangBuiltin<"__nvvm_sqrt_rn_d">,
966      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
967  def int_nvvm_sqrt_rz_d : ClangBuiltin<"__nvvm_sqrt_rz_d">,
968      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
969  def int_nvvm_sqrt_rm_d : ClangBuiltin<"__nvvm_sqrt_rm_d">,
970      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
971  def int_nvvm_sqrt_rp_d : ClangBuiltin<"__nvvm_sqrt_rp_d">,
972      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
973
974//
975// Rsqrt
976//
977
978  def int_nvvm_rsqrt_approx_ftz_f : ClangBuiltin<"__nvvm_rsqrt_approx_ftz_f">,
979      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
980  def int_nvvm_rsqrt_approx_f : ClangBuiltin<"__nvvm_rsqrt_approx_f">,
981      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
982  def int_nvvm_rsqrt_approx_d : ClangBuiltin<"__nvvm_rsqrt_approx_d">,
983      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
984
985//
986// Add
987//
988
989  def int_nvvm_add_rn_ftz_f : ClangBuiltin<"__nvvm_add_rn_ftz_f">,
990      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
991        [IntrNoMem, IntrSpeculatable, Commutative]>;
992  def int_nvvm_add_rn_f : ClangBuiltin<"__nvvm_add_rn_f">,
993      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
994        [IntrNoMem, IntrSpeculatable, Commutative]>;
995  def int_nvvm_add_rz_ftz_f : ClangBuiltin<"__nvvm_add_rz_ftz_f">,
996      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
997        [IntrNoMem, IntrSpeculatable, Commutative]>;
998  def int_nvvm_add_rz_f : ClangBuiltin<"__nvvm_add_rz_f">,
999      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1000        [IntrNoMem, IntrSpeculatable, Commutative]>;
1001  def int_nvvm_add_rm_ftz_f : ClangBuiltin<"__nvvm_add_rm_ftz_f">,
1002      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1003        [IntrNoMem, IntrSpeculatable, Commutative]>;
1004  def int_nvvm_add_rm_f : ClangBuiltin<"__nvvm_add_rm_f">,
1005      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1006        [IntrNoMem, IntrSpeculatable, Commutative]>;
1007  def int_nvvm_add_rp_ftz_f : ClangBuiltin<"__nvvm_add_rp_ftz_f">,
1008      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1009        [IntrNoMem, IntrSpeculatable, Commutative]>;
1010  def int_nvvm_add_rp_f : ClangBuiltin<"__nvvm_add_rp_f">,
1011      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1012        [IntrNoMem, IntrSpeculatable, Commutative]>;
1013
1014  def int_nvvm_add_rn_d : ClangBuiltin<"__nvvm_add_rn_d">,
1015      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1016        [IntrNoMem, IntrSpeculatable, Commutative]>;
1017  def int_nvvm_add_rz_d : ClangBuiltin<"__nvvm_add_rz_d">,
1018      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1019        [IntrNoMem, IntrSpeculatable, Commutative]>;
1020  def int_nvvm_add_rm_d : ClangBuiltin<"__nvvm_add_rm_d">,
1021      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1022        [IntrNoMem, IntrSpeculatable, Commutative]>;
1023  def int_nvvm_add_rp_d : ClangBuiltin<"__nvvm_add_rp_d">,
1024      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1025        [IntrNoMem, IntrSpeculatable, Commutative]>;
1026
1027//
1028// Convert
1029//
1030
1031  def int_nvvm_d2f_rn_ftz : ClangBuiltin<"__nvvm_d2f_rn_ftz">,
1032      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1033  def int_nvvm_d2f_rn : ClangBuiltin<"__nvvm_d2f_rn">,
1034      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1035  def int_nvvm_d2f_rz_ftz : ClangBuiltin<"__nvvm_d2f_rz_ftz">,
1036      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1037  def int_nvvm_d2f_rz : ClangBuiltin<"__nvvm_d2f_rz">,
1038      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1039  def int_nvvm_d2f_rm_ftz : ClangBuiltin<"__nvvm_d2f_rm_ftz">,
1040      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1041  def int_nvvm_d2f_rm : ClangBuiltin<"__nvvm_d2f_rm">,
1042      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1043  def int_nvvm_d2f_rp_ftz : ClangBuiltin<"__nvvm_d2f_rp_ftz">,
1044      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1045  def int_nvvm_d2f_rp : ClangBuiltin<"__nvvm_d2f_rp">,
1046      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1047
1048  def int_nvvm_d2i_rn : ClangBuiltin<"__nvvm_d2i_rn">,
1049      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1050  def int_nvvm_d2i_rz : ClangBuiltin<"__nvvm_d2i_rz">,
1051      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1052  def int_nvvm_d2i_rm : ClangBuiltin<"__nvvm_d2i_rm">,
1053      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1054  def int_nvvm_d2i_rp : ClangBuiltin<"__nvvm_d2i_rp">,
1055      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1056
1057  def int_nvvm_d2ui_rn : ClangBuiltin<"__nvvm_d2ui_rn">,
1058      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1059  def int_nvvm_d2ui_rz : ClangBuiltin<"__nvvm_d2ui_rz">,
1060      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1061  def int_nvvm_d2ui_rm : ClangBuiltin<"__nvvm_d2ui_rm">,
1062      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1063  def int_nvvm_d2ui_rp : ClangBuiltin<"__nvvm_d2ui_rp">,
1064      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1065
1066  def int_nvvm_i2d_rn : ClangBuiltin<"__nvvm_i2d_rn">,
1067      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1068  def int_nvvm_i2d_rz : ClangBuiltin<"__nvvm_i2d_rz">,
1069      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1070  def int_nvvm_i2d_rm : ClangBuiltin<"__nvvm_i2d_rm">,
1071      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1072  def int_nvvm_i2d_rp : ClangBuiltin<"__nvvm_i2d_rp">,
1073      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1074
1075  def int_nvvm_ui2d_rn : ClangBuiltin<"__nvvm_ui2d_rn">,
1076      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1077  def int_nvvm_ui2d_rz : ClangBuiltin<"__nvvm_ui2d_rz">,
1078      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1079  def int_nvvm_ui2d_rm : ClangBuiltin<"__nvvm_ui2d_rm">,
1080      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1081  def int_nvvm_ui2d_rp : ClangBuiltin<"__nvvm_ui2d_rp">,
1082      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1083
1084  def int_nvvm_f2i_rn_ftz : ClangBuiltin<"__nvvm_f2i_rn_ftz">,
1085      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1086  def int_nvvm_f2i_rn : ClangBuiltin<"__nvvm_f2i_rn">,
1087      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1088  def int_nvvm_f2i_rz_ftz : ClangBuiltin<"__nvvm_f2i_rz_ftz">,
1089      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1090  def int_nvvm_f2i_rz : ClangBuiltin<"__nvvm_f2i_rz">,
1091      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1092  def int_nvvm_f2i_rm_ftz : ClangBuiltin<"__nvvm_f2i_rm_ftz">,
1093      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1094  def int_nvvm_f2i_rm : ClangBuiltin<"__nvvm_f2i_rm">,
1095      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1096  def int_nvvm_f2i_rp_ftz : ClangBuiltin<"__nvvm_f2i_rp_ftz">,
1097      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1098  def int_nvvm_f2i_rp : ClangBuiltin<"__nvvm_f2i_rp">,
1099      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1100
1101  def int_nvvm_f2ui_rn_ftz : ClangBuiltin<"__nvvm_f2ui_rn_ftz">,
1102      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1103  def int_nvvm_f2ui_rn : ClangBuiltin<"__nvvm_f2ui_rn">,
1104      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1105  def int_nvvm_f2ui_rz_ftz : ClangBuiltin<"__nvvm_f2ui_rz_ftz">,
1106      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1107  def int_nvvm_f2ui_rz : ClangBuiltin<"__nvvm_f2ui_rz">,
1108      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1109  def int_nvvm_f2ui_rm_ftz : ClangBuiltin<"__nvvm_f2ui_rm_ftz">,
1110      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1111  def int_nvvm_f2ui_rm : ClangBuiltin<"__nvvm_f2ui_rm">,
1112      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1113  def int_nvvm_f2ui_rp_ftz : ClangBuiltin<"__nvvm_f2ui_rp_ftz">,
1114      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1115  def int_nvvm_f2ui_rp : ClangBuiltin<"__nvvm_f2ui_rp">,
1116      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1117
1118  def int_nvvm_i2f_rn : ClangBuiltin<"__nvvm_i2f_rn">,
1119      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1120  def int_nvvm_i2f_rz : ClangBuiltin<"__nvvm_i2f_rz">,
1121      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1122  def int_nvvm_i2f_rm : ClangBuiltin<"__nvvm_i2f_rm">,
1123      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1124  def int_nvvm_i2f_rp : ClangBuiltin<"__nvvm_i2f_rp">,
1125      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1126
1127  def int_nvvm_ui2f_rn : ClangBuiltin<"__nvvm_ui2f_rn">,
1128      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1129  def int_nvvm_ui2f_rz : ClangBuiltin<"__nvvm_ui2f_rz">,
1130      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1131  def int_nvvm_ui2f_rm : ClangBuiltin<"__nvvm_ui2f_rm">,
1132      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1133  def int_nvvm_ui2f_rp : ClangBuiltin<"__nvvm_ui2f_rp">,
1134      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1135
1136  def int_nvvm_lohi_i2d : ClangBuiltin<"__nvvm_lohi_i2d">,
1137      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty, llvm_i32_ty],
1138        [IntrNoMem, IntrSpeculatable, Commutative]>;
1139
1140  def int_nvvm_d2i_lo : ClangBuiltin<"__nvvm_d2i_lo">,
1141      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1142  def int_nvvm_d2i_hi : ClangBuiltin<"__nvvm_d2i_hi">,
1143      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1144
1145  def int_nvvm_f2ll_rn_ftz : ClangBuiltin<"__nvvm_f2ll_rn_ftz">,
1146      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1147  def int_nvvm_f2ll_rn : ClangBuiltin<"__nvvm_f2ll_rn">,
1148      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1149  def int_nvvm_f2ll_rz_ftz : ClangBuiltin<"__nvvm_f2ll_rz_ftz">,
1150      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1151  def int_nvvm_f2ll_rz : ClangBuiltin<"__nvvm_f2ll_rz">,
1152      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1153  def int_nvvm_f2ll_rm_ftz : ClangBuiltin<"__nvvm_f2ll_rm_ftz">,
1154      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1155  def int_nvvm_f2ll_rm : ClangBuiltin<"__nvvm_f2ll_rm">,
1156      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1157  def int_nvvm_f2ll_rp_ftz : ClangBuiltin<"__nvvm_f2ll_rp_ftz">,
1158      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1159  def int_nvvm_f2ll_rp : ClangBuiltin<"__nvvm_f2ll_rp">,
1160      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1161
1162  def int_nvvm_f2ull_rn_ftz : ClangBuiltin<"__nvvm_f2ull_rn_ftz">,
1163      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1164  def int_nvvm_f2ull_rn : ClangBuiltin<"__nvvm_f2ull_rn">,
1165      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1166  def int_nvvm_f2ull_rz_ftz : ClangBuiltin<"__nvvm_f2ull_rz_ftz">,
1167      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1168  def int_nvvm_f2ull_rz : ClangBuiltin<"__nvvm_f2ull_rz">,
1169      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1170  def int_nvvm_f2ull_rm_ftz : ClangBuiltin<"__nvvm_f2ull_rm_ftz">,
1171      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1172  def int_nvvm_f2ull_rm : ClangBuiltin<"__nvvm_f2ull_rm">,
1173      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1174  def int_nvvm_f2ull_rp_ftz : ClangBuiltin<"__nvvm_f2ull_rp_ftz">,
1175      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1176  def int_nvvm_f2ull_rp : ClangBuiltin<"__nvvm_f2ull_rp">,
1177      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1178
1179  def int_nvvm_d2ll_rn : ClangBuiltin<"__nvvm_d2ll_rn">,
1180      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1181  def int_nvvm_d2ll_rz : ClangBuiltin<"__nvvm_d2ll_rz">,
1182      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1183  def int_nvvm_d2ll_rm : ClangBuiltin<"__nvvm_d2ll_rm">,
1184      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1185  def int_nvvm_d2ll_rp : ClangBuiltin<"__nvvm_d2ll_rp">,
1186      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1187
1188  def int_nvvm_d2ull_rn : ClangBuiltin<"__nvvm_d2ull_rn">,
1189      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1190  def int_nvvm_d2ull_rz : ClangBuiltin<"__nvvm_d2ull_rz">,
1191      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1192  def int_nvvm_d2ull_rm : ClangBuiltin<"__nvvm_d2ull_rm">,
1193      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1194  def int_nvvm_d2ull_rp : ClangBuiltin<"__nvvm_d2ull_rp">,
1195      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1196
1197  def int_nvvm_ll2f_rn : ClangBuiltin<"__nvvm_ll2f_rn">,
1198      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1199  def int_nvvm_ll2f_rz : ClangBuiltin<"__nvvm_ll2f_rz">,
1200      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1201  def int_nvvm_ll2f_rm : ClangBuiltin<"__nvvm_ll2f_rm">,
1202      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1203  def int_nvvm_ll2f_rp : ClangBuiltin<"__nvvm_ll2f_rp">,
1204      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1205  def int_nvvm_ull2f_rn : ClangBuiltin<"__nvvm_ull2f_rn">,
1206      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1207  def int_nvvm_ull2f_rz : ClangBuiltin<"__nvvm_ull2f_rz">,
1208      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1209  def int_nvvm_ull2f_rm : ClangBuiltin<"__nvvm_ull2f_rm">,
1210      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1211  def int_nvvm_ull2f_rp : ClangBuiltin<"__nvvm_ull2f_rp">,
1212      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1213
1214  def int_nvvm_ll2d_rn : ClangBuiltin<"__nvvm_ll2d_rn">,
1215      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1216  def int_nvvm_ll2d_rz : ClangBuiltin<"__nvvm_ll2d_rz">,
1217      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1218  def int_nvvm_ll2d_rm : ClangBuiltin<"__nvvm_ll2d_rm">,
1219      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1220  def int_nvvm_ll2d_rp : ClangBuiltin<"__nvvm_ll2d_rp">,
1221      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1222  def int_nvvm_ull2d_rn : ClangBuiltin<"__nvvm_ull2d_rn">,
1223      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1224  def int_nvvm_ull2d_rz : ClangBuiltin<"__nvvm_ull2d_rz">,
1225      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1226  def int_nvvm_ull2d_rm : ClangBuiltin<"__nvvm_ull2d_rm">,
1227      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1228  def int_nvvm_ull2d_rp : ClangBuiltin<"__nvvm_ull2d_rp">,
1229      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1230
1231  def int_nvvm_f2h_rn_ftz : ClangBuiltin<"__nvvm_f2h_rn_ftz">,
1232      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1233  def int_nvvm_f2h_rn : ClangBuiltin<"__nvvm_f2h_rn">,
1234      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1235
1236  def int_nvvm_bf2h_rn_ftz : ClangBuiltin<"__nvvm_bf2h_rn_ftz">,
1237      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_bfloat_ty], [IntrNoMem, IntrSpeculatable]>;
1238  def int_nvvm_bf2h_rn : ClangBuiltin<"__nvvm_bf2h_rn">,
1239      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_bfloat_ty], [IntrNoMem, IntrSpeculatable]>;
1240
1241  def int_nvvm_ff2bf16x2_rn : ClangBuiltin<"__nvvm_ff2bf16x2_rn">,
1242       Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1243  def int_nvvm_ff2bf16x2_rn_relu : ClangBuiltin<"__nvvm_ff2bf16x2_rn_relu">,
1244      Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1245  def int_nvvm_ff2bf16x2_rz : ClangBuiltin<"__nvvm_ff2bf16x2_rz">,
1246      Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1247  def int_nvvm_ff2bf16x2_rz_relu : ClangBuiltin<"__nvvm_ff2bf16x2_rz_relu">,
1248      Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem]>;
1249
1250  def int_nvvm_ff2f16x2_rn : ClangBuiltin<"__nvvm_ff2f16x2_rn">,
1251      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1252  def int_nvvm_ff2f16x2_rn_relu : ClangBuiltin<"__nvvm_ff2f16x2_rn_relu">,
1253      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1254  def int_nvvm_ff2f16x2_rz : ClangBuiltin<"__nvvm_ff2f16x2_rz">,
1255      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1256  def int_nvvm_ff2f16x2_rz_relu : ClangBuiltin<"__nvvm_ff2f16x2_rz_relu">,
1257      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1258
1259  def int_nvvm_f2bf16_rn : ClangBuiltin<"__nvvm_f2bf16_rn">,
1260      Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1261  def int_nvvm_f2bf16_rn_relu : ClangBuiltin<"__nvvm_f2bf16_rn_relu">,
1262      Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1263  def int_nvvm_f2bf16_rz : ClangBuiltin<"__nvvm_f2bf16_rz">,
1264      Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1265  def int_nvvm_f2bf16_rz_relu : ClangBuiltin<"__nvvm_f2bf16_rz_relu">,
1266       Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1267
1268  def int_nvvm_f2tf32_rna : ClangBuiltin<"__nvvm_f2tf32_rna">,
1269      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1270
1271//
1272// Bitcast
1273//
1274
1275  def int_nvvm_bitcast_f2i : ClangBuiltin<"__nvvm_bitcast_f2i">,
1276      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1277  def int_nvvm_bitcast_i2f : ClangBuiltin<"__nvvm_bitcast_i2f">,
1278      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1279
1280  def int_nvvm_bitcast_ll2d : ClangBuiltin<"__nvvm_bitcast_ll2d">,
1281      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1282  def int_nvvm_bitcast_d2ll : ClangBuiltin<"__nvvm_bitcast_d2ll">,
1283      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1284
1285// FNS
1286
1287  def int_nvvm_fns : ClangBuiltin<"__nvvm_fns">,
1288      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1289                [IntrNoMem]>;
1290
1291// Atomics not available as llvm intrinsics.
1292  def int_nvvm_atomic_load_inc_32 : Intrinsic<[llvm_i32_ty],
1293          [llvm_anyptr_ty, llvm_i32_ty],
1294                                      [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
1295  def int_nvvm_atomic_load_dec_32 : Intrinsic<[llvm_i32_ty],
1296          [llvm_anyptr_ty, llvm_i32_ty],
1297                                      [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
1298
1299  class SCOPED_ATOMIC2_impl<LLVMType elty>
1300        : Intrinsic<[elty],
1301          [llvm_anyptr_ty, LLVMMatchType<0>],
1302          [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
1303  class SCOPED_ATOMIC3_impl<LLVMType elty>
1304        : Intrinsic<[elty],
1305          [llvm_anyptr_ty, LLVMMatchType<0>,
1306           LLVMMatchType<0>],
1307          [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
1308
1309  multiclass PTXAtomicWithScope2<LLVMType elty> {
1310    def _cta : SCOPED_ATOMIC2_impl<elty>;
1311    def _sys : SCOPED_ATOMIC2_impl<elty>;
1312  }
1313  multiclass PTXAtomicWithScope3<LLVMType elty> {
1314    def _cta : SCOPED_ATOMIC3_impl<elty>;
1315    def _sys : SCOPED_ATOMIC3_impl<elty>;
1316  }
1317  multiclass PTXAtomicWithScope2_fi {
1318    defm _f: PTXAtomicWithScope2<llvm_anyfloat_ty>;
1319    defm _i: PTXAtomicWithScope2<llvm_anyint_ty>;
1320  }
1321  defm int_nvvm_atomic_add_gen   : PTXAtomicWithScope2_fi;
1322  defm int_nvvm_atomic_inc_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1323  defm int_nvvm_atomic_dec_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1324  defm int_nvvm_atomic_exch_gen_i: PTXAtomicWithScope2<llvm_anyint_ty>;
1325  defm int_nvvm_atomic_xor_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1326  defm int_nvvm_atomic_max_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1327  defm int_nvvm_atomic_min_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1328  defm int_nvvm_atomic_or_gen_i  : PTXAtomicWithScope2<llvm_anyint_ty>;
1329  defm int_nvvm_atomic_and_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1330  defm int_nvvm_atomic_cas_gen_i : PTXAtomicWithScope3<llvm_anyint_ty>;
1331
1332// Bar.Sync
1333
1334  // The builtin for "bar.sync 0" is called __syncthreads.  Unlike most of the
1335  // intrinsics in this file, this one is a user-facing API.
1336  def int_nvvm_barrier0 : ClangBuiltin<"__syncthreads">,
1337      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1338  // Synchronize all threads in the CTA at barrier 'n'.
1339  def int_nvvm_barrier_n : ClangBuiltin<"__nvvm_bar_n">,
1340      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1341  // Synchronize 'm', a multiple of warp size, (arg 2) threads in
1342  // the CTA at barrier 'n' (arg 1).
1343  def int_nvvm_barrier : ClangBuiltin<"__nvvm_bar">,
1344      Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1345  def int_nvvm_barrier0_popc : ClangBuiltin<"__nvvm_bar0_popc">,
1346      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1347  def int_nvvm_barrier0_and : ClangBuiltin<"__nvvm_bar0_and">,
1348      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1349  def int_nvvm_barrier0_or : ClangBuiltin<"__nvvm_bar0_or">,
1350      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1351
1352  def int_nvvm_bar_sync :
1353      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
1354      ClangBuiltin<"__nvvm_bar_sync">;
1355  def int_nvvm_bar_warp_sync :
1356      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
1357      ClangBuiltin<"__nvvm_bar_warp_sync">;
1358
1359  // barrier.sync id[, cnt]
1360  def int_nvvm_barrier_sync :
1361      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
1362      ClangBuiltin<"__nvvm_barrier_sync">;
1363  def int_nvvm_barrier_sync_cnt :
1364      Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
1365      ClangBuiltin<"__nvvm_barrier_sync_cnt">;
1366
1367  // barrier.cluster.[wait, arrive, arrive.relaxed]
1368  def int_nvvm_barrier_cluster_arrive :
1369      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1370  def int_nvvm_barrier_cluster_arrive_relaxed :
1371      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1372  def int_nvvm_barrier_cluster_wait :
1373      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1374
1375  // Membar
1376  def int_nvvm_membar_cta : ClangBuiltin<"__nvvm_membar_cta">,
1377      Intrinsic<[], [], [IntrNoCallback]>;
1378  def int_nvvm_membar_gl : ClangBuiltin<"__nvvm_membar_gl">,
1379      Intrinsic<[], [], [IntrNoCallback]>;
1380  def int_nvvm_membar_sys : ClangBuiltin<"__nvvm_membar_sys">,
1381      Intrinsic<[], [], [IntrNoCallback]>;
1382  def int_nvvm_fence_sc_cluster:
1383      Intrinsic<[], [], [IntrNoCallback]>;
1384
1385// Async Copy
1386def int_nvvm_cp_async_mbarrier_arrive :
1387    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive">,
1388    Intrinsic<[],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1389def int_nvvm_cp_async_mbarrier_arrive_shared :
1390    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive_shared">,
1391    Intrinsic<[],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1392def int_nvvm_cp_async_mbarrier_arrive_noinc :
1393    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive_noinc">,
1394    Intrinsic<[],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1395def int_nvvm_cp_async_mbarrier_arrive_noinc_shared :
1396    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive_noinc_shared">,
1397    Intrinsic<[],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1398
1399multiclass CP_ASYNC_SHARED_GLOBAL<string n, string cc> {
1400  def NAME: Intrinsic<[],[llvm_shared_ptr_ty, llvm_global_ptr_ty],
1401        [IntrArgMemOnly, IntrNoCallback, NoAlias<ArgIndex<0>>, NoAlias<ArgIndex<1>>,
1402        WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>],
1403        "llvm.nvvm.cp.async." # cc # ".shared.global." # n>;
1404  def _s: Intrinsic<[],[llvm_shared_ptr_ty, llvm_global_ptr_ty, llvm_i32_ty],
1405        [IntrArgMemOnly, IntrNoCallback, NoAlias<ArgIndex<0>>, NoAlias<ArgIndex<1>>,
1406        WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>],
1407        "llvm.nvvm.cp.async." # cc # ".shared.global." # n # ".s">;
1408}
1409
1410defm int_nvvm_cp_async_ca_shared_global_4 : CP_ASYNC_SHARED_GLOBAL<"4", "ca">;
1411defm int_nvvm_cp_async_ca_shared_global_8 : CP_ASYNC_SHARED_GLOBAL<"8", "ca">;
1412defm int_nvvm_cp_async_ca_shared_global_16 : CP_ASYNC_SHARED_GLOBAL<"16", "ca">;
1413defm int_nvvm_cp_async_cg_shared_global_16 : CP_ASYNC_SHARED_GLOBAL<"16", "cg">;
1414
1415def int_nvvm_cp_async_commit_group :
1416    ClangBuiltin<"__nvvm_cp_async_commit_group">,
1417    Intrinsic<[],[],[]>;
1418
1419def int_nvvm_cp_async_wait_group :
1420    ClangBuiltin<"__nvvm_cp_async_wait_group">,
1421    Intrinsic<[],[llvm_i32_ty],[ImmArg<ArgIndex<0>>]>;
1422
1423def int_nvvm_cp_async_wait_all :
1424    ClangBuiltin<"__nvvm_cp_async_wait_all">,
1425    Intrinsic<[],[],[]>;
1426
1427// mbarrier
1428def int_nvvm_mbarrier_init : ClangBuiltin<"__nvvm_mbarrier_init">,
1429    Intrinsic<[],[llvm_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1430def int_nvvm_mbarrier_init_shared :
1431    ClangBuiltin<"__nvvm_mbarrier_init_shared">,
1432    Intrinsic<[],[llvm_shared_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1433
1434def int_nvvm_mbarrier_inval : ClangBuiltin<"__nvvm_mbarrier_inval">,
1435    Intrinsic<[],[llvm_ptr_ty],
1436    [IntrConvergent, IntrWriteMem, IntrArgMemOnly, IntrNoCallback,
1437    WriteOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>]>;
1438def int_nvvm_mbarrier_inval_shared :
1439    ClangBuiltin<"__nvvm_mbarrier_inval_shared">,
1440    Intrinsic<[],[llvm_shared_ptr_ty],
1441    [IntrConvergent, IntrWriteMem, IntrArgMemOnly, IntrNoCallback,
1442    WriteOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>]>;
1443
1444def int_nvvm_mbarrier_arrive : ClangBuiltin<"__nvvm_mbarrier_arrive">,
1445    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1446def int_nvvm_mbarrier_arrive_shared :
1447    ClangBuiltin<"__nvvm_mbarrier_arrive_shared">,
1448    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1449def int_nvvm_mbarrier_arrive_noComplete :
1450    ClangBuiltin<"__nvvm_mbarrier_arrive_noComplete">,
1451    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1452def int_nvvm_mbarrier_arrive_noComplete_shared :
1453    ClangBuiltin<"__nvvm_mbarrier_arrive_noComplete_shared">,
1454    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty,
1455    llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1456
1457def int_nvvm_mbarrier_arrive_drop :
1458    ClangBuiltin<"__nvvm_mbarrier_arrive_drop">,
1459    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1460def int_nvvm_mbarrier_arrive_drop_shared :
1461    ClangBuiltin<"__nvvm_mbarrier_arrive_drop_shared">,
1462    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1463def int_nvvm_mbarrier_arrive_drop_noComplete :
1464    ClangBuiltin<"__nvvm_mbarrier_arrive_drop_noComplete">,
1465    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1466def int_nvvm_mbarrier_arrive_drop_noComplete_shared :
1467    ClangBuiltin<"__nvvm_mbarrier_arrive_drop_noComplete_shared">,
1468    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty,
1469    llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1470
1471def int_nvvm_mbarrier_test_wait :
1472    ClangBuiltin<"__nvvm_mbarrier_test_wait">,
1473    Intrinsic<[llvm_i1_ty],[llvm_ptr_ty, llvm_i64_ty],[IntrConvergent, IntrNoCallback]>;
1474def int_nvvm_mbarrier_test_wait_shared :
1475    ClangBuiltin<"__nvvm_mbarrier_test_wait_shared">,
1476    Intrinsic<[llvm_i1_ty],[llvm_shared_ptr_ty, llvm_i64_ty],[IntrConvergent, IntrNoCallback]>;
1477
1478def int_nvvm_mbarrier_pending_count :
1479    ClangBuiltin<"__nvvm_mbarrier_pending_count">,
1480    Intrinsic<[llvm_i32_ty],[llvm_i64_ty],[IntrNoMem, IntrConvergent, IntrNoCallback]>;
1481
1482// Generated within nvvm. Use for ldu on sm_20 or later.  Second arg is the
1483// pointer's alignment.
1484def int_nvvm_ldu_global_i : Intrinsic<[llvm_anyint_ty],
1485  [llvm_anyptr_ty, llvm_i32_ty],
1486  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1487  "llvm.nvvm.ldu.global.i">;
1488def int_nvvm_ldu_global_f : Intrinsic<[llvm_anyfloat_ty],
1489  [llvm_anyptr_ty, llvm_i32_ty],
1490  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1491  "llvm.nvvm.ldu.global.f">;
1492def int_nvvm_ldu_global_p : Intrinsic<[llvm_anyptr_ty],
1493  [llvm_anyptr_ty, llvm_i32_ty],
1494  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1495  "llvm.nvvm.ldu.global.p">;
1496
1497// Generated within nvvm. Use for ldg on sm_35 or later.  Second arg is the
1498// pointer's alignment.
1499def int_nvvm_ldg_global_i : Intrinsic<[llvm_anyint_ty],
1500  [llvm_anyptr_ty, llvm_i32_ty],
1501  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1502  "llvm.nvvm.ldg.global.i">;
1503def int_nvvm_ldg_global_f : Intrinsic<[llvm_anyfloat_ty],
1504  [llvm_anyptr_ty, llvm_i32_ty],
1505  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1506  "llvm.nvvm.ldg.global.f">;
1507def int_nvvm_ldg_global_p : Intrinsic<[llvm_anyptr_ty],
1508  [llvm_anyptr_ty, llvm_i32_ty],
1509  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1510  "llvm.nvvm.ldg.global.p">;
1511
1512// Use for generic pointers
1513// - These intrinsics are used to convert address spaces.
1514// - The input pointer and output pointer must have the same type, except for
1515//   the address-space. (This restriction is not enforced here as there is
1516//   currently no way to describe it).
1517// - This complements the llvm bitcast, which can be used to cast one type
1518//   of pointer to another type of pointer, while the address space remains
1519//   the same.
1520def int_nvvm_ptr_local_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1521                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1522                 "llvm.nvvm.ptr.local.to.gen">;
1523def int_nvvm_ptr_shared_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1524                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1525                 "llvm.nvvm.ptr.shared.to.gen">;
1526def int_nvvm_ptr_global_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1527                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1528                 "llvm.nvvm.ptr.global.to.gen">;
1529def int_nvvm_ptr_constant_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1530                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1531                 "llvm.nvvm.ptr.constant.to.gen">;
1532
1533def int_nvvm_ptr_gen_to_global: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1534                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1535                 "llvm.nvvm.ptr.gen.to.global">;
1536def int_nvvm_ptr_gen_to_shared: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1537                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1538                 "llvm.nvvm.ptr.gen.to.shared">;
1539def int_nvvm_ptr_gen_to_local: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1540                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1541                 "llvm.nvvm.ptr.gen.to.local">;
1542def int_nvvm_ptr_gen_to_constant: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1543                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1544                 "llvm.nvvm.ptr.gen.to.constant">;
1545
1546// Used in nvvm internally to help address space opt and ptx code generation
1547// This is for params that are passed to kernel functions by pointer by-val.
1548def int_nvvm_ptr_gen_to_param: Intrinsic<[llvm_anyptr_ty],
1549                                     [llvm_anyptr_ty],
1550                                   [IntrNoMem, IntrSpeculatable, IntrNoCallback],
1551                                   "llvm.nvvm.ptr.gen.to.param">;
1552
1553// Move intrinsics, used in nvvm internally
1554
1555def int_nvvm_move_i16 : Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem],
1556  "llvm.nvvm.move.i16">;
1557def int_nvvm_move_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem],
1558  "llvm.nvvm.move.i32">;
1559def int_nvvm_move_i64 : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem],
1560  "llvm.nvvm.move.i64">;
1561def int_nvvm_move_float : Intrinsic<[llvm_float_ty], [llvm_float_ty],
1562  [IntrNoMem], "llvm.nvvm.move.float">;
1563def int_nvvm_move_double : Intrinsic<[llvm_double_ty], [llvm_double_ty],
1564  [IntrNoMem], "llvm.nvvm.move.double">;
1565def int_nvvm_move_ptr : Intrinsic<[llvm_anyptr_ty], [llvm_anyptr_ty],
1566  [IntrNoMem, NoCapture<ArgIndex<0>>], "llvm.nvvm.move.ptr">;
1567
1568
1569// For getting the handle from a texture or surface variable
1570def int_nvvm_texsurf_handle
1571  : Intrinsic<[llvm_i64_ty], [llvm_metadata_ty, llvm_anyptr_ty],
1572              [IntrNoMem], "llvm.nvvm.texsurf.handle">;
1573def int_nvvm_texsurf_handle_internal
1574  : Intrinsic<[llvm_i64_ty], [llvm_anyptr_ty],
1575              [IntrNoMem], "llvm.nvvm.texsurf.handle.internal">;
1576
1577/// Error / Warn
1578def int_nvvm_compiler_error :
1579    Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.error">;
1580def int_nvvm_compiler_warn :
1581    Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.warn">;
1582
1583def int_nvvm_reflect :
1584  Intrinsic<[llvm_i32_ty], [llvm_anyptr_ty], [IntrNoMem], "llvm.nvvm.reflect">;
1585
1586// isspacep.{const, global, local, shared}
1587def int_nvvm_isspacep_const
1588  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1589              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1590              "llvm.nvvm.isspacep.const">,
1591    ClangBuiltin<"__nvvm_isspacep_const">;
1592def int_nvvm_isspacep_global
1593  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1594              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1595              "llvm.nvvm.isspacep.global">,
1596    ClangBuiltin<"__nvvm_isspacep_global">;
1597def int_nvvm_isspacep_local
1598  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1599              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1600              "llvm.nvvm.isspacep.local">,
1601    ClangBuiltin<"__nvvm_isspacep_local">;
1602def int_nvvm_isspacep_shared
1603  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1604              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1605              "llvm.nvvm.isspacep.shared">,
1606    ClangBuiltin<"__nvvm_isspacep_shared">;
1607def int_nvvm_isspacep_shared_cluster
1608  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1609              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1610              "llvm.nvvm.isspacep.shared.cluster">;
1611
1612// Environment register read
1613def int_nvvm_read_ptx_sreg_envreg0
1614  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1615              "llvm.nvvm.read.ptx.sreg.envreg0">,
1616    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg0">;
1617def int_nvvm_read_ptx_sreg_envreg1
1618  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1619              "llvm.nvvm.read.ptx.sreg.envreg1">,
1620    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg1">;
1621def int_nvvm_read_ptx_sreg_envreg2
1622  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1623              "llvm.nvvm.read.ptx.sreg.envreg2">,
1624    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg2">;
1625def int_nvvm_read_ptx_sreg_envreg3
1626  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1627              "llvm.nvvm.read.ptx.sreg.envreg3">,
1628    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg3">;
1629def int_nvvm_read_ptx_sreg_envreg4
1630  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1631              "llvm.nvvm.read.ptx.sreg.envreg4">,
1632    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg4">;
1633def int_nvvm_read_ptx_sreg_envreg5
1634  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1635              "llvm.nvvm.read.ptx.sreg.envreg5">,
1636    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg5">;
1637def int_nvvm_read_ptx_sreg_envreg6
1638  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1639              "llvm.nvvm.read.ptx.sreg.envreg6">,
1640    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg6">;
1641def int_nvvm_read_ptx_sreg_envreg7
1642  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1643              "llvm.nvvm.read.ptx.sreg.envreg7">,
1644    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg7">;
1645def int_nvvm_read_ptx_sreg_envreg8
1646  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1647              "llvm.nvvm.read.ptx.sreg.envreg8">,
1648    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg8">;
1649def int_nvvm_read_ptx_sreg_envreg9
1650  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1651              "llvm.nvvm.read.ptx.sreg.envreg9">,
1652    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg9">;
1653def int_nvvm_read_ptx_sreg_envreg10
1654  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1655              "llvm.nvvm.read.ptx.sreg.envreg10">,
1656    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg10">;
1657def int_nvvm_read_ptx_sreg_envreg11
1658  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1659              "llvm.nvvm.read.ptx.sreg.envreg11">,
1660    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg11">;
1661def int_nvvm_read_ptx_sreg_envreg12
1662  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1663              "llvm.nvvm.read.ptx.sreg.envreg12">,
1664    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg12">;
1665def int_nvvm_read_ptx_sreg_envreg13
1666  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1667              "llvm.nvvm.read.ptx.sreg.envreg13">,
1668    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg13">;
1669def int_nvvm_read_ptx_sreg_envreg14
1670  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1671              "llvm.nvvm.read.ptx.sreg.envreg14">,
1672    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg14">;
1673def int_nvvm_read_ptx_sreg_envreg15
1674  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1675              "llvm.nvvm.read.ptx.sreg.envreg15">,
1676    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg15">;
1677def int_nvvm_read_ptx_sreg_envreg16
1678  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1679              "llvm.nvvm.read.ptx.sreg.envreg16">,
1680    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg16">;
1681def int_nvvm_read_ptx_sreg_envreg17
1682  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1683              "llvm.nvvm.read.ptx.sreg.envreg17">,
1684    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg17">;
1685def int_nvvm_read_ptx_sreg_envreg18
1686  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1687              "llvm.nvvm.read.ptx.sreg.envreg18">,
1688    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg18">;
1689def int_nvvm_read_ptx_sreg_envreg19
1690  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1691              "llvm.nvvm.read.ptx.sreg.envreg19">,
1692    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg19">;
1693def int_nvvm_read_ptx_sreg_envreg20
1694  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1695              "llvm.nvvm.read.ptx.sreg.envreg20">,
1696    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg20">;
1697def int_nvvm_read_ptx_sreg_envreg21
1698  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1699              "llvm.nvvm.read.ptx.sreg.envreg21">,
1700    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg21">;
1701def int_nvvm_read_ptx_sreg_envreg22
1702  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1703              "llvm.nvvm.read.ptx.sreg.envreg22">,
1704    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg22">;
1705def int_nvvm_read_ptx_sreg_envreg23
1706  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1707              "llvm.nvvm.read.ptx.sreg.envreg23">,
1708    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg23">;
1709def int_nvvm_read_ptx_sreg_envreg24
1710  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1711              "llvm.nvvm.read.ptx.sreg.envreg24">,
1712    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg24">;
1713def int_nvvm_read_ptx_sreg_envreg25
1714  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1715              "llvm.nvvm.read.ptx.sreg.envreg25">,
1716    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg25">;
1717def int_nvvm_read_ptx_sreg_envreg26
1718  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1719              "llvm.nvvm.read.ptx.sreg.envreg26">,
1720    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg26">;
1721def int_nvvm_read_ptx_sreg_envreg27
1722  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1723              "llvm.nvvm.read.ptx.sreg.envreg27">,
1724    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg27">;
1725def int_nvvm_read_ptx_sreg_envreg28
1726  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1727              "llvm.nvvm.read.ptx.sreg.envreg28">,
1728    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg28">;
1729def int_nvvm_read_ptx_sreg_envreg29
1730  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1731              "llvm.nvvm.read.ptx.sreg.envreg29">,
1732    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg29">;
1733def int_nvvm_read_ptx_sreg_envreg30
1734  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1735              "llvm.nvvm.read.ptx.sreg.envreg30">,
1736    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg30">;
1737def int_nvvm_read_ptx_sreg_envreg31
1738  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1739              "llvm.nvvm.read.ptx.sreg.envreg31">,
1740    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg31">;
1741
1742
1743// Texture Fetch
1744// texmode_independent
1745def int_nvvm_tex_1d_v4f32_s32
1746  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1747              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1748              "llvm.nvvm.tex.1d.v4f32.s32">;
1749def int_nvvm_tex_1d_v4f32_f32
1750  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1751              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1752              "llvm.nvvm.tex.1d.v4f32.f32">;
1753def int_nvvm_tex_1d_level_v4f32_f32
1754  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1755              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1756              "llvm.nvvm.tex.1d.level.v4f32.f32">;
1757def int_nvvm_tex_1d_grad_v4f32_f32
1758  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1759              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1760               llvm_float_ty], [],
1761              "llvm.nvvm.tex.1d.grad.v4f32.f32">;
1762def int_nvvm_tex_1d_v4s32_s32
1763  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1764              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1765              "llvm.nvvm.tex.1d.v4s32.s32">;
1766def int_nvvm_tex_1d_v4s32_f32
1767  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1768              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1769              "llvm.nvvm.tex.1d.v4s32.f32">;
1770def int_nvvm_tex_1d_level_v4s32_f32
1771  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1772              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1773              "llvm.nvvm.tex.1d.level.v4s32.f32">;
1774def int_nvvm_tex_1d_grad_v4s32_f32
1775  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1776              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1777               llvm_float_ty], [],
1778              "llvm.nvvm.tex.1d.grad.v4s32.f32">;
1779def int_nvvm_tex_1d_v4u32_s32
1780  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1781              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1782              "llvm.nvvm.tex.1d.v4u32.s32">;
1783def int_nvvm_tex_1d_v4u32_f32
1784  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1785              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1786              "llvm.nvvm.tex.1d.v4u32.f32">;
1787def int_nvvm_tex_1d_level_v4u32_f32
1788  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1789              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1790              "llvm.nvvm.tex.1d.level.v4u32.f32">;
1791def int_nvvm_tex_1d_grad_v4u32_f32
1792  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1793              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1794               llvm_float_ty], [],
1795              "llvm.nvvm.tex.1d.grad.v4u32.f32">;
1796
1797def int_nvvm_tex_1d_array_v4f32_s32
1798  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1799              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1800              "llvm.nvvm.tex.1d.array.v4f32.s32">;
1801def int_nvvm_tex_1d_array_v4f32_f32
1802  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1803              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1804              "llvm.nvvm.tex.1d.array.v4f32.f32">;
1805def int_nvvm_tex_1d_array_level_v4f32_f32
1806  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1807              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1808               llvm_float_ty], [],
1809              "llvm.nvvm.tex.1d.array.level.v4f32.f32">;
1810def int_nvvm_tex_1d_array_grad_v4f32_f32
1811  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1812              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1813               llvm_float_ty, llvm_float_ty], [],
1814              "llvm.nvvm.tex.1d.array.grad.v4f32.f32">;
1815def int_nvvm_tex_1d_array_v4s32_s32
1816  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1817              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1818              "llvm.nvvm.tex.1d.array.v4s32.s32">;
1819def int_nvvm_tex_1d_array_v4s32_f32
1820  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1821              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1822              "llvm.nvvm.tex.1d.array.v4s32.f32">;
1823def int_nvvm_tex_1d_array_level_v4s32_f32
1824  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1825              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1826               llvm_float_ty], [],
1827              "llvm.nvvm.tex.1d.array.level.v4s32.f32">;
1828def int_nvvm_tex_1d_array_grad_v4s32_f32
1829  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1830              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1831               llvm_float_ty, llvm_float_ty], [],
1832              "llvm.nvvm.tex.1d.array.grad.v4s32.f32">;
1833def int_nvvm_tex_1d_array_v4u32_s32
1834  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1835              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1836              "llvm.nvvm.tex.1d.array.v4u32.s32">;
1837def int_nvvm_tex_1d_array_v4u32_f32
1838  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1839              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1840              "llvm.nvvm.tex.1d.array.v4u32.f32">;
1841def int_nvvm_tex_1d_array_level_v4u32_f32
1842  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1843              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1844               llvm_float_ty], [],
1845              "llvm.nvvm.tex.1d.array.level.v4u32.f32">;
1846def int_nvvm_tex_1d_array_grad_v4u32_f32
1847  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1848              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1849               llvm_float_ty, llvm_float_ty], [],
1850              "llvm.nvvm.tex.1d.array.grad.v4u32.f32">;
1851
1852def int_nvvm_tex_2d_v4f32_s32
1853  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1854              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1855              "llvm.nvvm.tex.2d.v4f32.s32">;
1856def int_nvvm_tex_2d_v4f32_f32
1857  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1858              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1859              "llvm.nvvm.tex.2d.v4f32.f32">;
1860def int_nvvm_tex_2d_level_v4f32_f32
1861  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1862              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1863               llvm_float_ty], [],
1864              "llvm.nvvm.tex.2d.level.v4f32.f32">;
1865def int_nvvm_tex_2d_grad_v4f32_f32
1866  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1867              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1868               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1869              "llvm.nvvm.tex.2d.grad.v4f32.f32">;
1870def int_nvvm_tex_2d_v4s32_s32
1871  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1872              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1873              "llvm.nvvm.tex.2d.v4s32.s32">;
1874def int_nvvm_tex_2d_v4s32_f32
1875  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1876              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1877              "llvm.nvvm.tex.2d.v4s32.f32">;
1878def int_nvvm_tex_2d_level_v4s32_f32
1879  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1880              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1881               llvm_float_ty], [],
1882              "llvm.nvvm.tex.2d.level.v4s32.f32">;
1883def int_nvvm_tex_2d_grad_v4s32_f32
1884  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1885              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1886               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1887              "llvm.nvvm.tex.2d.grad.v4s32.f32">;
1888def int_nvvm_tex_2d_v4u32_s32
1889  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1890              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1891              "llvm.nvvm.tex.2d.v4u32.s32">;
1892def int_nvvm_tex_2d_v4u32_f32
1893  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1894              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1895              "llvm.nvvm.tex.2d.v4u32.f32">;
1896def int_nvvm_tex_2d_level_v4u32_f32
1897  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1898              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1899               llvm_float_ty], [],
1900              "llvm.nvvm.tex.2d.level.v4u32.f32">;
1901def int_nvvm_tex_2d_grad_v4u32_f32
1902  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1903              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1904               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1905              "llvm.nvvm.tex.2d.grad.v4u32.f32">;
1906
1907def int_nvvm_tex_2d_array_v4f32_s32
1908  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1909              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1910               llvm_i32_ty], [],
1911              "llvm.nvvm.tex.2d.array.v4f32.s32">;
1912def int_nvvm_tex_2d_array_v4f32_f32
1913  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1914              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1915               llvm_float_ty], [],
1916              "llvm.nvvm.tex.2d.array.v4f32.f32">;
1917def int_nvvm_tex_2d_array_level_v4f32_f32
1918  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1919              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1920               llvm_float_ty, llvm_float_ty], [],
1921              "llvm.nvvm.tex.2d.array.level.v4f32.f32">;
1922def int_nvvm_tex_2d_array_grad_v4f32_f32
1923  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1924              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1925               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1926               llvm_float_ty], [],
1927              "llvm.nvvm.tex.2d.array.grad.v4f32.f32">;
1928def int_nvvm_tex_2d_array_v4s32_s32
1929  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1930              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1931               llvm_i32_ty], [],
1932              "llvm.nvvm.tex.2d.array.v4s32.s32">;
1933def int_nvvm_tex_2d_array_v4s32_f32
1934  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1935              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1936               llvm_float_ty], [],
1937              "llvm.nvvm.tex.2d.array.v4s32.f32">;
1938def int_nvvm_tex_2d_array_level_v4s32_f32
1939  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1940              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1941               llvm_float_ty, llvm_float_ty], [],
1942              "llvm.nvvm.tex.2d.array.level.v4s32.f32">;
1943def int_nvvm_tex_2d_array_grad_v4s32_f32
1944  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1945              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1946               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1947               llvm_float_ty], [],
1948              "llvm.nvvm.tex.2d.array.grad.v4s32.f32">;
1949def int_nvvm_tex_2d_array_v4u32_s32
1950  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1951              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1952               llvm_i32_ty], [],
1953              "llvm.nvvm.tex.2d.array.v4u32.s32">;
1954def int_nvvm_tex_2d_array_v4u32_f32
1955  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1956              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1957               llvm_float_ty], [],
1958              "llvm.nvvm.tex.2d.array.v4u32.f32">;
1959def int_nvvm_tex_2d_array_level_v4u32_f32
1960  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1961              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1962               llvm_float_ty, llvm_float_ty], [],
1963              "llvm.nvvm.tex.2d.array.level.v4u32.f32">;
1964def int_nvvm_tex_2d_array_grad_v4u32_f32
1965  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1966              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1967               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1968               llvm_float_ty], [],
1969              "llvm.nvvm.tex.2d.array.grad.v4u32.f32">;
1970
1971def int_nvvm_tex_3d_v4f32_s32
1972  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1973              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1974              [], "llvm.nvvm.tex.3d.v4f32.s32">;
1975def int_nvvm_tex_3d_v4f32_f32
1976  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1977              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1978               llvm_float_ty], [],
1979              "llvm.nvvm.tex.3d.v4f32.f32">;
1980def int_nvvm_tex_3d_level_v4f32_f32
1981  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1982              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1983               llvm_float_ty, llvm_float_ty], [],
1984              "llvm.nvvm.tex.3d.level.v4f32.f32">;
1985def int_nvvm_tex_3d_grad_v4f32_f32
1986  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1987              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1988               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1989               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1990              "llvm.nvvm.tex.3d.grad.v4f32.f32">;
1991def int_nvvm_tex_3d_v4s32_s32
1992  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1993              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1994              [], "llvm.nvvm.tex.3d.v4s32.s32">;
1995def int_nvvm_tex_3d_v4s32_f32
1996  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1997              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1998               llvm_float_ty], [],
1999              "llvm.nvvm.tex.3d.v4s32.f32">;
2000def int_nvvm_tex_3d_level_v4s32_f32
2001  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2002              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2003               llvm_float_ty, llvm_float_ty], [],
2004              "llvm.nvvm.tex.3d.level.v4s32.f32">;
2005def int_nvvm_tex_3d_grad_v4s32_f32
2006  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2007              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2008               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2009               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2010              "llvm.nvvm.tex.3d.grad.v4s32.f32">;
2011def int_nvvm_tex_3d_v4u32_s32
2012  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2013              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2014              [], "llvm.nvvm.tex.3d.v4u32.s32">;
2015def int_nvvm_tex_3d_v4u32_f32
2016  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2017              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2018               llvm_float_ty], [],
2019              "llvm.nvvm.tex.3d.v4u32.f32">;
2020def int_nvvm_tex_3d_level_v4u32_f32
2021  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2022              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2023               llvm_float_ty, llvm_float_ty], [],
2024              "llvm.nvvm.tex.3d.level.v4u32.f32">;
2025def int_nvvm_tex_3d_grad_v4u32_f32
2026  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2027              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2028               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2029               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2030              "llvm.nvvm.tex.3d.grad.v4u32.f32">;
2031
2032def int_nvvm_tex_cube_v4f32_f32
2033  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2034              [llvm_i64_ty, llvm_i64_ty,
2035               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2036              "llvm.nvvm.tex.cube.v4f32.f32">;
2037def int_nvvm_tex_cube_level_v4f32_f32
2038  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2039              [llvm_i64_ty, llvm_i64_ty,
2040               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2041              "llvm.nvvm.tex.cube.level.v4f32.f32">;
2042def int_nvvm_tex_cube_v4s32_f32
2043  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2044              [llvm_i64_ty, llvm_i64_ty,
2045               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2046              "llvm.nvvm.tex.cube.v4s32.f32">;
2047def int_nvvm_tex_cube_level_v4s32_f32
2048  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2049              [llvm_i64_ty, llvm_i64_ty,
2050               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2051              "llvm.nvvm.tex.cube.level.v4s32.f32">;
2052def int_nvvm_tex_cube_v4u32_f32
2053  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2054              [llvm_i64_ty, llvm_i64_ty,
2055               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2056              "llvm.nvvm.tex.cube.v4u32.f32">;
2057def int_nvvm_tex_cube_level_v4u32_f32
2058  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2059              [llvm_i64_ty, llvm_i64_ty,
2060               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2061              "llvm.nvvm.tex.cube.level.v4u32.f32">;
2062
2063def int_nvvm_tex_cube_array_v4f32_f32
2064  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2065              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2066               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2067              "llvm.nvvm.tex.cube.array.v4f32.f32">;
2068def int_nvvm_tex_cube_array_level_v4f32_f32
2069  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2070              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2071               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2072              "llvm.nvvm.tex.cube.array.level.v4f32.f32">;
2073def int_nvvm_tex_cube_array_v4s32_f32
2074  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2075              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2076               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2077              "llvm.nvvm.tex.cube.array.v4s32.f32">;
2078def int_nvvm_tex_cube_array_level_v4s32_f32
2079  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2080              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2081               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2082              "llvm.nvvm.tex.cube.array.level.v4s32.f32">;
2083def int_nvvm_tex_cube_array_v4u32_f32
2084  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2085              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2086               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2087              "llvm.nvvm.tex.cube.array.v4u32.f32">;
2088def int_nvvm_tex_cube_array_level_v4u32_f32
2089  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2090              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2091               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2092              "llvm.nvvm.tex.cube.array.level.v4u32.f32">;
2093
2094def int_nvvm_tld4_r_2d_v4f32_f32
2095  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2096              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2097              "llvm.nvvm.tld4.r.2d.v4f32.f32">;
2098def int_nvvm_tld4_g_2d_v4f32_f32
2099  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2100              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2101              "llvm.nvvm.tld4.g.2d.v4f32.f32">;
2102def int_nvvm_tld4_b_2d_v4f32_f32
2103  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2104              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2105              "llvm.nvvm.tld4.b.2d.v4f32.f32">;
2106def int_nvvm_tld4_a_2d_v4f32_f32
2107  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2108              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2109              "llvm.nvvm.tld4.a.2d.v4f32.f32">;
2110def int_nvvm_tld4_r_2d_v4s32_f32
2111  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2112              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2113              "llvm.nvvm.tld4.r.2d.v4s32.f32">;
2114def int_nvvm_tld4_g_2d_v4s32_f32
2115  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2116              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2117              "llvm.nvvm.tld4.g.2d.v4s32.f32">;
2118def int_nvvm_tld4_b_2d_v4s32_f32
2119  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2120              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2121              "llvm.nvvm.tld4.b.2d.v4s32.f32">;
2122def int_nvvm_tld4_a_2d_v4s32_f32
2123  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2124              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2125              "llvm.nvvm.tld4.a.2d.v4s32.f32">;
2126def int_nvvm_tld4_r_2d_v4u32_f32
2127  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2128              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2129              "llvm.nvvm.tld4.r.2d.v4u32.f32">;
2130def int_nvvm_tld4_g_2d_v4u32_f32
2131  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2132              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2133              "llvm.nvvm.tld4.g.2d.v4u32.f32">;
2134def int_nvvm_tld4_b_2d_v4u32_f32
2135  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2136              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2137              "llvm.nvvm.tld4.b.2d.v4u32.f32">;
2138def int_nvvm_tld4_a_2d_v4u32_f32
2139  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2140              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2141              "llvm.nvvm.tld4.a.2d.v4u32.f32">;
2142
2143
2144// texmode_unified
2145def int_nvvm_tex_unified_1d_v4f32_s32
2146  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2147              [llvm_i64_ty, llvm_i32_ty], [],
2148              "llvm.nvvm.tex.unified.1d.v4f32.s32">;
2149def int_nvvm_tex_unified_1d_v4f32_f32
2150  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2151              [llvm_i64_ty, llvm_float_ty], [],
2152              "llvm.nvvm.tex.unified.1d.v4f32.f32">;
2153def int_nvvm_tex_unified_1d_level_v4f32_f32
2154  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2155              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2156              "llvm.nvvm.tex.unified.1d.level.v4f32.f32">;
2157def int_nvvm_tex_unified_1d_grad_v4f32_f32
2158  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2159              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2160               llvm_float_ty], [],
2161              "llvm.nvvm.tex.unified.1d.grad.v4f32.f32">;
2162def int_nvvm_tex_unified_1d_v4s32_s32
2163  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2164              [llvm_i64_ty, llvm_i32_ty], [],
2165              "llvm.nvvm.tex.unified.1d.v4s32.s32">;
2166def int_nvvm_tex_unified_1d_v4s32_f32
2167  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2168              [llvm_i64_ty, llvm_float_ty], [],
2169              "llvm.nvvm.tex.unified.1d.v4s32.f32">;
2170def int_nvvm_tex_unified_1d_level_v4s32_f32
2171  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2172              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2173              "llvm.nvvm.tex.unified.1d.level.v4s32.f32">;
2174def int_nvvm_tex_unified_1d_grad_v4s32_f32
2175  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2176              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2177               llvm_float_ty], [],
2178              "llvm.nvvm.tex.unified.1d.grad.v4s32.f32">;
2179def int_nvvm_tex_unified_1d_v4u32_s32
2180  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2181              [llvm_i64_ty, llvm_i32_ty], [],
2182              "llvm.nvvm.tex.unified.1d.v4u32.s32">;
2183def int_nvvm_tex_unified_1d_v4u32_f32
2184  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2185              [llvm_i64_ty, llvm_float_ty], [],
2186              "llvm.nvvm.tex.unified.1d.v4u32.f32">;
2187def int_nvvm_tex_unified_1d_level_v4u32_f32
2188  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2189              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2190              "llvm.nvvm.tex.unified.1d.level.v4u32.f32">;
2191def int_nvvm_tex_unified_1d_grad_v4u32_f32
2192  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2193              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2194               llvm_float_ty], [],
2195              "llvm.nvvm.tex.unified.1d.grad.v4u32.f32">;
2196
2197def int_nvvm_tex_unified_1d_array_v4f32_s32
2198  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2199              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2200              "llvm.nvvm.tex.unified.1d.array.v4f32.s32">;
2201def int_nvvm_tex_unified_1d_array_v4f32_f32
2202  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2203              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
2204              "llvm.nvvm.tex.unified.1d.array.v4f32.f32">;
2205def int_nvvm_tex_unified_1d_array_level_v4f32_f32
2206  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2207              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2208               llvm_float_ty], [],
2209              "llvm.nvvm.tex.unified.1d.array.level.v4f32.f32">;
2210def int_nvvm_tex_unified_1d_array_grad_v4f32_f32
2211  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2212              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2213               llvm_float_ty, llvm_float_ty], [],
2214              "llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32">;
2215def int_nvvm_tex_unified_1d_array_v4s32_s32
2216  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2217              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2218              "llvm.nvvm.tex.unified.1d.array.v4s32.s32">;
2219def int_nvvm_tex_unified_1d_array_v4s32_f32
2220  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2221              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
2222              "llvm.nvvm.tex.unified.1d.array.v4s32.f32">;
2223def int_nvvm_tex_unified_1d_array_level_v4s32_f32
2224  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2225              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2226               llvm_float_ty], [],
2227              "llvm.nvvm.tex.unified.1d.array.level.v4s32.f32">;
2228def int_nvvm_tex_unified_1d_array_grad_v4s32_f32
2229  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2230              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2231               llvm_float_ty, llvm_float_ty], [],
2232              "llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32">;
2233def int_nvvm_tex_unified_1d_array_v4u32_s32
2234  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2235              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2236              "llvm.nvvm.tex.unified.1d.array.v4u32.s32">;
2237def int_nvvm_tex_unified_1d_array_v4u32_f32
2238  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2239              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
2240              "llvm.nvvm.tex.unified.1d.array.v4u32.f32">;
2241def int_nvvm_tex_unified_1d_array_level_v4u32_f32
2242  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2243              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2244               llvm_float_ty], [],
2245              "llvm.nvvm.tex.unified.1d.array.level.v4u32.f32">;
2246def int_nvvm_tex_unified_1d_array_grad_v4u32_f32
2247  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2248              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2249               llvm_float_ty, llvm_float_ty], [],
2250              "llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32">;
2251
2252def int_nvvm_tex_unified_2d_v4f32_s32
2253  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2254              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2255              "llvm.nvvm.tex.unified.2d.v4f32.s32">;
2256def int_nvvm_tex_unified_2d_v4f32_f32
2257  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2258              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2259              "llvm.nvvm.tex.unified.2d.v4f32.f32">;
2260def int_nvvm_tex_unified_2d_level_v4f32_f32
2261  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2262              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2263               llvm_float_ty], [],
2264              "llvm.nvvm.tex.unified.2d.level.v4f32.f32">;
2265def int_nvvm_tex_unified_2d_grad_v4f32_f32
2266  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2267              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2268               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2269              "llvm.nvvm.tex.unified.2d.grad.v4f32.f32">;
2270def int_nvvm_tex_unified_2d_v4s32_s32
2271  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2272              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2273              "llvm.nvvm.tex.unified.2d.v4s32.s32">;
2274def int_nvvm_tex_unified_2d_v4s32_f32
2275  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2276              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2277              "llvm.nvvm.tex.unified.2d.v4s32.f32">;
2278def int_nvvm_tex_unified_2d_level_v4s32_f32
2279  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2280              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2281               llvm_float_ty], [],
2282              "llvm.nvvm.tex.unified.2d.level.v4s32.f32">;
2283def int_nvvm_tex_unified_2d_grad_v4s32_f32
2284  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2285              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2286               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2287              "llvm.nvvm.tex.unified.2d.grad.v4s32.f32">;
2288def int_nvvm_tex_unified_2d_v4u32_s32
2289  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2290              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2291              "llvm.nvvm.tex.unified.2d.v4u32.s32">;
2292def int_nvvm_tex_unified_2d_v4u32_f32
2293  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2294              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2295              "llvm.nvvm.tex.unified.2d.v4u32.f32">;
2296def int_nvvm_tex_unified_2d_level_v4u32_f32
2297  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2298              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2299               llvm_float_ty], [],
2300              "llvm.nvvm.tex.unified.2d.level.v4u32.f32">;
2301def int_nvvm_tex_unified_2d_grad_v4u32_f32
2302  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2303              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2304               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2305              "llvm.nvvm.tex.unified.2d.grad.v4u32.f32">;
2306
2307def int_nvvm_tex_unified_2d_array_v4f32_s32
2308  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2309              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2310               llvm_i32_ty], [],
2311              "llvm.nvvm.tex.unified.2d.array.v4f32.s32">;
2312def int_nvvm_tex_unified_2d_array_v4f32_f32
2313  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2314              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2315               llvm_float_ty], [],
2316              "llvm.nvvm.tex.unified.2d.array.v4f32.f32">;
2317def int_nvvm_tex_unified_2d_array_level_v4f32_f32
2318  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2319              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2320               llvm_float_ty, llvm_float_ty], [],
2321              "llvm.nvvm.tex.unified.2d.array.level.v4f32.f32">;
2322def int_nvvm_tex_unified_2d_array_grad_v4f32_f32
2323  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2324              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2325               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2326               llvm_float_ty], [],
2327              "llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32">;
2328def int_nvvm_tex_unified_2d_array_v4s32_s32
2329  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2330              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2331               llvm_i32_ty], [],
2332              "llvm.nvvm.tex.unified.2d.array.v4s32.s32">;
2333def int_nvvm_tex_unified_2d_array_v4s32_f32
2334  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2335              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2336               llvm_float_ty], [],
2337              "llvm.nvvm.tex.unified.2d.array.v4s32.f32">;
2338def int_nvvm_tex_unified_2d_array_level_v4s32_f32
2339  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2340              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2341               llvm_float_ty, llvm_float_ty], [],
2342              "llvm.nvvm.tex.unified.2d.array.level.v4s32.f32">;
2343def int_nvvm_tex_unified_2d_array_grad_v4s32_f32
2344  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2345              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2346               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2347               llvm_float_ty], [],
2348              "llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32">;
2349def int_nvvm_tex_unified_2d_array_v4u32_s32
2350  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2351              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2352               llvm_i32_ty], [],
2353              "llvm.nvvm.tex.unified.2d.array.v4u32.s32">;
2354def int_nvvm_tex_unified_2d_array_v4u32_f32
2355  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2356              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2357               llvm_float_ty], [],
2358              "llvm.nvvm.tex.unified.2d.array.v4u32.f32">;
2359def int_nvvm_tex_unified_2d_array_level_v4u32_f32
2360  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2361              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2362               llvm_float_ty, llvm_float_ty], [],
2363              "llvm.nvvm.tex.unified.2d.array.level.v4u32.f32">;
2364def int_nvvm_tex_unified_2d_array_grad_v4u32_f32
2365  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2366              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2367               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2368               llvm_float_ty], [],
2369              "llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32">;
2370
2371def int_nvvm_tex_unified_3d_v4f32_s32
2372  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2373              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2374              [], "llvm.nvvm.tex.unified.3d.v4f32.s32">;
2375def int_nvvm_tex_unified_3d_v4f32_f32
2376  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2377              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2378               llvm_float_ty], [],
2379              "llvm.nvvm.tex.unified.3d.v4f32.f32">;
2380def int_nvvm_tex_unified_3d_level_v4f32_f32
2381  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2382              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2383               llvm_float_ty, llvm_float_ty], [],
2384              "llvm.nvvm.tex.unified.3d.level.v4f32.f32">;
2385def int_nvvm_tex_unified_3d_grad_v4f32_f32
2386  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2387              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2388               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2389               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2390              "llvm.nvvm.tex.unified.3d.grad.v4f32.f32">;
2391def int_nvvm_tex_unified_3d_v4s32_s32
2392  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2393              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2394              [], "llvm.nvvm.tex.unified.3d.v4s32.s32">;
2395def int_nvvm_tex_unified_3d_v4s32_f32
2396  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2397              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2398               llvm_float_ty], [],
2399              "llvm.nvvm.tex.unified.3d.v4s32.f32">;
2400def int_nvvm_tex_unified_3d_level_v4s32_f32
2401  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2402              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2403               llvm_float_ty, llvm_float_ty], [],
2404              "llvm.nvvm.tex.unified.3d.level.v4s32.f32">;
2405def int_nvvm_tex_unified_3d_grad_v4s32_f32
2406  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2407              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2408               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2409               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2410              "llvm.nvvm.tex.unified.3d.grad.v4s32.f32">;
2411def int_nvvm_tex_unified_3d_v4u32_s32
2412  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2413              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2414              [], "llvm.nvvm.tex.unified.3d.v4u32.s32">;
2415def int_nvvm_tex_unified_3d_v4u32_f32
2416  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2417              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2418               llvm_float_ty], [],
2419              "llvm.nvvm.tex.unified.3d.v4u32.f32">;
2420def int_nvvm_tex_unified_3d_level_v4u32_f32
2421  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2422              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2423               llvm_float_ty, llvm_float_ty], [],
2424              "llvm.nvvm.tex.unified.3d.level.v4u32.f32">;
2425def int_nvvm_tex_unified_3d_grad_v4u32_f32
2426  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2427              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2428               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2429               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2430              "llvm.nvvm.tex.unified.3d.grad.v4u32.f32">;
2431
2432def int_nvvm_tex_unified_cube_v4f32_f32
2433  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2434              [llvm_i64_ty,
2435               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2436              "llvm.nvvm.tex.unified.cube.v4f32.f32">;
2437def int_nvvm_tex_unified_cube_level_v4f32_f32
2438  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2439              [llvm_i64_ty,
2440               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2441              "llvm.nvvm.tex.unified.cube.level.v4f32.f32">;
2442def int_nvvm_tex_unified_cube_v4s32_f32
2443  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2444              [llvm_i64_ty,
2445               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2446              "llvm.nvvm.tex.unified.cube.v4s32.f32">;
2447def int_nvvm_tex_unified_cube_level_v4s32_f32
2448  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2449              [llvm_i64_ty,
2450               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2451              "llvm.nvvm.tex.unified.cube.level.v4s32.f32">;
2452def int_nvvm_tex_unified_cube_v4u32_f32
2453  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2454              [llvm_i64_ty,
2455               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2456              "llvm.nvvm.tex.unified.cube.v4u32.f32">;
2457def int_nvvm_tex_unified_cube_level_v4u32_f32
2458  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2459              [llvm_i64_ty,
2460               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2461              "llvm.nvvm.tex.unified.cube.level.v4u32.f32">;
2462
2463def int_nvvm_tex_unified_cube_array_v4f32_f32
2464  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2465              [llvm_i64_ty, llvm_i32_ty,
2466               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2467              "llvm.nvvm.tex.unified.cube.array.v4f32.f32">;
2468def int_nvvm_tex_unified_cube_array_level_v4f32_f32
2469  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2470              [llvm_i64_ty, llvm_i32_ty,
2471               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2472              "llvm.nvvm.tex.unified.cube.array.level.v4f32.f32">;
2473def int_nvvm_tex_unified_cube_array_v4s32_f32
2474  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2475              [llvm_i64_ty, llvm_i32_ty,
2476               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2477              "llvm.nvvm.tex.unified.cube.array.v4s32.f32">;
2478def int_nvvm_tex_unified_cube_array_level_v4s32_f32
2479  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2480              [llvm_i64_ty, llvm_i32_ty,
2481               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2482              "llvm.nvvm.tex.unified.cube.array.level.v4s32.f32">;
2483def int_nvvm_tex_unified_cube_array_v4u32_f32
2484  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2485              [llvm_i64_ty, llvm_i32_ty,
2486               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2487              "llvm.nvvm.tex.unified.cube.array.v4u32.f32">;
2488def int_nvvm_tex_unified_cube_array_level_v4u32_f32
2489  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2490              [llvm_i64_ty, llvm_i32_ty,
2491               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2492              "llvm.nvvm.tex.unified.cube.array.level.v4u32.f32">;
2493
2494def int_nvvm_tld4_unified_r_2d_v4f32_f32
2495  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2496              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2497              "llvm.nvvm.tld4.unified.r.2d.v4f32.f32">;
2498def int_nvvm_tld4_unified_g_2d_v4f32_f32
2499  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2500              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2501              "llvm.nvvm.tld4.unified.g.2d.v4f32.f32">;
2502def int_nvvm_tld4_unified_b_2d_v4f32_f32
2503  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2504              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2505              "llvm.nvvm.tld4.unified.b.2d.v4f32.f32">;
2506def int_nvvm_tld4_unified_a_2d_v4f32_f32
2507  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2508              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2509              "llvm.nvvm.tld4.unified.a.2d.v4f32.f32">;
2510def int_nvvm_tld4_unified_r_2d_v4s32_f32
2511  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2512              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2513              "llvm.nvvm.tld4.unified.r.2d.v4s32.f32">;
2514def int_nvvm_tld4_unified_g_2d_v4s32_f32
2515  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2516              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2517              "llvm.nvvm.tld4.unified.g.2d.v4s32.f32">;
2518def int_nvvm_tld4_unified_b_2d_v4s32_f32
2519  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2520              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2521              "llvm.nvvm.tld4.unified.b.2d.v4s32.f32">;
2522def int_nvvm_tld4_unified_a_2d_v4s32_f32
2523  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2524              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2525              "llvm.nvvm.tld4.unified.a.2d.v4s32.f32">;
2526def int_nvvm_tld4_unified_r_2d_v4u32_f32
2527  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2528              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2529              "llvm.nvvm.tld4.unified.r.2d.v4u32.f32">;
2530def int_nvvm_tld4_unified_g_2d_v4u32_f32
2531  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2532              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2533              "llvm.nvvm.tld4.unified.g.2d.v4u32.f32">;
2534def int_nvvm_tld4_unified_b_2d_v4u32_f32
2535  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2536              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2537              "llvm.nvvm.tld4.unified.b.2d.v4u32.f32">;
2538def int_nvvm_tld4_unified_a_2d_v4u32_f32
2539  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2540              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2541              "llvm.nvvm.tld4.unified.a.2d.v4u32.f32">;
2542
2543
2544//=== Surface Load
2545// .clamp variants
2546def int_nvvm_suld_1d_i8_clamp
2547  : Intrinsic<[llvm_i16_ty],
2548              [llvm_i64_ty, llvm_i32_ty], [],
2549              "llvm.nvvm.suld.1d.i8.clamp">;
2550def int_nvvm_suld_1d_i16_clamp
2551  : Intrinsic<[llvm_i16_ty],
2552              [llvm_i64_ty, llvm_i32_ty], [],
2553              "llvm.nvvm.suld.1d.i16.clamp">;
2554def int_nvvm_suld_1d_i32_clamp
2555  : Intrinsic<[llvm_i32_ty],
2556              [llvm_i64_ty, llvm_i32_ty], [],
2557              "llvm.nvvm.suld.1d.i32.clamp">;
2558def int_nvvm_suld_1d_i64_clamp
2559  : Intrinsic<[llvm_i64_ty],
2560              [llvm_i64_ty, llvm_i32_ty], [],
2561              "llvm.nvvm.suld.1d.i64.clamp">;
2562def int_nvvm_suld_1d_v2i8_clamp
2563  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2564              [llvm_i64_ty, llvm_i32_ty], [],
2565              "llvm.nvvm.suld.1d.v2i8.clamp">;
2566def int_nvvm_suld_1d_v2i16_clamp
2567  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2568              [llvm_i64_ty, llvm_i32_ty], [],
2569              "llvm.nvvm.suld.1d.v2i16.clamp">;
2570def int_nvvm_suld_1d_v2i32_clamp
2571  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2572              [llvm_i64_ty, llvm_i32_ty], [],
2573              "llvm.nvvm.suld.1d.v2i32.clamp">;
2574def int_nvvm_suld_1d_v2i64_clamp
2575  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2576              [llvm_i64_ty, llvm_i32_ty], [],
2577              "llvm.nvvm.suld.1d.v2i64.clamp">;
2578def int_nvvm_suld_1d_v4i8_clamp
2579  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2580              [llvm_i64_ty, llvm_i32_ty], [],
2581              "llvm.nvvm.suld.1d.v4i8.clamp">;
2582def int_nvvm_suld_1d_v4i16_clamp
2583  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2584              [llvm_i64_ty, llvm_i32_ty], [],
2585              "llvm.nvvm.suld.1d.v4i16.clamp">;
2586def int_nvvm_suld_1d_v4i32_clamp
2587  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2588              [llvm_i64_ty, llvm_i32_ty], [],
2589              "llvm.nvvm.suld.1d.v4i32.clamp">;
2590
2591def int_nvvm_suld_1d_array_i8_clamp
2592  : Intrinsic<[llvm_i16_ty],
2593              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2594              "llvm.nvvm.suld.1d.array.i8.clamp">;
2595def int_nvvm_suld_1d_array_i16_clamp
2596  : Intrinsic<[llvm_i16_ty],
2597              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2598              "llvm.nvvm.suld.1d.array.i16.clamp">;
2599def int_nvvm_suld_1d_array_i32_clamp
2600  : Intrinsic<[llvm_i32_ty],
2601              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2602              "llvm.nvvm.suld.1d.array.i32.clamp">;
2603def int_nvvm_suld_1d_array_i64_clamp
2604  : Intrinsic<[llvm_i64_ty],
2605              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2606              "llvm.nvvm.suld.1d.array.i64.clamp">;
2607def int_nvvm_suld_1d_array_v2i8_clamp
2608  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2609              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2610              "llvm.nvvm.suld.1d.array.v2i8.clamp">;
2611def int_nvvm_suld_1d_array_v2i16_clamp
2612  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2613              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2614              "llvm.nvvm.suld.1d.array.v2i16.clamp">;
2615def int_nvvm_suld_1d_array_v2i32_clamp
2616  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2617              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2618              "llvm.nvvm.suld.1d.array.v2i32.clamp">;
2619def int_nvvm_suld_1d_array_v2i64_clamp
2620  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2621              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2622              "llvm.nvvm.suld.1d.array.v2i64.clamp">;
2623def int_nvvm_suld_1d_array_v4i8_clamp
2624  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2625              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2626              "llvm.nvvm.suld.1d.array.v4i8.clamp">;
2627def int_nvvm_suld_1d_array_v4i16_clamp
2628  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2629              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2630              "llvm.nvvm.suld.1d.array.v4i16.clamp">;
2631def int_nvvm_suld_1d_array_v4i32_clamp
2632  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2633              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2634              "llvm.nvvm.suld.1d.array.v4i32.clamp">;
2635
2636def int_nvvm_suld_2d_i8_clamp
2637  : Intrinsic<[llvm_i16_ty],
2638              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2639              "llvm.nvvm.suld.2d.i8.clamp">;
2640def int_nvvm_suld_2d_i16_clamp
2641  : Intrinsic<[llvm_i16_ty],
2642              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2643              "llvm.nvvm.suld.2d.i16.clamp">;
2644def int_nvvm_suld_2d_i32_clamp
2645  : Intrinsic<[llvm_i32_ty],
2646              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2647              "llvm.nvvm.suld.2d.i32.clamp">;
2648def int_nvvm_suld_2d_i64_clamp
2649  : Intrinsic<[llvm_i64_ty],
2650              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2651              "llvm.nvvm.suld.2d.i64.clamp">;
2652def int_nvvm_suld_2d_v2i8_clamp
2653  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2654              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2655              "llvm.nvvm.suld.2d.v2i8.clamp">;
2656def int_nvvm_suld_2d_v2i16_clamp
2657  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2658              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2659              "llvm.nvvm.suld.2d.v2i16.clamp">;
2660def int_nvvm_suld_2d_v2i32_clamp
2661  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2662              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2663              "llvm.nvvm.suld.2d.v2i32.clamp">;
2664def int_nvvm_suld_2d_v2i64_clamp
2665  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2666              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2667              "llvm.nvvm.suld.2d.v2i64.clamp">;
2668def int_nvvm_suld_2d_v4i8_clamp
2669  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2670              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2671              "llvm.nvvm.suld.2d.v4i8.clamp">;
2672def int_nvvm_suld_2d_v4i16_clamp
2673  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2674              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2675              "llvm.nvvm.suld.2d.v4i16.clamp">;
2676def int_nvvm_suld_2d_v4i32_clamp
2677  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2678              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2679              "llvm.nvvm.suld.2d.v4i32.clamp">;
2680
2681def int_nvvm_suld_2d_array_i8_clamp
2682  : Intrinsic<[llvm_i16_ty],
2683              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2684              "llvm.nvvm.suld.2d.array.i8.clamp">;
2685def int_nvvm_suld_2d_array_i16_clamp
2686  : Intrinsic<[llvm_i16_ty],
2687              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2688              "llvm.nvvm.suld.2d.array.i16.clamp">;
2689def int_nvvm_suld_2d_array_i32_clamp
2690  : Intrinsic<[llvm_i32_ty],
2691              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2692              "llvm.nvvm.suld.2d.array.i32.clamp">;
2693def int_nvvm_suld_2d_array_i64_clamp
2694  : Intrinsic<[llvm_i64_ty],
2695              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2696              "llvm.nvvm.suld.2d.array.i64.clamp">;
2697def int_nvvm_suld_2d_array_v2i8_clamp
2698  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2699              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2700              "llvm.nvvm.suld.2d.array.v2i8.clamp">;
2701def int_nvvm_suld_2d_array_v2i16_clamp
2702  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2703              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2704              "llvm.nvvm.suld.2d.array.v2i16.clamp">;
2705def int_nvvm_suld_2d_array_v2i32_clamp
2706  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2707              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2708              "llvm.nvvm.suld.2d.array.v2i32.clamp">;
2709def int_nvvm_suld_2d_array_v2i64_clamp
2710  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2711              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2712              "llvm.nvvm.suld.2d.array.v2i64.clamp">;
2713def int_nvvm_suld_2d_array_v4i8_clamp
2714  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2715              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2716              "llvm.nvvm.suld.2d.array.v4i8.clamp">;
2717def int_nvvm_suld_2d_array_v4i16_clamp
2718  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2719              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2720              "llvm.nvvm.suld.2d.array.v4i16.clamp">;
2721def int_nvvm_suld_2d_array_v4i32_clamp
2722  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2723              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2724              "llvm.nvvm.suld.2d.array.v4i32.clamp">;
2725
2726def int_nvvm_suld_3d_i8_clamp
2727  : Intrinsic<[llvm_i16_ty],
2728              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2729              "llvm.nvvm.suld.3d.i8.clamp">;
2730def int_nvvm_suld_3d_i16_clamp
2731  : Intrinsic<[llvm_i16_ty],
2732              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2733              "llvm.nvvm.suld.3d.i16.clamp">;
2734def int_nvvm_suld_3d_i32_clamp
2735  : Intrinsic<[llvm_i32_ty],
2736              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2737              "llvm.nvvm.suld.3d.i32.clamp">;
2738def int_nvvm_suld_3d_i64_clamp
2739  : Intrinsic<[llvm_i64_ty],
2740              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2741              "llvm.nvvm.suld.3d.i64.clamp">;
2742def int_nvvm_suld_3d_v2i8_clamp
2743  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2744              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2745              "llvm.nvvm.suld.3d.v2i8.clamp">;
2746def int_nvvm_suld_3d_v2i16_clamp
2747  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2748              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2749              "llvm.nvvm.suld.3d.v2i16.clamp">;
2750def int_nvvm_suld_3d_v2i32_clamp
2751  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2752              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2753              "llvm.nvvm.suld.3d.v2i32.clamp">;
2754def int_nvvm_suld_3d_v2i64_clamp
2755  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2756              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2757              "llvm.nvvm.suld.3d.v2i64.clamp">;
2758def int_nvvm_suld_3d_v4i8_clamp
2759  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2760              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2761              "llvm.nvvm.suld.3d.v4i8.clamp">;
2762def int_nvvm_suld_3d_v4i16_clamp
2763  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2764              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2765              "llvm.nvvm.suld.3d.v4i16.clamp">;
2766def int_nvvm_suld_3d_v4i32_clamp
2767  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2768              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2769              "llvm.nvvm.suld.3d.v4i32.clamp">;
2770
2771// .trap variants
2772def int_nvvm_suld_1d_i8_trap
2773  : Intrinsic<[llvm_i16_ty],
2774              [llvm_i64_ty, llvm_i32_ty], [],
2775              "llvm.nvvm.suld.1d.i8.trap">;
2776def int_nvvm_suld_1d_i16_trap
2777  : Intrinsic<[llvm_i16_ty],
2778              [llvm_i64_ty, llvm_i32_ty], [],
2779              "llvm.nvvm.suld.1d.i16.trap">;
2780def int_nvvm_suld_1d_i32_trap
2781  : Intrinsic<[llvm_i32_ty],
2782              [llvm_i64_ty, llvm_i32_ty], [],
2783              "llvm.nvvm.suld.1d.i32.trap">;
2784def int_nvvm_suld_1d_i64_trap
2785  : Intrinsic<[llvm_i64_ty],
2786              [llvm_i64_ty, llvm_i32_ty], [],
2787              "llvm.nvvm.suld.1d.i64.trap">;
2788def int_nvvm_suld_1d_v2i8_trap
2789  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2790              [llvm_i64_ty, llvm_i32_ty], [],
2791              "llvm.nvvm.suld.1d.v2i8.trap">;
2792def int_nvvm_suld_1d_v2i16_trap
2793  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2794              [llvm_i64_ty, llvm_i32_ty], [],
2795              "llvm.nvvm.suld.1d.v2i16.trap">;
2796def int_nvvm_suld_1d_v2i32_trap
2797  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2798              [llvm_i64_ty, llvm_i32_ty], [],
2799              "llvm.nvvm.suld.1d.v2i32.trap">;
2800def int_nvvm_suld_1d_v2i64_trap
2801  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2802              [llvm_i64_ty, llvm_i32_ty], [],
2803              "llvm.nvvm.suld.1d.v2i64.trap">;
2804def int_nvvm_suld_1d_v4i8_trap
2805  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2806              [llvm_i64_ty, llvm_i32_ty], [],
2807              "llvm.nvvm.suld.1d.v4i8.trap">;
2808def int_nvvm_suld_1d_v4i16_trap
2809  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2810              [llvm_i64_ty, llvm_i32_ty], [],
2811              "llvm.nvvm.suld.1d.v4i16.trap">;
2812def int_nvvm_suld_1d_v4i32_trap
2813  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2814              [llvm_i64_ty, llvm_i32_ty], [],
2815              "llvm.nvvm.suld.1d.v4i32.trap">;
2816
2817def int_nvvm_suld_1d_array_i8_trap
2818  : Intrinsic<[llvm_i16_ty],
2819              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2820              "llvm.nvvm.suld.1d.array.i8.trap">;
2821def int_nvvm_suld_1d_array_i16_trap
2822  : Intrinsic<[llvm_i16_ty],
2823              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2824              "llvm.nvvm.suld.1d.array.i16.trap">;
2825def int_nvvm_suld_1d_array_i32_trap
2826  : Intrinsic<[llvm_i32_ty],
2827              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2828              "llvm.nvvm.suld.1d.array.i32.trap">;
2829def int_nvvm_suld_1d_array_i64_trap
2830  : Intrinsic<[llvm_i64_ty],
2831              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2832              "llvm.nvvm.suld.1d.array.i64.trap">;
2833def int_nvvm_suld_1d_array_v2i8_trap
2834  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2835              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2836              "llvm.nvvm.suld.1d.array.v2i8.trap">;
2837def int_nvvm_suld_1d_array_v2i16_trap
2838  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2839              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2840              "llvm.nvvm.suld.1d.array.v2i16.trap">;
2841def int_nvvm_suld_1d_array_v2i32_trap
2842  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2843              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2844              "llvm.nvvm.suld.1d.array.v2i32.trap">;
2845def int_nvvm_suld_1d_array_v2i64_trap
2846  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2847              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2848              "llvm.nvvm.suld.1d.array.v2i64.trap">;
2849def int_nvvm_suld_1d_array_v4i8_trap
2850  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2851              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2852              "llvm.nvvm.suld.1d.array.v4i8.trap">;
2853def int_nvvm_suld_1d_array_v4i16_trap
2854  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2855              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2856              "llvm.nvvm.suld.1d.array.v4i16.trap">;
2857def int_nvvm_suld_1d_array_v4i32_trap
2858  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2859              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2860              "llvm.nvvm.suld.1d.array.v4i32.trap">;
2861
2862def int_nvvm_suld_2d_i8_trap
2863  : Intrinsic<[llvm_i16_ty],
2864              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2865              "llvm.nvvm.suld.2d.i8.trap">;
2866def int_nvvm_suld_2d_i16_trap
2867  : Intrinsic<[llvm_i16_ty],
2868              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2869              "llvm.nvvm.suld.2d.i16.trap">;
2870def int_nvvm_suld_2d_i32_trap
2871  : Intrinsic<[llvm_i32_ty],
2872              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2873              "llvm.nvvm.suld.2d.i32.trap">;
2874def int_nvvm_suld_2d_i64_trap
2875  : Intrinsic<[llvm_i64_ty],
2876              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2877              "llvm.nvvm.suld.2d.i64.trap">;
2878def int_nvvm_suld_2d_v2i8_trap
2879  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2880              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2881              "llvm.nvvm.suld.2d.v2i8.trap">;
2882def int_nvvm_suld_2d_v2i16_trap
2883  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2884              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2885              "llvm.nvvm.suld.2d.v2i16.trap">;
2886def int_nvvm_suld_2d_v2i32_trap
2887  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2888              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2889              "llvm.nvvm.suld.2d.v2i32.trap">;
2890def int_nvvm_suld_2d_v2i64_trap
2891  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2892              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2893              "llvm.nvvm.suld.2d.v2i64.trap">;
2894def int_nvvm_suld_2d_v4i8_trap
2895  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2896              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2897              "llvm.nvvm.suld.2d.v4i8.trap">;
2898def int_nvvm_suld_2d_v4i16_trap
2899  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2900              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2901              "llvm.nvvm.suld.2d.v4i16.trap">;
2902def int_nvvm_suld_2d_v4i32_trap
2903  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2904              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2905              "llvm.nvvm.suld.2d.v4i32.trap">;
2906
2907def int_nvvm_suld_2d_array_i8_trap
2908  : Intrinsic<[llvm_i16_ty],
2909              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2910              "llvm.nvvm.suld.2d.array.i8.trap">;
2911def int_nvvm_suld_2d_array_i16_trap
2912  : Intrinsic<[llvm_i16_ty],
2913              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2914              "llvm.nvvm.suld.2d.array.i16.trap">;
2915def int_nvvm_suld_2d_array_i32_trap
2916  : Intrinsic<[llvm_i32_ty],
2917              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2918              "llvm.nvvm.suld.2d.array.i32.trap">;
2919def int_nvvm_suld_2d_array_i64_trap
2920  : Intrinsic<[llvm_i64_ty],
2921              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2922              "llvm.nvvm.suld.2d.array.i64.trap">;
2923def int_nvvm_suld_2d_array_v2i8_trap
2924  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2925              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2926              "llvm.nvvm.suld.2d.array.v2i8.trap">;
2927def int_nvvm_suld_2d_array_v2i16_trap
2928  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2929              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2930              "llvm.nvvm.suld.2d.array.v2i16.trap">;
2931def int_nvvm_suld_2d_array_v2i32_trap
2932  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2933              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2934              "llvm.nvvm.suld.2d.array.v2i32.trap">;
2935def int_nvvm_suld_2d_array_v2i64_trap
2936  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2937              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2938              "llvm.nvvm.suld.2d.array.v2i64.trap">;
2939def int_nvvm_suld_2d_array_v4i8_trap
2940  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2941              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2942              "llvm.nvvm.suld.2d.array.v4i8.trap">;
2943def int_nvvm_suld_2d_array_v4i16_trap
2944  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2945              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2946              "llvm.nvvm.suld.2d.array.v4i16.trap">;
2947def int_nvvm_suld_2d_array_v4i32_trap
2948  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2949              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2950              "llvm.nvvm.suld.2d.array.v4i32.trap">;
2951
2952def int_nvvm_suld_3d_i8_trap
2953  : Intrinsic<[llvm_i16_ty],
2954              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2955              "llvm.nvvm.suld.3d.i8.trap">;
2956def int_nvvm_suld_3d_i16_trap
2957  : Intrinsic<[llvm_i16_ty],
2958              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2959              "llvm.nvvm.suld.3d.i16.trap">;
2960def int_nvvm_suld_3d_i32_trap
2961  : Intrinsic<[llvm_i32_ty],
2962              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2963              "llvm.nvvm.suld.3d.i32.trap">;
2964def int_nvvm_suld_3d_i64_trap
2965  : Intrinsic<[llvm_i64_ty],
2966              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2967              "llvm.nvvm.suld.3d.i64.trap">;
2968def int_nvvm_suld_3d_v2i8_trap
2969  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2970              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2971              "llvm.nvvm.suld.3d.v2i8.trap">;
2972def int_nvvm_suld_3d_v2i16_trap
2973  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2974              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2975              "llvm.nvvm.suld.3d.v2i16.trap">;
2976def int_nvvm_suld_3d_v2i32_trap
2977  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2978              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2979              "llvm.nvvm.suld.3d.v2i32.trap">;
2980def int_nvvm_suld_3d_v2i64_trap
2981  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2982              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2983              "llvm.nvvm.suld.3d.v2i64.trap">;
2984def int_nvvm_suld_3d_v4i8_trap
2985  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2986              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2987              "llvm.nvvm.suld.3d.v4i8.trap">;
2988def int_nvvm_suld_3d_v4i16_trap
2989  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2990              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2991              "llvm.nvvm.suld.3d.v4i16.trap">;
2992def int_nvvm_suld_3d_v4i32_trap
2993  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2994              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2995              "llvm.nvvm.suld.3d.v4i32.trap">;
2996
2997// .zero variants
2998def int_nvvm_suld_1d_i8_zero
2999  : Intrinsic<[llvm_i16_ty],
3000              [llvm_i64_ty, llvm_i32_ty], [],
3001              "llvm.nvvm.suld.1d.i8.zero">;
3002def int_nvvm_suld_1d_i16_zero
3003  : Intrinsic<[llvm_i16_ty],
3004              [llvm_i64_ty, llvm_i32_ty], [],
3005              "llvm.nvvm.suld.1d.i16.zero">;
3006def int_nvvm_suld_1d_i32_zero
3007  : Intrinsic<[llvm_i32_ty],
3008              [llvm_i64_ty, llvm_i32_ty], [],
3009              "llvm.nvvm.suld.1d.i32.zero">;
3010def int_nvvm_suld_1d_i64_zero
3011  : Intrinsic<[llvm_i64_ty],
3012              [llvm_i64_ty, llvm_i32_ty], [],
3013              "llvm.nvvm.suld.1d.i64.zero">;
3014def int_nvvm_suld_1d_v2i8_zero
3015  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3016              [llvm_i64_ty, llvm_i32_ty], [],
3017              "llvm.nvvm.suld.1d.v2i8.zero">;
3018def int_nvvm_suld_1d_v2i16_zero
3019  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3020              [llvm_i64_ty, llvm_i32_ty], [],
3021              "llvm.nvvm.suld.1d.v2i16.zero">;
3022def int_nvvm_suld_1d_v2i32_zero
3023  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3024              [llvm_i64_ty, llvm_i32_ty], [],
3025              "llvm.nvvm.suld.1d.v2i32.zero">;
3026def int_nvvm_suld_1d_v2i64_zero
3027  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3028              [llvm_i64_ty, llvm_i32_ty], [],
3029              "llvm.nvvm.suld.1d.v2i64.zero">;
3030def int_nvvm_suld_1d_v4i8_zero
3031  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3032              [llvm_i64_ty, llvm_i32_ty], [],
3033              "llvm.nvvm.suld.1d.v4i8.zero">;
3034def int_nvvm_suld_1d_v4i16_zero
3035  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3036              [llvm_i64_ty, llvm_i32_ty], [],
3037              "llvm.nvvm.suld.1d.v4i16.zero">;
3038def int_nvvm_suld_1d_v4i32_zero
3039  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3040              [llvm_i64_ty, llvm_i32_ty], [],
3041              "llvm.nvvm.suld.1d.v4i32.zero">;
3042
3043def int_nvvm_suld_1d_array_i8_zero
3044  : Intrinsic<[llvm_i16_ty],
3045              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3046              "llvm.nvvm.suld.1d.array.i8.zero">;
3047def int_nvvm_suld_1d_array_i16_zero
3048  : Intrinsic<[llvm_i16_ty],
3049              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3050              "llvm.nvvm.suld.1d.array.i16.zero">;
3051def int_nvvm_suld_1d_array_i32_zero
3052  : Intrinsic<[llvm_i32_ty],
3053              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3054              "llvm.nvvm.suld.1d.array.i32.zero">;
3055def int_nvvm_suld_1d_array_i64_zero
3056  : Intrinsic<[llvm_i64_ty],
3057              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3058              "llvm.nvvm.suld.1d.array.i64.zero">;
3059def int_nvvm_suld_1d_array_v2i8_zero
3060  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3061              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3062              "llvm.nvvm.suld.1d.array.v2i8.zero">;
3063def int_nvvm_suld_1d_array_v2i16_zero
3064  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3065              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3066              "llvm.nvvm.suld.1d.array.v2i16.zero">;
3067def int_nvvm_suld_1d_array_v2i32_zero
3068  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3069              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3070              "llvm.nvvm.suld.1d.array.v2i32.zero">;
3071def int_nvvm_suld_1d_array_v2i64_zero
3072  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3073              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3074              "llvm.nvvm.suld.1d.array.v2i64.zero">;
3075def int_nvvm_suld_1d_array_v4i8_zero
3076  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3077              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3078              "llvm.nvvm.suld.1d.array.v4i8.zero">;
3079def int_nvvm_suld_1d_array_v4i16_zero
3080  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3081              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3082              "llvm.nvvm.suld.1d.array.v4i16.zero">;
3083def int_nvvm_suld_1d_array_v4i32_zero
3084  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3085              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3086              "llvm.nvvm.suld.1d.array.v4i32.zero">;
3087
3088def int_nvvm_suld_2d_i8_zero
3089  : Intrinsic<[llvm_i16_ty],
3090              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3091              "llvm.nvvm.suld.2d.i8.zero">;
3092def int_nvvm_suld_2d_i16_zero
3093  : Intrinsic<[llvm_i16_ty],
3094              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3095              "llvm.nvvm.suld.2d.i16.zero">;
3096def int_nvvm_suld_2d_i32_zero
3097  : Intrinsic<[llvm_i32_ty],
3098              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3099              "llvm.nvvm.suld.2d.i32.zero">;
3100def int_nvvm_suld_2d_i64_zero
3101  : Intrinsic<[llvm_i64_ty],
3102              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3103              "llvm.nvvm.suld.2d.i64.zero">;
3104def int_nvvm_suld_2d_v2i8_zero
3105  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3106              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3107              "llvm.nvvm.suld.2d.v2i8.zero">;
3108def int_nvvm_suld_2d_v2i16_zero
3109  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3110              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3111              "llvm.nvvm.suld.2d.v2i16.zero">;
3112def int_nvvm_suld_2d_v2i32_zero
3113  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3114              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3115              "llvm.nvvm.suld.2d.v2i32.zero">;
3116def int_nvvm_suld_2d_v2i64_zero
3117  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3118              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3119              "llvm.nvvm.suld.2d.v2i64.zero">;
3120def int_nvvm_suld_2d_v4i8_zero
3121  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3122              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3123              "llvm.nvvm.suld.2d.v4i8.zero">;
3124def int_nvvm_suld_2d_v4i16_zero
3125  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3126              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3127              "llvm.nvvm.suld.2d.v4i16.zero">;
3128def int_nvvm_suld_2d_v4i32_zero
3129  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3130              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3131              "llvm.nvvm.suld.2d.v4i32.zero">;
3132
3133def int_nvvm_suld_2d_array_i8_zero
3134  : Intrinsic<[llvm_i16_ty],
3135              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3136              "llvm.nvvm.suld.2d.array.i8.zero">;
3137def int_nvvm_suld_2d_array_i16_zero
3138  : Intrinsic<[llvm_i16_ty],
3139              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3140              "llvm.nvvm.suld.2d.array.i16.zero">;
3141def int_nvvm_suld_2d_array_i32_zero
3142  : Intrinsic<[llvm_i32_ty],
3143              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3144              "llvm.nvvm.suld.2d.array.i32.zero">;
3145def int_nvvm_suld_2d_array_i64_zero
3146  : Intrinsic<[llvm_i64_ty],
3147              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3148              "llvm.nvvm.suld.2d.array.i64.zero">;
3149def int_nvvm_suld_2d_array_v2i8_zero
3150  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3151              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3152              "llvm.nvvm.suld.2d.array.v2i8.zero">;
3153def int_nvvm_suld_2d_array_v2i16_zero
3154  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3155              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3156              "llvm.nvvm.suld.2d.array.v2i16.zero">;
3157def int_nvvm_suld_2d_array_v2i32_zero
3158  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3159              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3160              "llvm.nvvm.suld.2d.array.v2i32.zero">;
3161def int_nvvm_suld_2d_array_v2i64_zero
3162  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3163              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3164              "llvm.nvvm.suld.2d.array.v2i64.zero">;
3165def int_nvvm_suld_2d_array_v4i8_zero
3166  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3167              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3168              "llvm.nvvm.suld.2d.array.v4i8.zero">;
3169def int_nvvm_suld_2d_array_v4i16_zero
3170  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3171              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3172              "llvm.nvvm.suld.2d.array.v4i16.zero">;
3173def int_nvvm_suld_2d_array_v4i32_zero
3174  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3175              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3176              "llvm.nvvm.suld.2d.array.v4i32.zero">;
3177
3178def int_nvvm_suld_3d_i8_zero
3179  : Intrinsic<[llvm_i16_ty],
3180              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3181              "llvm.nvvm.suld.3d.i8.zero">;
3182def int_nvvm_suld_3d_i16_zero
3183  : Intrinsic<[llvm_i16_ty],
3184              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3185              "llvm.nvvm.suld.3d.i16.zero">;
3186def int_nvvm_suld_3d_i32_zero
3187  : Intrinsic<[llvm_i32_ty],
3188              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3189              "llvm.nvvm.suld.3d.i32.zero">;
3190def int_nvvm_suld_3d_i64_zero
3191  : Intrinsic<[llvm_i64_ty],
3192              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3193              "llvm.nvvm.suld.3d.i64.zero">;
3194def int_nvvm_suld_3d_v2i8_zero
3195  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3196              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3197              "llvm.nvvm.suld.3d.v2i8.zero">;
3198def int_nvvm_suld_3d_v2i16_zero
3199  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3200              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3201              "llvm.nvvm.suld.3d.v2i16.zero">;
3202def int_nvvm_suld_3d_v2i32_zero
3203  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3204              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3205              "llvm.nvvm.suld.3d.v2i32.zero">;
3206def int_nvvm_suld_3d_v2i64_zero
3207  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3208              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3209              "llvm.nvvm.suld.3d.v2i64.zero">;
3210def int_nvvm_suld_3d_v4i8_zero
3211  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3212              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3213              "llvm.nvvm.suld.3d.v4i8.zero">;
3214def int_nvvm_suld_3d_v4i16_zero
3215  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3216              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3217              "llvm.nvvm.suld.3d.v4i16.zero">;
3218def int_nvvm_suld_3d_v4i32_zero
3219  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3220              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3221              "llvm.nvvm.suld.3d.v4i32.zero">;
3222
3223//===- Texture Query ------------------------------------------------------===//
3224
3225def int_nvvm_txq_channel_order
3226  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3227              "llvm.nvvm.txq.channel.order">,
3228    ClangBuiltin<"__nvvm_txq_channel_order">;
3229def int_nvvm_txq_channel_data_type
3230  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3231              "llvm.nvvm.txq.channel.data.type">,
3232    ClangBuiltin<"__nvvm_txq_channel_data_type">;
3233def int_nvvm_txq_width
3234  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3235              "llvm.nvvm.txq.width">,
3236    ClangBuiltin<"__nvvm_txq_width">;
3237def int_nvvm_txq_height
3238  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3239              "llvm.nvvm.txq.height">,
3240    ClangBuiltin<"__nvvm_txq_height">;
3241def int_nvvm_txq_depth
3242  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3243              "llvm.nvvm.txq.depth">,
3244    ClangBuiltin<"__nvvm_txq_depth">;
3245def int_nvvm_txq_array_size
3246  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3247              "llvm.nvvm.txq.array.size">,
3248    ClangBuiltin<"__nvvm_txq_array_size">;
3249def int_nvvm_txq_num_samples
3250  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3251              "llvm.nvvm.txq.num.samples">,
3252    ClangBuiltin<"__nvvm_txq_num_samples">;
3253def int_nvvm_txq_num_mipmap_levels
3254  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3255              "llvm.nvvm.txq.num.mipmap.levels">,
3256    ClangBuiltin<"__nvvm_txq_num_mipmap_levels">;
3257
3258//===- Surface Query ------------------------------------------------------===//
3259
3260def int_nvvm_suq_channel_order
3261  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3262              "llvm.nvvm.suq.channel.order">,
3263    ClangBuiltin<"__nvvm_suq_channel_order">;
3264def int_nvvm_suq_channel_data_type
3265  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3266              "llvm.nvvm.suq.channel.data.type">,
3267    ClangBuiltin<"__nvvm_suq_channel_data_type">;
3268def int_nvvm_suq_width
3269  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3270              "llvm.nvvm.suq.width">,
3271    ClangBuiltin<"__nvvm_suq_width">;
3272def int_nvvm_suq_height
3273  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3274              "llvm.nvvm.suq.height">,
3275    ClangBuiltin<"__nvvm_suq_height">;
3276def int_nvvm_suq_depth
3277  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3278              "llvm.nvvm.suq.depth">,
3279    ClangBuiltin<"__nvvm_suq_depth">;
3280def int_nvvm_suq_array_size
3281  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3282              "llvm.nvvm.suq.array.size">,
3283    ClangBuiltin<"__nvvm_suq_array_size">;
3284
3285
3286//===- Handle Query -------------------------------------------------------===//
3287
3288def int_nvvm_istypep_sampler
3289  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
3290              "llvm.nvvm.istypep.sampler">,
3291    ClangBuiltin<"__nvvm_istypep_sampler">;
3292def int_nvvm_istypep_surface
3293  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
3294              "llvm.nvvm.istypep.surface">,
3295    ClangBuiltin<"__nvvm_istypep_surface">;
3296def int_nvvm_istypep_texture
3297  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
3298              "llvm.nvvm.istypep.texture">,
3299    ClangBuiltin<"__nvvm_istypep_texture">;
3300
3301
3302
3303//===- Surface Stores -----------------------------------------------------===//
3304
3305// Unformatted
3306// .clamp variant
3307def int_nvvm_sust_b_1d_i8_clamp
3308  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3309              "llvm.nvvm.sust.b.1d.i8.clamp">,
3310    ClangBuiltin<"__nvvm_sust_b_1d_i8_clamp">;
3311def int_nvvm_sust_b_1d_i16_clamp
3312  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3313              "llvm.nvvm.sust.b.1d.i16.clamp">,
3314    ClangBuiltin<"__nvvm_sust_b_1d_i16_clamp">;
3315def int_nvvm_sust_b_1d_i32_clamp
3316  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3317              "llvm.nvvm.sust.b.1d.i32.clamp">,
3318    ClangBuiltin<"__nvvm_sust_b_1d_i32_clamp">;
3319def int_nvvm_sust_b_1d_i64_clamp
3320  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
3321              "llvm.nvvm.sust.b.1d.i64.clamp">,
3322    ClangBuiltin<"__nvvm_sust_b_1d_i64_clamp">;
3323def int_nvvm_sust_b_1d_v2i8_clamp
3324  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3325              "llvm.nvvm.sust.b.1d.v2i8.clamp">,
3326    ClangBuiltin<"__nvvm_sust_b_1d_v2i8_clamp">;
3327def int_nvvm_sust_b_1d_v2i16_clamp
3328  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3329              "llvm.nvvm.sust.b.1d.v2i16.clamp">,
3330    ClangBuiltin<"__nvvm_sust_b_1d_v2i16_clamp">;
3331def int_nvvm_sust_b_1d_v2i32_clamp
3332  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3333              "llvm.nvvm.sust.b.1d.v2i32.clamp">,
3334    ClangBuiltin<"__nvvm_sust_b_1d_v2i32_clamp">;
3335def int_nvvm_sust_b_1d_v2i64_clamp
3336  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
3337              "llvm.nvvm.sust.b.1d.v2i64.clamp">,
3338    ClangBuiltin<"__nvvm_sust_b_1d_v2i64_clamp">;
3339def int_nvvm_sust_b_1d_v4i8_clamp
3340  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3341                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3342              "llvm.nvvm.sust.b.1d.v4i8.clamp">,
3343    ClangBuiltin<"__nvvm_sust_b_1d_v4i8_clamp">;
3344def int_nvvm_sust_b_1d_v4i16_clamp
3345  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3346                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3347              "llvm.nvvm.sust.b.1d.v4i16.clamp">,
3348    ClangBuiltin<"__nvvm_sust_b_1d_v4i16_clamp">;
3349def int_nvvm_sust_b_1d_v4i32_clamp
3350  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3351                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3352              "llvm.nvvm.sust.b.1d.v4i32.clamp">,
3353    ClangBuiltin<"__nvvm_sust_b_1d_v4i32_clamp">;
3354
3355
3356def int_nvvm_sust_b_1d_array_i8_clamp
3357  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3358              "llvm.nvvm.sust.b.1d.array.i8.clamp">,
3359    ClangBuiltin<"__nvvm_sust_b_1d_array_i8_clamp">;
3360def int_nvvm_sust_b_1d_array_i16_clamp
3361  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3362              "llvm.nvvm.sust.b.1d.array.i16.clamp">,
3363    ClangBuiltin<"__nvvm_sust_b_1d_array_i16_clamp">;
3364def int_nvvm_sust_b_1d_array_i32_clamp
3365  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3366              "llvm.nvvm.sust.b.1d.array.i32.clamp">,
3367    ClangBuiltin<"__nvvm_sust_b_1d_array_i32_clamp">;
3368def int_nvvm_sust_b_1d_array_i64_clamp
3369  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3370              "llvm.nvvm.sust.b.1d.array.i64.clamp">,
3371    ClangBuiltin<"__nvvm_sust_b_1d_array_i64_clamp">;
3372def int_nvvm_sust_b_1d_array_v2i8_clamp
3373  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3374                   llvm_i16_ty, llvm_i16_ty], [],
3375              "llvm.nvvm.sust.b.1d.array.v2i8.clamp">,
3376    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i8_clamp">;
3377def int_nvvm_sust_b_1d_array_v2i16_clamp
3378  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3379                   llvm_i16_ty, llvm_i16_ty], [],
3380              "llvm.nvvm.sust.b.1d.array.v2i16.clamp">,
3381    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i16_clamp">;
3382def int_nvvm_sust_b_1d_array_v2i32_clamp
3383  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3384                   llvm_i32_ty, llvm_i32_ty], [],
3385              "llvm.nvvm.sust.b.1d.array.v2i32.clamp">,
3386    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i32_clamp">;
3387def int_nvvm_sust_b_1d_array_v2i64_clamp
3388  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3389                   llvm_i64_ty, llvm_i64_ty], [],
3390              "llvm.nvvm.sust.b.1d.array.v2i64.clamp">,
3391    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i64_clamp">;
3392def int_nvvm_sust_b_1d_array_v4i8_clamp
3393  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3394                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3395              "llvm.nvvm.sust.b.1d.array.v4i8.clamp">,
3396    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i8_clamp">;
3397def int_nvvm_sust_b_1d_array_v4i16_clamp
3398  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3399                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3400              "llvm.nvvm.sust.b.1d.array.v4i16.clamp">,
3401    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i16_clamp">;
3402def int_nvvm_sust_b_1d_array_v4i32_clamp
3403  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3404                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3405              "llvm.nvvm.sust.b.1d.array.v4i32.clamp">,
3406    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i32_clamp">;
3407
3408
3409def int_nvvm_sust_b_2d_i8_clamp
3410  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3411              "llvm.nvvm.sust.b.2d.i8.clamp">,
3412    ClangBuiltin<"__nvvm_sust_b_2d_i8_clamp">;
3413def int_nvvm_sust_b_2d_i16_clamp
3414  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3415              "llvm.nvvm.sust.b.2d.i16.clamp">,
3416    ClangBuiltin<"__nvvm_sust_b_2d_i16_clamp">;
3417def int_nvvm_sust_b_2d_i32_clamp
3418  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3419              "llvm.nvvm.sust.b.2d.i32.clamp">,
3420    ClangBuiltin<"__nvvm_sust_b_2d_i32_clamp">;
3421def int_nvvm_sust_b_2d_i64_clamp
3422  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3423              "llvm.nvvm.sust.b.2d.i64.clamp">,
3424    ClangBuiltin<"__nvvm_sust_b_2d_i64_clamp">;
3425def int_nvvm_sust_b_2d_v2i8_clamp
3426  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3427                   llvm_i16_ty, llvm_i16_ty], [],
3428              "llvm.nvvm.sust.b.2d.v2i8.clamp">,
3429    ClangBuiltin<"__nvvm_sust_b_2d_v2i8_clamp">;
3430def int_nvvm_sust_b_2d_v2i16_clamp
3431  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3432                   llvm_i16_ty, llvm_i16_ty], [],
3433              "llvm.nvvm.sust.b.2d.v2i16.clamp">,
3434    ClangBuiltin<"__nvvm_sust_b_2d_v2i16_clamp">;
3435def int_nvvm_sust_b_2d_v2i32_clamp
3436  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3437                   llvm_i32_ty, llvm_i32_ty], [],
3438              "llvm.nvvm.sust.b.2d.v2i32.clamp">,
3439    ClangBuiltin<"__nvvm_sust_b_2d_v2i32_clamp">;
3440def int_nvvm_sust_b_2d_v2i64_clamp
3441  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3442                   llvm_i64_ty, llvm_i64_ty], [],
3443              "llvm.nvvm.sust.b.2d.v2i64.clamp">,
3444    ClangBuiltin<"__nvvm_sust_b_2d_v2i64_clamp">;
3445def int_nvvm_sust_b_2d_v4i8_clamp
3446  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3447                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3448              "llvm.nvvm.sust.b.2d.v4i8.clamp">,
3449    ClangBuiltin<"__nvvm_sust_b_2d_v4i8_clamp">;
3450def int_nvvm_sust_b_2d_v4i16_clamp
3451  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3452                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3453              "llvm.nvvm.sust.b.2d.v4i16.clamp">,
3454    ClangBuiltin<"__nvvm_sust_b_2d_v4i16_clamp">;
3455def int_nvvm_sust_b_2d_v4i32_clamp
3456  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3457                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3458              "llvm.nvvm.sust.b.2d.v4i32.clamp">,
3459    ClangBuiltin<"__nvvm_sust_b_2d_v4i32_clamp">;
3460
3461
3462def int_nvvm_sust_b_2d_array_i8_clamp
3463  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3464                   llvm_i32_ty, llvm_i16_ty], [],
3465              "llvm.nvvm.sust.b.2d.array.i8.clamp">,
3466    ClangBuiltin<"__nvvm_sust_b_2d_array_i8_clamp">;
3467def int_nvvm_sust_b_2d_array_i16_clamp
3468  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3469                   llvm_i32_ty, llvm_i16_ty], [],
3470              "llvm.nvvm.sust.b.2d.array.i16.clamp">,
3471    ClangBuiltin<"__nvvm_sust_b_2d_array_i16_clamp">;
3472def int_nvvm_sust_b_2d_array_i32_clamp
3473  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3474                   llvm_i32_ty, llvm_i32_ty], [],
3475              "llvm.nvvm.sust.b.2d.array.i32.clamp">,
3476    ClangBuiltin<"__nvvm_sust_b_2d_array_i32_clamp">;
3477def int_nvvm_sust_b_2d_array_i64_clamp
3478  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3479                   llvm_i32_ty, llvm_i64_ty], [],
3480              "llvm.nvvm.sust.b.2d.array.i64.clamp">,
3481    ClangBuiltin<"__nvvm_sust_b_2d_array_i64_clamp">;
3482def int_nvvm_sust_b_2d_array_v2i8_clamp
3483  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3484                   llvm_i16_ty, llvm_i16_ty], [],
3485              "llvm.nvvm.sust.b.2d.array.v2i8.clamp">,
3486    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i8_clamp">;
3487def int_nvvm_sust_b_2d_array_v2i16_clamp
3488  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3489                   llvm_i16_ty, llvm_i16_ty], [],
3490              "llvm.nvvm.sust.b.2d.array.v2i16.clamp">,
3491    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i16_clamp">;
3492def int_nvvm_sust_b_2d_array_v2i32_clamp
3493  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3494                   llvm_i32_ty, llvm_i32_ty], [],
3495              "llvm.nvvm.sust.b.2d.array.v2i32.clamp">,
3496    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i32_clamp">;
3497def int_nvvm_sust_b_2d_array_v2i64_clamp
3498  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3499                   llvm_i64_ty, llvm_i64_ty], [],
3500              "llvm.nvvm.sust.b.2d.array.v2i64.clamp">,
3501    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i64_clamp">;
3502def int_nvvm_sust_b_2d_array_v4i8_clamp
3503  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3504                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3505              "llvm.nvvm.sust.b.2d.array.v4i8.clamp">,
3506    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i8_clamp">;
3507def int_nvvm_sust_b_2d_array_v4i16_clamp
3508  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3509                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3510              "llvm.nvvm.sust.b.2d.array.v4i16.clamp">,
3511    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i16_clamp">;
3512def int_nvvm_sust_b_2d_array_v4i32_clamp
3513  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3514                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3515              "llvm.nvvm.sust.b.2d.array.v4i32.clamp">,
3516    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i32_clamp">;
3517
3518
3519def int_nvvm_sust_b_3d_i8_clamp
3520  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3521                   llvm_i32_ty, llvm_i16_ty], [],
3522              "llvm.nvvm.sust.b.3d.i8.clamp">,
3523    ClangBuiltin<"__nvvm_sust_b_3d_i8_clamp">;
3524def int_nvvm_sust_b_3d_i16_clamp
3525  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3526                   llvm_i32_ty, llvm_i16_ty], [],
3527              "llvm.nvvm.sust.b.3d.i16.clamp">,
3528    ClangBuiltin<"__nvvm_sust_b_3d_i16_clamp">;
3529def int_nvvm_sust_b_3d_i32_clamp
3530  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3531                   llvm_i32_ty, llvm_i32_ty], [],
3532              "llvm.nvvm.sust.b.3d.i32.clamp">,
3533    ClangBuiltin<"__nvvm_sust_b_3d_i32_clamp">;
3534def int_nvvm_sust_b_3d_i64_clamp
3535  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3536                   llvm_i32_ty, llvm_i64_ty], [],
3537              "llvm.nvvm.sust.b.3d.i64.clamp">,
3538    ClangBuiltin<"__nvvm_sust_b_3d_i64_clamp">;
3539def int_nvvm_sust_b_3d_v2i8_clamp
3540  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3541                   llvm_i16_ty, llvm_i16_ty], [],
3542              "llvm.nvvm.sust.b.3d.v2i8.clamp">,
3543    ClangBuiltin<"__nvvm_sust_b_3d_v2i8_clamp">;
3544def int_nvvm_sust_b_3d_v2i16_clamp
3545  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3546                   llvm_i16_ty, llvm_i16_ty], [],
3547              "llvm.nvvm.sust.b.3d.v2i16.clamp">,
3548    ClangBuiltin<"__nvvm_sust_b_3d_v2i16_clamp">;
3549def int_nvvm_sust_b_3d_v2i32_clamp
3550  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3551                   llvm_i32_ty, llvm_i32_ty], [],
3552              "llvm.nvvm.sust.b.3d.v2i32.clamp">,
3553    ClangBuiltin<"__nvvm_sust_b_3d_v2i32_clamp">;
3554def int_nvvm_sust_b_3d_v2i64_clamp
3555  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3556                   llvm_i64_ty, llvm_i64_ty], [],
3557              "llvm.nvvm.sust.b.3d.v2i64.clamp">,
3558    ClangBuiltin<"__nvvm_sust_b_3d_v2i64_clamp">;
3559def int_nvvm_sust_b_3d_v4i8_clamp
3560  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3561                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3562              "llvm.nvvm.sust.b.3d.v4i8.clamp">,
3563    ClangBuiltin<"__nvvm_sust_b_3d_v4i8_clamp">;
3564def int_nvvm_sust_b_3d_v4i16_clamp
3565  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3566                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3567              "llvm.nvvm.sust.b.3d.v4i16.clamp">,
3568    ClangBuiltin<"__nvvm_sust_b_3d_v4i16_clamp">;
3569def int_nvvm_sust_b_3d_v4i32_clamp
3570  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3571                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3572              "llvm.nvvm.sust.b.3d.v4i32.clamp">,
3573    ClangBuiltin<"__nvvm_sust_b_3d_v4i32_clamp">;
3574
3575
3576// .trap variant
3577def int_nvvm_sust_b_1d_i8_trap
3578  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3579              "llvm.nvvm.sust.b.1d.i8.trap">,
3580    ClangBuiltin<"__nvvm_sust_b_1d_i8_trap">;
3581def int_nvvm_sust_b_1d_i16_trap
3582  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3583              "llvm.nvvm.sust.b.1d.i16.trap">,
3584    ClangBuiltin<"__nvvm_sust_b_1d_i16_trap">;
3585def int_nvvm_sust_b_1d_i32_trap
3586  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3587              "llvm.nvvm.sust.b.1d.i32.trap">,
3588    ClangBuiltin<"__nvvm_sust_b_1d_i32_trap">;
3589def int_nvvm_sust_b_1d_i64_trap
3590  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
3591              "llvm.nvvm.sust.b.1d.i64.trap">,
3592    ClangBuiltin<"__nvvm_sust_b_1d_i64_trap">;
3593def int_nvvm_sust_b_1d_v2i8_trap
3594  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3595              "llvm.nvvm.sust.b.1d.v2i8.trap">,
3596    ClangBuiltin<"__nvvm_sust_b_1d_v2i8_trap">;
3597def int_nvvm_sust_b_1d_v2i16_trap
3598  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3599              "llvm.nvvm.sust.b.1d.v2i16.trap">,
3600    ClangBuiltin<"__nvvm_sust_b_1d_v2i16_trap">;
3601def int_nvvm_sust_b_1d_v2i32_trap
3602  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3603              "llvm.nvvm.sust.b.1d.v2i32.trap">,
3604    ClangBuiltin<"__nvvm_sust_b_1d_v2i32_trap">;
3605def int_nvvm_sust_b_1d_v2i64_trap
3606  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
3607              "llvm.nvvm.sust.b.1d.v2i64.trap">,
3608    ClangBuiltin<"__nvvm_sust_b_1d_v2i64_trap">;
3609def int_nvvm_sust_b_1d_v4i8_trap
3610  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3611                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3612              "llvm.nvvm.sust.b.1d.v4i8.trap">,
3613    ClangBuiltin<"__nvvm_sust_b_1d_v4i8_trap">;
3614def int_nvvm_sust_b_1d_v4i16_trap
3615  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3616                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3617              "llvm.nvvm.sust.b.1d.v4i16.trap">,
3618    ClangBuiltin<"__nvvm_sust_b_1d_v4i16_trap">;
3619def int_nvvm_sust_b_1d_v4i32_trap
3620  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3621                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3622              "llvm.nvvm.sust.b.1d.v4i32.trap">,
3623    ClangBuiltin<"__nvvm_sust_b_1d_v4i32_trap">;
3624
3625
3626def int_nvvm_sust_b_1d_array_i8_trap
3627  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3628              "llvm.nvvm.sust.b.1d.array.i8.trap">,
3629    ClangBuiltin<"__nvvm_sust_b_1d_array_i8_trap">;
3630def int_nvvm_sust_b_1d_array_i16_trap
3631  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3632              "llvm.nvvm.sust.b.1d.array.i16.trap">,
3633    ClangBuiltin<"__nvvm_sust_b_1d_array_i16_trap">;
3634def int_nvvm_sust_b_1d_array_i32_trap
3635  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3636              "llvm.nvvm.sust.b.1d.array.i32.trap">,
3637    ClangBuiltin<"__nvvm_sust_b_1d_array_i32_trap">;
3638def int_nvvm_sust_b_1d_array_i64_trap
3639  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3640              "llvm.nvvm.sust.b.1d.array.i64.trap">,
3641    ClangBuiltin<"__nvvm_sust_b_1d_array_i64_trap">;
3642def int_nvvm_sust_b_1d_array_v2i8_trap
3643  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3644                   llvm_i16_ty, llvm_i16_ty], [],
3645              "llvm.nvvm.sust.b.1d.array.v2i8.trap">,
3646    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i8_trap">;
3647def int_nvvm_sust_b_1d_array_v2i16_trap
3648  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3649                   llvm_i16_ty, llvm_i16_ty], [],
3650              "llvm.nvvm.sust.b.1d.array.v2i16.trap">,
3651    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i16_trap">;
3652def int_nvvm_sust_b_1d_array_v2i32_trap
3653  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3654                   llvm_i32_ty, llvm_i32_ty], [],
3655              "llvm.nvvm.sust.b.1d.array.v2i32.trap">,
3656    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i32_trap">;
3657def int_nvvm_sust_b_1d_array_v2i64_trap
3658  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3659                   llvm_i64_ty, llvm_i64_ty], [],
3660              "llvm.nvvm.sust.b.1d.array.v2i64.trap">,
3661    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i64_trap">;
3662def int_nvvm_sust_b_1d_array_v4i8_trap
3663  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3664                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3665              "llvm.nvvm.sust.b.1d.array.v4i8.trap">,
3666    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i8_trap">;
3667def int_nvvm_sust_b_1d_array_v4i16_trap
3668  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3669                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3670              "llvm.nvvm.sust.b.1d.array.v4i16.trap">,
3671    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i16_trap">;
3672def int_nvvm_sust_b_1d_array_v4i32_trap
3673  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3674                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3675              "llvm.nvvm.sust.b.1d.array.v4i32.trap">,
3676    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i32_trap">;
3677
3678
3679def int_nvvm_sust_b_2d_i8_trap
3680  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3681              "llvm.nvvm.sust.b.2d.i8.trap">,
3682    ClangBuiltin<"__nvvm_sust_b_2d_i8_trap">;
3683def int_nvvm_sust_b_2d_i16_trap
3684  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3685              "llvm.nvvm.sust.b.2d.i16.trap">,
3686    ClangBuiltin<"__nvvm_sust_b_2d_i16_trap">;
3687def int_nvvm_sust_b_2d_i32_trap
3688  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3689              "llvm.nvvm.sust.b.2d.i32.trap">,
3690    ClangBuiltin<"__nvvm_sust_b_2d_i32_trap">;
3691def int_nvvm_sust_b_2d_i64_trap
3692  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3693              "llvm.nvvm.sust.b.2d.i64.trap">,
3694    ClangBuiltin<"__nvvm_sust_b_2d_i64_trap">;
3695def int_nvvm_sust_b_2d_v2i8_trap
3696  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3697                   llvm_i16_ty, llvm_i16_ty], [],
3698              "llvm.nvvm.sust.b.2d.v2i8.trap">,
3699    ClangBuiltin<"__nvvm_sust_b_2d_v2i8_trap">;
3700def int_nvvm_sust_b_2d_v2i16_trap
3701  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3702                   llvm_i16_ty, llvm_i16_ty], [],
3703              "llvm.nvvm.sust.b.2d.v2i16.trap">,
3704    ClangBuiltin<"__nvvm_sust_b_2d_v2i16_trap">;
3705def int_nvvm_sust_b_2d_v2i32_trap
3706  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3707                   llvm_i32_ty, llvm_i32_ty], [],
3708              "llvm.nvvm.sust.b.2d.v2i32.trap">,
3709    ClangBuiltin<"__nvvm_sust_b_2d_v2i32_trap">;
3710def int_nvvm_sust_b_2d_v2i64_trap
3711  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3712                   llvm_i64_ty, llvm_i64_ty], [],
3713              "llvm.nvvm.sust.b.2d.v2i64.trap">,
3714    ClangBuiltin<"__nvvm_sust_b_2d_v2i64_trap">;
3715def int_nvvm_sust_b_2d_v4i8_trap
3716  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3717                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3718              "llvm.nvvm.sust.b.2d.v4i8.trap">,
3719    ClangBuiltin<"__nvvm_sust_b_2d_v4i8_trap">;
3720def int_nvvm_sust_b_2d_v4i16_trap
3721  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3722                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3723              "llvm.nvvm.sust.b.2d.v4i16.trap">,
3724    ClangBuiltin<"__nvvm_sust_b_2d_v4i16_trap">;
3725def int_nvvm_sust_b_2d_v4i32_trap
3726  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3727                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3728              "llvm.nvvm.sust.b.2d.v4i32.trap">,
3729    ClangBuiltin<"__nvvm_sust_b_2d_v4i32_trap">;
3730
3731
3732def int_nvvm_sust_b_2d_array_i8_trap
3733  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3734                   llvm_i32_ty, llvm_i16_ty], [],
3735              "llvm.nvvm.sust.b.2d.array.i8.trap">,
3736    ClangBuiltin<"__nvvm_sust_b_2d_array_i8_trap">;
3737def int_nvvm_sust_b_2d_array_i16_trap
3738  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3739                   llvm_i32_ty, llvm_i16_ty], [],
3740              "llvm.nvvm.sust.b.2d.array.i16.trap">,
3741    ClangBuiltin<"__nvvm_sust_b_2d_array_i16_trap">;
3742def int_nvvm_sust_b_2d_array_i32_trap
3743  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3744                   llvm_i32_ty, llvm_i32_ty], [],
3745              "llvm.nvvm.sust.b.2d.array.i32.trap">,
3746    ClangBuiltin<"__nvvm_sust_b_2d_array_i32_trap">;
3747def int_nvvm_sust_b_2d_array_i64_trap
3748  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3749                   llvm_i32_ty, llvm_i64_ty], [],
3750              "llvm.nvvm.sust.b.2d.array.i64.trap">,
3751    ClangBuiltin<"__nvvm_sust_b_2d_array_i64_trap">;
3752def int_nvvm_sust_b_2d_array_v2i8_trap
3753  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3754                   llvm_i16_ty, llvm_i16_ty], [],
3755              "llvm.nvvm.sust.b.2d.array.v2i8.trap">,
3756    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i8_trap">;
3757def int_nvvm_sust_b_2d_array_v2i16_trap
3758  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3759                   llvm_i16_ty, llvm_i16_ty], [],
3760              "llvm.nvvm.sust.b.2d.array.v2i16.trap">,
3761    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i16_trap">;
3762def int_nvvm_sust_b_2d_array_v2i32_trap
3763  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3764                   llvm_i32_ty, llvm_i32_ty], [],
3765              "llvm.nvvm.sust.b.2d.array.v2i32.trap">,
3766    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i32_trap">;
3767def int_nvvm_sust_b_2d_array_v2i64_trap
3768  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3769                   llvm_i64_ty, llvm_i64_ty], [],
3770              "llvm.nvvm.sust.b.2d.array.v2i64.trap">,
3771    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i64_trap">;
3772def int_nvvm_sust_b_2d_array_v4i8_trap
3773  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3774                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3775              "llvm.nvvm.sust.b.2d.array.v4i8.trap">,
3776    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i8_trap">;
3777def int_nvvm_sust_b_2d_array_v4i16_trap
3778  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3779                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3780              "llvm.nvvm.sust.b.2d.array.v4i16.trap">,
3781    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i16_trap">;
3782def int_nvvm_sust_b_2d_array_v4i32_trap
3783  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3784                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3785              "llvm.nvvm.sust.b.2d.array.v4i32.trap">,
3786    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i32_trap">;
3787
3788
3789def int_nvvm_sust_b_3d_i8_trap
3790  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3791                   llvm_i32_ty, llvm_i16_ty], [],
3792              "llvm.nvvm.sust.b.3d.i8.trap">,
3793    ClangBuiltin<"__nvvm_sust_b_3d_i8_trap">;
3794def int_nvvm_sust_b_3d_i16_trap
3795  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3796                   llvm_i32_ty, llvm_i16_ty], [],
3797              "llvm.nvvm.sust.b.3d.i16.trap">,
3798    ClangBuiltin<"__nvvm_sust_b_3d_i16_trap">;
3799def int_nvvm_sust_b_3d_i32_trap
3800  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3801                   llvm_i32_ty, llvm_i32_ty], [],
3802              "llvm.nvvm.sust.b.3d.i32.trap">,
3803    ClangBuiltin<"__nvvm_sust_b_3d_i32_trap">;
3804def int_nvvm_sust_b_3d_i64_trap
3805  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3806                   llvm_i32_ty, llvm_i64_ty], [],
3807              "llvm.nvvm.sust.b.3d.i64.trap">,
3808    ClangBuiltin<"__nvvm_sust_b_3d_i64_trap">;
3809def int_nvvm_sust_b_3d_v2i8_trap
3810  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3811                   llvm_i16_ty, llvm_i16_ty], [],
3812              "llvm.nvvm.sust.b.3d.v2i8.trap">,
3813    ClangBuiltin<"__nvvm_sust_b_3d_v2i8_trap">;
3814def int_nvvm_sust_b_3d_v2i16_trap
3815  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3816                   llvm_i16_ty, llvm_i16_ty], [],
3817              "llvm.nvvm.sust.b.3d.v2i16.trap">,
3818    ClangBuiltin<"__nvvm_sust_b_3d_v2i16_trap">;
3819def int_nvvm_sust_b_3d_v2i32_trap
3820  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3821                   llvm_i32_ty, llvm_i32_ty], [],
3822              "llvm.nvvm.sust.b.3d.v2i32.trap">,
3823    ClangBuiltin<"__nvvm_sust_b_3d_v2i32_trap">;
3824def int_nvvm_sust_b_3d_v2i64_trap
3825  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3826                   llvm_i64_ty, llvm_i64_ty], [],
3827              "llvm.nvvm.sust.b.3d.v2i64.trap">,
3828    ClangBuiltin<"__nvvm_sust_b_3d_v2i64_trap">;
3829def int_nvvm_sust_b_3d_v4i8_trap
3830  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3831                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3832              "llvm.nvvm.sust.b.3d.v4i8.trap">,
3833    ClangBuiltin<"__nvvm_sust_b_3d_v4i8_trap">;
3834def int_nvvm_sust_b_3d_v4i16_trap
3835  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3836                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3837              "llvm.nvvm.sust.b.3d.v4i16.trap">,
3838    ClangBuiltin<"__nvvm_sust_b_3d_v4i16_trap">;
3839def int_nvvm_sust_b_3d_v4i32_trap
3840  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3841                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3842              "llvm.nvvm.sust.b.3d.v4i32.trap">,
3843    ClangBuiltin<"__nvvm_sust_b_3d_v4i32_trap">;
3844
3845
3846// .zero variant
3847def int_nvvm_sust_b_1d_i8_zero
3848  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3849              "llvm.nvvm.sust.b.1d.i8.zero">,
3850    ClangBuiltin<"__nvvm_sust_b_1d_i8_zero">;
3851def int_nvvm_sust_b_1d_i16_zero
3852  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3853              "llvm.nvvm.sust.b.1d.i16.zero">,
3854    ClangBuiltin<"__nvvm_sust_b_1d_i16_zero">;
3855def int_nvvm_sust_b_1d_i32_zero
3856  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3857              "llvm.nvvm.sust.b.1d.i32.zero">,
3858    ClangBuiltin<"__nvvm_sust_b_1d_i32_zero">;
3859def int_nvvm_sust_b_1d_i64_zero
3860  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
3861              "llvm.nvvm.sust.b.1d.i64.zero">,
3862    ClangBuiltin<"__nvvm_sust_b_1d_i64_zero">;
3863def int_nvvm_sust_b_1d_v2i8_zero
3864  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3865              "llvm.nvvm.sust.b.1d.v2i8.zero">,
3866    ClangBuiltin<"__nvvm_sust_b_1d_v2i8_zero">;
3867def int_nvvm_sust_b_1d_v2i16_zero
3868  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3869              "llvm.nvvm.sust.b.1d.v2i16.zero">,
3870    ClangBuiltin<"__nvvm_sust_b_1d_v2i16_zero">;
3871def int_nvvm_sust_b_1d_v2i32_zero
3872  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3873              "llvm.nvvm.sust.b.1d.v2i32.zero">,
3874    ClangBuiltin<"__nvvm_sust_b_1d_v2i32_zero">;
3875def int_nvvm_sust_b_1d_v2i64_zero
3876  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
3877              "llvm.nvvm.sust.b.1d.v2i64.zero">,
3878    ClangBuiltin<"__nvvm_sust_b_1d_v2i64_zero">;
3879def int_nvvm_sust_b_1d_v4i8_zero
3880  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3881                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3882              "llvm.nvvm.sust.b.1d.v4i8.zero">,
3883    ClangBuiltin<"__nvvm_sust_b_1d_v4i8_zero">;
3884def int_nvvm_sust_b_1d_v4i16_zero
3885  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3886                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3887              "llvm.nvvm.sust.b.1d.v4i16.zero">,
3888    ClangBuiltin<"__nvvm_sust_b_1d_v4i16_zero">;
3889def int_nvvm_sust_b_1d_v4i32_zero
3890  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3891                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3892              "llvm.nvvm.sust.b.1d.v4i32.zero">,
3893    ClangBuiltin<"__nvvm_sust_b_1d_v4i32_zero">;
3894
3895
3896def int_nvvm_sust_b_1d_array_i8_zero
3897  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3898              "llvm.nvvm.sust.b.1d.array.i8.zero">,
3899    ClangBuiltin<"__nvvm_sust_b_1d_array_i8_zero">;
3900def int_nvvm_sust_b_1d_array_i16_zero
3901  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3902              "llvm.nvvm.sust.b.1d.array.i16.zero">,
3903    ClangBuiltin<"__nvvm_sust_b_1d_array_i16_zero">;
3904def int_nvvm_sust_b_1d_array_i32_zero
3905  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3906              "llvm.nvvm.sust.b.1d.array.i32.zero">,
3907    ClangBuiltin<"__nvvm_sust_b_1d_array_i32_zero">;
3908def int_nvvm_sust_b_1d_array_i64_zero
3909  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3910              "llvm.nvvm.sust.b.1d.array.i64.zero">,
3911    ClangBuiltin<"__nvvm_sust_b_1d_array_i64_zero">;
3912def int_nvvm_sust_b_1d_array_v2i8_zero
3913  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3914                   llvm_i16_ty, llvm_i16_ty], [],
3915              "llvm.nvvm.sust.b.1d.array.v2i8.zero">,
3916    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i8_zero">;
3917def int_nvvm_sust_b_1d_array_v2i16_zero
3918  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3919                   llvm_i16_ty, llvm_i16_ty], [],
3920              "llvm.nvvm.sust.b.1d.array.v2i16.zero">,
3921    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i16_zero">;
3922def int_nvvm_sust_b_1d_array_v2i32_zero
3923  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3924                   llvm_i32_ty, llvm_i32_ty], [],
3925              "llvm.nvvm.sust.b.1d.array.v2i32.zero">,
3926    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i32_zero">;
3927def int_nvvm_sust_b_1d_array_v2i64_zero
3928  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3929                   llvm_i64_ty, llvm_i64_ty], [],
3930              "llvm.nvvm.sust.b.1d.array.v2i64.zero">,
3931    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i64_zero">;
3932def int_nvvm_sust_b_1d_array_v4i8_zero
3933  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3934                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3935              "llvm.nvvm.sust.b.1d.array.v4i8.zero">,
3936    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i8_zero">;
3937def int_nvvm_sust_b_1d_array_v4i16_zero
3938  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3939                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3940              "llvm.nvvm.sust.b.1d.array.v4i16.zero">,
3941    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i16_zero">;
3942def int_nvvm_sust_b_1d_array_v4i32_zero
3943  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3944                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3945              "llvm.nvvm.sust.b.1d.array.v4i32.zero">,
3946    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i32_zero">;
3947
3948
3949def int_nvvm_sust_b_2d_i8_zero
3950  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3951              "llvm.nvvm.sust.b.2d.i8.zero">,
3952    ClangBuiltin<"__nvvm_sust_b_2d_i8_zero">;
3953def int_nvvm_sust_b_2d_i16_zero
3954  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3955              "llvm.nvvm.sust.b.2d.i16.zero">,
3956    ClangBuiltin<"__nvvm_sust_b_2d_i16_zero">;
3957def int_nvvm_sust_b_2d_i32_zero
3958  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3959              "llvm.nvvm.sust.b.2d.i32.zero">,
3960    ClangBuiltin<"__nvvm_sust_b_2d_i32_zero">;
3961def int_nvvm_sust_b_2d_i64_zero
3962  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3963              "llvm.nvvm.sust.b.2d.i64.zero">,
3964    ClangBuiltin<"__nvvm_sust_b_2d_i64_zero">;
3965def int_nvvm_sust_b_2d_v2i8_zero
3966  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3967                   llvm_i16_ty, llvm_i16_ty], [],
3968              "llvm.nvvm.sust.b.2d.v2i8.zero">,
3969    ClangBuiltin<"__nvvm_sust_b_2d_v2i8_zero">;
3970def int_nvvm_sust_b_2d_v2i16_zero
3971  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3972                   llvm_i16_ty, llvm_i16_ty], [],
3973              "llvm.nvvm.sust.b.2d.v2i16.zero">,
3974    ClangBuiltin<"__nvvm_sust_b_2d_v2i16_zero">;
3975def int_nvvm_sust_b_2d_v2i32_zero
3976  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3977                   llvm_i32_ty, llvm_i32_ty], [],
3978              "llvm.nvvm.sust.b.2d.v2i32.zero">,
3979    ClangBuiltin<"__nvvm_sust_b_2d_v2i32_zero">;
3980def int_nvvm_sust_b_2d_v2i64_zero
3981  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3982                   llvm_i64_ty, llvm_i64_ty], [],
3983              "llvm.nvvm.sust.b.2d.v2i64.zero">,
3984    ClangBuiltin<"__nvvm_sust_b_2d_v2i64_zero">;
3985def int_nvvm_sust_b_2d_v4i8_zero
3986  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3987                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3988              "llvm.nvvm.sust.b.2d.v4i8.zero">,
3989    ClangBuiltin<"__nvvm_sust_b_2d_v4i8_zero">;
3990def int_nvvm_sust_b_2d_v4i16_zero
3991  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3992                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3993              "llvm.nvvm.sust.b.2d.v4i16.zero">,
3994    ClangBuiltin<"__nvvm_sust_b_2d_v4i16_zero">;
3995def int_nvvm_sust_b_2d_v4i32_zero
3996  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3997                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3998              "llvm.nvvm.sust.b.2d.v4i32.zero">,
3999    ClangBuiltin<"__nvvm_sust_b_2d_v4i32_zero">;
4000
4001
4002def int_nvvm_sust_b_2d_array_i8_zero
4003  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4004                   llvm_i32_ty, llvm_i16_ty], [],
4005              "llvm.nvvm.sust.b.2d.array.i8.zero">,
4006    ClangBuiltin<"__nvvm_sust_b_2d_array_i8_zero">;
4007def int_nvvm_sust_b_2d_array_i16_zero
4008  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4009                   llvm_i32_ty, llvm_i16_ty], [],
4010              "llvm.nvvm.sust.b.2d.array.i16.zero">,
4011    ClangBuiltin<"__nvvm_sust_b_2d_array_i16_zero">;
4012def int_nvvm_sust_b_2d_array_i32_zero
4013  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4014                   llvm_i32_ty, llvm_i32_ty], [],
4015              "llvm.nvvm.sust.b.2d.array.i32.zero">,
4016    ClangBuiltin<"__nvvm_sust_b_2d_array_i32_zero">;
4017def int_nvvm_sust_b_2d_array_i64_zero
4018  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4019                   llvm_i32_ty, llvm_i64_ty], [],
4020              "llvm.nvvm.sust.b.2d.array.i64.zero">,
4021    ClangBuiltin<"__nvvm_sust_b_2d_array_i64_zero">;
4022def int_nvvm_sust_b_2d_array_v2i8_zero
4023  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4024                   llvm_i16_ty, llvm_i16_ty], [],
4025              "llvm.nvvm.sust.b.2d.array.v2i8.zero">,
4026    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i8_zero">;
4027def int_nvvm_sust_b_2d_array_v2i16_zero
4028  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4029                   llvm_i16_ty, llvm_i16_ty], [],
4030              "llvm.nvvm.sust.b.2d.array.v2i16.zero">,
4031    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i16_zero">;
4032def int_nvvm_sust_b_2d_array_v2i32_zero
4033  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4034                   llvm_i32_ty, llvm_i32_ty], [],
4035              "llvm.nvvm.sust.b.2d.array.v2i32.zero">,
4036    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i32_zero">;
4037def int_nvvm_sust_b_2d_array_v2i64_zero
4038  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4039                   llvm_i64_ty, llvm_i64_ty], [],
4040              "llvm.nvvm.sust.b.2d.array.v2i64.zero">,
4041    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i64_zero">;
4042def int_nvvm_sust_b_2d_array_v4i8_zero
4043  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4044                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4045              "llvm.nvvm.sust.b.2d.array.v4i8.zero">,
4046    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i8_zero">;
4047def int_nvvm_sust_b_2d_array_v4i16_zero
4048  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4049                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4050              "llvm.nvvm.sust.b.2d.array.v4i16.zero">,
4051    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i16_zero">;
4052def int_nvvm_sust_b_2d_array_v4i32_zero
4053  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4054                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4055              "llvm.nvvm.sust.b.2d.array.v4i32.zero">,
4056    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i32_zero">;
4057
4058
4059def int_nvvm_sust_b_3d_i8_zero
4060  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4061                   llvm_i32_ty, llvm_i16_ty], [],
4062              "llvm.nvvm.sust.b.3d.i8.zero">,
4063    ClangBuiltin<"__nvvm_sust_b_3d_i8_zero">;
4064def int_nvvm_sust_b_3d_i16_zero
4065  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4066                   llvm_i32_ty, llvm_i16_ty], [],
4067              "llvm.nvvm.sust.b.3d.i16.zero">,
4068    ClangBuiltin<"__nvvm_sust_b_3d_i16_zero">;
4069def int_nvvm_sust_b_3d_i32_zero
4070  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4071                   llvm_i32_ty, llvm_i32_ty], [],
4072              "llvm.nvvm.sust.b.3d.i32.zero">,
4073    ClangBuiltin<"__nvvm_sust_b_3d_i32_zero">;
4074def int_nvvm_sust_b_3d_i64_zero
4075  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4076                   llvm_i32_ty, llvm_i64_ty], [],
4077              "llvm.nvvm.sust.b.3d.i64.zero">,
4078    ClangBuiltin<"__nvvm_sust_b_3d_i64_zero">;
4079def int_nvvm_sust_b_3d_v2i8_zero
4080  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4081                   llvm_i16_ty, llvm_i16_ty], [],
4082              "llvm.nvvm.sust.b.3d.v2i8.zero">,
4083    ClangBuiltin<"__nvvm_sust_b_3d_v2i8_zero">;
4084def int_nvvm_sust_b_3d_v2i16_zero
4085  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4086                   llvm_i16_ty, llvm_i16_ty], [],
4087              "llvm.nvvm.sust.b.3d.v2i16.zero">,
4088    ClangBuiltin<"__nvvm_sust_b_3d_v2i16_zero">;
4089def int_nvvm_sust_b_3d_v2i32_zero
4090  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4091                   llvm_i32_ty, llvm_i32_ty], [],
4092              "llvm.nvvm.sust.b.3d.v2i32.zero">,
4093    ClangBuiltin<"__nvvm_sust_b_3d_v2i32_zero">;
4094def int_nvvm_sust_b_3d_v2i64_zero
4095  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4096                   llvm_i64_ty, llvm_i64_ty], [],
4097              "llvm.nvvm.sust.b.3d.v2i64.zero">,
4098    ClangBuiltin<"__nvvm_sust_b_3d_v2i64_zero">;
4099def int_nvvm_sust_b_3d_v4i8_zero
4100  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4101                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4102              "llvm.nvvm.sust.b.3d.v4i8.zero">,
4103    ClangBuiltin<"__nvvm_sust_b_3d_v4i8_zero">;
4104def int_nvvm_sust_b_3d_v4i16_zero
4105  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4106                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4107              "llvm.nvvm.sust.b.3d.v4i16.zero">,
4108    ClangBuiltin<"__nvvm_sust_b_3d_v4i16_zero">;
4109def int_nvvm_sust_b_3d_v4i32_zero
4110  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4111                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4112              "llvm.nvvm.sust.b.3d.v4i32.zero">,
4113    ClangBuiltin<"__nvvm_sust_b_3d_v4i32_zero">;
4114
4115
4116
4117// Formatted
4118
4119def int_nvvm_sust_p_1d_i8_trap
4120  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
4121              "llvm.nvvm.sust.p.1d.i8.trap">,
4122    ClangBuiltin<"__nvvm_sust_p_1d_i8_trap">;
4123def int_nvvm_sust_p_1d_i16_trap
4124  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
4125              "llvm.nvvm.sust.p.1d.i16.trap">,
4126    ClangBuiltin<"__nvvm_sust_p_1d_i16_trap">;
4127def int_nvvm_sust_p_1d_i32_trap
4128  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
4129              "llvm.nvvm.sust.p.1d.i32.trap">,
4130    ClangBuiltin<"__nvvm_sust_p_1d_i32_trap">;
4131def int_nvvm_sust_p_1d_v2i8_trap
4132  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
4133              "llvm.nvvm.sust.p.1d.v2i8.trap">,
4134    ClangBuiltin<"__nvvm_sust_p_1d_v2i8_trap">;
4135def int_nvvm_sust_p_1d_v2i16_trap
4136  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
4137              "llvm.nvvm.sust.p.1d.v2i16.trap">,
4138    ClangBuiltin<"__nvvm_sust_p_1d_v2i16_trap">;
4139def int_nvvm_sust_p_1d_v2i32_trap
4140  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4141              "llvm.nvvm.sust.p.1d.v2i32.trap">,
4142    ClangBuiltin<"__nvvm_sust_p_1d_v2i32_trap">;
4143def int_nvvm_sust_p_1d_v4i8_trap
4144  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
4145                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4146              "llvm.nvvm.sust.p.1d.v4i8.trap">,
4147    ClangBuiltin<"__nvvm_sust_p_1d_v4i8_trap">;
4148def int_nvvm_sust_p_1d_v4i16_trap
4149  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
4150                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4151              "llvm.nvvm.sust.p.1d.v4i16.trap">,
4152    ClangBuiltin<"__nvvm_sust_p_1d_v4i16_trap">;
4153def int_nvvm_sust_p_1d_v4i32_trap
4154  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4155                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4156              "llvm.nvvm.sust.p.1d.v4i32.trap">,
4157    ClangBuiltin<"__nvvm_sust_p_1d_v4i32_trap">;
4158
4159
4160def int_nvvm_sust_p_1d_array_i8_trap
4161  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4162              "llvm.nvvm.sust.p.1d.array.i8.trap">,
4163    ClangBuiltin<"__nvvm_sust_p_1d_array_i8_trap">;
4164def int_nvvm_sust_p_1d_array_i16_trap
4165  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4166              "llvm.nvvm.sust.p.1d.array.i16.trap">,
4167    ClangBuiltin<"__nvvm_sust_p_1d_array_i16_trap">;
4168def int_nvvm_sust_p_1d_array_i32_trap
4169  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4170              "llvm.nvvm.sust.p.1d.array.i32.trap">,
4171    ClangBuiltin<"__nvvm_sust_p_1d_array_i32_trap">;
4172def int_nvvm_sust_p_1d_array_v2i8_trap
4173  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4174                   llvm_i16_ty, llvm_i16_ty], [],
4175              "llvm.nvvm.sust.p.1d.array.v2i8.trap">,
4176    ClangBuiltin<"__nvvm_sust_p_1d_array_v2i8_trap">;
4177def int_nvvm_sust_p_1d_array_v2i16_trap
4178  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4179                   llvm_i16_ty, llvm_i16_ty], [],
4180              "llvm.nvvm.sust.p.1d.array.v2i16.trap">,
4181    ClangBuiltin<"__nvvm_sust_p_1d_array_v2i16_trap">;
4182def int_nvvm_sust_p_1d_array_v2i32_trap
4183  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4184                   llvm_i32_ty, llvm_i32_ty], [],
4185              "llvm.nvvm.sust.p.1d.array.v2i32.trap">,
4186    ClangBuiltin<"__nvvm_sust_p_1d_array_v2i32_trap">;
4187def int_nvvm_sust_p_1d_array_v4i8_trap
4188  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4189                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4190              "llvm.nvvm.sust.p.1d.array.v4i8.trap">,
4191    ClangBuiltin<"__nvvm_sust_p_1d_array_v4i8_trap">;
4192def int_nvvm_sust_p_1d_array_v4i16_trap
4193  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4194                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4195              "llvm.nvvm.sust.p.1d.array.v4i16.trap">,
4196    ClangBuiltin<"__nvvm_sust_p_1d_array_v4i16_trap">;
4197def int_nvvm_sust_p_1d_array_v4i32_trap
4198  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4199                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4200              "llvm.nvvm.sust.p.1d.array.v4i32.trap">,
4201    ClangBuiltin<"__nvvm_sust_p_1d_array_v4i32_trap">;
4202
4203
4204def int_nvvm_sust_p_2d_i8_trap
4205  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4206              "llvm.nvvm.sust.p.2d.i8.trap">,
4207    ClangBuiltin<"__nvvm_sust_p_2d_i8_trap">;
4208def int_nvvm_sust_p_2d_i16_trap
4209  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4210              "llvm.nvvm.sust.p.2d.i16.trap">,
4211    ClangBuiltin<"__nvvm_sust_p_2d_i16_trap">;
4212def int_nvvm_sust_p_2d_i32_trap
4213  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4214              "llvm.nvvm.sust.p.2d.i32.trap">,
4215    ClangBuiltin<"__nvvm_sust_p_2d_i32_trap">;
4216def int_nvvm_sust_p_2d_v2i8_trap
4217  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4218                   llvm_i16_ty, llvm_i16_ty], [],
4219              "llvm.nvvm.sust.p.2d.v2i8.trap">,
4220    ClangBuiltin<"__nvvm_sust_p_2d_v2i8_trap">;
4221def int_nvvm_sust_p_2d_v2i16_trap
4222  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4223                   llvm_i16_ty, llvm_i16_ty], [],
4224              "llvm.nvvm.sust.p.2d.v2i16.trap">,
4225    ClangBuiltin<"__nvvm_sust_p_2d_v2i16_trap">;
4226def int_nvvm_sust_p_2d_v2i32_trap
4227  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4228                   llvm_i32_ty, llvm_i32_ty], [],
4229              "llvm.nvvm.sust.p.2d.v2i32.trap">,
4230    ClangBuiltin<"__nvvm_sust_p_2d_v2i32_trap">;
4231def int_nvvm_sust_p_2d_v4i8_trap
4232  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4233                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4234              "llvm.nvvm.sust.p.2d.v4i8.trap">,
4235    ClangBuiltin<"__nvvm_sust_p_2d_v4i8_trap">;
4236def int_nvvm_sust_p_2d_v4i16_trap
4237  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4238                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4239              "llvm.nvvm.sust.p.2d.v4i16.trap">,
4240    ClangBuiltin<"__nvvm_sust_p_2d_v4i16_trap">;
4241def int_nvvm_sust_p_2d_v4i32_trap
4242  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4243                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4244              "llvm.nvvm.sust.p.2d.v4i32.trap">,
4245    ClangBuiltin<"__nvvm_sust_p_2d_v4i32_trap">;
4246
4247
4248def int_nvvm_sust_p_2d_array_i8_trap
4249  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4250                   llvm_i32_ty, llvm_i16_ty], [],
4251              "llvm.nvvm.sust.p.2d.array.i8.trap">,
4252    ClangBuiltin<"__nvvm_sust_p_2d_array_i8_trap">;
4253def int_nvvm_sust_p_2d_array_i16_trap
4254  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4255                   llvm_i32_ty, llvm_i16_ty], [],
4256              "llvm.nvvm.sust.p.2d.array.i16.trap">,
4257    ClangBuiltin<"__nvvm_sust_p_2d_array_i16_trap">;
4258def int_nvvm_sust_p_2d_array_i32_trap
4259  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4260                   llvm_i32_ty, llvm_i32_ty], [],
4261              "llvm.nvvm.sust.p.2d.array.i32.trap">,
4262    ClangBuiltin<"__nvvm_sust_p_2d_array_i32_trap">;
4263def int_nvvm_sust_p_2d_array_v2i8_trap
4264  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4265                   llvm_i16_ty, llvm_i16_ty], [],
4266              "llvm.nvvm.sust.p.2d.array.v2i8.trap">,
4267    ClangBuiltin<"__nvvm_sust_p_2d_array_v2i8_trap">;
4268def int_nvvm_sust_p_2d_array_v2i16_trap
4269  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4270                   llvm_i16_ty, llvm_i16_ty], [],
4271              "llvm.nvvm.sust.p.2d.array.v2i16.trap">,
4272    ClangBuiltin<"__nvvm_sust_p_2d_array_v2i16_trap">;
4273def int_nvvm_sust_p_2d_array_v2i32_trap
4274  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4275                   llvm_i32_ty, llvm_i32_ty], [],
4276              "llvm.nvvm.sust.p.2d.array.v2i32.trap">,
4277    ClangBuiltin<"__nvvm_sust_p_2d_array_v2i32_trap">;
4278def int_nvvm_sust_p_2d_array_v4i8_trap
4279  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4280                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4281              "llvm.nvvm.sust.p.2d.array.v4i8.trap">,
4282    ClangBuiltin<"__nvvm_sust_p_2d_array_v4i8_trap">;
4283def int_nvvm_sust_p_2d_array_v4i16_trap
4284  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4285                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4286              "llvm.nvvm.sust.p.2d.array.v4i16.trap">,
4287    ClangBuiltin<"__nvvm_sust_p_2d_array_v4i16_trap">;
4288def int_nvvm_sust_p_2d_array_v4i32_trap
4289  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4290                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4291              "llvm.nvvm.sust.p.2d.array.v4i32.trap">,
4292    ClangBuiltin<"__nvvm_sust_p_2d_array_v4i32_trap">;
4293
4294
4295def int_nvvm_sust_p_3d_i8_trap
4296  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4297                   llvm_i32_ty, llvm_i16_ty], [],
4298              "llvm.nvvm.sust.p.3d.i8.trap">,
4299    ClangBuiltin<"__nvvm_sust_p_3d_i8_trap">;
4300def int_nvvm_sust_p_3d_i16_trap
4301  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4302                   llvm_i32_ty, llvm_i16_ty], [],
4303              "llvm.nvvm.sust.p.3d.i16.trap">,
4304    ClangBuiltin<"__nvvm_sust_p_3d_i16_trap">;
4305def int_nvvm_sust_p_3d_i32_trap
4306  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4307                   llvm_i32_ty, llvm_i32_ty], [],
4308              "llvm.nvvm.sust.p.3d.i32.trap">,
4309    ClangBuiltin<"__nvvm_sust_p_3d_i32_trap">;
4310def int_nvvm_sust_p_3d_v2i8_trap
4311  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4312                   llvm_i16_ty, llvm_i16_ty], [],
4313              "llvm.nvvm.sust.p.3d.v2i8.trap">,
4314    ClangBuiltin<"__nvvm_sust_p_3d_v2i8_trap">;
4315def int_nvvm_sust_p_3d_v2i16_trap
4316  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4317                   llvm_i16_ty, llvm_i16_ty], [],
4318              "llvm.nvvm.sust.p.3d.v2i16.trap">,
4319    ClangBuiltin<"__nvvm_sust_p_3d_v2i16_trap">;
4320def int_nvvm_sust_p_3d_v2i32_trap
4321  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4322                   llvm_i32_ty, llvm_i32_ty], [],
4323              "llvm.nvvm.sust.p.3d.v2i32.trap">,
4324    ClangBuiltin<"__nvvm_sust_p_3d_v2i32_trap">;
4325def int_nvvm_sust_p_3d_v4i8_trap
4326  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4327                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4328              "llvm.nvvm.sust.p.3d.v4i8.trap">,
4329    ClangBuiltin<"__nvvm_sust_p_3d_v4i8_trap">;
4330def int_nvvm_sust_p_3d_v4i16_trap
4331  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4332                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4333              "llvm.nvvm.sust.p.3d.v4i16.trap">,
4334    ClangBuiltin<"__nvvm_sust_p_3d_v4i16_trap">;
4335def int_nvvm_sust_p_3d_v4i32_trap
4336  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4337                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4338              "llvm.nvvm.sust.p.3d.v4i32.trap">,
4339    ClangBuiltin<"__nvvm_sust_p_3d_v4i32_trap">;
4340
4341
4342def int_nvvm_rotate_b32
4343  : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4344              [IntrNoMem, IntrSpeculatable], "llvm.nvvm.rotate.b32">,
4345              ClangBuiltin<"__nvvm_rotate_b32">;
4346
4347def int_nvvm_rotate_b64
4348  : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
4349             [IntrNoMem, IntrSpeculatable], "llvm.nvvm.rotate.b64">,
4350             ClangBuiltin<"__nvvm_rotate_b64">;
4351
4352def int_nvvm_rotate_right_b64
4353  : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
4354              [IntrNoMem, IntrSpeculatable], "llvm.nvvm.rotate.right.b64">,
4355              ClangBuiltin<"__nvvm_rotate_right_b64">;
4356
4357def int_nvvm_swap_lo_hi_b64
4358  : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty],
4359              [IntrNoMem, IntrSpeculatable], "llvm.nvvm.swap.lo.hi.b64">,
4360              ClangBuiltin<"__nvvm_swap_lo_hi_b64">;
4361
4362
4363// Accessing special registers.
4364
4365class PTXReadSRegIntrinsicNB_r32
4366  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>]>;
4367class PTXReadSRegIntrinsic_r32<string name>
4368  : PTXReadSRegIntrinsicNB_r32, ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
4369
4370multiclass PTXReadSRegIntrinsic_v4i32<string regname> {
4371// FIXME: Do we need the 128-bit integer type version?
4372//    def _r64   : Intrinsic<[llvm_i128_ty],   [], [IntrNoMem, IntrSpeculatable]>;
4373
4374// FIXME: Enable this once v4i32 support is enabled in back-end.
4375//    def _v4i16 : Intrinsic<[llvm_v4i32_ty], [], [IntrNoMem, IntrSpeculatable]>;
4376  foreach suffix = ["_x", "_y", "_z", "_w"] in
4377    def suffix : PTXReadSRegIntrinsic_r32<regname # suffix>;
4378}
4379
4380// Same, but without automatic clang builtins. It will be used for
4381// registers that require particular GPU or PTX version.
4382multiclass PTXReadSRegIntrinsicNB_v4i32 {
4383  foreach suffix = ["_x", "_y", "_z", "_w"] in
4384    def suffix : PTXReadSRegIntrinsicNB_r32;
4385}
4386
4387class PTXReadSRegIntrinsic_r64<string name>
4388  : DefaultAttrsIntrinsic<[llvm_i64_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>]>,
4389    ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
4390
4391// Intrinsics to read registers with non-constant values. E.g. the values that
4392// do change over the kernel lifetime. Such reads should not be CSE'd.
4393class PTXReadNCSRegIntrinsic_r32<string name>
4394  : Intrinsic<[llvm_i32_ty], [], [IntrInaccessibleMemOnly, IntrNoCallback, NoUndef<RetIndex>]>,
4395    ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
4396class PTXReadNCSRegIntrinsic_r64<string name>
4397  : Intrinsic<[llvm_i64_ty], [], [IntrInaccessibleMemOnly, IntrNoCallback, NoUndef<RetIndex>]>,
4398    ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
4399
4400defm int_nvvm_read_ptx_sreg_tid : PTXReadSRegIntrinsic_v4i32<"tid">;
4401defm int_nvvm_read_ptx_sreg_ntid : PTXReadSRegIntrinsic_v4i32<"ntid">;
4402
4403def int_nvvm_read_ptx_sreg_laneid : PTXReadSRegIntrinsic_r32<"laneid">;
4404def int_nvvm_read_ptx_sreg_warpid : PTXReadSRegIntrinsic_r32<"warpid">;
4405def int_nvvm_read_ptx_sreg_nwarpid : PTXReadSRegIntrinsic_r32<"nwarpid">;
4406
4407defm int_nvvm_read_ptx_sreg_ctaid : PTXReadSRegIntrinsic_v4i32<"ctaid">;
4408defm int_nvvm_read_ptx_sreg_nctaid : PTXReadSRegIntrinsic_v4i32<"nctaid">;
4409
4410def int_nvvm_read_ptx_sreg_smid : PTXReadSRegIntrinsic_r32<"smid">;
4411def int_nvvm_read_ptx_sreg_nsmid : PTXReadSRegIntrinsic_r32<"nsmid">;
4412def int_nvvm_read_ptx_sreg_gridid : PTXReadSRegIntrinsic_r32<"gridid">;
4413
4414def int_nvvm_read_ptx_sreg_lanemask_eq :
4415    PTXReadSRegIntrinsic_r32<"lanemask_eq">;
4416def int_nvvm_read_ptx_sreg_lanemask_le :
4417    PTXReadSRegIntrinsic_r32<"lanemask_le">;
4418def int_nvvm_read_ptx_sreg_lanemask_lt :
4419    PTXReadSRegIntrinsic_r32<"lanemask_lt">;
4420def int_nvvm_read_ptx_sreg_lanemask_ge :
4421    PTXReadSRegIntrinsic_r32<"lanemask_ge">;
4422def int_nvvm_read_ptx_sreg_lanemask_gt :
4423    PTXReadSRegIntrinsic_r32<"lanemask_gt">;
4424
4425def int_nvvm_read_ptx_sreg_clock : PTXReadNCSRegIntrinsic_r32<"clock">;
4426def int_nvvm_read_ptx_sreg_clock64 : PTXReadNCSRegIntrinsic_r64<"clock64">;
4427
4428def int_nvvm_read_ptx_sreg_pm0 : PTXReadNCSRegIntrinsic_r32<"pm0">;
4429def int_nvvm_read_ptx_sreg_pm1 : PTXReadNCSRegIntrinsic_r32<"pm1">;
4430def int_nvvm_read_ptx_sreg_pm2 : PTXReadNCSRegIntrinsic_r32<"pm2">;
4431def int_nvvm_read_ptx_sreg_pm3 : PTXReadNCSRegIntrinsic_r32<"pm3">;
4432
4433def int_nvvm_read_ptx_sreg_warpsize : PTXReadSRegIntrinsic_r32<"warpsize">;
4434
4435// sm90+, PTX7.8+
4436defm int_nvvm_read_ptx_sreg_clusterid : PTXReadSRegIntrinsicNB_v4i32;
4437defm int_nvvm_read_ptx_sreg_nclusterid : PTXReadSRegIntrinsicNB_v4i32;
4438defm int_nvvm_read_ptx_sreg_cluster_ctaid : PTXReadSRegIntrinsicNB_v4i32;
4439defm int_nvvm_read_ptx_sreg_cluster_nctaid : PTXReadSRegIntrinsicNB_v4i32;
4440
4441def int_nvvm_read_ptx_sreg_cluster_ctarank : PTXReadSRegIntrinsicNB_r32;
4442def int_nvvm_read_ptx_sreg_cluster_nctarank : PTXReadSRegIntrinsicNB_r32;
4443
4444//
4445// SHUFFLE
4446//
4447// Generate intrinsics for all variants of shfl instruction.
4448foreach sync = [false, true] in {
4449  foreach mode = ["up", "down", "bfly", "idx"] in {
4450    foreach type = ["i32", "f32"] in {
4451      foreach return_pred = [false, true] in {
4452        foreach i = [SHFL_INFO<sync, mode, type, return_pred>] in {
4453          if i.withGccBuiltin then {
4454            def i.Name : ClangBuiltin<i.Builtin>,
4455                         Intrinsic<i.RetTy, i.ArgsTy,
4456                                   [IntrInaccessibleMemOnly, IntrConvergent,
4457                                   IntrNoCallback],
4458                                   i.IntrName>;
4459          }
4460          if i.withoutGccBuiltin then {
4461            def i.Name : Intrinsic<i.RetTy, i.ArgsTy,
4462                         [IntrInaccessibleMemOnly, IntrConvergent,
4463                         IntrNoCallback], i.IntrName>;
4464          }
4465        }
4466      }
4467    }
4468  }
4469}
4470
4471//
4472// VOTE
4473//
4474
4475// vote.all pred
4476def int_nvvm_vote_all :
4477  Intrinsic<[llvm_i1_ty], [llvm_i1_ty],
4478            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.all">,
4479  ClangBuiltin<"__nvvm_vote_all">;
4480// vote.any pred
4481def int_nvvm_vote_any :
4482  Intrinsic<[llvm_i1_ty], [llvm_i1_ty],
4483            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.any">,
4484  ClangBuiltin<"__nvvm_vote_any">;
4485// vote.uni pred
4486def int_nvvm_vote_uni :
4487  Intrinsic<[llvm_i1_ty], [llvm_i1_ty],
4488            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.uni">,
4489  ClangBuiltin<"__nvvm_vote_uni">;
4490// vote.ballot pred
4491def int_nvvm_vote_ballot :
4492  Intrinsic<[llvm_i32_ty], [llvm_i1_ty],
4493            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.ballot">,
4494  ClangBuiltin<"__nvvm_vote_ballot">;
4495
4496//
4497// VOTE.SYNC
4498//
4499
4500// vote.sync.all mask, pred
4501def int_nvvm_vote_all_sync :
4502  Intrinsic<[llvm_i1_ty], [llvm_i32_ty, llvm_i1_ty],
4503            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.all.sync">,
4504  ClangBuiltin<"__nvvm_vote_all_sync">;
4505// vote.sync.any mask, pred
4506def int_nvvm_vote_any_sync :
4507  Intrinsic<[llvm_i1_ty], [llvm_i32_ty, llvm_i1_ty],
4508            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.any.sync">,
4509  ClangBuiltin<"__nvvm_vote_any_sync">;
4510// vote.sync.uni mask, pred
4511def int_nvvm_vote_uni_sync :
4512  Intrinsic<[llvm_i1_ty], [llvm_i32_ty, llvm_i1_ty],
4513            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.uni.sync">,
4514  ClangBuiltin<"__nvvm_vote_uni_sync">;
4515// vote.sync.ballot mask, pred
4516def int_nvvm_vote_ballot_sync :
4517  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i1_ty],
4518            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.ballot.sync">,
4519  ClangBuiltin<"__nvvm_vote_ballot_sync">;
4520
4521//
4522// MATCH.SYNC
4523//
4524// match.any.sync.b32 mask, value
4525def int_nvvm_match_any_sync_i32 :
4526  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4527            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.any.sync.i32">,
4528  ClangBuiltin<"__nvvm_match_any_sync_i32">;
4529// match.any.sync.b64 mask, value
4530def int_nvvm_match_any_sync_i64 :
4531  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i64_ty],
4532            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.any.sync.i64">,
4533  ClangBuiltin<"__nvvm_match_any_sync_i64">;
4534
4535// match.all instruction have two variants -- one returns a single value, another
4536// returns a pair {value, predicate}. We currently only implement the latter as
4537// that's the variant exposed by CUDA API.
4538
4539// match.all.sync.b32p mask, value
4540def int_nvvm_match_all_sync_i32p :
4541  Intrinsic<[llvm_i32_ty, llvm_i1_ty], [llvm_i32_ty, llvm_i32_ty],
4542            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.all.sync.i32p">;
4543// match.all.sync.b64p mask, value
4544def int_nvvm_match_all_sync_i64p :
4545  Intrinsic<[llvm_i32_ty, llvm_i1_ty], [llvm_i32_ty, llvm_i64_ty],
4546            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.all.sync.i64p">;
4547
4548//
4549// REDUX.SYNC
4550//
4551// redux.sync.min.u32 dst, src, membermask;
4552def int_nvvm_redux_sync_umin : ClangBuiltin<"__nvvm_redux_sync_umin">,
4553  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4554            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4555
4556// redux.sync.max.u32 dst, src, membermask;
4557def int_nvvm_redux_sync_umax : ClangBuiltin<"__nvvm_redux_sync_umax">,
4558  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4559            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4560
4561// redux.sync.add.s32 dst, src, membermask;
4562def int_nvvm_redux_sync_add : ClangBuiltin<"__nvvm_redux_sync_add">,
4563  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4564            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4565
4566// redux.sync.min.s32 dst, src, membermask;
4567def int_nvvm_redux_sync_min : ClangBuiltin<"__nvvm_redux_sync_min">,
4568  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4569            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4570
4571// redux.sync.max.s32 dst, src, membermask;
4572def int_nvvm_redux_sync_max : ClangBuiltin<"__nvvm_redux_sync_max">,
4573  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4574            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4575
4576// redux.sync.and.b32 dst, src, membermask;
4577def int_nvvm_redux_sync_and : ClangBuiltin<"__nvvm_redux_sync_and">,
4578  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4579            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4580
4581// redux.sync.xor.b32 dst, src, membermask;
4582def int_nvvm_redux_sync_xor : ClangBuiltin<"__nvvm_redux_sync_xor">,
4583  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4584            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4585
4586// redux.sync.or.b32 dst, src, membermask;
4587def int_nvvm_redux_sync_or : ClangBuiltin<"__nvvm_redux_sync_or">,
4588  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4589            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4590
4591//
4592// WMMA instructions
4593//
4594// WMMA.LOAD
4595class NVVM_WMMA_LD<WMMA_REGS Frag, string Layout, int WithStride>
4596  : Intrinsic<Frag.regs,
4597              !if(WithStride, [llvm_anyptr_ty, llvm_i32_ty], [llvm_anyptr_ty]),
4598              [IntrReadMem, IntrArgMemOnly, IntrNoCallback, ReadOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>],
4599              WMMA_NAME_LDST<"load", Frag, Layout, WithStride>.intr>;
4600
4601// WMMA.STORE.D
4602class NVVM_WMMA_ST<WMMA_REGS Frag, string Layout, int WithStride>
4603  : Intrinsic<[],
4604              !listconcat(
4605                [llvm_anyptr_ty],
4606                Frag.regs,
4607                !if(WithStride, [llvm_i32_ty], [])),
4608              [IntrWriteMem, IntrArgMemOnly, IntrNoCallback, WriteOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>],
4609              WMMA_NAME_LDST<"store", Frag, Layout, WithStride>.intr>;
4610
4611// Create all load/store variants
4612foreach layout = ["row", "col"] in {
4613  foreach stride = [0, 1] in {
4614    foreach frag = NVVM_MMA_OPS.all_ld_ops in
4615      if NVVM_WMMA_LDST_SUPPORTED<frag, layout>.ret then
4616        def WMMA_NAME_LDST<"load", frag, layout, stride>.record
4617             : NVVM_WMMA_LD<frag, layout, stride>;
4618    foreach frag = NVVM_MMA_OPS.all_st_ops in
4619      if NVVM_WMMA_LDST_SUPPORTED<frag, layout>.ret then
4620        def WMMA_NAME_LDST<"store", frag, layout, stride>.record
4621             : NVVM_WMMA_ST<frag, layout, stride>;
4622  }
4623}
4624
4625// WMMA.MMA
4626class NVVM_WMMA_MMA<string ALayout, string BLayout, int Satfinite, string rnd, string b1op,
4627                    WMMA_REGS A, WMMA_REGS B,
4628                    WMMA_REGS C, WMMA_REGS D>
4629  : Intrinsic<D.regs,
4630              !listconcat(A.regs, B.regs, C.regs),
4631              [IntrNoMem, IntrNoCallback],
4632              WMMA_NAME<ALayout, BLayout, Satfinite, rnd, b1op, A, B, C, D>.llvm>;
4633
4634foreach layout_a = ["row", "col"] in {
4635  foreach layout_b = ["row", "col"] in {
4636    foreach satf = [0, 1] in {
4637      foreach rnd = ["", "rn", "rz", "rm", "rp"] in {
4638        foreach op = NVVM_MMA_OPS.all_wmma_ops in {
4639          foreach b1op = NVVM_MMA_B1OPS<op>.ret in {
4640            if NVVM_WMMA_SUPPORTED<op, layout_a, layout_b, satf, rnd>.ret then {
4641              def WMMA_NAME<layout_a, layout_b, satf, rnd, b1op,
4642                                op[0], op[1], op[2], op[3]>.record
4643                : NVVM_WMMA_MMA<layout_a, layout_b, satf, rnd, b1op,
4644                                op[0], op[1], op[2], op[3]>;
4645            }
4646          } // b1op
4647        } // op
4648      } // rnd
4649    } // satf
4650  } // layout_b
4651} // layout_a
4652
4653// MMA
4654class NVVM_MMA<string ALayout, string BLayout, int Satfinite, string b1op,
4655               WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D>
4656  : Intrinsic<D.regs,
4657              !listconcat(A.regs, B.regs, C.regs),
4658              [IntrNoMem, IntrNoCallback],
4659              MMA_NAME<ALayout, BLayout, Satfinite, b1op, A, B, C, D>.llvm>;
4660
4661foreach layout_a = ["row", "col"] in {
4662  foreach layout_b = ["row", "col"] in {
4663    foreach satf = [0, 1] in {
4664      foreach op = NVVM_MMA_OPS.all_mma_ops in {
4665        foreach b1op = NVVM_MMA_B1OPS<op>.ret in {
4666          if NVVM_MMA_SUPPORTED<op, layout_a, layout_b, satf>.ret then {
4667            def MMA_NAME<layout_a, layout_b, satf, b1op, op[0], op[1], op[2], op[3]>.record
4668              : NVVM_MMA<layout_a, layout_b, satf, b1op, op[0], op[1], op[2], op[3]>;
4669          }
4670        } // b1op
4671      } // op
4672    } // satf
4673  } // layout_b
4674} // layout_a
4675
4676// LDMATRIX
4677class NVVM_LDMATRIX<WMMA_REGS Frag, int Transposed>
4678  : Intrinsic<Frag.regs, [llvm_anyptr_ty],
4679              [IntrReadMem, IntrArgMemOnly, IntrNoCallback, ReadOnly<ArgIndex<0>>,
4680               NoCapture<ArgIndex<0>>],
4681              LDMATRIX_NAME<Frag, Transposed>.intr>;
4682
4683foreach transposed = [0, 1] in {
4684  foreach frag = NVVM_MMA_OPS.all_ldmatrix_ops in {
4685    if NVVM_LDMATRIX_SUPPORTED<frag>.ret then {
4686      def LDMATRIX_NAME<frag, transposed>.record
4687        : NVVM_LDMATRIX<frag, transposed>;
4688    }
4689  }
4690}
4691
4692def int_nvvm_mapa
4693  : DefaultAttrsIntrinsic<[llvm_ptr_ty], [llvm_ptr_ty, llvm_i32_ty],
4694              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
4695              "llvm.nvvm.mapa">;
4696def int_nvvm_mapa_shared_cluster
4697  : DefaultAttrsIntrinsic<[llvm_shared_ptr_ty], [llvm_shared_ptr_ty, llvm_i32_ty],
4698              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
4699              "llvm.nvvm.mapa.shared.cluster">;
4700def int_nvvm_getctarank
4701  : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_ptr_ty],
4702              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
4703              "llvm.nvvm.getctarank">;
4704def int_nvvm_getctarank_shared_cluster
4705  : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_shared_ptr_ty],
4706              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
4707              "llvm.nvvm.getctarank.shared.cluster">;
4708def int_nvvm_is_explicit_cluster
4709  : DefaultAttrsIntrinsic<[llvm_i1_ty], [],
4710              [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
4711              "llvm.nvvm.is_explicit_cluster">;
4712
4713} // let TargetPrefix = "nvvm"
4714