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