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