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_ftz_d : ClangBuiltin<"__nvvm_rsqrt_approx_ftz_d">,
1007      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
1008  def int_nvvm_rsqrt_approx_f : ClangBuiltin<"__nvvm_rsqrt_approx_f">,
1009      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
1010  def int_nvvm_rsqrt_approx_d : ClangBuiltin<"__nvvm_rsqrt_approx_d">,
1011      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
1012
1013//
1014// Add
1015//
1016
1017  def int_nvvm_add_rn_ftz_f : ClangBuiltin<"__nvvm_add_rn_ftz_f">,
1018      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1019        [IntrNoMem, IntrSpeculatable, Commutative]>;
1020  def int_nvvm_add_rn_f : ClangBuiltin<"__nvvm_add_rn_f">,
1021      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1022        [IntrNoMem, IntrSpeculatable, Commutative]>;
1023  def int_nvvm_add_rz_ftz_f : ClangBuiltin<"__nvvm_add_rz_ftz_f">,
1024      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1025        [IntrNoMem, IntrSpeculatable, Commutative]>;
1026  def int_nvvm_add_rz_f : ClangBuiltin<"__nvvm_add_rz_f">,
1027      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1028        [IntrNoMem, IntrSpeculatable, Commutative]>;
1029  def int_nvvm_add_rm_ftz_f : ClangBuiltin<"__nvvm_add_rm_ftz_f">,
1030      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1031        [IntrNoMem, IntrSpeculatable, Commutative]>;
1032  def int_nvvm_add_rm_f : ClangBuiltin<"__nvvm_add_rm_f">,
1033      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1034        [IntrNoMem, IntrSpeculatable, Commutative]>;
1035  def int_nvvm_add_rp_ftz_f : ClangBuiltin<"__nvvm_add_rp_ftz_f">,
1036      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1037        [IntrNoMem, IntrSpeculatable, Commutative]>;
1038  def int_nvvm_add_rp_f : ClangBuiltin<"__nvvm_add_rp_f">,
1039      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
1040        [IntrNoMem, IntrSpeculatable, Commutative]>;
1041
1042  def int_nvvm_add_rn_d : ClangBuiltin<"__nvvm_add_rn_d">,
1043      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1044        [IntrNoMem, IntrSpeculatable, Commutative]>;
1045  def int_nvvm_add_rz_d : ClangBuiltin<"__nvvm_add_rz_d">,
1046      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1047        [IntrNoMem, IntrSpeculatable, Commutative]>;
1048  def int_nvvm_add_rm_d : ClangBuiltin<"__nvvm_add_rm_d">,
1049      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1050        [IntrNoMem, IntrSpeculatable, Commutative]>;
1051  def int_nvvm_add_rp_d : ClangBuiltin<"__nvvm_add_rp_d">,
1052      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
1053        [IntrNoMem, IntrSpeculatable, Commutative]>;
1054
1055//
1056// Convert
1057//
1058
1059  def int_nvvm_d2f_rn_ftz : ClangBuiltin<"__nvvm_d2f_rn_ftz">,
1060      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1061  def int_nvvm_d2f_rn : ClangBuiltin<"__nvvm_d2f_rn">,
1062      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1063  def int_nvvm_d2f_rz_ftz : ClangBuiltin<"__nvvm_d2f_rz_ftz">,
1064      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1065  def int_nvvm_d2f_rz : ClangBuiltin<"__nvvm_d2f_rz">,
1066      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1067  def int_nvvm_d2f_rm_ftz : ClangBuiltin<"__nvvm_d2f_rm_ftz">,
1068      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1069  def int_nvvm_d2f_rm : ClangBuiltin<"__nvvm_d2f_rm">,
1070      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1071  def int_nvvm_d2f_rp_ftz : ClangBuiltin<"__nvvm_d2f_rp_ftz">,
1072      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1073  def int_nvvm_d2f_rp : ClangBuiltin<"__nvvm_d2f_rp">,
1074      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1075
1076  def int_nvvm_d2i_rn : ClangBuiltin<"__nvvm_d2i_rn">,
1077      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1078  def int_nvvm_d2i_rz : ClangBuiltin<"__nvvm_d2i_rz">,
1079      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1080  def int_nvvm_d2i_rm : ClangBuiltin<"__nvvm_d2i_rm">,
1081      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1082  def int_nvvm_d2i_rp : ClangBuiltin<"__nvvm_d2i_rp">,
1083      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1084
1085  def int_nvvm_d2ui_rn : ClangBuiltin<"__nvvm_d2ui_rn">,
1086      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1087  def int_nvvm_d2ui_rz : ClangBuiltin<"__nvvm_d2ui_rz">,
1088      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1089  def int_nvvm_d2ui_rm : ClangBuiltin<"__nvvm_d2ui_rm">,
1090      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1091  def int_nvvm_d2ui_rp : ClangBuiltin<"__nvvm_d2ui_rp">,
1092      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1093
1094  def int_nvvm_i2d_rn : ClangBuiltin<"__nvvm_i2d_rn">,
1095      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1096  def int_nvvm_i2d_rz : ClangBuiltin<"__nvvm_i2d_rz">,
1097      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1098  def int_nvvm_i2d_rm : ClangBuiltin<"__nvvm_i2d_rm">,
1099      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1100  def int_nvvm_i2d_rp : ClangBuiltin<"__nvvm_i2d_rp">,
1101      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1102
1103  def int_nvvm_ui2d_rn : ClangBuiltin<"__nvvm_ui2d_rn">,
1104      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1105  def int_nvvm_ui2d_rz : ClangBuiltin<"__nvvm_ui2d_rz">,
1106      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1107  def int_nvvm_ui2d_rm : ClangBuiltin<"__nvvm_ui2d_rm">,
1108      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1109  def int_nvvm_ui2d_rp : ClangBuiltin<"__nvvm_ui2d_rp">,
1110      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1111
1112  def int_nvvm_f2i_rn_ftz : ClangBuiltin<"__nvvm_f2i_rn_ftz">,
1113      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1114  def int_nvvm_f2i_rn : ClangBuiltin<"__nvvm_f2i_rn">,
1115      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1116  def int_nvvm_f2i_rz_ftz : ClangBuiltin<"__nvvm_f2i_rz_ftz">,
1117      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1118  def int_nvvm_f2i_rz : ClangBuiltin<"__nvvm_f2i_rz">,
1119      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1120  def int_nvvm_f2i_rm_ftz : ClangBuiltin<"__nvvm_f2i_rm_ftz">,
1121      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1122  def int_nvvm_f2i_rm : ClangBuiltin<"__nvvm_f2i_rm">,
1123      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1124  def int_nvvm_f2i_rp_ftz : ClangBuiltin<"__nvvm_f2i_rp_ftz">,
1125      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1126  def int_nvvm_f2i_rp : ClangBuiltin<"__nvvm_f2i_rp">,
1127      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1128
1129  def int_nvvm_f2ui_rn_ftz : ClangBuiltin<"__nvvm_f2ui_rn_ftz">,
1130      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1131  def int_nvvm_f2ui_rn : ClangBuiltin<"__nvvm_f2ui_rn">,
1132      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1133  def int_nvvm_f2ui_rz_ftz : ClangBuiltin<"__nvvm_f2ui_rz_ftz">,
1134      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1135  def int_nvvm_f2ui_rz : ClangBuiltin<"__nvvm_f2ui_rz">,
1136      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1137  def int_nvvm_f2ui_rm_ftz : ClangBuiltin<"__nvvm_f2ui_rm_ftz">,
1138      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1139  def int_nvvm_f2ui_rm : ClangBuiltin<"__nvvm_f2ui_rm">,
1140      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1141  def int_nvvm_f2ui_rp_ftz : ClangBuiltin<"__nvvm_f2ui_rp_ftz">,
1142      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1143  def int_nvvm_f2ui_rp : ClangBuiltin<"__nvvm_f2ui_rp">,
1144      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1145
1146  def int_nvvm_i2f_rn : ClangBuiltin<"__nvvm_i2f_rn">,
1147      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1148  def int_nvvm_i2f_rz : ClangBuiltin<"__nvvm_i2f_rz">,
1149      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1150  def int_nvvm_i2f_rm : ClangBuiltin<"__nvvm_i2f_rm">,
1151      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1152  def int_nvvm_i2f_rp : ClangBuiltin<"__nvvm_i2f_rp">,
1153      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1154
1155  def int_nvvm_ui2f_rn : ClangBuiltin<"__nvvm_ui2f_rn">,
1156      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1157  def int_nvvm_ui2f_rz : ClangBuiltin<"__nvvm_ui2f_rz">,
1158      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1159  def int_nvvm_ui2f_rm : ClangBuiltin<"__nvvm_ui2f_rm">,
1160      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1161  def int_nvvm_ui2f_rp : ClangBuiltin<"__nvvm_ui2f_rp">,
1162      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1163
1164  def int_nvvm_lohi_i2d : ClangBuiltin<"__nvvm_lohi_i2d">,
1165      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty, llvm_i32_ty],
1166        [IntrNoMem, IntrSpeculatable, Commutative]>;
1167
1168  def int_nvvm_d2i_lo : ClangBuiltin<"__nvvm_d2i_lo">,
1169      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1170  def int_nvvm_d2i_hi : ClangBuiltin<"__nvvm_d2i_hi">,
1171      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1172
1173  def int_nvvm_f2ll_rn_ftz : ClangBuiltin<"__nvvm_f2ll_rn_ftz">,
1174      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1175  def int_nvvm_f2ll_rn : ClangBuiltin<"__nvvm_f2ll_rn">,
1176      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1177  def int_nvvm_f2ll_rz_ftz : ClangBuiltin<"__nvvm_f2ll_rz_ftz">,
1178      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1179  def int_nvvm_f2ll_rz : ClangBuiltin<"__nvvm_f2ll_rz">,
1180      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1181  def int_nvvm_f2ll_rm_ftz : ClangBuiltin<"__nvvm_f2ll_rm_ftz">,
1182      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1183  def int_nvvm_f2ll_rm : ClangBuiltin<"__nvvm_f2ll_rm">,
1184      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1185  def int_nvvm_f2ll_rp_ftz : ClangBuiltin<"__nvvm_f2ll_rp_ftz">,
1186      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1187  def int_nvvm_f2ll_rp : ClangBuiltin<"__nvvm_f2ll_rp">,
1188      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1189
1190  def int_nvvm_f2ull_rn_ftz : ClangBuiltin<"__nvvm_f2ull_rn_ftz">,
1191      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1192  def int_nvvm_f2ull_rn : ClangBuiltin<"__nvvm_f2ull_rn">,
1193      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1194  def int_nvvm_f2ull_rz_ftz : ClangBuiltin<"__nvvm_f2ull_rz_ftz">,
1195      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1196  def int_nvvm_f2ull_rz : ClangBuiltin<"__nvvm_f2ull_rz">,
1197      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1198  def int_nvvm_f2ull_rm_ftz : ClangBuiltin<"__nvvm_f2ull_rm_ftz">,
1199      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1200  def int_nvvm_f2ull_rm : ClangBuiltin<"__nvvm_f2ull_rm">,
1201      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1202  def int_nvvm_f2ull_rp_ftz : ClangBuiltin<"__nvvm_f2ull_rp_ftz">,
1203      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1204  def int_nvvm_f2ull_rp : ClangBuiltin<"__nvvm_f2ull_rp">,
1205      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1206
1207  def int_nvvm_d2ll_rn : ClangBuiltin<"__nvvm_d2ll_rn">,
1208      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1209  def int_nvvm_d2ll_rz : ClangBuiltin<"__nvvm_d2ll_rz">,
1210      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1211  def int_nvvm_d2ll_rm : ClangBuiltin<"__nvvm_d2ll_rm">,
1212      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1213  def int_nvvm_d2ll_rp : ClangBuiltin<"__nvvm_d2ll_rp">,
1214      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1215
1216  def int_nvvm_d2ull_rn : ClangBuiltin<"__nvvm_d2ull_rn">,
1217      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1218  def int_nvvm_d2ull_rz : ClangBuiltin<"__nvvm_d2ull_rz">,
1219      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1220  def int_nvvm_d2ull_rm : ClangBuiltin<"__nvvm_d2ull_rm">,
1221      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1222  def int_nvvm_d2ull_rp : ClangBuiltin<"__nvvm_d2ull_rp">,
1223      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1224
1225  def int_nvvm_ll2f_rn : ClangBuiltin<"__nvvm_ll2f_rn">,
1226      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1227  def int_nvvm_ll2f_rz : ClangBuiltin<"__nvvm_ll2f_rz">,
1228      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1229  def int_nvvm_ll2f_rm : ClangBuiltin<"__nvvm_ll2f_rm">,
1230      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1231  def int_nvvm_ll2f_rp : ClangBuiltin<"__nvvm_ll2f_rp">,
1232      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1233  def int_nvvm_ull2f_rn : ClangBuiltin<"__nvvm_ull2f_rn">,
1234      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1235  def int_nvvm_ull2f_rz : ClangBuiltin<"__nvvm_ull2f_rz">,
1236      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1237  def int_nvvm_ull2f_rm : ClangBuiltin<"__nvvm_ull2f_rm">,
1238      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1239  def int_nvvm_ull2f_rp : ClangBuiltin<"__nvvm_ull2f_rp">,
1240      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1241
1242  def int_nvvm_ll2d_rn : ClangBuiltin<"__nvvm_ll2d_rn">,
1243      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1244  def int_nvvm_ll2d_rz : ClangBuiltin<"__nvvm_ll2d_rz">,
1245      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1246  def int_nvvm_ll2d_rm : ClangBuiltin<"__nvvm_ll2d_rm">,
1247      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1248  def int_nvvm_ll2d_rp : ClangBuiltin<"__nvvm_ll2d_rp">,
1249      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1250  def int_nvvm_ull2d_rn : ClangBuiltin<"__nvvm_ull2d_rn">,
1251      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1252  def int_nvvm_ull2d_rz : ClangBuiltin<"__nvvm_ull2d_rz">,
1253      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1254  def int_nvvm_ull2d_rm : ClangBuiltin<"__nvvm_ull2d_rm">,
1255      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1256  def int_nvvm_ull2d_rp : ClangBuiltin<"__nvvm_ull2d_rp">,
1257      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1258
1259  def int_nvvm_f2h_rn_ftz : ClangBuiltin<"__nvvm_f2h_rn_ftz">,
1260      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1261  def int_nvvm_f2h_rn : ClangBuiltin<"__nvvm_f2h_rn">,
1262      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1263
1264  def int_nvvm_bf2h_rn_ftz : ClangBuiltin<"__nvvm_bf2h_rn_ftz">,
1265      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_bfloat_ty], [IntrNoMem, IntrSpeculatable]>;
1266  def int_nvvm_bf2h_rn : ClangBuiltin<"__nvvm_bf2h_rn">,
1267      DefaultAttrsIntrinsic<[llvm_i16_ty], [llvm_bfloat_ty], [IntrNoMem, IntrSpeculatable]>;
1268
1269  def int_nvvm_ff2bf16x2_rn : ClangBuiltin<"__nvvm_ff2bf16x2_rn">,
1270       Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1271  def int_nvvm_ff2bf16x2_rn_relu : ClangBuiltin<"__nvvm_ff2bf16x2_rn_relu">,
1272      Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1273  def int_nvvm_ff2bf16x2_rz : ClangBuiltin<"__nvvm_ff2bf16x2_rz">,
1274      Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1275  def int_nvvm_ff2bf16x2_rz_relu : ClangBuiltin<"__nvvm_ff2bf16x2_rz_relu">,
1276      Intrinsic<[llvm_v2bf16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem]>;
1277
1278  def int_nvvm_ff2f16x2_rn : ClangBuiltin<"__nvvm_ff2f16x2_rn">,
1279      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1280  def int_nvvm_ff2f16x2_rn_relu : ClangBuiltin<"__nvvm_ff2f16x2_rn_relu">,
1281      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1282  def int_nvvm_ff2f16x2_rz : ClangBuiltin<"__nvvm_ff2f16x2_rz">,
1283      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1284  def int_nvvm_ff2f16x2_rz_relu : ClangBuiltin<"__nvvm_ff2f16x2_rz_relu">,
1285      Intrinsic<[llvm_v2f16_ty], [llvm_float_ty, llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1286
1287  def int_nvvm_f2bf16_rn : ClangBuiltin<"__nvvm_f2bf16_rn">,
1288      Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1289  def int_nvvm_f2bf16_rn_relu : ClangBuiltin<"__nvvm_f2bf16_rn_relu">,
1290      Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1291  def int_nvvm_f2bf16_rz : ClangBuiltin<"__nvvm_f2bf16_rz">,
1292      Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1293  def int_nvvm_f2bf16_rz_relu : ClangBuiltin<"__nvvm_f2bf16_rz_relu">,
1294       Intrinsic<[llvm_bfloat_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1295
1296  def int_nvvm_f2tf32_rna : ClangBuiltin<"__nvvm_f2tf32_rna">,
1297      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrNoCallback]>;
1298
1299//
1300// Bitcast
1301//
1302
1303  def int_nvvm_bitcast_f2i : ClangBuiltin<"__nvvm_bitcast_f2i">,
1304      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem, IntrSpeculatable]>;
1305  def int_nvvm_bitcast_i2f : ClangBuiltin<"__nvvm_bitcast_i2f">,
1306      DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem, IntrSpeculatable]>;
1307
1308  def int_nvvm_bitcast_ll2d : ClangBuiltin<"__nvvm_bitcast_ll2d">,
1309      DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem, IntrSpeculatable]>;
1310  def int_nvvm_bitcast_d2ll : ClangBuiltin<"__nvvm_bitcast_d2ll">,
1311      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem, IntrSpeculatable]>;
1312
1313// FNS
1314
1315  def int_nvvm_fns : ClangBuiltin<"__nvvm_fns">,
1316      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1317                [IntrNoMem]>;
1318
1319// Atomics not available as llvm intrinsics.
1320  def int_nvvm_atomic_load_inc_32 : Intrinsic<[llvm_i32_ty],
1321          [llvm_anyptr_ty, llvm_i32_ty],
1322                                      [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
1323  def int_nvvm_atomic_load_dec_32 : Intrinsic<[llvm_i32_ty],
1324          [llvm_anyptr_ty, llvm_i32_ty],
1325                                      [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
1326
1327  class SCOPED_ATOMIC2_impl<LLVMType elty>
1328        : Intrinsic<[elty],
1329          [llvm_anyptr_ty, LLVMMatchType<0>],
1330          [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
1331  class SCOPED_ATOMIC3_impl<LLVMType elty>
1332        : Intrinsic<[elty],
1333          [llvm_anyptr_ty, LLVMMatchType<0>,
1334           LLVMMatchType<0>],
1335          [IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>]>;
1336
1337  multiclass PTXAtomicWithScope2<LLVMType elty> {
1338    def _cta : SCOPED_ATOMIC2_impl<elty>;
1339    def _sys : SCOPED_ATOMIC2_impl<elty>;
1340  }
1341  multiclass PTXAtomicWithScope3<LLVMType elty> {
1342    def _cta : SCOPED_ATOMIC3_impl<elty>;
1343    def _sys : SCOPED_ATOMIC3_impl<elty>;
1344  }
1345  multiclass PTXAtomicWithScope2_fi {
1346    defm _f: PTXAtomicWithScope2<llvm_anyfloat_ty>;
1347    defm _i: PTXAtomicWithScope2<llvm_anyint_ty>;
1348  }
1349  defm int_nvvm_atomic_add_gen   : PTXAtomicWithScope2_fi;
1350  defm int_nvvm_atomic_inc_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1351  defm int_nvvm_atomic_dec_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1352  defm int_nvvm_atomic_exch_gen_i: PTXAtomicWithScope2<llvm_anyint_ty>;
1353  defm int_nvvm_atomic_xor_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1354  defm int_nvvm_atomic_max_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1355  defm int_nvvm_atomic_min_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1356  defm int_nvvm_atomic_or_gen_i  : PTXAtomicWithScope2<llvm_anyint_ty>;
1357  defm int_nvvm_atomic_and_gen_i : PTXAtomicWithScope2<llvm_anyint_ty>;
1358  defm int_nvvm_atomic_cas_gen_i : PTXAtomicWithScope3<llvm_anyint_ty>;
1359
1360// Bar.Sync
1361
1362  // The builtin for "bar.sync 0" is called __syncthreads.  Unlike most of the
1363  // intrinsics in this file, this one is a user-facing API.
1364  def int_nvvm_barrier0 : ClangBuiltin<"__syncthreads">,
1365      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1366  // Synchronize all threads in the CTA at barrier 'n'.
1367  def int_nvvm_barrier_n : ClangBuiltin<"__nvvm_bar_n">,
1368      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1369  // Synchronize 'm', a multiple of warp size, (arg 2) threads in
1370  // the CTA at barrier 'n' (arg 1).
1371  def int_nvvm_barrier : ClangBuiltin<"__nvvm_bar">,
1372      Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1373  def int_nvvm_barrier0_popc : ClangBuiltin<"__nvvm_bar0_popc">,
1374      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1375  def int_nvvm_barrier0_and : ClangBuiltin<"__nvvm_bar0_and">,
1376      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1377  def int_nvvm_barrier0_or : ClangBuiltin<"__nvvm_bar0_or">,
1378      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>;
1379
1380  def int_nvvm_bar_sync :
1381      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
1382      ClangBuiltin<"__nvvm_bar_sync">;
1383  def int_nvvm_bar_warp_sync :
1384      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
1385      ClangBuiltin<"__nvvm_bar_warp_sync">;
1386
1387  // barrier.sync id[, cnt]
1388  def int_nvvm_barrier_sync :
1389      Intrinsic<[], [llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
1390      ClangBuiltin<"__nvvm_barrier_sync">;
1391  def int_nvvm_barrier_sync_cnt :
1392      Intrinsic<[], [llvm_i32_ty, llvm_i32_ty], [IntrConvergent, IntrNoCallback]>,
1393      ClangBuiltin<"__nvvm_barrier_sync_cnt">;
1394
1395  // barrier.cluster.[wait, arrive, arrive.relaxed]
1396  def int_nvvm_barrier_cluster_arrive :
1397      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1398  def int_nvvm_barrier_cluster_arrive_relaxed :
1399      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1400  def int_nvvm_barrier_cluster_wait :
1401      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1402
1403  // 'aligned' versions of the above barrier.cluster.* intrinsics
1404  def int_nvvm_barrier_cluster_arrive_aligned :
1405      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1406  def int_nvvm_barrier_cluster_arrive_relaxed_aligned :
1407      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1408  def int_nvvm_barrier_cluster_wait_aligned :
1409      Intrinsic<[], [], [IntrConvergent, IntrNoCallback]>;
1410
1411  // Membar
1412  def int_nvvm_membar_cta : ClangBuiltin<"__nvvm_membar_cta">,
1413      Intrinsic<[], [], [IntrNoCallback]>;
1414  def int_nvvm_membar_gl : ClangBuiltin<"__nvvm_membar_gl">,
1415      Intrinsic<[], [], [IntrNoCallback]>;
1416  def int_nvvm_membar_sys : ClangBuiltin<"__nvvm_membar_sys">,
1417      Intrinsic<[], [], [IntrNoCallback]>;
1418  def int_nvvm_fence_sc_cluster:
1419      Intrinsic<[], [], [IntrNoCallback]>;
1420
1421// Async Copy
1422def int_nvvm_cp_async_mbarrier_arrive :
1423    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive">,
1424    Intrinsic<[],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1425def int_nvvm_cp_async_mbarrier_arrive_shared :
1426    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive_shared">,
1427    Intrinsic<[],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1428def int_nvvm_cp_async_mbarrier_arrive_noinc :
1429    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive_noinc">,
1430    Intrinsic<[],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1431def int_nvvm_cp_async_mbarrier_arrive_noinc_shared :
1432    ClangBuiltin<"__nvvm_cp_async_mbarrier_arrive_noinc_shared">,
1433    Intrinsic<[],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1434
1435multiclass CP_ASYNC_SHARED_GLOBAL<string n, string cc> {
1436  def NAME: Intrinsic<[],[llvm_shared_ptr_ty, llvm_global_ptr_ty],
1437        [IntrArgMemOnly, IntrNoCallback, NoAlias<ArgIndex<0>>, NoAlias<ArgIndex<1>>,
1438        WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>],
1439        "llvm.nvvm.cp.async." # cc # ".shared.global." # n>;
1440  def _s: Intrinsic<[],[llvm_shared_ptr_ty, llvm_global_ptr_ty, llvm_i32_ty],
1441        [IntrArgMemOnly, IntrNoCallback, NoAlias<ArgIndex<0>>, NoAlias<ArgIndex<1>>,
1442        WriteOnly<ArgIndex<0>>, ReadOnly<ArgIndex<1>>],
1443        "llvm.nvvm.cp.async." # cc # ".shared.global." # n # ".s">;
1444}
1445
1446defm int_nvvm_cp_async_ca_shared_global_4 : CP_ASYNC_SHARED_GLOBAL<"4", "ca">;
1447defm int_nvvm_cp_async_ca_shared_global_8 : CP_ASYNC_SHARED_GLOBAL<"8", "ca">;
1448defm int_nvvm_cp_async_ca_shared_global_16 : CP_ASYNC_SHARED_GLOBAL<"16", "ca">;
1449defm int_nvvm_cp_async_cg_shared_global_16 : CP_ASYNC_SHARED_GLOBAL<"16", "cg">;
1450
1451def int_nvvm_cp_async_commit_group :
1452    ClangBuiltin<"__nvvm_cp_async_commit_group">,
1453    Intrinsic<[],[],[]>;
1454
1455def int_nvvm_cp_async_wait_group :
1456    ClangBuiltin<"__nvvm_cp_async_wait_group">,
1457    Intrinsic<[],[llvm_i32_ty],[ImmArg<ArgIndex<0>>]>;
1458
1459def int_nvvm_cp_async_wait_all :
1460    ClangBuiltin<"__nvvm_cp_async_wait_all">,
1461    Intrinsic<[],[],[]>;
1462
1463// cp.async.bulk variants of the commit/wait group
1464def int_nvvm_cp_async_bulk_commit_group :
1465    Intrinsic<[],[],[]>;
1466
1467def int_nvvm_cp_async_bulk_wait_group :
1468    Intrinsic<[],[llvm_i32_ty],[ImmArg<ArgIndex<0>>]>;
1469
1470def int_nvvm_cp_async_bulk_wait_group_read :
1471    Intrinsic<[],[llvm_i32_ty],[ImmArg<ArgIndex<0>>]>;
1472
1473// mbarrier
1474def int_nvvm_mbarrier_init : ClangBuiltin<"__nvvm_mbarrier_init">,
1475    Intrinsic<[],[llvm_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1476def int_nvvm_mbarrier_init_shared :
1477    ClangBuiltin<"__nvvm_mbarrier_init_shared">,
1478    Intrinsic<[],[llvm_shared_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1479
1480def int_nvvm_mbarrier_inval : ClangBuiltin<"__nvvm_mbarrier_inval">,
1481    Intrinsic<[],[llvm_ptr_ty],
1482    [IntrConvergent, IntrWriteMem, IntrArgMemOnly, IntrNoCallback,
1483    WriteOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>]>;
1484def int_nvvm_mbarrier_inval_shared :
1485    ClangBuiltin<"__nvvm_mbarrier_inval_shared">,
1486    Intrinsic<[],[llvm_shared_ptr_ty],
1487    [IntrConvergent, IntrWriteMem, IntrArgMemOnly, IntrNoCallback,
1488    WriteOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>]>;
1489
1490def int_nvvm_mbarrier_arrive : ClangBuiltin<"__nvvm_mbarrier_arrive">,
1491    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1492def int_nvvm_mbarrier_arrive_shared :
1493    ClangBuiltin<"__nvvm_mbarrier_arrive_shared">,
1494    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1495def int_nvvm_mbarrier_arrive_noComplete :
1496    ClangBuiltin<"__nvvm_mbarrier_arrive_noComplete">,
1497    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1498def int_nvvm_mbarrier_arrive_noComplete_shared :
1499    ClangBuiltin<"__nvvm_mbarrier_arrive_noComplete_shared">,
1500    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty,
1501    llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1502
1503def int_nvvm_mbarrier_arrive_drop :
1504    ClangBuiltin<"__nvvm_mbarrier_arrive_drop">,
1505    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1506def int_nvvm_mbarrier_arrive_drop_shared :
1507    ClangBuiltin<"__nvvm_mbarrier_arrive_drop_shared">,
1508    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty],[IntrConvergent, IntrNoCallback]>;
1509def int_nvvm_mbarrier_arrive_drop_noComplete :
1510    ClangBuiltin<"__nvvm_mbarrier_arrive_drop_noComplete">,
1511    Intrinsic<[llvm_i64_ty],[llvm_ptr_ty, llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1512def int_nvvm_mbarrier_arrive_drop_noComplete_shared :
1513    ClangBuiltin<"__nvvm_mbarrier_arrive_drop_noComplete_shared">,
1514    Intrinsic<[llvm_i64_ty],[llvm_shared_ptr_ty,
1515    llvm_i32_ty],[IntrConvergent, IntrNoCallback]>;
1516
1517def int_nvvm_mbarrier_test_wait :
1518    ClangBuiltin<"__nvvm_mbarrier_test_wait">,
1519    Intrinsic<[llvm_i1_ty],[llvm_ptr_ty, llvm_i64_ty],[IntrConvergent, IntrNoCallback]>;
1520def int_nvvm_mbarrier_test_wait_shared :
1521    ClangBuiltin<"__nvvm_mbarrier_test_wait_shared">,
1522    Intrinsic<[llvm_i1_ty],[llvm_shared_ptr_ty, llvm_i64_ty],[IntrConvergent, IntrNoCallback]>;
1523
1524def int_nvvm_mbarrier_pending_count :
1525    ClangBuiltin<"__nvvm_mbarrier_pending_count">,
1526    Intrinsic<[llvm_i32_ty],[llvm_i64_ty],[IntrNoMem, IntrConvergent, IntrNoCallback]>;
1527
1528// Generated within nvvm. Use for ldu on sm_20 or later.  Second arg is the
1529// pointer's alignment.
1530def int_nvvm_ldu_global_i : Intrinsic<[llvm_anyint_ty],
1531  [llvm_anyptr_ty, llvm_i32_ty],
1532  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1533  "llvm.nvvm.ldu.global.i">;
1534def int_nvvm_ldu_global_f : Intrinsic<[llvm_anyfloat_ty],
1535  [llvm_anyptr_ty, llvm_i32_ty],
1536  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1537  "llvm.nvvm.ldu.global.f">;
1538def int_nvvm_ldu_global_p : Intrinsic<[llvm_anyptr_ty],
1539  [llvm_anyptr_ty, llvm_i32_ty],
1540  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1541  "llvm.nvvm.ldu.global.p">;
1542
1543// Generated within nvvm. Use for ldg on sm_35 or later.  Second arg is the
1544// pointer's alignment.
1545def int_nvvm_ldg_global_i : Intrinsic<[llvm_anyint_ty],
1546  [llvm_anyptr_ty, llvm_i32_ty],
1547  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1548  "llvm.nvvm.ldg.global.i">;
1549def int_nvvm_ldg_global_f : Intrinsic<[llvm_anyfloat_ty],
1550  [llvm_anyptr_ty, llvm_i32_ty],
1551  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1552  "llvm.nvvm.ldg.global.f">;
1553def int_nvvm_ldg_global_p : Intrinsic<[llvm_anyptr_ty],
1554  [llvm_anyptr_ty, llvm_i32_ty],
1555  [IntrReadMem, IntrArgMemOnly, IntrNoCallback, NoCapture<ArgIndex<0>>],
1556  "llvm.nvvm.ldg.global.p">;
1557
1558// Use for generic pointers
1559// - These intrinsics are used to convert address spaces.
1560// - The input pointer and output pointer must have the same type, except for
1561//   the address-space. (This restriction is not enforced here as there is
1562//   currently no way to describe it).
1563// - This complements the llvm bitcast, which can be used to cast one type
1564//   of pointer to another type of pointer, while the address space remains
1565//   the same.
1566def int_nvvm_ptr_local_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1567                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1568                 "llvm.nvvm.ptr.local.to.gen">;
1569def int_nvvm_ptr_shared_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1570                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1571                 "llvm.nvvm.ptr.shared.to.gen">;
1572def int_nvvm_ptr_global_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1573                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1574                 "llvm.nvvm.ptr.global.to.gen">;
1575def int_nvvm_ptr_constant_to_gen: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1576                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1577                 "llvm.nvvm.ptr.constant.to.gen">;
1578
1579def int_nvvm_ptr_gen_to_global: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1580                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1581                 "llvm.nvvm.ptr.gen.to.global">;
1582def int_nvvm_ptr_gen_to_shared: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1583                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1584                 "llvm.nvvm.ptr.gen.to.shared">;
1585def int_nvvm_ptr_gen_to_local: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1586                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1587                 "llvm.nvvm.ptr.gen.to.local">;
1588def int_nvvm_ptr_gen_to_constant: DefaultAttrsIntrinsic<[llvm_anyptr_ty],
1589                 [llvm_anyptr_ty], [IntrNoMem, IntrSpeculatable],
1590                 "llvm.nvvm.ptr.gen.to.constant">;
1591
1592// Used in nvvm internally to help address space opt and ptx code generation
1593// This is for params that are passed to kernel functions by pointer by-val.
1594def int_nvvm_ptr_gen_to_param: Intrinsic<[llvm_anyptr_ty],
1595                                     [llvm_anyptr_ty],
1596                                   [IntrNoMem, IntrSpeculatable, IntrNoCallback],
1597                                   "llvm.nvvm.ptr.gen.to.param">;
1598
1599// Move intrinsics, used in nvvm internally
1600
1601def int_nvvm_move_i16 : Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem],
1602  "llvm.nvvm.move.i16">;
1603def int_nvvm_move_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem],
1604  "llvm.nvvm.move.i32">;
1605def int_nvvm_move_i64 : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem],
1606  "llvm.nvvm.move.i64">;
1607def int_nvvm_move_float : Intrinsic<[llvm_float_ty], [llvm_float_ty],
1608  [IntrNoMem], "llvm.nvvm.move.float">;
1609def int_nvvm_move_double : Intrinsic<[llvm_double_ty], [llvm_double_ty],
1610  [IntrNoMem], "llvm.nvvm.move.double">;
1611def int_nvvm_move_ptr : Intrinsic<[llvm_anyptr_ty], [llvm_anyptr_ty],
1612  [IntrNoMem, NoCapture<ArgIndex<0>>], "llvm.nvvm.move.ptr">;
1613
1614
1615// For getting the handle from a texture or surface variable
1616def int_nvvm_texsurf_handle
1617  : Intrinsic<[llvm_i64_ty], [llvm_metadata_ty, llvm_anyptr_ty],
1618              [IntrNoMem], "llvm.nvvm.texsurf.handle">;
1619def int_nvvm_texsurf_handle_internal
1620  : Intrinsic<[llvm_i64_ty], [llvm_anyptr_ty],
1621              [IntrNoMem], "llvm.nvvm.texsurf.handle.internal">;
1622
1623/// Error / Warn
1624def int_nvvm_compiler_error :
1625    Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.error">;
1626def int_nvvm_compiler_warn :
1627    Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.warn">;
1628
1629def int_nvvm_reflect :
1630  Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrNoMem], "llvm.nvvm.reflect">,
1631  ClangBuiltin<"__nvvm_reflect">;
1632
1633// isspacep.{const, global, local, shared}
1634def int_nvvm_isspacep_const
1635  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1636              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1637              "llvm.nvvm.isspacep.const">,
1638    ClangBuiltin<"__nvvm_isspacep_const">;
1639def int_nvvm_isspacep_global
1640  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1641              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1642              "llvm.nvvm.isspacep.global">,
1643    ClangBuiltin<"__nvvm_isspacep_global">;
1644def int_nvvm_isspacep_local
1645  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1646              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1647              "llvm.nvvm.isspacep.local">,
1648    ClangBuiltin<"__nvvm_isspacep_local">;
1649def int_nvvm_isspacep_shared
1650  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1651              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1652              "llvm.nvvm.isspacep.shared">,
1653    ClangBuiltin<"__nvvm_isspacep_shared">;
1654def int_nvvm_isspacep_shared_cluster
1655  : DefaultAttrsIntrinsic<[llvm_i1_ty], [llvm_ptr_ty],
1656              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
1657              "llvm.nvvm.isspacep.shared.cluster">;
1658
1659// Environment register read
1660def int_nvvm_read_ptx_sreg_envreg0
1661  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1662              "llvm.nvvm.read.ptx.sreg.envreg0">,
1663    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg0">;
1664def int_nvvm_read_ptx_sreg_envreg1
1665  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1666              "llvm.nvvm.read.ptx.sreg.envreg1">,
1667    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg1">;
1668def int_nvvm_read_ptx_sreg_envreg2
1669  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1670              "llvm.nvvm.read.ptx.sreg.envreg2">,
1671    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg2">;
1672def int_nvvm_read_ptx_sreg_envreg3
1673  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1674              "llvm.nvvm.read.ptx.sreg.envreg3">,
1675    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg3">;
1676def int_nvvm_read_ptx_sreg_envreg4
1677  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1678              "llvm.nvvm.read.ptx.sreg.envreg4">,
1679    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg4">;
1680def int_nvvm_read_ptx_sreg_envreg5
1681  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1682              "llvm.nvvm.read.ptx.sreg.envreg5">,
1683    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg5">;
1684def int_nvvm_read_ptx_sreg_envreg6
1685  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1686              "llvm.nvvm.read.ptx.sreg.envreg6">,
1687    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg6">;
1688def int_nvvm_read_ptx_sreg_envreg7
1689  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1690              "llvm.nvvm.read.ptx.sreg.envreg7">,
1691    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg7">;
1692def int_nvvm_read_ptx_sreg_envreg8
1693  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1694              "llvm.nvvm.read.ptx.sreg.envreg8">,
1695    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg8">;
1696def int_nvvm_read_ptx_sreg_envreg9
1697  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1698              "llvm.nvvm.read.ptx.sreg.envreg9">,
1699    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg9">;
1700def int_nvvm_read_ptx_sreg_envreg10
1701  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1702              "llvm.nvvm.read.ptx.sreg.envreg10">,
1703    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg10">;
1704def int_nvvm_read_ptx_sreg_envreg11
1705  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1706              "llvm.nvvm.read.ptx.sreg.envreg11">,
1707    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg11">;
1708def int_nvvm_read_ptx_sreg_envreg12
1709  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1710              "llvm.nvvm.read.ptx.sreg.envreg12">,
1711    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg12">;
1712def int_nvvm_read_ptx_sreg_envreg13
1713  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1714              "llvm.nvvm.read.ptx.sreg.envreg13">,
1715    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg13">;
1716def int_nvvm_read_ptx_sreg_envreg14
1717  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1718              "llvm.nvvm.read.ptx.sreg.envreg14">,
1719    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg14">;
1720def int_nvvm_read_ptx_sreg_envreg15
1721  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1722              "llvm.nvvm.read.ptx.sreg.envreg15">,
1723    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg15">;
1724def int_nvvm_read_ptx_sreg_envreg16
1725  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1726              "llvm.nvvm.read.ptx.sreg.envreg16">,
1727    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg16">;
1728def int_nvvm_read_ptx_sreg_envreg17
1729  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1730              "llvm.nvvm.read.ptx.sreg.envreg17">,
1731    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg17">;
1732def int_nvvm_read_ptx_sreg_envreg18
1733  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1734              "llvm.nvvm.read.ptx.sreg.envreg18">,
1735    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg18">;
1736def int_nvvm_read_ptx_sreg_envreg19
1737  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1738              "llvm.nvvm.read.ptx.sreg.envreg19">,
1739    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg19">;
1740def int_nvvm_read_ptx_sreg_envreg20
1741  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1742              "llvm.nvvm.read.ptx.sreg.envreg20">,
1743    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg20">;
1744def int_nvvm_read_ptx_sreg_envreg21
1745  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1746              "llvm.nvvm.read.ptx.sreg.envreg21">,
1747    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg21">;
1748def int_nvvm_read_ptx_sreg_envreg22
1749  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1750              "llvm.nvvm.read.ptx.sreg.envreg22">,
1751    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg22">;
1752def int_nvvm_read_ptx_sreg_envreg23
1753  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1754              "llvm.nvvm.read.ptx.sreg.envreg23">,
1755    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg23">;
1756def int_nvvm_read_ptx_sreg_envreg24
1757  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1758              "llvm.nvvm.read.ptx.sreg.envreg24">,
1759    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg24">;
1760def int_nvvm_read_ptx_sreg_envreg25
1761  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1762              "llvm.nvvm.read.ptx.sreg.envreg25">,
1763    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg25">;
1764def int_nvvm_read_ptx_sreg_envreg26
1765  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1766              "llvm.nvvm.read.ptx.sreg.envreg26">,
1767    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg26">;
1768def int_nvvm_read_ptx_sreg_envreg27
1769  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1770              "llvm.nvvm.read.ptx.sreg.envreg27">,
1771    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg27">;
1772def int_nvvm_read_ptx_sreg_envreg28
1773  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1774              "llvm.nvvm.read.ptx.sreg.envreg28">,
1775    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg28">;
1776def int_nvvm_read_ptx_sreg_envreg29
1777  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1778              "llvm.nvvm.read.ptx.sreg.envreg29">,
1779    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg29">;
1780def int_nvvm_read_ptx_sreg_envreg30
1781  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1782              "llvm.nvvm.read.ptx.sreg.envreg30">,
1783    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg30">;
1784def int_nvvm_read_ptx_sreg_envreg31
1785  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
1786              "llvm.nvvm.read.ptx.sreg.envreg31">,
1787    ClangBuiltin<"__nvvm_read_ptx_sreg_envreg31">;
1788
1789
1790// Texture Fetch
1791// texmode_independent
1792def int_nvvm_tex_1d_v4f32_s32
1793  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1794              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1795              "llvm.nvvm.tex.1d.v4f32.s32">;
1796def int_nvvm_tex_1d_v4f32_f32
1797  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1798              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1799              "llvm.nvvm.tex.1d.v4f32.f32">;
1800def int_nvvm_tex_1d_level_v4f32_f32
1801  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1802              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1803              "llvm.nvvm.tex.1d.level.v4f32.f32">;
1804def int_nvvm_tex_1d_grad_v4f32_f32
1805  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1806              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1807               llvm_float_ty], [],
1808              "llvm.nvvm.tex.1d.grad.v4f32.f32">;
1809def int_nvvm_tex_1d_v4s32_s32
1810  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1811              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1812              "llvm.nvvm.tex.1d.v4s32.s32">;
1813def int_nvvm_tex_1d_v4s32_f32
1814  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1815              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1816              "llvm.nvvm.tex.1d.v4s32.f32">;
1817def int_nvvm_tex_1d_level_v4s32_f32
1818  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1819              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1820              "llvm.nvvm.tex.1d.level.v4s32.f32">;
1821def int_nvvm_tex_1d_grad_v4s32_f32
1822  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1823              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1824               llvm_float_ty], [],
1825              "llvm.nvvm.tex.1d.grad.v4s32.f32">;
1826def int_nvvm_tex_1d_v4u32_s32
1827  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1828              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1829              "llvm.nvvm.tex.1d.v4u32.s32">;
1830def int_nvvm_tex_1d_v4u32_f32
1831  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1832              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1833              "llvm.nvvm.tex.1d.v4u32.f32">;
1834def int_nvvm_tex_1d_level_v4u32_f32
1835  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1836              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1837              "llvm.nvvm.tex.1d.level.v4u32.f32">;
1838def int_nvvm_tex_1d_grad_v4u32_f32
1839  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1840              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1841               llvm_float_ty], [],
1842              "llvm.nvvm.tex.1d.grad.v4u32.f32">;
1843
1844def int_nvvm_tex_1d_array_v4f32_s32
1845  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1846              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1847              "llvm.nvvm.tex.1d.array.v4f32.s32">;
1848def int_nvvm_tex_1d_array_v4f32_f32
1849  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1850              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1851              "llvm.nvvm.tex.1d.array.v4f32.f32">;
1852def int_nvvm_tex_1d_array_level_v4f32_f32
1853  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1854              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1855               llvm_float_ty], [],
1856              "llvm.nvvm.tex.1d.array.level.v4f32.f32">;
1857def int_nvvm_tex_1d_array_grad_v4f32_f32
1858  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1859              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1860               llvm_float_ty, llvm_float_ty], [],
1861              "llvm.nvvm.tex.1d.array.grad.v4f32.f32">;
1862def int_nvvm_tex_1d_array_v4s32_s32
1863  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1864              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1865              "llvm.nvvm.tex.1d.array.v4s32.s32">;
1866def int_nvvm_tex_1d_array_v4s32_f32
1867  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1868              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1869              "llvm.nvvm.tex.1d.array.v4s32.f32">;
1870def int_nvvm_tex_1d_array_level_v4s32_f32
1871  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1872              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1873               llvm_float_ty], [],
1874              "llvm.nvvm.tex.1d.array.level.v4s32.f32">;
1875def int_nvvm_tex_1d_array_grad_v4s32_f32
1876  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1877              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1878               llvm_float_ty, llvm_float_ty], [],
1879              "llvm.nvvm.tex.1d.array.grad.v4s32.f32">;
1880def int_nvvm_tex_1d_array_v4u32_s32
1881  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1882              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1883              "llvm.nvvm.tex.1d.array.v4u32.s32">;
1884def int_nvvm_tex_1d_array_v4u32_f32
1885  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1886              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1887              "llvm.nvvm.tex.1d.array.v4u32.f32">;
1888def int_nvvm_tex_1d_array_level_v4u32_f32
1889  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1890              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1891               llvm_float_ty], [],
1892              "llvm.nvvm.tex.1d.array.level.v4u32.f32">;
1893def int_nvvm_tex_1d_array_grad_v4u32_f32
1894  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1895              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1896               llvm_float_ty, llvm_float_ty], [],
1897              "llvm.nvvm.tex.1d.array.grad.v4u32.f32">;
1898
1899def int_nvvm_tex_2d_v4f32_s32
1900  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1901              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1902              "llvm.nvvm.tex.2d.v4f32.s32">;
1903def int_nvvm_tex_2d_v4f32_f32
1904  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1905              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1906              "llvm.nvvm.tex.2d.v4f32.f32">;
1907def int_nvvm_tex_2d_level_v4f32_f32
1908  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1909              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1910               llvm_float_ty], [],
1911              "llvm.nvvm.tex.2d.level.v4f32.f32">;
1912def int_nvvm_tex_2d_grad_v4f32_f32
1913  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1914              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1915               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1916              "llvm.nvvm.tex.2d.grad.v4f32.f32">;
1917def int_nvvm_tex_2d_v4s32_s32
1918  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1919              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1920              "llvm.nvvm.tex.2d.v4s32.s32">;
1921def int_nvvm_tex_2d_v4s32_f32
1922  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1923              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1924              "llvm.nvvm.tex.2d.v4s32.f32">;
1925def int_nvvm_tex_2d_level_v4s32_f32
1926  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1927              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1928               llvm_float_ty], [],
1929              "llvm.nvvm.tex.2d.level.v4s32.f32">;
1930def int_nvvm_tex_2d_grad_v4s32_f32
1931  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1932              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1933               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1934              "llvm.nvvm.tex.2d.grad.v4s32.f32">;
1935def int_nvvm_tex_2d_v4u32_s32
1936  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1937              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1938              "llvm.nvvm.tex.2d.v4u32.s32">;
1939def int_nvvm_tex_2d_v4u32_f32
1940  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1941              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1942              "llvm.nvvm.tex.2d.v4u32.f32">;
1943def int_nvvm_tex_2d_level_v4u32_f32
1944  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1945              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1946               llvm_float_ty], [],
1947              "llvm.nvvm.tex.2d.level.v4u32.f32">;
1948def int_nvvm_tex_2d_grad_v4u32_f32
1949  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1950              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1951               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1952              "llvm.nvvm.tex.2d.grad.v4u32.f32">;
1953
1954def int_nvvm_tex_2d_array_v4f32_s32
1955  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1956              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1957               llvm_i32_ty], [],
1958              "llvm.nvvm.tex.2d.array.v4f32.s32">;
1959def int_nvvm_tex_2d_array_v4f32_f32
1960  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1961              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1962               llvm_float_ty], [],
1963              "llvm.nvvm.tex.2d.array.v4f32.f32">;
1964def int_nvvm_tex_2d_array_level_v4f32_f32
1965  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1966              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1967               llvm_float_ty, llvm_float_ty], [],
1968              "llvm.nvvm.tex.2d.array.level.v4f32.f32">;
1969def int_nvvm_tex_2d_array_grad_v4f32_f32
1970  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1971              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1972               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1973               llvm_float_ty], [],
1974              "llvm.nvvm.tex.2d.array.grad.v4f32.f32">;
1975def int_nvvm_tex_2d_array_v4s32_s32
1976  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1977              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1978               llvm_i32_ty], [],
1979              "llvm.nvvm.tex.2d.array.v4s32.s32">;
1980def int_nvvm_tex_2d_array_v4s32_f32
1981  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1982              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1983               llvm_float_ty], [],
1984              "llvm.nvvm.tex.2d.array.v4s32.f32">;
1985def int_nvvm_tex_2d_array_level_v4s32_f32
1986  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1987              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1988               llvm_float_ty, llvm_float_ty], [],
1989              "llvm.nvvm.tex.2d.array.level.v4s32.f32">;
1990def int_nvvm_tex_2d_array_grad_v4s32_f32
1991  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1992              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1993               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1994               llvm_float_ty], [],
1995              "llvm.nvvm.tex.2d.array.grad.v4s32.f32">;
1996def int_nvvm_tex_2d_array_v4u32_s32
1997  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1998              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1999               llvm_i32_ty], [],
2000              "llvm.nvvm.tex.2d.array.v4u32.s32">;
2001def int_nvvm_tex_2d_array_v4u32_f32
2002  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2003              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2004               llvm_float_ty], [],
2005              "llvm.nvvm.tex.2d.array.v4u32.f32">;
2006def int_nvvm_tex_2d_array_level_v4u32_f32
2007  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2008              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2009               llvm_float_ty, llvm_float_ty], [],
2010              "llvm.nvvm.tex.2d.array.level.v4u32.f32">;
2011def int_nvvm_tex_2d_array_grad_v4u32_f32
2012  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2013              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2014               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2015               llvm_float_ty], [],
2016              "llvm.nvvm.tex.2d.array.grad.v4u32.f32">;
2017
2018def int_nvvm_tex_3d_v4f32_s32
2019  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2020              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2021              [], "llvm.nvvm.tex.3d.v4f32.s32">;
2022def int_nvvm_tex_3d_v4f32_f32
2023  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2024              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2025               llvm_float_ty], [],
2026              "llvm.nvvm.tex.3d.v4f32.f32">;
2027def int_nvvm_tex_3d_level_v4f32_f32
2028  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2029              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2030               llvm_float_ty, llvm_float_ty], [],
2031              "llvm.nvvm.tex.3d.level.v4f32.f32">;
2032def int_nvvm_tex_3d_grad_v4f32_f32
2033  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2034              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2035               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2036               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2037              "llvm.nvvm.tex.3d.grad.v4f32.f32">;
2038def int_nvvm_tex_3d_v4s32_s32
2039  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2040              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2041              [], "llvm.nvvm.tex.3d.v4s32.s32">;
2042def int_nvvm_tex_3d_v4s32_f32
2043  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2044              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2045               llvm_float_ty], [],
2046              "llvm.nvvm.tex.3d.v4s32.f32">;
2047def int_nvvm_tex_3d_level_v4s32_f32
2048  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2049              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2050               llvm_float_ty, llvm_float_ty], [],
2051              "llvm.nvvm.tex.3d.level.v4s32.f32">;
2052def int_nvvm_tex_3d_grad_v4s32_f32
2053  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2054              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2055               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2056               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2057              "llvm.nvvm.tex.3d.grad.v4s32.f32">;
2058def int_nvvm_tex_3d_v4u32_s32
2059  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2060              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2061              [], "llvm.nvvm.tex.3d.v4u32.s32">;
2062def int_nvvm_tex_3d_v4u32_f32
2063  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2064              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2065               llvm_float_ty], [],
2066              "llvm.nvvm.tex.3d.v4u32.f32">;
2067def int_nvvm_tex_3d_level_v4u32_f32
2068  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2069              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2070               llvm_float_ty, llvm_float_ty], [],
2071              "llvm.nvvm.tex.3d.level.v4u32.f32">;
2072def int_nvvm_tex_3d_grad_v4u32_f32
2073  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2074              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2075               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2076               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2077              "llvm.nvvm.tex.3d.grad.v4u32.f32">;
2078
2079def int_nvvm_tex_cube_v4f32_f32
2080  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2081              [llvm_i64_ty, llvm_i64_ty,
2082               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2083              "llvm.nvvm.tex.cube.v4f32.f32">;
2084def int_nvvm_tex_cube_level_v4f32_f32
2085  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2086              [llvm_i64_ty, llvm_i64_ty,
2087               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2088              "llvm.nvvm.tex.cube.level.v4f32.f32">;
2089def int_nvvm_tex_cube_v4s32_f32
2090  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2091              [llvm_i64_ty, llvm_i64_ty,
2092               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2093              "llvm.nvvm.tex.cube.v4s32.f32">;
2094def int_nvvm_tex_cube_level_v4s32_f32
2095  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2096              [llvm_i64_ty, llvm_i64_ty,
2097               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2098              "llvm.nvvm.tex.cube.level.v4s32.f32">;
2099def int_nvvm_tex_cube_v4u32_f32
2100  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2101              [llvm_i64_ty, llvm_i64_ty,
2102               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2103              "llvm.nvvm.tex.cube.v4u32.f32">;
2104def int_nvvm_tex_cube_level_v4u32_f32
2105  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2106              [llvm_i64_ty, llvm_i64_ty,
2107               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2108              "llvm.nvvm.tex.cube.level.v4u32.f32">;
2109
2110def int_nvvm_tex_cube_array_v4f32_f32
2111  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2112              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2113               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2114              "llvm.nvvm.tex.cube.array.v4f32.f32">;
2115def int_nvvm_tex_cube_array_level_v4f32_f32
2116  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2117              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2118               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2119              "llvm.nvvm.tex.cube.array.level.v4f32.f32">;
2120def int_nvvm_tex_cube_array_v4s32_f32
2121  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2122              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2123               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2124              "llvm.nvvm.tex.cube.array.v4s32.f32">;
2125def int_nvvm_tex_cube_array_level_v4s32_f32
2126  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2127              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2128               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2129              "llvm.nvvm.tex.cube.array.level.v4s32.f32">;
2130def int_nvvm_tex_cube_array_v4u32_f32
2131  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2132              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2133               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2134              "llvm.nvvm.tex.cube.array.v4u32.f32">;
2135def int_nvvm_tex_cube_array_level_v4u32_f32
2136  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2137              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty,
2138               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2139              "llvm.nvvm.tex.cube.array.level.v4u32.f32">;
2140
2141def int_nvvm_tld4_r_2d_v4f32_f32
2142  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2143              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2144              "llvm.nvvm.tld4.r.2d.v4f32.f32">;
2145def int_nvvm_tld4_g_2d_v4f32_f32
2146  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2147              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2148              "llvm.nvvm.tld4.g.2d.v4f32.f32">;
2149def int_nvvm_tld4_b_2d_v4f32_f32
2150  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2151              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2152              "llvm.nvvm.tld4.b.2d.v4f32.f32">;
2153def int_nvvm_tld4_a_2d_v4f32_f32
2154  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2155              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2156              "llvm.nvvm.tld4.a.2d.v4f32.f32">;
2157def int_nvvm_tld4_r_2d_v4s32_f32
2158  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2159              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2160              "llvm.nvvm.tld4.r.2d.v4s32.f32">;
2161def int_nvvm_tld4_g_2d_v4s32_f32
2162  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2163              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2164              "llvm.nvvm.tld4.g.2d.v4s32.f32">;
2165def int_nvvm_tld4_b_2d_v4s32_f32
2166  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2167              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2168              "llvm.nvvm.tld4.b.2d.v4s32.f32">;
2169def int_nvvm_tld4_a_2d_v4s32_f32
2170  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2171              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2172              "llvm.nvvm.tld4.a.2d.v4s32.f32">;
2173def int_nvvm_tld4_r_2d_v4u32_f32
2174  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2175              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2176              "llvm.nvvm.tld4.r.2d.v4u32.f32">;
2177def int_nvvm_tld4_g_2d_v4u32_f32
2178  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2179              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2180              "llvm.nvvm.tld4.g.2d.v4u32.f32">;
2181def int_nvvm_tld4_b_2d_v4u32_f32
2182  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2183              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2184              "llvm.nvvm.tld4.b.2d.v4u32.f32">;
2185def int_nvvm_tld4_a_2d_v4u32_f32
2186  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2187              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2188              "llvm.nvvm.tld4.a.2d.v4u32.f32">;
2189
2190
2191// texmode_unified
2192def int_nvvm_tex_unified_1d_v4f32_s32
2193  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2194              [llvm_i64_ty, llvm_i32_ty], [],
2195              "llvm.nvvm.tex.unified.1d.v4f32.s32">;
2196def int_nvvm_tex_unified_1d_v4f32_f32
2197  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2198              [llvm_i64_ty, llvm_float_ty], [],
2199              "llvm.nvvm.tex.unified.1d.v4f32.f32">;
2200def int_nvvm_tex_unified_1d_level_v4f32_f32
2201  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2202              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2203              "llvm.nvvm.tex.unified.1d.level.v4f32.f32">;
2204def int_nvvm_tex_unified_1d_grad_v4f32_f32
2205  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2206              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2207               llvm_float_ty], [],
2208              "llvm.nvvm.tex.unified.1d.grad.v4f32.f32">;
2209def int_nvvm_tex_unified_1d_v4s32_s32
2210  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2211              [llvm_i64_ty, llvm_i32_ty], [],
2212              "llvm.nvvm.tex.unified.1d.v4s32.s32">;
2213def int_nvvm_tex_unified_1d_v4s32_f32
2214  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2215              [llvm_i64_ty, llvm_float_ty], [],
2216              "llvm.nvvm.tex.unified.1d.v4s32.f32">;
2217def int_nvvm_tex_unified_1d_level_v4s32_f32
2218  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2219              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2220              "llvm.nvvm.tex.unified.1d.level.v4s32.f32">;
2221def int_nvvm_tex_unified_1d_grad_v4s32_f32
2222  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2223              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2224               llvm_float_ty], [],
2225              "llvm.nvvm.tex.unified.1d.grad.v4s32.f32">;
2226def int_nvvm_tex_unified_1d_v4u32_s32
2227  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2228              [llvm_i64_ty, llvm_i32_ty], [],
2229              "llvm.nvvm.tex.unified.1d.v4u32.s32">;
2230def int_nvvm_tex_unified_1d_v4u32_f32
2231  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2232              [llvm_i64_ty, llvm_float_ty], [],
2233              "llvm.nvvm.tex.unified.1d.v4u32.f32">;
2234def int_nvvm_tex_unified_1d_level_v4u32_f32
2235  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2236              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2237              "llvm.nvvm.tex.unified.1d.level.v4u32.f32">;
2238def int_nvvm_tex_unified_1d_grad_v4u32_f32
2239  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2240              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2241               llvm_float_ty], [],
2242              "llvm.nvvm.tex.unified.1d.grad.v4u32.f32">;
2243
2244def int_nvvm_tex_unified_1d_array_v4f32_s32
2245  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2246              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2247              "llvm.nvvm.tex.unified.1d.array.v4f32.s32">;
2248def int_nvvm_tex_unified_1d_array_v4f32_f32
2249  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2250              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
2251              "llvm.nvvm.tex.unified.1d.array.v4f32.f32">;
2252def int_nvvm_tex_unified_1d_array_level_v4f32_f32
2253  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2254              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2255               llvm_float_ty], [],
2256              "llvm.nvvm.tex.unified.1d.array.level.v4f32.f32">;
2257def int_nvvm_tex_unified_1d_array_grad_v4f32_f32
2258  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2259              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2260               llvm_float_ty, llvm_float_ty], [],
2261              "llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32">;
2262def int_nvvm_tex_unified_1d_array_v4s32_s32
2263  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2264              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2265              "llvm.nvvm.tex.unified.1d.array.v4s32.s32">;
2266def int_nvvm_tex_unified_1d_array_v4s32_f32
2267  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2268              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
2269              "llvm.nvvm.tex.unified.1d.array.v4s32.f32">;
2270def int_nvvm_tex_unified_1d_array_level_v4s32_f32
2271  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2272              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2273               llvm_float_ty], [],
2274              "llvm.nvvm.tex.unified.1d.array.level.v4s32.f32">;
2275def int_nvvm_tex_unified_1d_array_grad_v4s32_f32
2276  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2277              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2278               llvm_float_ty, llvm_float_ty], [],
2279              "llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32">;
2280def int_nvvm_tex_unified_1d_array_v4u32_s32
2281  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2282              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2283              "llvm.nvvm.tex.unified.1d.array.v4u32.s32">;
2284def int_nvvm_tex_unified_1d_array_v4u32_f32
2285  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2286              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
2287              "llvm.nvvm.tex.unified.1d.array.v4u32.f32">;
2288def int_nvvm_tex_unified_1d_array_level_v4u32_f32
2289  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2290              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2291               llvm_float_ty], [],
2292              "llvm.nvvm.tex.unified.1d.array.level.v4u32.f32">;
2293def int_nvvm_tex_unified_1d_array_grad_v4u32_f32
2294  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2295              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2296               llvm_float_ty, llvm_float_ty], [],
2297              "llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32">;
2298
2299def int_nvvm_tex_unified_2d_v4f32_s32
2300  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2301              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2302              "llvm.nvvm.tex.unified.2d.v4f32.s32">;
2303def int_nvvm_tex_unified_2d_v4f32_f32
2304  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2305              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2306              "llvm.nvvm.tex.unified.2d.v4f32.f32">;
2307def int_nvvm_tex_unified_2d_level_v4f32_f32
2308  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2309              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2310               llvm_float_ty], [],
2311              "llvm.nvvm.tex.unified.2d.level.v4f32.f32">;
2312def int_nvvm_tex_unified_2d_grad_v4f32_f32
2313  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2314              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2315               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2316              "llvm.nvvm.tex.unified.2d.grad.v4f32.f32">;
2317def int_nvvm_tex_unified_2d_v4s32_s32
2318  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2319              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2320              "llvm.nvvm.tex.unified.2d.v4s32.s32">;
2321def int_nvvm_tex_unified_2d_v4s32_f32
2322  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2323              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2324              "llvm.nvvm.tex.unified.2d.v4s32.f32">;
2325def int_nvvm_tex_unified_2d_level_v4s32_f32
2326  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2327              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2328               llvm_float_ty], [],
2329              "llvm.nvvm.tex.unified.2d.level.v4s32.f32">;
2330def int_nvvm_tex_unified_2d_grad_v4s32_f32
2331  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2332              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2333               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2334              "llvm.nvvm.tex.unified.2d.grad.v4s32.f32">;
2335def int_nvvm_tex_unified_2d_v4u32_s32
2336  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2337              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2338              "llvm.nvvm.tex.unified.2d.v4u32.s32">;
2339def int_nvvm_tex_unified_2d_v4u32_f32
2340  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2341              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2342              "llvm.nvvm.tex.unified.2d.v4u32.f32">;
2343def int_nvvm_tex_unified_2d_level_v4u32_f32
2344  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2345              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2346               llvm_float_ty], [],
2347              "llvm.nvvm.tex.unified.2d.level.v4u32.f32">;
2348def int_nvvm_tex_unified_2d_grad_v4u32_f32
2349  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2350              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2351               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2352              "llvm.nvvm.tex.unified.2d.grad.v4u32.f32">;
2353
2354def int_nvvm_tex_unified_2d_array_v4f32_s32
2355  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2356              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2357               llvm_i32_ty], [],
2358              "llvm.nvvm.tex.unified.2d.array.v4f32.s32">;
2359def int_nvvm_tex_unified_2d_array_v4f32_f32
2360  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2361              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2362               llvm_float_ty], [],
2363              "llvm.nvvm.tex.unified.2d.array.v4f32.f32">;
2364def int_nvvm_tex_unified_2d_array_level_v4f32_f32
2365  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2366              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2367               llvm_float_ty, llvm_float_ty], [],
2368              "llvm.nvvm.tex.unified.2d.array.level.v4f32.f32">;
2369def int_nvvm_tex_unified_2d_array_grad_v4f32_f32
2370  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2371              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2372               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2373               llvm_float_ty], [],
2374              "llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32">;
2375def int_nvvm_tex_unified_2d_array_v4s32_s32
2376  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2377              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2378               llvm_i32_ty], [],
2379              "llvm.nvvm.tex.unified.2d.array.v4s32.s32">;
2380def int_nvvm_tex_unified_2d_array_v4s32_f32
2381  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2382              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2383               llvm_float_ty], [],
2384              "llvm.nvvm.tex.unified.2d.array.v4s32.f32">;
2385def int_nvvm_tex_unified_2d_array_level_v4s32_f32
2386  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2387              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2388               llvm_float_ty, llvm_float_ty], [],
2389              "llvm.nvvm.tex.unified.2d.array.level.v4s32.f32">;
2390def int_nvvm_tex_unified_2d_array_grad_v4s32_f32
2391  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2392              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2393               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2394               llvm_float_ty], [],
2395              "llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32">;
2396def int_nvvm_tex_unified_2d_array_v4u32_s32
2397  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2398              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
2399               llvm_i32_ty], [],
2400              "llvm.nvvm.tex.unified.2d.array.v4u32.s32">;
2401def int_nvvm_tex_unified_2d_array_v4u32_f32
2402  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2403              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2404               llvm_float_ty], [],
2405              "llvm.nvvm.tex.unified.2d.array.v4u32.f32">;
2406def int_nvvm_tex_unified_2d_array_level_v4u32_f32
2407  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2408              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2409               llvm_float_ty, llvm_float_ty], [],
2410              "llvm.nvvm.tex.unified.2d.array.level.v4u32.f32">;
2411def int_nvvm_tex_unified_2d_array_grad_v4u32_f32
2412  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2413              [llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
2414               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2415               llvm_float_ty], [],
2416              "llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32">;
2417
2418def int_nvvm_tex_unified_3d_v4f32_s32
2419  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2420              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2421              [], "llvm.nvvm.tex.unified.3d.v4f32.s32">;
2422def int_nvvm_tex_unified_3d_v4f32_f32
2423  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2424              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2425               llvm_float_ty], [],
2426              "llvm.nvvm.tex.unified.3d.v4f32.f32">;
2427def int_nvvm_tex_unified_3d_level_v4f32_f32
2428  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2429              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2430               llvm_float_ty, llvm_float_ty], [],
2431              "llvm.nvvm.tex.unified.3d.level.v4f32.f32">;
2432def int_nvvm_tex_unified_3d_grad_v4f32_f32
2433  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2434              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2435               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2436               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2437              "llvm.nvvm.tex.unified.3d.grad.v4f32.f32">;
2438def int_nvvm_tex_unified_3d_v4s32_s32
2439  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2440              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2441              [], "llvm.nvvm.tex.unified.3d.v4s32.s32">;
2442def int_nvvm_tex_unified_3d_v4s32_f32
2443  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2444              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2445               llvm_float_ty], [],
2446              "llvm.nvvm.tex.unified.3d.v4s32.f32">;
2447def int_nvvm_tex_unified_3d_level_v4s32_f32
2448  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2449              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2450               llvm_float_ty, llvm_float_ty], [],
2451              "llvm.nvvm.tex.unified.3d.level.v4s32.f32">;
2452def int_nvvm_tex_unified_3d_grad_v4s32_f32
2453  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2454              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2455               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2456               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2457              "llvm.nvvm.tex.unified.3d.grad.v4s32.f32">;
2458def int_nvvm_tex_unified_3d_v4u32_s32
2459  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2460              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2461              [], "llvm.nvvm.tex.unified.3d.v4u32.s32">;
2462def int_nvvm_tex_unified_3d_v4u32_f32
2463  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2464              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2465               llvm_float_ty], [],
2466              "llvm.nvvm.tex.unified.3d.v4u32.f32">;
2467def int_nvvm_tex_unified_3d_level_v4u32_f32
2468  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2469              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2470               llvm_float_ty, llvm_float_ty], [],
2471              "llvm.nvvm.tex.unified.3d.level.v4u32.f32">;
2472def int_nvvm_tex_unified_3d_grad_v4u32_f32
2473  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2474              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2475               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2476               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2477              "llvm.nvvm.tex.unified.3d.grad.v4u32.f32">;
2478
2479def int_nvvm_tex_unified_cube_v4f32_f32
2480  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2481              [llvm_i64_ty,
2482               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2483              "llvm.nvvm.tex.unified.cube.v4f32.f32">;
2484def int_nvvm_tex_unified_cube_level_v4f32_f32
2485  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2486              [llvm_i64_ty,
2487               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2488              "llvm.nvvm.tex.unified.cube.level.v4f32.f32">;
2489def int_nvvm_tex_unified_cube_v4s32_f32
2490  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2491              [llvm_i64_ty,
2492               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2493              "llvm.nvvm.tex.unified.cube.v4s32.f32">;
2494def int_nvvm_tex_unified_cube_level_v4s32_f32
2495  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2496              [llvm_i64_ty,
2497               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2498              "llvm.nvvm.tex.unified.cube.level.v4s32.f32">;
2499def int_nvvm_tex_unified_cube_v4u32_f32
2500  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2501              [llvm_i64_ty,
2502               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2503              "llvm.nvvm.tex.unified.cube.v4u32.f32">;
2504def int_nvvm_tex_unified_cube_level_v4u32_f32
2505  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2506              [llvm_i64_ty,
2507               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2508              "llvm.nvvm.tex.unified.cube.level.v4u32.f32">;
2509
2510def int_nvvm_tex_unified_cube_array_v4f32_f32
2511  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2512              [llvm_i64_ty, llvm_i32_ty,
2513               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2514              "llvm.nvvm.tex.unified.cube.array.v4f32.f32">;
2515def int_nvvm_tex_unified_cube_array_level_v4f32_f32
2516  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2517              [llvm_i64_ty, llvm_i32_ty,
2518               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2519              "llvm.nvvm.tex.unified.cube.array.level.v4f32.f32">;
2520def int_nvvm_tex_unified_cube_array_v4s32_f32
2521  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2522              [llvm_i64_ty, llvm_i32_ty,
2523               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2524              "llvm.nvvm.tex.unified.cube.array.v4s32.f32">;
2525def int_nvvm_tex_unified_cube_array_level_v4s32_f32
2526  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2527              [llvm_i64_ty, llvm_i32_ty,
2528               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2529              "llvm.nvvm.tex.unified.cube.array.level.v4s32.f32">;
2530def int_nvvm_tex_unified_cube_array_v4u32_f32
2531  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2532              [llvm_i64_ty, llvm_i32_ty,
2533               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2534              "llvm.nvvm.tex.unified.cube.array.v4u32.f32">;
2535def int_nvvm_tex_unified_cube_array_level_v4u32_f32
2536  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2537              [llvm_i64_ty, llvm_i32_ty,
2538               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2539              "llvm.nvvm.tex.unified.cube.array.level.v4u32.f32">;
2540
2541def int_nvvm_tex_unified_cube_grad_v4f32_f32
2542  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2543              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2544               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2545               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2546              "llvm.nvvm.tex.unified.cube.grad.v4f32.f32">;
2547def int_nvvm_tex_unified_cube_grad_v4s32_f32
2548  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2549              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2550               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2551               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2552              "llvm.nvvm.tex.unified.cube.grad.v4s32.f32">;
2553def int_nvvm_tex_unified_cube_grad_v4u32_f32
2554  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2555              [llvm_i64_ty, llvm_float_ty, llvm_float_ty,
2556               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2557               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2558              "llvm.nvvm.tex.unified.cube.grad.v4u32.f32">;
2559
2560def int_nvvm_tex_unified_cube_array_grad_v4f32_f32
2561  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2562              [llvm_i64_ty, llvm_i32_ty,
2563              llvm_float_ty, llvm_float_ty,
2564               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2565               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2566              "llvm.nvvm.tex.unified.cube.array.grad.v4f32.f32">;
2567def int_nvvm_tex_unified_cube_array_grad_v4s32_f32
2568  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2569              [llvm_i64_ty, llvm_i32_ty,
2570              llvm_float_ty, llvm_float_ty,
2571               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2572               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2573              "llvm.nvvm.tex.unified.cube.array.grad.v4s32.f32">;
2574def int_nvvm_tex_unified_cube_array_grad_v4u32_f32
2575  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2576              [llvm_i64_ty, llvm_i32_ty,
2577              llvm_float_ty, llvm_float_ty,
2578               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
2579               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
2580              "llvm.nvvm.tex.unified.cube.array.grad.v4u32.f32">;
2581
2582def int_nvvm_tld4_unified_r_2d_v4f32_f32
2583  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2584              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2585              "llvm.nvvm.tld4.unified.r.2d.v4f32.f32">;
2586def int_nvvm_tld4_unified_g_2d_v4f32_f32
2587  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2588              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2589              "llvm.nvvm.tld4.unified.g.2d.v4f32.f32">;
2590def int_nvvm_tld4_unified_b_2d_v4f32_f32
2591  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2592              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2593              "llvm.nvvm.tld4.unified.b.2d.v4f32.f32">;
2594def int_nvvm_tld4_unified_a_2d_v4f32_f32
2595  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
2596              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2597              "llvm.nvvm.tld4.unified.a.2d.v4f32.f32">;
2598def int_nvvm_tld4_unified_r_2d_v4s32_f32
2599  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2600              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2601              "llvm.nvvm.tld4.unified.r.2d.v4s32.f32">;
2602def int_nvvm_tld4_unified_g_2d_v4s32_f32
2603  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2604              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2605              "llvm.nvvm.tld4.unified.g.2d.v4s32.f32">;
2606def int_nvvm_tld4_unified_b_2d_v4s32_f32
2607  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2608              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2609              "llvm.nvvm.tld4.unified.b.2d.v4s32.f32">;
2610def int_nvvm_tld4_unified_a_2d_v4s32_f32
2611  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2612              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2613              "llvm.nvvm.tld4.unified.a.2d.v4s32.f32">;
2614def int_nvvm_tld4_unified_r_2d_v4u32_f32
2615  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2616              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2617              "llvm.nvvm.tld4.unified.r.2d.v4u32.f32">;
2618def int_nvvm_tld4_unified_g_2d_v4u32_f32
2619  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2620              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2621              "llvm.nvvm.tld4.unified.g.2d.v4u32.f32">;
2622def int_nvvm_tld4_unified_b_2d_v4u32_f32
2623  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2624              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2625              "llvm.nvvm.tld4.unified.b.2d.v4u32.f32">;
2626def int_nvvm_tld4_unified_a_2d_v4u32_f32
2627  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2628              [llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
2629              "llvm.nvvm.tld4.unified.a.2d.v4u32.f32">;
2630
2631
2632//=== Surface Load
2633// .clamp variants
2634def int_nvvm_suld_1d_i8_clamp
2635  : Intrinsic<[llvm_i16_ty],
2636              [llvm_i64_ty, llvm_i32_ty], [],
2637              "llvm.nvvm.suld.1d.i8.clamp">;
2638def int_nvvm_suld_1d_i16_clamp
2639  : Intrinsic<[llvm_i16_ty],
2640              [llvm_i64_ty, llvm_i32_ty], [],
2641              "llvm.nvvm.suld.1d.i16.clamp">;
2642def int_nvvm_suld_1d_i32_clamp
2643  : Intrinsic<[llvm_i32_ty],
2644              [llvm_i64_ty, llvm_i32_ty], [],
2645              "llvm.nvvm.suld.1d.i32.clamp">;
2646def int_nvvm_suld_1d_i64_clamp
2647  : Intrinsic<[llvm_i64_ty],
2648              [llvm_i64_ty, llvm_i32_ty], [],
2649              "llvm.nvvm.suld.1d.i64.clamp">;
2650def int_nvvm_suld_1d_v2i8_clamp
2651  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2652              [llvm_i64_ty, llvm_i32_ty], [],
2653              "llvm.nvvm.suld.1d.v2i8.clamp">;
2654def int_nvvm_suld_1d_v2i16_clamp
2655  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2656              [llvm_i64_ty, llvm_i32_ty], [],
2657              "llvm.nvvm.suld.1d.v2i16.clamp">;
2658def int_nvvm_suld_1d_v2i32_clamp
2659  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2660              [llvm_i64_ty, llvm_i32_ty], [],
2661              "llvm.nvvm.suld.1d.v2i32.clamp">;
2662def int_nvvm_suld_1d_v2i64_clamp
2663  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2664              [llvm_i64_ty, llvm_i32_ty], [],
2665              "llvm.nvvm.suld.1d.v2i64.clamp">;
2666def int_nvvm_suld_1d_v4i8_clamp
2667  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2668              [llvm_i64_ty, llvm_i32_ty], [],
2669              "llvm.nvvm.suld.1d.v4i8.clamp">;
2670def int_nvvm_suld_1d_v4i16_clamp
2671  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2672              [llvm_i64_ty, llvm_i32_ty], [],
2673              "llvm.nvvm.suld.1d.v4i16.clamp">;
2674def int_nvvm_suld_1d_v4i32_clamp
2675  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2676              [llvm_i64_ty, llvm_i32_ty], [],
2677              "llvm.nvvm.suld.1d.v4i32.clamp">;
2678
2679def int_nvvm_suld_1d_array_i8_clamp
2680  : Intrinsic<[llvm_i16_ty],
2681              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2682              "llvm.nvvm.suld.1d.array.i8.clamp">;
2683def int_nvvm_suld_1d_array_i16_clamp
2684  : Intrinsic<[llvm_i16_ty],
2685              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2686              "llvm.nvvm.suld.1d.array.i16.clamp">;
2687def int_nvvm_suld_1d_array_i32_clamp
2688  : Intrinsic<[llvm_i32_ty],
2689              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2690              "llvm.nvvm.suld.1d.array.i32.clamp">;
2691def int_nvvm_suld_1d_array_i64_clamp
2692  : Intrinsic<[llvm_i64_ty],
2693              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2694              "llvm.nvvm.suld.1d.array.i64.clamp">;
2695def int_nvvm_suld_1d_array_v2i8_clamp
2696  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2697              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2698              "llvm.nvvm.suld.1d.array.v2i8.clamp">;
2699def int_nvvm_suld_1d_array_v2i16_clamp
2700  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2701              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2702              "llvm.nvvm.suld.1d.array.v2i16.clamp">;
2703def int_nvvm_suld_1d_array_v2i32_clamp
2704  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2705              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2706              "llvm.nvvm.suld.1d.array.v2i32.clamp">;
2707def int_nvvm_suld_1d_array_v2i64_clamp
2708  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2709              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2710              "llvm.nvvm.suld.1d.array.v2i64.clamp">;
2711def int_nvvm_suld_1d_array_v4i8_clamp
2712  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2713              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2714              "llvm.nvvm.suld.1d.array.v4i8.clamp">;
2715def int_nvvm_suld_1d_array_v4i16_clamp
2716  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2717              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2718              "llvm.nvvm.suld.1d.array.v4i16.clamp">;
2719def int_nvvm_suld_1d_array_v4i32_clamp
2720  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2721              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2722              "llvm.nvvm.suld.1d.array.v4i32.clamp">;
2723
2724def int_nvvm_suld_2d_i8_clamp
2725  : Intrinsic<[llvm_i16_ty],
2726              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2727              "llvm.nvvm.suld.2d.i8.clamp">;
2728def int_nvvm_suld_2d_i16_clamp
2729  : Intrinsic<[llvm_i16_ty],
2730              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2731              "llvm.nvvm.suld.2d.i16.clamp">;
2732def int_nvvm_suld_2d_i32_clamp
2733  : Intrinsic<[llvm_i32_ty],
2734              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2735              "llvm.nvvm.suld.2d.i32.clamp">;
2736def int_nvvm_suld_2d_i64_clamp
2737  : Intrinsic<[llvm_i64_ty],
2738              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2739              "llvm.nvvm.suld.2d.i64.clamp">;
2740def int_nvvm_suld_2d_v2i8_clamp
2741  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2742              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2743              "llvm.nvvm.suld.2d.v2i8.clamp">;
2744def int_nvvm_suld_2d_v2i16_clamp
2745  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2746              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2747              "llvm.nvvm.suld.2d.v2i16.clamp">;
2748def int_nvvm_suld_2d_v2i32_clamp
2749  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2750              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2751              "llvm.nvvm.suld.2d.v2i32.clamp">;
2752def int_nvvm_suld_2d_v2i64_clamp
2753  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2754              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2755              "llvm.nvvm.suld.2d.v2i64.clamp">;
2756def int_nvvm_suld_2d_v4i8_clamp
2757  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2758              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2759              "llvm.nvvm.suld.2d.v4i8.clamp">;
2760def int_nvvm_suld_2d_v4i16_clamp
2761  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2762              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2763              "llvm.nvvm.suld.2d.v4i16.clamp">;
2764def int_nvvm_suld_2d_v4i32_clamp
2765  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2766              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2767              "llvm.nvvm.suld.2d.v4i32.clamp">;
2768
2769def int_nvvm_suld_2d_array_i8_clamp
2770  : Intrinsic<[llvm_i16_ty],
2771              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2772              "llvm.nvvm.suld.2d.array.i8.clamp">;
2773def int_nvvm_suld_2d_array_i16_clamp
2774  : Intrinsic<[llvm_i16_ty],
2775              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2776              "llvm.nvvm.suld.2d.array.i16.clamp">;
2777def int_nvvm_suld_2d_array_i32_clamp
2778  : Intrinsic<[llvm_i32_ty],
2779              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2780              "llvm.nvvm.suld.2d.array.i32.clamp">;
2781def int_nvvm_suld_2d_array_i64_clamp
2782  : Intrinsic<[llvm_i64_ty],
2783              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2784              "llvm.nvvm.suld.2d.array.i64.clamp">;
2785def int_nvvm_suld_2d_array_v2i8_clamp
2786  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2787              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2788              "llvm.nvvm.suld.2d.array.v2i8.clamp">;
2789def int_nvvm_suld_2d_array_v2i16_clamp
2790  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2791              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2792              "llvm.nvvm.suld.2d.array.v2i16.clamp">;
2793def int_nvvm_suld_2d_array_v2i32_clamp
2794  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2795              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2796              "llvm.nvvm.suld.2d.array.v2i32.clamp">;
2797def int_nvvm_suld_2d_array_v2i64_clamp
2798  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2799              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2800              "llvm.nvvm.suld.2d.array.v2i64.clamp">;
2801def int_nvvm_suld_2d_array_v4i8_clamp
2802  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2803              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2804              "llvm.nvvm.suld.2d.array.v4i8.clamp">;
2805def int_nvvm_suld_2d_array_v4i16_clamp
2806  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2807              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2808              "llvm.nvvm.suld.2d.array.v4i16.clamp">;
2809def int_nvvm_suld_2d_array_v4i32_clamp
2810  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2811              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2812              "llvm.nvvm.suld.2d.array.v4i32.clamp">;
2813
2814def int_nvvm_suld_3d_i8_clamp
2815  : Intrinsic<[llvm_i16_ty],
2816              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2817              "llvm.nvvm.suld.3d.i8.clamp">;
2818def int_nvvm_suld_3d_i16_clamp
2819  : Intrinsic<[llvm_i16_ty],
2820              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2821              "llvm.nvvm.suld.3d.i16.clamp">;
2822def int_nvvm_suld_3d_i32_clamp
2823  : Intrinsic<[llvm_i32_ty],
2824              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2825              "llvm.nvvm.suld.3d.i32.clamp">;
2826def int_nvvm_suld_3d_i64_clamp
2827  : Intrinsic<[llvm_i64_ty],
2828              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2829              "llvm.nvvm.suld.3d.i64.clamp">;
2830def int_nvvm_suld_3d_v2i8_clamp
2831  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2832              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2833              "llvm.nvvm.suld.3d.v2i8.clamp">;
2834def int_nvvm_suld_3d_v2i16_clamp
2835  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2836              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2837              "llvm.nvvm.suld.3d.v2i16.clamp">;
2838def int_nvvm_suld_3d_v2i32_clamp
2839  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2840              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2841              "llvm.nvvm.suld.3d.v2i32.clamp">;
2842def int_nvvm_suld_3d_v2i64_clamp
2843  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2844              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2845              "llvm.nvvm.suld.3d.v2i64.clamp">;
2846def int_nvvm_suld_3d_v4i8_clamp
2847  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2848              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2849              "llvm.nvvm.suld.3d.v4i8.clamp">;
2850def int_nvvm_suld_3d_v4i16_clamp
2851  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2852              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2853              "llvm.nvvm.suld.3d.v4i16.clamp">;
2854def int_nvvm_suld_3d_v4i32_clamp
2855  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2856              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2857              "llvm.nvvm.suld.3d.v4i32.clamp">;
2858
2859// .trap variants
2860def int_nvvm_suld_1d_i8_trap
2861  : Intrinsic<[llvm_i16_ty],
2862              [llvm_i64_ty, llvm_i32_ty], [],
2863              "llvm.nvvm.suld.1d.i8.trap">;
2864def int_nvvm_suld_1d_i16_trap
2865  : Intrinsic<[llvm_i16_ty],
2866              [llvm_i64_ty, llvm_i32_ty], [],
2867              "llvm.nvvm.suld.1d.i16.trap">;
2868def int_nvvm_suld_1d_i32_trap
2869  : Intrinsic<[llvm_i32_ty],
2870              [llvm_i64_ty, llvm_i32_ty], [],
2871              "llvm.nvvm.suld.1d.i32.trap">;
2872def int_nvvm_suld_1d_i64_trap
2873  : Intrinsic<[llvm_i64_ty],
2874              [llvm_i64_ty, llvm_i32_ty], [],
2875              "llvm.nvvm.suld.1d.i64.trap">;
2876def int_nvvm_suld_1d_v2i8_trap
2877  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2878              [llvm_i64_ty, llvm_i32_ty], [],
2879              "llvm.nvvm.suld.1d.v2i8.trap">;
2880def int_nvvm_suld_1d_v2i16_trap
2881  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2882              [llvm_i64_ty, llvm_i32_ty], [],
2883              "llvm.nvvm.suld.1d.v2i16.trap">;
2884def int_nvvm_suld_1d_v2i32_trap
2885  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2886              [llvm_i64_ty, llvm_i32_ty], [],
2887              "llvm.nvvm.suld.1d.v2i32.trap">;
2888def int_nvvm_suld_1d_v2i64_trap
2889  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2890              [llvm_i64_ty, llvm_i32_ty], [],
2891              "llvm.nvvm.suld.1d.v2i64.trap">;
2892def int_nvvm_suld_1d_v4i8_trap
2893  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2894              [llvm_i64_ty, llvm_i32_ty], [],
2895              "llvm.nvvm.suld.1d.v4i8.trap">;
2896def int_nvvm_suld_1d_v4i16_trap
2897  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2898              [llvm_i64_ty, llvm_i32_ty], [],
2899              "llvm.nvvm.suld.1d.v4i16.trap">;
2900def int_nvvm_suld_1d_v4i32_trap
2901  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2902              [llvm_i64_ty, llvm_i32_ty], [],
2903              "llvm.nvvm.suld.1d.v4i32.trap">;
2904
2905def int_nvvm_suld_1d_array_i8_trap
2906  : Intrinsic<[llvm_i16_ty],
2907              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2908              "llvm.nvvm.suld.1d.array.i8.trap">;
2909def int_nvvm_suld_1d_array_i16_trap
2910  : Intrinsic<[llvm_i16_ty],
2911              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2912              "llvm.nvvm.suld.1d.array.i16.trap">;
2913def int_nvvm_suld_1d_array_i32_trap
2914  : Intrinsic<[llvm_i32_ty],
2915              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2916              "llvm.nvvm.suld.1d.array.i32.trap">;
2917def int_nvvm_suld_1d_array_i64_trap
2918  : Intrinsic<[llvm_i64_ty],
2919              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2920              "llvm.nvvm.suld.1d.array.i64.trap">;
2921def int_nvvm_suld_1d_array_v2i8_trap
2922  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2923              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2924              "llvm.nvvm.suld.1d.array.v2i8.trap">;
2925def int_nvvm_suld_1d_array_v2i16_trap
2926  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2927              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2928              "llvm.nvvm.suld.1d.array.v2i16.trap">;
2929def int_nvvm_suld_1d_array_v2i32_trap
2930  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2931              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2932              "llvm.nvvm.suld.1d.array.v2i32.trap">;
2933def int_nvvm_suld_1d_array_v2i64_trap
2934  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2935              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2936              "llvm.nvvm.suld.1d.array.v2i64.trap">;
2937def int_nvvm_suld_1d_array_v4i8_trap
2938  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2939              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2940              "llvm.nvvm.suld.1d.array.v4i8.trap">;
2941def int_nvvm_suld_1d_array_v4i16_trap
2942  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2943              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2944              "llvm.nvvm.suld.1d.array.v4i16.trap">;
2945def int_nvvm_suld_1d_array_v4i32_trap
2946  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2947              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2948              "llvm.nvvm.suld.1d.array.v4i32.trap">;
2949
2950def int_nvvm_suld_2d_i8_trap
2951  : Intrinsic<[llvm_i16_ty],
2952              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2953              "llvm.nvvm.suld.2d.i8.trap">;
2954def int_nvvm_suld_2d_i16_trap
2955  : Intrinsic<[llvm_i16_ty],
2956              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2957              "llvm.nvvm.suld.2d.i16.trap">;
2958def int_nvvm_suld_2d_i32_trap
2959  : Intrinsic<[llvm_i32_ty],
2960              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2961              "llvm.nvvm.suld.2d.i32.trap">;
2962def int_nvvm_suld_2d_i64_trap
2963  : Intrinsic<[llvm_i64_ty],
2964              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2965              "llvm.nvvm.suld.2d.i64.trap">;
2966def int_nvvm_suld_2d_v2i8_trap
2967  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2968              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2969              "llvm.nvvm.suld.2d.v2i8.trap">;
2970def int_nvvm_suld_2d_v2i16_trap
2971  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
2972              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2973              "llvm.nvvm.suld.2d.v2i16.trap">;
2974def int_nvvm_suld_2d_v2i32_trap
2975  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
2976              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2977              "llvm.nvvm.suld.2d.v2i32.trap">;
2978def int_nvvm_suld_2d_v2i64_trap
2979  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
2980              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2981              "llvm.nvvm.suld.2d.v2i64.trap">;
2982def int_nvvm_suld_2d_v4i8_trap
2983  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2984              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2985              "llvm.nvvm.suld.2d.v4i8.trap">;
2986def int_nvvm_suld_2d_v4i16_trap
2987  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
2988              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2989              "llvm.nvvm.suld.2d.v4i16.trap">;
2990def int_nvvm_suld_2d_v4i32_trap
2991  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
2992              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
2993              "llvm.nvvm.suld.2d.v4i32.trap">;
2994
2995def int_nvvm_suld_2d_array_i8_trap
2996  : Intrinsic<[llvm_i16_ty],
2997              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
2998              "llvm.nvvm.suld.2d.array.i8.trap">;
2999def int_nvvm_suld_2d_array_i16_trap
3000  : Intrinsic<[llvm_i16_ty],
3001              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3002              "llvm.nvvm.suld.2d.array.i16.trap">;
3003def int_nvvm_suld_2d_array_i32_trap
3004  : Intrinsic<[llvm_i32_ty],
3005              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3006              "llvm.nvvm.suld.2d.array.i32.trap">;
3007def int_nvvm_suld_2d_array_i64_trap
3008  : Intrinsic<[llvm_i64_ty],
3009              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3010              "llvm.nvvm.suld.2d.array.i64.trap">;
3011def int_nvvm_suld_2d_array_v2i8_trap
3012  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3013              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3014              "llvm.nvvm.suld.2d.array.v2i8.trap">;
3015def int_nvvm_suld_2d_array_v2i16_trap
3016  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3017              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3018              "llvm.nvvm.suld.2d.array.v2i16.trap">;
3019def int_nvvm_suld_2d_array_v2i32_trap
3020  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3021              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3022              "llvm.nvvm.suld.2d.array.v2i32.trap">;
3023def int_nvvm_suld_2d_array_v2i64_trap
3024  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3025              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3026              "llvm.nvvm.suld.2d.array.v2i64.trap">;
3027def int_nvvm_suld_2d_array_v4i8_trap
3028  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3029              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3030              "llvm.nvvm.suld.2d.array.v4i8.trap">;
3031def int_nvvm_suld_2d_array_v4i16_trap
3032  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3033              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3034              "llvm.nvvm.suld.2d.array.v4i16.trap">;
3035def int_nvvm_suld_2d_array_v4i32_trap
3036  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3037              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3038              "llvm.nvvm.suld.2d.array.v4i32.trap">;
3039
3040def int_nvvm_suld_3d_i8_trap
3041  : Intrinsic<[llvm_i16_ty],
3042              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3043              "llvm.nvvm.suld.3d.i8.trap">;
3044def int_nvvm_suld_3d_i16_trap
3045  : Intrinsic<[llvm_i16_ty],
3046              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3047              "llvm.nvvm.suld.3d.i16.trap">;
3048def int_nvvm_suld_3d_i32_trap
3049  : Intrinsic<[llvm_i32_ty],
3050              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3051              "llvm.nvvm.suld.3d.i32.trap">;
3052def int_nvvm_suld_3d_i64_trap
3053  : Intrinsic<[llvm_i64_ty],
3054              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3055              "llvm.nvvm.suld.3d.i64.trap">;
3056def int_nvvm_suld_3d_v2i8_trap
3057  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3058              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3059              "llvm.nvvm.suld.3d.v2i8.trap">;
3060def int_nvvm_suld_3d_v2i16_trap
3061  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3062              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3063              "llvm.nvvm.suld.3d.v2i16.trap">;
3064def int_nvvm_suld_3d_v2i32_trap
3065  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3066              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3067              "llvm.nvvm.suld.3d.v2i32.trap">;
3068def int_nvvm_suld_3d_v2i64_trap
3069  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3070              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3071              "llvm.nvvm.suld.3d.v2i64.trap">;
3072def int_nvvm_suld_3d_v4i8_trap
3073  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3074              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3075              "llvm.nvvm.suld.3d.v4i8.trap">;
3076def int_nvvm_suld_3d_v4i16_trap
3077  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3078              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3079              "llvm.nvvm.suld.3d.v4i16.trap">;
3080def int_nvvm_suld_3d_v4i32_trap
3081  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3082              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3083              "llvm.nvvm.suld.3d.v4i32.trap">;
3084
3085// .zero variants
3086def int_nvvm_suld_1d_i8_zero
3087  : Intrinsic<[llvm_i16_ty],
3088              [llvm_i64_ty, llvm_i32_ty], [],
3089              "llvm.nvvm.suld.1d.i8.zero">;
3090def int_nvvm_suld_1d_i16_zero
3091  : Intrinsic<[llvm_i16_ty],
3092              [llvm_i64_ty, llvm_i32_ty], [],
3093              "llvm.nvvm.suld.1d.i16.zero">;
3094def int_nvvm_suld_1d_i32_zero
3095  : Intrinsic<[llvm_i32_ty],
3096              [llvm_i64_ty, llvm_i32_ty], [],
3097              "llvm.nvvm.suld.1d.i32.zero">;
3098def int_nvvm_suld_1d_i64_zero
3099  : Intrinsic<[llvm_i64_ty],
3100              [llvm_i64_ty, llvm_i32_ty], [],
3101              "llvm.nvvm.suld.1d.i64.zero">;
3102def int_nvvm_suld_1d_v2i8_zero
3103  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3104              [llvm_i64_ty, llvm_i32_ty], [],
3105              "llvm.nvvm.suld.1d.v2i8.zero">;
3106def int_nvvm_suld_1d_v2i16_zero
3107  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3108              [llvm_i64_ty, llvm_i32_ty], [],
3109              "llvm.nvvm.suld.1d.v2i16.zero">;
3110def int_nvvm_suld_1d_v2i32_zero
3111  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3112              [llvm_i64_ty, llvm_i32_ty], [],
3113              "llvm.nvvm.suld.1d.v2i32.zero">;
3114def int_nvvm_suld_1d_v2i64_zero
3115  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3116              [llvm_i64_ty, llvm_i32_ty], [],
3117              "llvm.nvvm.suld.1d.v2i64.zero">;
3118def int_nvvm_suld_1d_v4i8_zero
3119  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3120              [llvm_i64_ty, llvm_i32_ty], [],
3121              "llvm.nvvm.suld.1d.v4i8.zero">;
3122def int_nvvm_suld_1d_v4i16_zero
3123  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3124              [llvm_i64_ty, llvm_i32_ty], [],
3125              "llvm.nvvm.suld.1d.v4i16.zero">;
3126def int_nvvm_suld_1d_v4i32_zero
3127  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3128              [llvm_i64_ty, llvm_i32_ty], [],
3129              "llvm.nvvm.suld.1d.v4i32.zero">;
3130
3131def int_nvvm_suld_1d_array_i8_zero
3132  : Intrinsic<[llvm_i16_ty],
3133              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3134              "llvm.nvvm.suld.1d.array.i8.zero">;
3135def int_nvvm_suld_1d_array_i16_zero
3136  : Intrinsic<[llvm_i16_ty],
3137              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3138              "llvm.nvvm.suld.1d.array.i16.zero">;
3139def int_nvvm_suld_1d_array_i32_zero
3140  : Intrinsic<[llvm_i32_ty],
3141              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3142              "llvm.nvvm.suld.1d.array.i32.zero">;
3143def int_nvvm_suld_1d_array_i64_zero
3144  : Intrinsic<[llvm_i64_ty],
3145              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3146              "llvm.nvvm.suld.1d.array.i64.zero">;
3147def int_nvvm_suld_1d_array_v2i8_zero
3148  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3149              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3150              "llvm.nvvm.suld.1d.array.v2i8.zero">;
3151def int_nvvm_suld_1d_array_v2i16_zero
3152  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3153              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3154              "llvm.nvvm.suld.1d.array.v2i16.zero">;
3155def int_nvvm_suld_1d_array_v2i32_zero
3156  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3157              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3158              "llvm.nvvm.suld.1d.array.v2i32.zero">;
3159def int_nvvm_suld_1d_array_v2i64_zero
3160  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3161              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3162              "llvm.nvvm.suld.1d.array.v2i64.zero">;
3163def int_nvvm_suld_1d_array_v4i8_zero
3164  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3165              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3166              "llvm.nvvm.suld.1d.array.v4i8.zero">;
3167def int_nvvm_suld_1d_array_v4i16_zero
3168  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3169              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3170              "llvm.nvvm.suld.1d.array.v4i16.zero">;
3171def int_nvvm_suld_1d_array_v4i32_zero
3172  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3173              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3174              "llvm.nvvm.suld.1d.array.v4i32.zero">;
3175
3176def int_nvvm_suld_2d_i8_zero
3177  : Intrinsic<[llvm_i16_ty],
3178              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3179              "llvm.nvvm.suld.2d.i8.zero">;
3180def int_nvvm_suld_2d_i16_zero
3181  : Intrinsic<[llvm_i16_ty],
3182              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3183              "llvm.nvvm.suld.2d.i16.zero">;
3184def int_nvvm_suld_2d_i32_zero
3185  : Intrinsic<[llvm_i32_ty],
3186              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3187              "llvm.nvvm.suld.2d.i32.zero">;
3188def int_nvvm_suld_2d_i64_zero
3189  : Intrinsic<[llvm_i64_ty],
3190              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3191              "llvm.nvvm.suld.2d.i64.zero">;
3192def int_nvvm_suld_2d_v2i8_zero
3193  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3194              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3195              "llvm.nvvm.suld.2d.v2i8.zero">;
3196def int_nvvm_suld_2d_v2i16_zero
3197  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3198              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3199              "llvm.nvvm.suld.2d.v2i16.zero">;
3200def int_nvvm_suld_2d_v2i32_zero
3201  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3202              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3203              "llvm.nvvm.suld.2d.v2i32.zero">;
3204def int_nvvm_suld_2d_v2i64_zero
3205  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3206              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3207              "llvm.nvvm.suld.2d.v2i64.zero">;
3208def int_nvvm_suld_2d_v4i8_zero
3209  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3210              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3211              "llvm.nvvm.suld.2d.v4i8.zero">;
3212def int_nvvm_suld_2d_v4i16_zero
3213  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3214              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3215              "llvm.nvvm.suld.2d.v4i16.zero">;
3216def int_nvvm_suld_2d_v4i32_zero
3217  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3218              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3219              "llvm.nvvm.suld.2d.v4i32.zero">;
3220
3221def int_nvvm_suld_2d_array_i8_zero
3222  : Intrinsic<[llvm_i16_ty],
3223              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3224              "llvm.nvvm.suld.2d.array.i8.zero">;
3225def int_nvvm_suld_2d_array_i16_zero
3226  : Intrinsic<[llvm_i16_ty],
3227              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3228              "llvm.nvvm.suld.2d.array.i16.zero">;
3229def int_nvvm_suld_2d_array_i32_zero
3230  : Intrinsic<[llvm_i32_ty],
3231              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3232              "llvm.nvvm.suld.2d.array.i32.zero">;
3233def int_nvvm_suld_2d_array_i64_zero
3234  : Intrinsic<[llvm_i64_ty],
3235              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3236              "llvm.nvvm.suld.2d.array.i64.zero">;
3237def int_nvvm_suld_2d_array_v2i8_zero
3238  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3239              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3240              "llvm.nvvm.suld.2d.array.v2i8.zero">;
3241def int_nvvm_suld_2d_array_v2i16_zero
3242  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3243              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3244              "llvm.nvvm.suld.2d.array.v2i16.zero">;
3245def int_nvvm_suld_2d_array_v2i32_zero
3246  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3247              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3248              "llvm.nvvm.suld.2d.array.v2i32.zero">;
3249def int_nvvm_suld_2d_array_v2i64_zero
3250  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3251              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3252              "llvm.nvvm.suld.2d.array.v2i64.zero">;
3253def int_nvvm_suld_2d_array_v4i8_zero
3254  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3255              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3256              "llvm.nvvm.suld.2d.array.v4i8.zero">;
3257def int_nvvm_suld_2d_array_v4i16_zero
3258  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3259              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3260              "llvm.nvvm.suld.2d.array.v4i16.zero">;
3261def int_nvvm_suld_2d_array_v4i32_zero
3262  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3263              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3264              "llvm.nvvm.suld.2d.array.v4i32.zero">;
3265
3266def int_nvvm_suld_3d_i8_zero
3267  : Intrinsic<[llvm_i16_ty],
3268              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3269              "llvm.nvvm.suld.3d.i8.zero">;
3270def int_nvvm_suld_3d_i16_zero
3271  : Intrinsic<[llvm_i16_ty],
3272              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3273              "llvm.nvvm.suld.3d.i16.zero">;
3274def int_nvvm_suld_3d_i32_zero
3275  : Intrinsic<[llvm_i32_ty],
3276              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3277              "llvm.nvvm.suld.3d.i32.zero">;
3278def int_nvvm_suld_3d_i64_zero
3279  : Intrinsic<[llvm_i64_ty],
3280              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3281              "llvm.nvvm.suld.3d.i64.zero">;
3282def int_nvvm_suld_3d_v2i8_zero
3283  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3284              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3285              "llvm.nvvm.suld.3d.v2i8.zero">;
3286def int_nvvm_suld_3d_v2i16_zero
3287  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
3288              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3289              "llvm.nvvm.suld.3d.v2i16.zero">;
3290def int_nvvm_suld_3d_v2i32_zero
3291  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
3292              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3293              "llvm.nvvm.suld.3d.v2i32.zero">;
3294def int_nvvm_suld_3d_v2i64_zero
3295  : Intrinsic<[llvm_i64_ty, llvm_i64_ty],
3296              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3297              "llvm.nvvm.suld.3d.v2i64.zero">;
3298def int_nvvm_suld_3d_v4i8_zero
3299  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3300              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3301              "llvm.nvvm.suld.3d.v4i8.zero">;
3302def int_nvvm_suld_3d_v4i16_zero
3303  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
3304              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3305              "llvm.nvvm.suld.3d.v4i16.zero">;
3306def int_nvvm_suld_3d_v4i32_zero
3307  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
3308              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3309              "llvm.nvvm.suld.3d.v4i32.zero">;
3310
3311//===- Texture Query ------------------------------------------------------===//
3312
3313def int_nvvm_txq_channel_order
3314  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3315              "llvm.nvvm.txq.channel.order">,
3316    ClangBuiltin<"__nvvm_txq_channel_order">;
3317def int_nvvm_txq_channel_data_type
3318  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3319              "llvm.nvvm.txq.channel.data.type">,
3320    ClangBuiltin<"__nvvm_txq_channel_data_type">;
3321def int_nvvm_txq_width
3322  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3323              "llvm.nvvm.txq.width">,
3324    ClangBuiltin<"__nvvm_txq_width">;
3325def int_nvvm_txq_height
3326  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3327              "llvm.nvvm.txq.height">,
3328    ClangBuiltin<"__nvvm_txq_height">;
3329def int_nvvm_txq_depth
3330  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3331              "llvm.nvvm.txq.depth">,
3332    ClangBuiltin<"__nvvm_txq_depth">;
3333def int_nvvm_txq_array_size
3334  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3335              "llvm.nvvm.txq.array.size">,
3336    ClangBuiltin<"__nvvm_txq_array_size">;
3337def int_nvvm_txq_num_samples
3338  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3339              "llvm.nvvm.txq.num.samples">,
3340    ClangBuiltin<"__nvvm_txq_num_samples">;
3341def int_nvvm_txq_num_mipmap_levels
3342  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3343              "llvm.nvvm.txq.num.mipmap.levels">,
3344    ClangBuiltin<"__nvvm_txq_num_mipmap_levels">;
3345
3346//===- Surface Query ------------------------------------------------------===//
3347
3348def int_nvvm_suq_channel_order
3349  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3350              "llvm.nvvm.suq.channel.order">,
3351    ClangBuiltin<"__nvvm_suq_channel_order">;
3352def int_nvvm_suq_channel_data_type
3353  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3354              "llvm.nvvm.suq.channel.data.type">,
3355    ClangBuiltin<"__nvvm_suq_channel_data_type">;
3356def int_nvvm_suq_width
3357  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3358              "llvm.nvvm.suq.width">,
3359    ClangBuiltin<"__nvvm_suq_width">;
3360def int_nvvm_suq_height
3361  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3362              "llvm.nvvm.suq.height">,
3363    ClangBuiltin<"__nvvm_suq_height">;
3364def int_nvvm_suq_depth
3365  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3366              "llvm.nvvm.suq.depth">,
3367    ClangBuiltin<"__nvvm_suq_depth">;
3368def int_nvvm_suq_array_size
3369  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
3370              "llvm.nvvm.suq.array.size">,
3371    ClangBuiltin<"__nvvm_suq_array_size">;
3372
3373
3374//===- Handle Query -------------------------------------------------------===//
3375
3376def int_nvvm_istypep_sampler
3377  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
3378              "llvm.nvvm.istypep.sampler">,
3379    ClangBuiltin<"__nvvm_istypep_sampler">;
3380def int_nvvm_istypep_surface
3381  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
3382              "llvm.nvvm.istypep.surface">,
3383    ClangBuiltin<"__nvvm_istypep_surface">;
3384def int_nvvm_istypep_texture
3385  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
3386              "llvm.nvvm.istypep.texture">,
3387    ClangBuiltin<"__nvvm_istypep_texture">;
3388
3389
3390
3391//===- Surface Stores -----------------------------------------------------===//
3392
3393// Unformatted
3394// .clamp variant
3395def int_nvvm_sust_b_1d_i8_clamp
3396  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3397              "llvm.nvvm.sust.b.1d.i8.clamp">,
3398    ClangBuiltin<"__nvvm_sust_b_1d_i8_clamp">;
3399def int_nvvm_sust_b_1d_i16_clamp
3400  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3401              "llvm.nvvm.sust.b.1d.i16.clamp">,
3402    ClangBuiltin<"__nvvm_sust_b_1d_i16_clamp">;
3403def int_nvvm_sust_b_1d_i32_clamp
3404  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3405              "llvm.nvvm.sust.b.1d.i32.clamp">,
3406    ClangBuiltin<"__nvvm_sust_b_1d_i32_clamp">;
3407def int_nvvm_sust_b_1d_i64_clamp
3408  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
3409              "llvm.nvvm.sust.b.1d.i64.clamp">,
3410    ClangBuiltin<"__nvvm_sust_b_1d_i64_clamp">;
3411def int_nvvm_sust_b_1d_v2i8_clamp
3412  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3413              "llvm.nvvm.sust.b.1d.v2i8.clamp">,
3414    ClangBuiltin<"__nvvm_sust_b_1d_v2i8_clamp">;
3415def int_nvvm_sust_b_1d_v2i16_clamp
3416  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3417              "llvm.nvvm.sust.b.1d.v2i16.clamp">,
3418    ClangBuiltin<"__nvvm_sust_b_1d_v2i16_clamp">;
3419def int_nvvm_sust_b_1d_v2i32_clamp
3420  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3421              "llvm.nvvm.sust.b.1d.v2i32.clamp">,
3422    ClangBuiltin<"__nvvm_sust_b_1d_v2i32_clamp">;
3423def int_nvvm_sust_b_1d_v2i64_clamp
3424  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
3425              "llvm.nvvm.sust.b.1d.v2i64.clamp">,
3426    ClangBuiltin<"__nvvm_sust_b_1d_v2i64_clamp">;
3427def int_nvvm_sust_b_1d_v4i8_clamp
3428  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3429                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3430              "llvm.nvvm.sust.b.1d.v4i8.clamp">,
3431    ClangBuiltin<"__nvvm_sust_b_1d_v4i8_clamp">;
3432def int_nvvm_sust_b_1d_v4i16_clamp
3433  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3434                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3435              "llvm.nvvm.sust.b.1d.v4i16.clamp">,
3436    ClangBuiltin<"__nvvm_sust_b_1d_v4i16_clamp">;
3437def int_nvvm_sust_b_1d_v4i32_clamp
3438  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3439                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3440              "llvm.nvvm.sust.b.1d.v4i32.clamp">,
3441    ClangBuiltin<"__nvvm_sust_b_1d_v4i32_clamp">;
3442
3443
3444def int_nvvm_sust_b_1d_array_i8_clamp
3445  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3446              "llvm.nvvm.sust.b.1d.array.i8.clamp">,
3447    ClangBuiltin<"__nvvm_sust_b_1d_array_i8_clamp">;
3448def int_nvvm_sust_b_1d_array_i16_clamp
3449  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3450              "llvm.nvvm.sust.b.1d.array.i16.clamp">,
3451    ClangBuiltin<"__nvvm_sust_b_1d_array_i16_clamp">;
3452def int_nvvm_sust_b_1d_array_i32_clamp
3453  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3454              "llvm.nvvm.sust.b.1d.array.i32.clamp">,
3455    ClangBuiltin<"__nvvm_sust_b_1d_array_i32_clamp">;
3456def int_nvvm_sust_b_1d_array_i64_clamp
3457  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3458              "llvm.nvvm.sust.b.1d.array.i64.clamp">,
3459    ClangBuiltin<"__nvvm_sust_b_1d_array_i64_clamp">;
3460def int_nvvm_sust_b_1d_array_v2i8_clamp
3461  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3462                   llvm_i16_ty, llvm_i16_ty], [],
3463              "llvm.nvvm.sust.b.1d.array.v2i8.clamp">,
3464    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i8_clamp">;
3465def int_nvvm_sust_b_1d_array_v2i16_clamp
3466  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3467                   llvm_i16_ty, llvm_i16_ty], [],
3468              "llvm.nvvm.sust.b.1d.array.v2i16.clamp">,
3469    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i16_clamp">;
3470def int_nvvm_sust_b_1d_array_v2i32_clamp
3471  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3472                   llvm_i32_ty, llvm_i32_ty], [],
3473              "llvm.nvvm.sust.b.1d.array.v2i32.clamp">,
3474    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i32_clamp">;
3475def int_nvvm_sust_b_1d_array_v2i64_clamp
3476  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3477                   llvm_i64_ty, llvm_i64_ty], [],
3478              "llvm.nvvm.sust.b.1d.array.v2i64.clamp">,
3479    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i64_clamp">;
3480def int_nvvm_sust_b_1d_array_v4i8_clamp
3481  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3482                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3483              "llvm.nvvm.sust.b.1d.array.v4i8.clamp">,
3484    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i8_clamp">;
3485def int_nvvm_sust_b_1d_array_v4i16_clamp
3486  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3487                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3488              "llvm.nvvm.sust.b.1d.array.v4i16.clamp">,
3489    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i16_clamp">;
3490def int_nvvm_sust_b_1d_array_v4i32_clamp
3491  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3492                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3493              "llvm.nvvm.sust.b.1d.array.v4i32.clamp">,
3494    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i32_clamp">;
3495
3496
3497def int_nvvm_sust_b_2d_i8_clamp
3498  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3499              "llvm.nvvm.sust.b.2d.i8.clamp">,
3500    ClangBuiltin<"__nvvm_sust_b_2d_i8_clamp">;
3501def int_nvvm_sust_b_2d_i16_clamp
3502  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3503              "llvm.nvvm.sust.b.2d.i16.clamp">,
3504    ClangBuiltin<"__nvvm_sust_b_2d_i16_clamp">;
3505def int_nvvm_sust_b_2d_i32_clamp
3506  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3507              "llvm.nvvm.sust.b.2d.i32.clamp">,
3508    ClangBuiltin<"__nvvm_sust_b_2d_i32_clamp">;
3509def int_nvvm_sust_b_2d_i64_clamp
3510  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3511              "llvm.nvvm.sust.b.2d.i64.clamp">,
3512    ClangBuiltin<"__nvvm_sust_b_2d_i64_clamp">;
3513def int_nvvm_sust_b_2d_v2i8_clamp
3514  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3515                   llvm_i16_ty, llvm_i16_ty], [],
3516              "llvm.nvvm.sust.b.2d.v2i8.clamp">,
3517    ClangBuiltin<"__nvvm_sust_b_2d_v2i8_clamp">;
3518def int_nvvm_sust_b_2d_v2i16_clamp
3519  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3520                   llvm_i16_ty, llvm_i16_ty], [],
3521              "llvm.nvvm.sust.b.2d.v2i16.clamp">,
3522    ClangBuiltin<"__nvvm_sust_b_2d_v2i16_clamp">;
3523def int_nvvm_sust_b_2d_v2i32_clamp
3524  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3525                   llvm_i32_ty, llvm_i32_ty], [],
3526              "llvm.nvvm.sust.b.2d.v2i32.clamp">,
3527    ClangBuiltin<"__nvvm_sust_b_2d_v2i32_clamp">;
3528def int_nvvm_sust_b_2d_v2i64_clamp
3529  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3530                   llvm_i64_ty, llvm_i64_ty], [],
3531              "llvm.nvvm.sust.b.2d.v2i64.clamp">,
3532    ClangBuiltin<"__nvvm_sust_b_2d_v2i64_clamp">;
3533def int_nvvm_sust_b_2d_v4i8_clamp
3534  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3535                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3536              "llvm.nvvm.sust.b.2d.v4i8.clamp">,
3537    ClangBuiltin<"__nvvm_sust_b_2d_v4i8_clamp">;
3538def int_nvvm_sust_b_2d_v4i16_clamp
3539  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3540                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3541              "llvm.nvvm.sust.b.2d.v4i16.clamp">,
3542    ClangBuiltin<"__nvvm_sust_b_2d_v4i16_clamp">;
3543def int_nvvm_sust_b_2d_v4i32_clamp
3544  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3545                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3546              "llvm.nvvm.sust.b.2d.v4i32.clamp">,
3547    ClangBuiltin<"__nvvm_sust_b_2d_v4i32_clamp">;
3548
3549
3550def int_nvvm_sust_b_2d_array_i8_clamp
3551  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3552                   llvm_i32_ty, llvm_i16_ty], [],
3553              "llvm.nvvm.sust.b.2d.array.i8.clamp">,
3554    ClangBuiltin<"__nvvm_sust_b_2d_array_i8_clamp">;
3555def int_nvvm_sust_b_2d_array_i16_clamp
3556  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3557                   llvm_i32_ty, llvm_i16_ty], [],
3558              "llvm.nvvm.sust.b.2d.array.i16.clamp">,
3559    ClangBuiltin<"__nvvm_sust_b_2d_array_i16_clamp">;
3560def int_nvvm_sust_b_2d_array_i32_clamp
3561  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3562                   llvm_i32_ty, llvm_i32_ty], [],
3563              "llvm.nvvm.sust.b.2d.array.i32.clamp">,
3564    ClangBuiltin<"__nvvm_sust_b_2d_array_i32_clamp">;
3565def int_nvvm_sust_b_2d_array_i64_clamp
3566  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3567                   llvm_i32_ty, llvm_i64_ty], [],
3568              "llvm.nvvm.sust.b.2d.array.i64.clamp">,
3569    ClangBuiltin<"__nvvm_sust_b_2d_array_i64_clamp">;
3570def int_nvvm_sust_b_2d_array_v2i8_clamp
3571  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3572                   llvm_i16_ty, llvm_i16_ty], [],
3573              "llvm.nvvm.sust.b.2d.array.v2i8.clamp">,
3574    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i8_clamp">;
3575def int_nvvm_sust_b_2d_array_v2i16_clamp
3576  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3577                   llvm_i16_ty, llvm_i16_ty], [],
3578              "llvm.nvvm.sust.b.2d.array.v2i16.clamp">,
3579    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i16_clamp">;
3580def int_nvvm_sust_b_2d_array_v2i32_clamp
3581  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3582                   llvm_i32_ty, llvm_i32_ty], [],
3583              "llvm.nvvm.sust.b.2d.array.v2i32.clamp">,
3584    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i32_clamp">;
3585def int_nvvm_sust_b_2d_array_v2i64_clamp
3586  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3587                   llvm_i64_ty, llvm_i64_ty], [],
3588              "llvm.nvvm.sust.b.2d.array.v2i64.clamp">,
3589    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i64_clamp">;
3590def int_nvvm_sust_b_2d_array_v4i8_clamp
3591  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3592                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3593              "llvm.nvvm.sust.b.2d.array.v4i8.clamp">,
3594    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i8_clamp">;
3595def int_nvvm_sust_b_2d_array_v4i16_clamp
3596  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3597                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3598              "llvm.nvvm.sust.b.2d.array.v4i16.clamp">,
3599    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i16_clamp">;
3600def int_nvvm_sust_b_2d_array_v4i32_clamp
3601  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3602                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3603              "llvm.nvvm.sust.b.2d.array.v4i32.clamp">,
3604    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i32_clamp">;
3605
3606
3607def int_nvvm_sust_b_3d_i8_clamp
3608  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3609                   llvm_i32_ty, llvm_i16_ty], [],
3610              "llvm.nvvm.sust.b.3d.i8.clamp">,
3611    ClangBuiltin<"__nvvm_sust_b_3d_i8_clamp">;
3612def int_nvvm_sust_b_3d_i16_clamp
3613  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3614                   llvm_i32_ty, llvm_i16_ty], [],
3615              "llvm.nvvm.sust.b.3d.i16.clamp">,
3616    ClangBuiltin<"__nvvm_sust_b_3d_i16_clamp">;
3617def int_nvvm_sust_b_3d_i32_clamp
3618  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3619                   llvm_i32_ty, llvm_i32_ty], [],
3620              "llvm.nvvm.sust.b.3d.i32.clamp">,
3621    ClangBuiltin<"__nvvm_sust_b_3d_i32_clamp">;
3622def int_nvvm_sust_b_3d_i64_clamp
3623  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3624                   llvm_i32_ty, llvm_i64_ty], [],
3625              "llvm.nvvm.sust.b.3d.i64.clamp">,
3626    ClangBuiltin<"__nvvm_sust_b_3d_i64_clamp">;
3627def int_nvvm_sust_b_3d_v2i8_clamp
3628  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3629                   llvm_i16_ty, llvm_i16_ty], [],
3630              "llvm.nvvm.sust.b.3d.v2i8.clamp">,
3631    ClangBuiltin<"__nvvm_sust_b_3d_v2i8_clamp">;
3632def int_nvvm_sust_b_3d_v2i16_clamp
3633  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3634                   llvm_i16_ty, llvm_i16_ty], [],
3635              "llvm.nvvm.sust.b.3d.v2i16.clamp">,
3636    ClangBuiltin<"__nvvm_sust_b_3d_v2i16_clamp">;
3637def int_nvvm_sust_b_3d_v2i32_clamp
3638  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3639                   llvm_i32_ty, llvm_i32_ty], [],
3640              "llvm.nvvm.sust.b.3d.v2i32.clamp">,
3641    ClangBuiltin<"__nvvm_sust_b_3d_v2i32_clamp">;
3642def int_nvvm_sust_b_3d_v2i64_clamp
3643  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3644                   llvm_i64_ty, llvm_i64_ty], [],
3645              "llvm.nvvm.sust.b.3d.v2i64.clamp">,
3646    ClangBuiltin<"__nvvm_sust_b_3d_v2i64_clamp">;
3647def int_nvvm_sust_b_3d_v4i8_clamp
3648  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3649                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3650              "llvm.nvvm.sust.b.3d.v4i8.clamp">,
3651    ClangBuiltin<"__nvvm_sust_b_3d_v4i8_clamp">;
3652def int_nvvm_sust_b_3d_v4i16_clamp
3653  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3654                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3655              "llvm.nvvm.sust.b.3d.v4i16.clamp">,
3656    ClangBuiltin<"__nvvm_sust_b_3d_v4i16_clamp">;
3657def int_nvvm_sust_b_3d_v4i32_clamp
3658  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3659                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3660              "llvm.nvvm.sust.b.3d.v4i32.clamp">,
3661    ClangBuiltin<"__nvvm_sust_b_3d_v4i32_clamp">;
3662
3663
3664// .trap variant
3665def int_nvvm_sust_b_1d_i8_trap
3666  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3667              "llvm.nvvm.sust.b.1d.i8.trap">,
3668    ClangBuiltin<"__nvvm_sust_b_1d_i8_trap">;
3669def int_nvvm_sust_b_1d_i16_trap
3670  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3671              "llvm.nvvm.sust.b.1d.i16.trap">,
3672    ClangBuiltin<"__nvvm_sust_b_1d_i16_trap">;
3673def int_nvvm_sust_b_1d_i32_trap
3674  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3675              "llvm.nvvm.sust.b.1d.i32.trap">,
3676    ClangBuiltin<"__nvvm_sust_b_1d_i32_trap">;
3677def int_nvvm_sust_b_1d_i64_trap
3678  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
3679              "llvm.nvvm.sust.b.1d.i64.trap">,
3680    ClangBuiltin<"__nvvm_sust_b_1d_i64_trap">;
3681def int_nvvm_sust_b_1d_v2i8_trap
3682  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3683              "llvm.nvvm.sust.b.1d.v2i8.trap">,
3684    ClangBuiltin<"__nvvm_sust_b_1d_v2i8_trap">;
3685def int_nvvm_sust_b_1d_v2i16_trap
3686  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3687              "llvm.nvvm.sust.b.1d.v2i16.trap">,
3688    ClangBuiltin<"__nvvm_sust_b_1d_v2i16_trap">;
3689def int_nvvm_sust_b_1d_v2i32_trap
3690  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3691              "llvm.nvvm.sust.b.1d.v2i32.trap">,
3692    ClangBuiltin<"__nvvm_sust_b_1d_v2i32_trap">;
3693def int_nvvm_sust_b_1d_v2i64_trap
3694  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
3695              "llvm.nvvm.sust.b.1d.v2i64.trap">,
3696    ClangBuiltin<"__nvvm_sust_b_1d_v2i64_trap">;
3697def int_nvvm_sust_b_1d_v4i8_trap
3698  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3699                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3700              "llvm.nvvm.sust.b.1d.v4i8.trap">,
3701    ClangBuiltin<"__nvvm_sust_b_1d_v4i8_trap">;
3702def int_nvvm_sust_b_1d_v4i16_trap
3703  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3704                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3705              "llvm.nvvm.sust.b.1d.v4i16.trap">,
3706    ClangBuiltin<"__nvvm_sust_b_1d_v4i16_trap">;
3707def int_nvvm_sust_b_1d_v4i32_trap
3708  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3709                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3710              "llvm.nvvm.sust.b.1d.v4i32.trap">,
3711    ClangBuiltin<"__nvvm_sust_b_1d_v4i32_trap">;
3712
3713
3714def int_nvvm_sust_b_1d_array_i8_trap
3715  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3716              "llvm.nvvm.sust.b.1d.array.i8.trap">,
3717    ClangBuiltin<"__nvvm_sust_b_1d_array_i8_trap">;
3718def int_nvvm_sust_b_1d_array_i16_trap
3719  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3720              "llvm.nvvm.sust.b.1d.array.i16.trap">,
3721    ClangBuiltin<"__nvvm_sust_b_1d_array_i16_trap">;
3722def int_nvvm_sust_b_1d_array_i32_trap
3723  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3724              "llvm.nvvm.sust.b.1d.array.i32.trap">,
3725    ClangBuiltin<"__nvvm_sust_b_1d_array_i32_trap">;
3726def int_nvvm_sust_b_1d_array_i64_trap
3727  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3728              "llvm.nvvm.sust.b.1d.array.i64.trap">,
3729    ClangBuiltin<"__nvvm_sust_b_1d_array_i64_trap">;
3730def int_nvvm_sust_b_1d_array_v2i8_trap
3731  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3732                   llvm_i16_ty, llvm_i16_ty], [],
3733              "llvm.nvvm.sust.b.1d.array.v2i8.trap">,
3734    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i8_trap">;
3735def int_nvvm_sust_b_1d_array_v2i16_trap
3736  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3737                   llvm_i16_ty, llvm_i16_ty], [],
3738              "llvm.nvvm.sust.b.1d.array.v2i16.trap">,
3739    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i16_trap">;
3740def int_nvvm_sust_b_1d_array_v2i32_trap
3741  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3742                   llvm_i32_ty, llvm_i32_ty], [],
3743              "llvm.nvvm.sust.b.1d.array.v2i32.trap">,
3744    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i32_trap">;
3745def int_nvvm_sust_b_1d_array_v2i64_trap
3746  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3747                   llvm_i64_ty, llvm_i64_ty], [],
3748              "llvm.nvvm.sust.b.1d.array.v2i64.trap">,
3749    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i64_trap">;
3750def int_nvvm_sust_b_1d_array_v4i8_trap
3751  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3752                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3753              "llvm.nvvm.sust.b.1d.array.v4i8.trap">,
3754    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i8_trap">;
3755def int_nvvm_sust_b_1d_array_v4i16_trap
3756  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3757                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3758              "llvm.nvvm.sust.b.1d.array.v4i16.trap">,
3759    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i16_trap">;
3760def int_nvvm_sust_b_1d_array_v4i32_trap
3761  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3762                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3763              "llvm.nvvm.sust.b.1d.array.v4i32.trap">,
3764    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i32_trap">;
3765
3766
3767def int_nvvm_sust_b_2d_i8_trap
3768  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3769              "llvm.nvvm.sust.b.2d.i8.trap">,
3770    ClangBuiltin<"__nvvm_sust_b_2d_i8_trap">;
3771def int_nvvm_sust_b_2d_i16_trap
3772  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3773              "llvm.nvvm.sust.b.2d.i16.trap">,
3774    ClangBuiltin<"__nvvm_sust_b_2d_i16_trap">;
3775def int_nvvm_sust_b_2d_i32_trap
3776  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3777              "llvm.nvvm.sust.b.2d.i32.trap">,
3778    ClangBuiltin<"__nvvm_sust_b_2d_i32_trap">;
3779def int_nvvm_sust_b_2d_i64_trap
3780  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3781              "llvm.nvvm.sust.b.2d.i64.trap">,
3782    ClangBuiltin<"__nvvm_sust_b_2d_i64_trap">;
3783def int_nvvm_sust_b_2d_v2i8_trap
3784  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3785                   llvm_i16_ty, llvm_i16_ty], [],
3786              "llvm.nvvm.sust.b.2d.v2i8.trap">,
3787    ClangBuiltin<"__nvvm_sust_b_2d_v2i8_trap">;
3788def int_nvvm_sust_b_2d_v2i16_trap
3789  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3790                   llvm_i16_ty, llvm_i16_ty], [],
3791              "llvm.nvvm.sust.b.2d.v2i16.trap">,
3792    ClangBuiltin<"__nvvm_sust_b_2d_v2i16_trap">;
3793def int_nvvm_sust_b_2d_v2i32_trap
3794  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3795                   llvm_i32_ty, llvm_i32_ty], [],
3796              "llvm.nvvm.sust.b.2d.v2i32.trap">,
3797    ClangBuiltin<"__nvvm_sust_b_2d_v2i32_trap">;
3798def int_nvvm_sust_b_2d_v2i64_trap
3799  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3800                   llvm_i64_ty, llvm_i64_ty], [],
3801              "llvm.nvvm.sust.b.2d.v2i64.trap">,
3802    ClangBuiltin<"__nvvm_sust_b_2d_v2i64_trap">;
3803def int_nvvm_sust_b_2d_v4i8_trap
3804  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3805                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3806              "llvm.nvvm.sust.b.2d.v4i8.trap">,
3807    ClangBuiltin<"__nvvm_sust_b_2d_v4i8_trap">;
3808def int_nvvm_sust_b_2d_v4i16_trap
3809  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
3810                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3811              "llvm.nvvm.sust.b.2d.v4i16.trap">,
3812    ClangBuiltin<"__nvvm_sust_b_2d_v4i16_trap">;
3813def int_nvvm_sust_b_2d_v4i32_trap
3814  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3815                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3816              "llvm.nvvm.sust.b.2d.v4i32.trap">,
3817    ClangBuiltin<"__nvvm_sust_b_2d_v4i32_trap">;
3818
3819
3820def int_nvvm_sust_b_2d_array_i8_trap
3821  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3822                   llvm_i32_ty, llvm_i16_ty], [],
3823              "llvm.nvvm.sust.b.2d.array.i8.trap">,
3824    ClangBuiltin<"__nvvm_sust_b_2d_array_i8_trap">;
3825def int_nvvm_sust_b_2d_array_i16_trap
3826  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3827                   llvm_i32_ty, llvm_i16_ty], [],
3828              "llvm.nvvm.sust.b.2d.array.i16.trap">,
3829    ClangBuiltin<"__nvvm_sust_b_2d_array_i16_trap">;
3830def int_nvvm_sust_b_2d_array_i32_trap
3831  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3832                   llvm_i32_ty, llvm_i32_ty], [],
3833              "llvm.nvvm.sust.b.2d.array.i32.trap">,
3834    ClangBuiltin<"__nvvm_sust_b_2d_array_i32_trap">;
3835def int_nvvm_sust_b_2d_array_i64_trap
3836  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3837                   llvm_i32_ty, llvm_i64_ty], [],
3838              "llvm.nvvm.sust.b.2d.array.i64.trap">,
3839    ClangBuiltin<"__nvvm_sust_b_2d_array_i64_trap">;
3840def int_nvvm_sust_b_2d_array_v2i8_trap
3841  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3842                   llvm_i16_ty, llvm_i16_ty], [],
3843              "llvm.nvvm.sust.b.2d.array.v2i8.trap">,
3844    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i8_trap">;
3845def int_nvvm_sust_b_2d_array_v2i16_trap
3846  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3847                   llvm_i16_ty, llvm_i16_ty], [],
3848              "llvm.nvvm.sust.b.2d.array.v2i16.trap">,
3849    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i16_trap">;
3850def int_nvvm_sust_b_2d_array_v2i32_trap
3851  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3852                   llvm_i32_ty, llvm_i32_ty], [],
3853              "llvm.nvvm.sust.b.2d.array.v2i32.trap">,
3854    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i32_trap">;
3855def int_nvvm_sust_b_2d_array_v2i64_trap
3856  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3857                   llvm_i64_ty, llvm_i64_ty], [],
3858              "llvm.nvvm.sust.b.2d.array.v2i64.trap">,
3859    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i64_trap">;
3860def int_nvvm_sust_b_2d_array_v4i8_trap
3861  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3862                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3863              "llvm.nvvm.sust.b.2d.array.v4i8.trap">,
3864    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i8_trap">;
3865def int_nvvm_sust_b_2d_array_v4i16_trap
3866  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3867                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3868              "llvm.nvvm.sust.b.2d.array.v4i16.trap">,
3869    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i16_trap">;
3870def int_nvvm_sust_b_2d_array_v4i32_trap
3871  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3872                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3873              "llvm.nvvm.sust.b.2d.array.v4i32.trap">,
3874    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i32_trap">;
3875
3876
3877def int_nvvm_sust_b_3d_i8_trap
3878  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3879                   llvm_i32_ty, llvm_i16_ty], [],
3880              "llvm.nvvm.sust.b.3d.i8.trap">,
3881    ClangBuiltin<"__nvvm_sust_b_3d_i8_trap">;
3882def int_nvvm_sust_b_3d_i16_trap
3883  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3884                   llvm_i32_ty, llvm_i16_ty], [],
3885              "llvm.nvvm.sust.b.3d.i16.trap">,
3886    ClangBuiltin<"__nvvm_sust_b_3d_i16_trap">;
3887def int_nvvm_sust_b_3d_i32_trap
3888  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3889                   llvm_i32_ty, llvm_i32_ty], [],
3890              "llvm.nvvm.sust.b.3d.i32.trap">,
3891    ClangBuiltin<"__nvvm_sust_b_3d_i32_trap">;
3892def int_nvvm_sust_b_3d_i64_trap
3893  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3894                   llvm_i32_ty, llvm_i64_ty], [],
3895              "llvm.nvvm.sust.b.3d.i64.trap">,
3896    ClangBuiltin<"__nvvm_sust_b_3d_i64_trap">;
3897def int_nvvm_sust_b_3d_v2i8_trap
3898  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3899                   llvm_i16_ty, llvm_i16_ty], [],
3900              "llvm.nvvm.sust.b.3d.v2i8.trap">,
3901    ClangBuiltin<"__nvvm_sust_b_3d_v2i8_trap">;
3902def int_nvvm_sust_b_3d_v2i16_trap
3903  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3904                   llvm_i16_ty, llvm_i16_ty], [],
3905              "llvm.nvvm.sust.b.3d.v2i16.trap">,
3906    ClangBuiltin<"__nvvm_sust_b_3d_v2i16_trap">;
3907def int_nvvm_sust_b_3d_v2i32_trap
3908  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3909                   llvm_i32_ty, llvm_i32_ty], [],
3910              "llvm.nvvm.sust.b.3d.v2i32.trap">,
3911    ClangBuiltin<"__nvvm_sust_b_3d_v2i32_trap">;
3912def int_nvvm_sust_b_3d_v2i64_trap
3913  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3914                   llvm_i64_ty, llvm_i64_ty], [],
3915              "llvm.nvvm.sust.b.3d.v2i64.trap">,
3916    ClangBuiltin<"__nvvm_sust_b_3d_v2i64_trap">;
3917def int_nvvm_sust_b_3d_v4i8_trap
3918  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3919                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3920              "llvm.nvvm.sust.b.3d.v4i8.trap">,
3921    ClangBuiltin<"__nvvm_sust_b_3d_v4i8_trap">;
3922def int_nvvm_sust_b_3d_v4i16_trap
3923  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3924                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3925              "llvm.nvvm.sust.b.3d.v4i16.trap">,
3926    ClangBuiltin<"__nvvm_sust_b_3d_v4i16_trap">;
3927def int_nvvm_sust_b_3d_v4i32_trap
3928  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
3929                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3930              "llvm.nvvm.sust.b.3d.v4i32.trap">,
3931    ClangBuiltin<"__nvvm_sust_b_3d_v4i32_trap">;
3932
3933
3934// .zero variant
3935def int_nvvm_sust_b_1d_i8_zero
3936  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3937              "llvm.nvvm.sust.b.1d.i8.zero">,
3938    ClangBuiltin<"__nvvm_sust_b_1d_i8_zero">;
3939def int_nvvm_sust_b_1d_i16_zero
3940  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
3941              "llvm.nvvm.sust.b.1d.i16.zero">,
3942    ClangBuiltin<"__nvvm_sust_b_1d_i16_zero">;
3943def int_nvvm_sust_b_1d_i32_zero
3944  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
3945              "llvm.nvvm.sust.b.1d.i32.zero">,
3946    ClangBuiltin<"__nvvm_sust_b_1d_i32_zero">;
3947def int_nvvm_sust_b_1d_i64_zero
3948  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], [],
3949              "llvm.nvvm.sust.b.1d.i64.zero">,
3950    ClangBuiltin<"__nvvm_sust_b_1d_i64_zero">;
3951def int_nvvm_sust_b_1d_v2i8_zero
3952  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3953              "llvm.nvvm.sust.b.1d.v2i8.zero">,
3954    ClangBuiltin<"__nvvm_sust_b_1d_v2i8_zero">;
3955def int_nvvm_sust_b_1d_v2i16_zero
3956  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
3957              "llvm.nvvm.sust.b.1d.v2i16.zero">,
3958    ClangBuiltin<"__nvvm_sust_b_1d_v2i16_zero">;
3959def int_nvvm_sust_b_1d_v2i32_zero
3960  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3961              "llvm.nvvm.sust.b.1d.v2i32.zero">,
3962    ClangBuiltin<"__nvvm_sust_b_1d_v2i32_zero">;
3963def int_nvvm_sust_b_1d_v2i64_zero
3964  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i64_ty, llvm_i64_ty], [],
3965              "llvm.nvvm.sust.b.1d.v2i64.zero">,
3966    ClangBuiltin<"__nvvm_sust_b_1d_v2i64_zero">;
3967def int_nvvm_sust_b_1d_v4i8_zero
3968  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3969                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3970              "llvm.nvvm.sust.b.1d.v4i8.zero">,
3971    ClangBuiltin<"__nvvm_sust_b_1d_v4i8_zero">;
3972def int_nvvm_sust_b_1d_v4i16_zero
3973  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
3974                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
3975              "llvm.nvvm.sust.b.1d.v4i16.zero">,
3976    ClangBuiltin<"__nvvm_sust_b_1d_v4i16_zero">;
3977def int_nvvm_sust_b_1d_v4i32_zero
3978  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
3979                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3980              "llvm.nvvm.sust.b.1d.v4i32.zero">,
3981    ClangBuiltin<"__nvvm_sust_b_1d_v4i32_zero">;
3982
3983
3984def int_nvvm_sust_b_1d_array_i8_zero
3985  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3986              "llvm.nvvm.sust.b.1d.array.i8.zero">,
3987    ClangBuiltin<"__nvvm_sust_b_1d_array_i8_zero">;
3988def int_nvvm_sust_b_1d_array_i16_zero
3989  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
3990              "llvm.nvvm.sust.b.1d.array.i16.zero">,
3991    ClangBuiltin<"__nvvm_sust_b_1d_array_i16_zero">;
3992def int_nvvm_sust_b_1d_array_i32_zero
3993  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
3994              "llvm.nvvm.sust.b.1d.array.i32.zero">,
3995    ClangBuiltin<"__nvvm_sust_b_1d_array_i32_zero">;
3996def int_nvvm_sust_b_1d_array_i64_zero
3997  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
3998              "llvm.nvvm.sust.b.1d.array.i64.zero">,
3999    ClangBuiltin<"__nvvm_sust_b_1d_array_i64_zero">;
4000def int_nvvm_sust_b_1d_array_v2i8_zero
4001  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4002                   llvm_i16_ty, llvm_i16_ty], [],
4003              "llvm.nvvm.sust.b.1d.array.v2i8.zero">,
4004    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i8_zero">;
4005def int_nvvm_sust_b_1d_array_v2i16_zero
4006  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4007                   llvm_i16_ty, llvm_i16_ty], [],
4008              "llvm.nvvm.sust.b.1d.array.v2i16.zero">,
4009    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i16_zero">;
4010def int_nvvm_sust_b_1d_array_v2i32_zero
4011  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4012                   llvm_i32_ty, llvm_i32_ty], [],
4013              "llvm.nvvm.sust.b.1d.array.v2i32.zero">,
4014    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i32_zero">;
4015def int_nvvm_sust_b_1d_array_v2i64_zero
4016  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4017                   llvm_i64_ty, llvm_i64_ty], [],
4018              "llvm.nvvm.sust.b.1d.array.v2i64.zero">,
4019    ClangBuiltin<"__nvvm_sust_b_1d_array_v2i64_zero">;
4020def int_nvvm_sust_b_1d_array_v4i8_zero
4021  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4022                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4023              "llvm.nvvm.sust.b.1d.array.v4i8.zero">,
4024    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i8_zero">;
4025def int_nvvm_sust_b_1d_array_v4i16_zero
4026  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4027                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4028              "llvm.nvvm.sust.b.1d.array.v4i16.zero">,
4029    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i16_zero">;
4030def int_nvvm_sust_b_1d_array_v4i32_zero
4031  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4032                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4033              "llvm.nvvm.sust.b.1d.array.v4i32.zero">,
4034    ClangBuiltin<"__nvvm_sust_b_1d_array_v4i32_zero">;
4035
4036
4037def int_nvvm_sust_b_2d_i8_zero
4038  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4039              "llvm.nvvm.sust.b.2d.i8.zero">,
4040    ClangBuiltin<"__nvvm_sust_b_2d_i8_zero">;
4041def int_nvvm_sust_b_2d_i16_zero
4042  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4043              "llvm.nvvm.sust.b.2d.i16.zero">,
4044    ClangBuiltin<"__nvvm_sust_b_2d_i16_zero">;
4045def int_nvvm_sust_b_2d_i32_zero
4046  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4047              "llvm.nvvm.sust.b.2d.i32.zero">,
4048    ClangBuiltin<"__nvvm_sust_b_2d_i32_zero">;
4049def int_nvvm_sust_b_2d_i64_zero
4050  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i64_ty], [],
4051              "llvm.nvvm.sust.b.2d.i64.zero">,
4052    ClangBuiltin<"__nvvm_sust_b_2d_i64_zero">;
4053def int_nvvm_sust_b_2d_v2i8_zero
4054  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4055                   llvm_i16_ty, llvm_i16_ty], [],
4056              "llvm.nvvm.sust.b.2d.v2i8.zero">,
4057    ClangBuiltin<"__nvvm_sust_b_2d_v2i8_zero">;
4058def int_nvvm_sust_b_2d_v2i16_zero
4059  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4060                   llvm_i16_ty, llvm_i16_ty], [],
4061              "llvm.nvvm.sust.b.2d.v2i16.zero">,
4062    ClangBuiltin<"__nvvm_sust_b_2d_v2i16_zero">;
4063def int_nvvm_sust_b_2d_v2i32_zero
4064  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4065                   llvm_i32_ty, llvm_i32_ty], [],
4066              "llvm.nvvm.sust.b.2d.v2i32.zero">,
4067    ClangBuiltin<"__nvvm_sust_b_2d_v2i32_zero">;
4068def int_nvvm_sust_b_2d_v2i64_zero
4069  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4070                   llvm_i64_ty, llvm_i64_ty], [],
4071              "llvm.nvvm.sust.b.2d.v2i64.zero">,
4072    ClangBuiltin<"__nvvm_sust_b_2d_v2i64_zero">;
4073def int_nvvm_sust_b_2d_v4i8_zero
4074  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4075                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4076              "llvm.nvvm.sust.b.2d.v4i8.zero">,
4077    ClangBuiltin<"__nvvm_sust_b_2d_v4i8_zero">;
4078def int_nvvm_sust_b_2d_v4i16_zero
4079  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4080                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4081              "llvm.nvvm.sust.b.2d.v4i16.zero">,
4082    ClangBuiltin<"__nvvm_sust_b_2d_v4i16_zero">;
4083def int_nvvm_sust_b_2d_v4i32_zero
4084  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4085                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4086              "llvm.nvvm.sust.b.2d.v4i32.zero">,
4087    ClangBuiltin<"__nvvm_sust_b_2d_v4i32_zero">;
4088
4089
4090def int_nvvm_sust_b_2d_array_i8_zero
4091  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4092                   llvm_i32_ty, llvm_i16_ty], [],
4093              "llvm.nvvm.sust.b.2d.array.i8.zero">,
4094    ClangBuiltin<"__nvvm_sust_b_2d_array_i8_zero">;
4095def int_nvvm_sust_b_2d_array_i16_zero
4096  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4097                   llvm_i32_ty, llvm_i16_ty], [],
4098              "llvm.nvvm.sust.b.2d.array.i16.zero">,
4099    ClangBuiltin<"__nvvm_sust_b_2d_array_i16_zero">;
4100def int_nvvm_sust_b_2d_array_i32_zero
4101  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4102                   llvm_i32_ty, llvm_i32_ty], [],
4103              "llvm.nvvm.sust.b.2d.array.i32.zero">,
4104    ClangBuiltin<"__nvvm_sust_b_2d_array_i32_zero">;
4105def int_nvvm_sust_b_2d_array_i64_zero
4106  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4107                   llvm_i32_ty, llvm_i64_ty], [],
4108              "llvm.nvvm.sust.b.2d.array.i64.zero">,
4109    ClangBuiltin<"__nvvm_sust_b_2d_array_i64_zero">;
4110def int_nvvm_sust_b_2d_array_v2i8_zero
4111  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4112                   llvm_i16_ty, llvm_i16_ty], [],
4113              "llvm.nvvm.sust.b.2d.array.v2i8.zero">,
4114    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i8_zero">;
4115def int_nvvm_sust_b_2d_array_v2i16_zero
4116  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4117                   llvm_i16_ty, llvm_i16_ty], [],
4118              "llvm.nvvm.sust.b.2d.array.v2i16.zero">,
4119    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i16_zero">;
4120def int_nvvm_sust_b_2d_array_v2i32_zero
4121  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4122                   llvm_i32_ty, llvm_i32_ty], [],
4123              "llvm.nvvm.sust.b.2d.array.v2i32.zero">,
4124    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i32_zero">;
4125def int_nvvm_sust_b_2d_array_v2i64_zero
4126  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4127                   llvm_i64_ty, llvm_i64_ty], [],
4128              "llvm.nvvm.sust.b.2d.array.v2i64.zero">,
4129    ClangBuiltin<"__nvvm_sust_b_2d_array_v2i64_zero">;
4130def int_nvvm_sust_b_2d_array_v4i8_zero
4131  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4132                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4133              "llvm.nvvm.sust.b.2d.array.v4i8.zero">,
4134    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i8_zero">;
4135def int_nvvm_sust_b_2d_array_v4i16_zero
4136  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4137                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4138              "llvm.nvvm.sust.b.2d.array.v4i16.zero">,
4139    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i16_zero">;
4140def int_nvvm_sust_b_2d_array_v4i32_zero
4141  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4142                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4143              "llvm.nvvm.sust.b.2d.array.v4i32.zero">,
4144    ClangBuiltin<"__nvvm_sust_b_2d_array_v4i32_zero">;
4145
4146
4147def int_nvvm_sust_b_3d_i8_zero
4148  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4149                   llvm_i32_ty, llvm_i16_ty], [],
4150              "llvm.nvvm.sust.b.3d.i8.zero">,
4151    ClangBuiltin<"__nvvm_sust_b_3d_i8_zero">;
4152def int_nvvm_sust_b_3d_i16_zero
4153  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4154                   llvm_i32_ty, llvm_i16_ty], [],
4155              "llvm.nvvm.sust.b.3d.i16.zero">,
4156    ClangBuiltin<"__nvvm_sust_b_3d_i16_zero">;
4157def int_nvvm_sust_b_3d_i32_zero
4158  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4159                   llvm_i32_ty, llvm_i32_ty], [],
4160              "llvm.nvvm.sust.b.3d.i32.zero">,
4161    ClangBuiltin<"__nvvm_sust_b_3d_i32_zero">;
4162def int_nvvm_sust_b_3d_i64_zero
4163  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4164                   llvm_i32_ty, llvm_i64_ty], [],
4165              "llvm.nvvm.sust.b.3d.i64.zero">,
4166    ClangBuiltin<"__nvvm_sust_b_3d_i64_zero">;
4167def int_nvvm_sust_b_3d_v2i8_zero
4168  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4169                   llvm_i16_ty, llvm_i16_ty], [],
4170              "llvm.nvvm.sust.b.3d.v2i8.zero">,
4171    ClangBuiltin<"__nvvm_sust_b_3d_v2i8_zero">;
4172def int_nvvm_sust_b_3d_v2i16_zero
4173  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4174                   llvm_i16_ty, llvm_i16_ty], [],
4175              "llvm.nvvm.sust.b.3d.v2i16.zero">,
4176    ClangBuiltin<"__nvvm_sust_b_3d_v2i16_zero">;
4177def int_nvvm_sust_b_3d_v2i32_zero
4178  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4179                   llvm_i32_ty, llvm_i32_ty], [],
4180              "llvm.nvvm.sust.b.3d.v2i32.zero">,
4181    ClangBuiltin<"__nvvm_sust_b_3d_v2i32_zero">;
4182def int_nvvm_sust_b_3d_v2i64_zero
4183  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4184                   llvm_i64_ty, llvm_i64_ty], [],
4185              "llvm.nvvm.sust.b.3d.v2i64.zero">,
4186    ClangBuiltin<"__nvvm_sust_b_3d_v2i64_zero">;
4187def int_nvvm_sust_b_3d_v4i8_zero
4188  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4189                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4190              "llvm.nvvm.sust.b.3d.v4i8.zero">,
4191    ClangBuiltin<"__nvvm_sust_b_3d_v4i8_zero">;
4192def int_nvvm_sust_b_3d_v4i16_zero
4193  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4194                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4195              "llvm.nvvm.sust.b.3d.v4i16.zero">,
4196    ClangBuiltin<"__nvvm_sust_b_3d_v4i16_zero">;
4197def int_nvvm_sust_b_3d_v4i32_zero
4198  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4199                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4200              "llvm.nvvm.sust.b.3d.v4i32.zero">,
4201    ClangBuiltin<"__nvvm_sust_b_3d_v4i32_zero">;
4202
4203
4204
4205// Formatted
4206
4207def int_nvvm_sust_p_1d_i8_trap
4208  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
4209              "llvm.nvvm.sust.p.1d.i8.trap">,
4210    ClangBuiltin<"__nvvm_sust_p_1d_i8_trap">;
4211def int_nvvm_sust_p_1d_i16_trap
4212  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
4213              "llvm.nvvm.sust.p.1d.i16.trap">,
4214    ClangBuiltin<"__nvvm_sust_p_1d_i16_trap">;
4215def int_nvvm_sust_p_1d_i32_trap
4216  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
4217              "llvm.nvvm.sust.p.1d.i32.trap">,
4218    ClangBuiltin<"__nvvm_sust_p_1d_i32_trap">;
4219def int_nvvm_sust_p_1d_v2i8_trap
4220  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
4221              "llvm.nvvm.sust.p.1d.v2i8.trap">,
4222    ClangBuiltin<"__nvvm_sust_p_1d_v2i8_trap">;
4223def int_nvvm_sust_p_1d_v2i16_trap
4224  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
4225              "llvm.nvvm.sust.p.1d.v2i16.trap">,
4226    ClangBuiltin<"__nvvm_sust_p_1d_v2i16_trap">;
4227def int_nvvm_sust_p_1d_v2i32_trap
4228  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4229              "llvm.nvvm.sust.p.1d.v2i32.trap">,
4230    ClangBuiltin<"__nvvm_sust_p_1d_v2i32_trap">;
4231def int_nvvm_sust_p_1d_v4i8_trap
4232  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
4233                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4234              "llvm.nvvm.sust.p.1d.v4i8.trap">,
4235    ClangBuiltin<"__nvvm_sust_p_1d_v4i8_trap">;
4236def int_nvvm_sust_p_1d_v4i16_trap
4237  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
4238                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4239              "llvm.nvvm.sust.p.1d.v4i16.trap">,
4240    ClangBuiltin<"__nvvm_sust_p_1d_v4i16_trap">;
4241def int_nvvm_sust_p_1d_v4i32_trap
4242  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4243                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4244              "llvm.nvvm.sust.p.1d.v4i32.trap">,
4245    ClangBuiltin<"__nvvm_sust_p_1d_v4i32_trap">;
4246
4247
4248def int_nvvm_sust_p_1d_array_i8_trap
4249  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4250              "llvm.nvvm.sust.p.1d.array.i8.trap">,
4251    ClangBuiltin<"__nvvm_sust_p_1d_array_i8_trap">;
4252def int_nvvm_sust_p_1d_array_i16_trap
4253  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4254              "llvm.nvvm.sust.p.1d.array.i16.trap">,
4255    ClangBuiltin<"__nvvm_sust_p_1d_array_i16_trap">;
4256def int_nvvm_sust_p_1d_array_i32_trap
4257  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4258              "llvm.nvvm.sust.p.1d.array.i32.trap">,
4259    ClangBuiltin<"__nvvm_sust_p_1d_array_i32_trap">;
4260def int_nvvm_sust_p_1d_array_v2i8_trap
4261  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4262                   llvm_i16_ty, llvm_i16_ty], [],
4263              "llvm.nvvm.sust.p.1d.array.v2i8.trap">,
4264    ClangBuiltin<"__nvvm_sust_p_1d_array_v2i8_trap">;
4265def int_nvvm_sust_p_1d_array_v2i16_trap
4266  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4267                   llvm_i16_ty, llvm_i16_ty], [],
4268              "llvm.nvvm.sust.p.1d.array.v2i16.trap">,
4269    ClangBuiltin<"__nvvm_sust_p_1d_array_v2i16_trap">;
4270def int_nvvm_sust_p_1d_array_v2i32_trap
4271  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4272                   llvm_i32_ty, llvm_i32_ty], [],
4273              "llvm.nvvm.sust.p.1d.array.v2i32.trap">,
4274    ClangBuiltin<"__nvvm_sust_p_1d_array_v2i32_trap">;
4275def int_nvvm_sust_p_1d_array_v4i8_trap
4276  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4277                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4278              "llvm.nvvm.sust.p.1d.array.v4i8.trap">,
4279    ClangBuiltin<"__nvvm_sust_p_1d_array_v4i8_trap">;
4280def int_nvvm_sust_p_1d_array_v4i16_trap
4281  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4282                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4283              "llvm.nvvm.sust.p.1d.array.v4i16.trap">,
4284    ClangBuiltin<"__nvvm_sust_p_1d_array_v4i16_trap">;
4285def int_nvvm_sust_p_1d_array_v4i32_trap
4286  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4287                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4288              "llvm.nvvm.sust.p.1d.array.v4i32.trap">,
4289    ClangBuiltin<"__nvvm_sust_p_1d_array_v4i32_trap">;
4290
4291
4292def int_nvvm_sust_p_2d_i8_trap
4293  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4294              "llvm.nvvm.sust.p.2d.i8.trap">,
4295    ClangBuiltin<"__nvvm_sust_p_2d_i8_trap">;
4296def int_nvvm_sust_p_2d_i16_trap
4297  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
4298              "llvm.nvvm.sust.p.2d.i16.trap">,
4299    ClangBuiltin<"__nvvm_sust_p_2d_i16_trap">;
4300def int_nvvm_sust_p_2d_i32_trap
4301  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4302              "llvm.nvvm.sust.p.2d.i32.trap">,
4303    ClangBuiltin<"__nvvm_sust_p_2d_i32_trap">;
4304def int_nvvm_sust_p_2d_v2i8_trap
4305  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4306                   llvm_i16_ty, llvm_i16_ty], [],
4307              "llvm.nvvm.sust.p.2d.v2i8.trap">,
4308    ClangBuiltin<"__nvvm_sust_p_2d_v2i8_trap">;
4309def int_nvvm_sust_p_2d_v2i16_trap
4310  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4311                   llvm_i16_ty, llvm_i16_ty], [],
4312              "llvm.nvvm.sust.p.2d.v2i16.trap">,
4313    ClangBuiltin<"__nvvm_sust_p_2d_v2i16_trap">;
4314def int_nvvm_sust_p_2d_v2i32_trap
4315  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4316                   llvm_i32_ty, llvm_i32_ty], [],
4317              "llvm.nvvm.sust.p.2d.v2i32.trap">,
4318    ClangBuiltin<"__nvvm_sust_p_2d_v2i32_trap">;
4319def int_nvvm_sust_p_2d_v4i8_trap
4320  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4321                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4322              "llvm.nvvm.sust.p.2d.v4i8.trap">,
4323    ClangBuiltin<"__nvvm_sust_p_2d_v4i8_trap">;
4324def int_nvvm_sust_p_2d_v4i16_trap
4325  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
4326                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4327              "llvm.nvvm.sust.p.2d.v4i16.trap">,
4328    ClangBuiltin<"__nvvm_sust_p_2d_v4i16_trap">;
4329def int_nvvm_sust_p_2d_v4i32_trap
4330  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4331                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4332              "llvm.nvvm.sust.p.2d.v4i32.trap">,
4333    ClangBuiltin<"__nvvm_sust_p_2d_v4i32_trap">;
4334
4335
4336def int_nvvm_sust_p_2d_array_i8_trap
4337  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4338                   llvm_i32_ty, llvm_i16_ty], [],
4339              "llvm.nvvm.sust.p.2d.array.i8.trap">,
4340    ClangBuiltin<"__nvvm_sust_p_2d_array_i8_trap">;
4341def int_nvvm_sust_p_2d_array_i16_trap
4342  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4343                   llvm_i32_ty, llvm_i16_ty], [],
4344              "llvm.nvvm.sust.p.2d.array.i16.trap">,
4345    ClangBuiltin<"__nvvm_sust_p_2d_array_i16_trap">;
4346def int_nvvm_sust_p_2d_array_i32_trap
4347  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4348                   llvm_i32_ty, llvm_i32_ty], [],
4349              "llvm.nvvm.sust.p.2d.array.i32.trap">,
4350    ClangBuiltin<"__nvvm_sust_p_2d_array_i32_trap">;
4351def int_nvvm_sust_p_2d_array_v2i8_trap
4352  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4353                   llvm_i16_ty, llvm_i16_ty], [],
4354              "llvm.nvvm.sust.p.2d.array.v2i8.trap">,
4355    ClangBuiltin<"__nvvm_sust_p_2d_array_v2i8_trap">;
4356def int_nvvm_sust_p_2d_array_v2i16_trap
4357  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4358                   llvm_i16_ty, llvm_i16_ty], [],
4359              "llvm.nvvm.sust.p.2d.array.v2i16.trap">,
4360    ClangBuiltin<"__nvvm_sust_p_2d_array_v2i16_trap">;
4361def int_nvvm_sust_p_2d_array_v2i32_trap
4362  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4363                   llvm_i32_ty, llvm_i32_ty], [],
4364              "llvm.nvvm.sust.p.2d.array.v2i32.trap">,
4365    ClangBuiltin<"__nvvm_sust_p_2d_array_v2i32_trap">;
4366def int_nvvm_sust_p_2d_array_v4i8_trap
4367  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4368                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4369              "llvm.nvvm.sust.p.2d.array.v4i8.trap">,
4370    ClangBuiltin<"__nvvm_sust_p_2d_array_v4i8_trap">;
4371def int_nvvm_sust_p_2d_array_v4i16_trap
4372  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4373                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4374              "llvm.nvvm.sust.p.2d.array.v4i16.trap">,
4375    ClangBuiltin<"__nvvm_sust_p_2d_array_v4i16_trap">;
4376def int_nvvm_sust_p_2d_array_v4i32_trap
4377  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4378                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4379              "llvm.nvvm.sust.p.2d.array.v4i32.trap">,
4380    ClangBuiltin<"__nvvm_sust_p_2d_array_v4i32_trap">;
4381
4382
4383def int_nvvm_sust_p_3d_i8_trap
4384  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4385                   llvm_i32_ty, llvm_i16_ty], [],
4386              "llvm.nvvm.sust.p.3d.i8.trap">,
4387    ClangBuiltin<"__nvvm_sust_p_3d_i8_trap">;
4388def int_nvvm_sust_p_3d_i16_trap
4389  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4390                   llvm_i32_ty, llvm_i16_ty], [],
4391              "llvm.nvvm.sust.p.3d.i16.trap">,
4392    ClangBuiltin<"__nvvm_sust_p_3d_i16_trap">;
4393def int_nvvm_sust_p_3d_i32_trap
4394  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
4395                   llvm_i32_ty, llvm_i32_ty], [],
4396              "llvm.nvvm.sust.p.3d.i32.trap">,
4397    ClangBuiltin<"__nvvm_sust_p_3d_i32_trap">;
4398def int_nvvm_sust_p_3d_v2i8_trap
4399  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4400                   llvm_i16_ty, llvm_i16_ty], [],
4401              "llvm.nvvm.sust.p.3d.v2i8.trap">,
4402    ClangBuiltin<"__nvvm_sust_p_3d_v2i8_trap">;
4403def int_nvvm_sust_p_3d_v2i16_trap
4404  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4405                   llvm_i16_ty, llvm_i16_ty], [],
4406              "llvm.nvvm.sust.p.3d.v2i16.trap">,
4407    ClangBuiltin<"__nvvm_sust_p_3d_v2i16_trap">;
4408def int_nvvm_sust_p_3d_v2i32_trap
4409  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4410                   llvm_i32_ty, llvm_i32_ty], [],
4411              "llvm.nvvm.sust.p.3d.v2i32.trap">,
4412    ClangBuiltin<"__nvvm_sust_p_3d_v2i32_trap">;
4413def int_nvvm_sust_p_3d_v4i8_trap
4414  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4415                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4416              "llvm.nvvm.sust.p.3d.v4i8.trap">,
4417    ClangBuiltin<"__nvvm_sust_p_3d_v4i8_trap">;
4418def int_nvvm_sust_p_3d_v4i16_trap
4419  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4420                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
4421              "llvm.nvvm.sust.p.3d.v4i16.trap">,
4422    ClangBuiltin<"__nvvm_sust_p_3d_v4i16_trap">;
4423def int_nvvm_sust_p_3d_v4i32_trap
4424  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
4425                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
4426              "llvm.nvvm.sust.p.3d.v4i32.trap">,
4427    ClangBuiltin<"__nvvm_sust_p_3d_v4i32_trap">;
4428
4429
4430def int_nvvm_rotate_b32
4431  : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4432              [IntrNoMem, IntrSpeculatable], "llvm.nvvm.rotate.b32">,
4433              ClangBuiltin<"__nvvm_rotate_b32">;
4434
4435def int_nvvm_rotate_b64
4436  : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
4437             [IntrNoMem, IntrSpeculatable], "llvm.nvvm.rotate.b64">,
4438             ClangBuiltin<"__nvvm_rotate_b64">;
4439
4440def int_nvvm_rotate_right_b64
4441  : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
4442              [IntrNoMem, IntrSpeculatable], "llvm.nvvm.rotate.right.b64">,
4443              ClangBuiltin<"__nvvm_rotate_right_b64">;
4444
4445def int_nvvm_swap_lo_hi_b64
4446  : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty],
4447              [IntrNoMem, IntrSpeculatable], "llvm.nvvm.swap.lo.hi.b64">,
4448              ClangBuiltin<"__nvvm_swap_lo_hi_b64">;
4449
4450
4451// Accessing special registers.
4452
4453class PTXReadSRegIntrinsicNB_r32
4454  : DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>]>;
4455class PTXReadSRegIntrinsic_r32<string name>
4456  : PTXReadSRegIntrinsicNB_r32, ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
4457
4458multiclass PTXReadSRegIntrinsic_v4i32<string regname> {
4459// FIXME: Do we need the 128-bit integer type version?
4460//    def _r64   : Intrinsic<[llvm_i128_ty],   [], [IntrNoMem, IntrSpeculatable]>;
4461
4462// FIXME: Enable this once v4i32 support is enabled in back-end.
4463//    def _v4i16 : Intrinsic<[llvm_v4i32_ty], [], [IntrNoMem, IntrSpeculatable]>;
4464  foreach suffix = ["_x", "_y", "_z", "_w"] in
4465    def suffix : PTXReadSRegIntrinsic_r32<regname # suffix>;
4466}
4467
4468// Same, but without automatic clang builtins. It will be used for
4469// registers that require particular GPU or PTX version.
4470multiclass PTXReadSRegIntrinsicNB_v4i32 {
4471  foreach suffix = ["_x", "_y", "_z", "_w"] in
4472    def suffix : PTXReadSRegIntrinsicNB_r32;
4473}
4474
4475class PTXReadSRegIntrinsic_r64<string name>
4476  : DefaultAttrsIntrinsic<[llvm_i64_ty], [], [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>]>,
4477    ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
4478
4479// Intrinsics to read registers with non-constant values. E.g. the values that
4480// do change over the kernel lifetime. Such reads should not be CSE'd.
4481class PTXReadNCSRegIntrinsic_r32<string name>
4482  : Intrinsic<[llvm_i32_ty], [], [IntrInaccessibleMemOnly, IntrNoCallback, NoUndef<RetIndex>]>,
4483    ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
4484class PTXReadNCSRegIntrinsic_r64<string name>
4485  : Intrinsic<[llvm_i64_ty], [], [IntrInaccessibleMemOnly, IntrNoCallback, NoUndef<RetIndex>]>,
4486    ClangBuiltin<"__nvvm_read_ptx_sreg_" # name>;
4487
4488defm int_nvvm_read_ptx_sreg_tid : PTXReadSRegIntrinsic_v4i32<"tid">;
4489defm int_nvvm_read_ptx_sreg_ntid : PTXReadSRegIntrinsic_v4i32<"ntid">;
4490
4491def int_nvvm_read_ptx_sreg_laneid : PTXReadSRegIntrinsic_r32<"laneid">;
4492def int_nvvm_read_ptx_sreg_warpid : PTXReadSRegIntrinsic_r32<"warpid">;
4493def int_nvvm_read_ptx_sreg_nwarpid : PTXReadSRegIntrinsic_r32<"nwarpid">;
4494
4495defm int_nvvm_read_ptx_sreg_ctaid : PTXReadSRegIntrinsic_v4i32<"ctaid">;
4496defm int_nvvm_read_ptx_sreg_nctaid : PTXReadSRegIntrinsic_v4i32<"nctaid">;
4497
4498def int_nvvm_read_ptx_sreg_smid : PTXReadSRegIntrinsic_r32<"smid">;
4499def int_nvvm_read_ptx_sreg_nsmid : PTXReadSRegIntrinsic_r32<"nsmid">;
4500def int_nvvm_read_ptx_sreg_gridid : PTXReadSRegIntrinsic_r32<"gridid">;
4501
4502def int_nvvm_read_ptx_sreg_lanemask_eq :
4503    PTXReadSRegIntrinsic_r32<"lanemask_eq">;
4504def int_nvvm_read_ptx_sreg_lanemask_le :
4505    PTXReadSRegIntrinsic_r32<"lanemask_le">;
4506def int_nvvm_read_ptx_sreg_lanemask_lt :
4507    PTXReadSRegIntrinsic_r32<"lanemask_lt">;
4508def int_nvvm_read_ptx_sreg_lanemask_ge :
4509    PTXReadSRegIntrinsic_r32<"lanemask_ge">;
4510def int_nvvm_read_ptx_sreg_lanemask_gt :
4511    PTXReadSRegIntrinsic_r32<"lanemask_gt">;
4512
4513def int_nvvm_read_ptx_sreg_clock : PTXReadNCSRegIntrinsic_r32<"clock">;
4514def int_nvvm_read_ptx_sreg_clock64 : PTXReadNCSRegIntrinsic_r64<"clock64">;
4515
4516def int_nvvm_read_ptx_sreg_globaltimer : PTXReadNCSRegIntrinsic_r64<"globaltimer">;
4517
4518def int_nvvm_read_ptx_sreg_pm0 : PTXReadNCSRegIntrinsic_r32<"pm0">;
4519def int_nvvm_read_ptx_sreg_pm1 : PTXReadNCSRegIntrinsic_r32<"pm1">;
4520def int_nvvm_read_ptx_sreg_pm2 : PTXReadNCSRegIntrinsic_r32<"pm2">;
4521def int_nvvm_read_ptx_sreg_pm3 : PTXReadNCSRegIntrinsic_r32<"pm3">;
4522
4523def int_nvvm_read_ptx_sreg_warpsize : PTXReadSRegIntrinsic_r32<"warpsize">;
4524
4525// sm90+, PTX7.8+
4526defm int_nvvm_read_ptx_sreg_clusterid : PTXReadSRegIntrinsicNB_v4i32;
4527defm int_nvvm_read_ptx_sreg_nclusterid : PTXReadSRegIntrinsicNB_v4i32;
4528defm int_nvvm_read_ptx_sreg_cluster_ctaid : PTXReadSRegIntrinsicNB_v4i32;
4529defm int_nvvm_read_ptx_sreg_cluster_nctaid : PTXReadSRegIntrinsicNB_v4i32;
4530
4531def int_nvvm_read_ptx_sreg_cluster_ctarank : PTXReadSRegIntrinsicNB_r32;
4532def int_nvvm_read_ptx_sreg_cluster_nctarank : PTXReadSRegIntrinsicNB_r32;
4533
4534//
4535// SHUFFLE
4536//
4537// Generate intrinsics for all variants of shfl instruction.
4538foreach sync = [false, true] in {
4539  foreach mode = ["up", "down", "bfly", "idx"] in {
4540    foreach type = ["i32", "f32"] in {
4541      foreach return_pred = [false, true] in {
4542        foreach i = [SHFL_INFO<sync, mode, type, return_pred>] in {
4543          if i.withGccBuiltin then {
4544            def i.Name : ClangBuiltin<i.Builtin>,
4545                         Intrinsic<i.RetTy, i.ArgsTy,
4546                                   [IntrInaccessibleMemOnly, IntrConvergent,
4547                                   IntrNoCallback],
4548                                   i.IntrName>;
4549          }
4550          if i.withoutGccBuiltin then {
4551            def i.Name : Intrinsic<i.RetTy, i.ArgsTy,
4552                         [IntrInaccessibleMemOnly, IntrConvergent,
4553                         IntrNoCallback], i.IntrName>;
4554          }
4555        }
4556      }
4557    }
4558  }
4559}
4560
4561//
4562// VOTE
4563//
4564
4565// vote.all pred
4566def int_nvvm_vote_all :
4567  Intrinsic<[llvm_i1_ty], [llvm_i1_ty],
4568            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.all">,
4569  ClangBuiltin<"__nvvm_vote_all">;
4570// vote.any pred
4571def int_nvvm_vote_any :
4572  Intrinsic<[llvm_i1_ty], [llvm_i1_ty],
4573            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.any">,
4574  ClangBuiltin<"__nvvm_vote_any">;
4575// vote.uni pred
4576def int_nvvm_vote_uni :
4577  Intrinsic<[llvm_i1_ty], [llvm_i1_ty],
4578            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.uni">,
4579  ClangBuiltin<"__nvvm_vote_uni">;
4580// vote.ballot pred
4581def int_nvvm_vote_ballot :
4582  Intrinsic<[llvm_i32_ty], [llvm_i1_ty],
4583            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.ballot">,
4584  ClangBuiltin<"__nvvm_vote_ballot">;
4585
4586//
4587// VOTE.SYNC
4588//
4589
4590// vote.sync.all mask, pred
4591def int_nvvm_vote_all_sync :
4592  Intrinsic<[llvm_i1_ty], [llvm_i32_ty, llvm_i1_ty],
4593            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.all.sync">,
4594  ClangBuiltin<"__nvvm_vote_all_sync">;
4595// vote.sync.any mask, pred
4596def int_nvvm_vote_any_sync :
4597  Intrinsic<[llvm_i1_ty], [llvm_i32_ty, llvm_i1_ty],
4598            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.any.sync">,
4599  ClangBuiltin<"__nvvm_vote_any_sync">;
4600// vote.sync.uni mask, pred
4601def int_nvvm_vote_uni_sync :
4602  Intrinsic<[llvm_i1_ty], [llvm_i32_ty, llvm_i1_ty],
4603            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.uni.sync">,
4604  ClangBuiltin<"__nvvm_vote_uni_sync">;
4605// vote.sync.ballot mask, pred
4606def int_nvvm_vote_ballot_sync :
4607  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i1_ty],
4608            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.vote.ballot.sync">,
4609  ClangBuiltin<"__nvvm_vote_ballot_sync">;
4610
4611//
4612// ACTIVEMASK
4613//
4614def int_nvvm_activemask :
4615  Intrinsic<[llvm_i32_ty], [],
4616            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback, IntrHasSideEffects], "llvm.nvvm.activemask">,
4617  ClangBuiltin<"__nvvm_activemask">;
4618
4619//
4620// MATCH.SYNC
4621//
4622// match.any.sync.b32 mask, value
4623def int_nvvm_match_any_sync_i32 :
4624  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4625            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.any.sync.i32">,
4626  ClangBuiltin<"__nvvm_match_any_sync_i32">;
4627// match.any.sync.b64 mask, value
4628def int_nvvm_match_any_sync_i64 :
4629  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i64_ty],
4630            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.any.sync.i64">,
4631  ClangBuiltin<"__nvvm_match_any_sync_i64">;
4632
4633// match.all instruction have two variants -- one returns a single value, another
4634// returns a pair {value, predicate}. We currently only implement the latter as
4635// that's the variant exposed by CUDA API.
4636
4637// match.all.sync.b32p mask, value
4638def int_nvvm_match_all_sync_i32p :
4639  Intrinsic<[llvm_i32_ty, llvm_i1_ty], [llvm_i32_ty, llvm_i32_ty],
4640            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.all.sync.i32p">;
4641// match.all.sync.b64p mask, value
4642def int_nvvm_match_all_sync_i64p :
4643  Intrinsic<[llvm_i32_ty, llvm_i1_ty], [llvm_i32_ty, llvm_i64_ty],
4644            [IntrInaccessibleMemOnly, IntrConvergent, IntrNoCallback], "llvm.nvvm.match.all.sync.i64p">;
4645
4646//
4647// REDUX.SYNC
4648//
4649// redux.sync.min.u32 dst, src, membermask;
4650def int_nvvm_redux_sync_umin : ClangBuiltin<"__nvvm_redux_sync_umin">,
4651  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4652            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4653
4654// redux.sync.max.u32 dst, src, membermask;
4655def int_nvvm_redux_sync_umax : ClangBuiltin<"__nvvm_redux_sync_umax">,
4656  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4657            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4658
4659// redux.sync.add.s32 dst, src, membermask;
4660def int_nvvm_redux_sync_add : ClangBuiltin<"__nvvm_redux_sync_add">,
4661  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4662            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4663
4664// redux.sync.min.s32 dst, src, membermask;
4665def int_nvvm_redux_sync_min : ClangBuiltin<"__nvvm_redux_sync_min">,
4666  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4667            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4668
4669// redux.sync.max.s32 dst, src, membermask;
4670def int_nvvm_redux_sync_max : ClangBuiltin<"__nvvm_redux_sync_max">,
4671  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4672            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4673
4674// redux.sync.and.b32 dst, src, membermask;
4675def int_nvvm_redux_sync_and : ClangBuiltin<"__nvvm_redux_sync_and">,
4676  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4677            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4678
4679// redux.sync.xor.b32 dst, src, membermask;
4680def int_nvvm_redux_sync_xor : ClangBuiltin<"__nvvm_redux_sync_xor">,
4681  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4682            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4683
4684// redux.sync.or.b32 dst, src, membermask;
4685def int_nvvm_redux_sync_or : ClangBuiltin<"__nvvm_redux_sync_or">,
4686  Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4687            [IntrConvergent, IntrInaccessibleMemOnly, IntrNoCallback]>;
4688
4689//
4690// WMMA instructions
4691//
4692// WMMA.LOAD
4693class NVVM_WMMA_LD<WMMA_REGS Frag, string Layout, int WithStride>
4694  : Intrinsic<Frag.regs,
4695              !if(WithStride, [llvm_anyptr_ty, llvm_i32_ty], [llvm_anyptr_ty]),
4696              [IntrReadMem, IntrArgMemOnly, IntrNoCallback, ReadOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>],
4697              WMMA_NAME_LDST<"load", Frag, Layout, WithStride>.intr>;
4698
4699// WMMA.STORE.D
4700class NVVM_WMMA_ST<WMMA_REGS Frag, string Layout, int WithStride>
4701  : Intrinsic<[],
4702              !listconcat(
4703                [llvm_anyptr_ty],
4704                Frag.regs,
4705                !if(WithStride, [llvm_i32_ty], [])),
4706              [IntrWriteMem, IntrArgMemOnly, IntrNoCallback, WriteOnly<ArgIndex<0>>, NoCapture<ArgIndex<0>>],
4707              WMMA_NAME_LDST<"store", Frag, Layout, WithStride>.intr>;
4708
4709// Create all load/store variants
4710foreach layout = ["row", "col"] in {
4711  foreach stride = [0, 1] in {
4712    foreach frag = NVVM_MMA_OPS.all_ld_ops in
4713      if NVVM_WMMA_LDST_SUPPORTED<frag, layout>.ret then
4714        def WMMA_NAME_LDST<"load", frag, layout, stride>.record
4715             : NVVM_WMMA_LD<frag, layout, stride>;
4716    foreach frag = NVVM_MMA_OPS.all_st_ops in
4717      if NVVM_WMMA_LDST_SUPPORTED<frag, layout>.ret then
4718        def WMMA_NAME_LDST<"store", frag, layout, stride>.record
4719             : NVVM_WMMA_ST<frag, layout, stride>;
4720  }
4721}
4722
4723// WMMA.MMA
4724class NVVM_WMMA_MMA<string ALayout, string BLayout, int Satfinite, string rnd, string b1op,
4725                    WMMA_REGS A, WMMA_REGS B,
4726                    WMMA_REGS C, WMMA_REGS D>
4727  : Intrinsic<D.regs,
4728              !listconcat(A.regs, B.regs, C.regs),
4729              [IntrNoMem, IntrNoCallback],
4730              WMMA_NAME<ALayout, BLayout, Satfinite, rnd, b1op, A, B, C, D>.llvm>;
4731
4732foreach layout_a = ["row", "col"] in {
4733  foreach layout_b = ["row", "col"] in {
4734    foreach satf = [0, 1] in {
4735      foreach rnd = ["", "rn", "rz", "rm", "rp"] in {
4736        foreach op = NVVM_MMA_OPS.all_wmma_ops in {
4737          foreach b1op = NVVM_MMA_B1OPS<op>.ret in {
4738            if NVVM_WMMA_SUPPORTED<op, layout_a, layout_b, satf, rnd>.ret then {
4739              def WMMA_NAME<layout_a, layout_b, satf, rnd, b1op,
4740                                op[0], op[1], op[2], op[3]>.record
4741                : NVVM_WMMA_MMA<layout_a, layout_b, satf, rnd, b1op,
4742                                op[0], op[1], op[2], op[3]>;
4743            }
4744          } // b1op
4745        } // op
4746      } // rnd
4747    } // satf
4748  } // layout_b
4749} // layout_a
4750
4751// MMA
4752class NVVM_MMA<string ALayout, string BLayout, int Satfinite, string b1op,
4753               WMMA_REGS A, WMMA_REGS B, WMMA_REGS C, WMMA_REGS D>
4754  : Intrinsic<D.regs,
4755              !listconcat(A.regs, B.regs, C.regs),
4756              [IntrNoMem, IntrNoCallback],
4757              MMA_NAME<ALayout, BLayout, Satfinite, b1op, A, B, C, D>.llvm>;
4758
4759foreach layout_a = ["row", "col"] in {
4760  foreach layout_b = ["row", "col"] in {
4761    foreach satf = [0, 1] in {
4762      foreach op = NVVM_MMA_OPS.all_mma_ops in {
4763        foreach b1op = NVVM_MMA_B1OPS<op>.ret in {
4764          if NVVM_MMA_SUPPORTED<op, layout_a, layout_b, satf>.ret then {
4765            def MMA_NAME<layout_a, layout_b, satf, b1op, op[0], op[1], op[2], op[3]>.record
4766              : NVVM_MMA<layout_a, layout_b, satf, b1op, op[0], op[1], op[2], op[3]>;
4767          }
4768        } // b1op
4769      } // op
4770    } // satf
4771  } // layout_b
4772} // layout_a
4773
4774// LDMATRIX
4775class NVVM_LDMATRIX<WMMA_REGS Frag, int Transposed>
4776  : Intrinsic<Frag.regs, [llvm_anyptr_ty],
4777              [IntrReadMem, IntrArgMemOnly, IntrNoCallback, ReadOnly<ArgIndex<0>>,
4778               NoCapture<ArgIndex<0>>],
4779              LDMATRIX_NAME<Frag, Transposed>.intr>;
4780
4781foreach transposed = [0, 1] in {
4782  foreach frag = NVVM_MMA_OPS.all_ldmatrix_ops in {
4783    if NVVM_LDMATRIX_SUPPORTED<frag>.ret then {
4784      def LDMATRIX_NAME<frag, transposed>.record
4785        : NVVM_LDMATRIX<frag, transposed>;
4786    }
4787  }
4788}
4789
4790def int_nvvm_mapa
4791  : DefaultAttrsIntrinsic<[llvm_ptr_ty], [llvm_ptr_ty, llvm_i32_ty],
4792              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
4793              "llvm.nvvm.mapa">;
4794def int_nvvm_mapa_shared_cluster
4795  : DefaultAttrsIntrinsic<[llvm_shared_ptr_ty], [llvm_shared_ptr_ty, llvm_i32_ty],
4796              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
4797              "llvm.nvvm.mapa.shared.cluster">;
4798def int_nvvm_getctarank
4799  : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_ptr_ty],
4800              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
4801              "llvm.nvvm.getctarank">;
4802def int_nvvm_getctarank_shared_cluster
4803  : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_shared_ptr_ty],
4804              [IntrNoMem, IntrSpeculatable, NoCapture<ArgIndex<0>>],
4805              "llvm.nvvm.getctarank.shared.cluster">;
4806def int_nvvm_is_explicit_cluster
4807  : DefaultAttrsIntrinsic<[llvm_i1_ty], [],
4808              [IntrNoMem, IntrSpeculatable, NoUndef<RetIndex>],
4809              "llvm.nvvm.is_explicit_cluster">;
4810
4811// Setmaxnreg inc/dec intrinsics
4812def int_nvvm_setmaxnreg_inc_sync_aligned_u32
4813  : DefaultAttrsIntrinsic<[], [llvm_i32_ty],
4814              [IntrConvergent, IntrNoMem, IntrHasSideEffects, ImmArg<ArgIndex<0>>],
4815              "llvm.nvvm.setmaxnreg.inc.sync.aligned.u32">;
4816def int_nvvm_setmaxnreg_dec_sync_aligned_u32
4817  : DefaultAttrsIntrinsic<[], [llvm_i32_ty],
4818              [IntrConvergent, IntrNoMem, IntrHasSideEffects, ImmArg<ArgIndex<0>>],
4819              "llvm.nvvm.setmaxnreg.dec.sync.aligned.u32">;
4820
4821// Exit
4822def int_nvvm_exit : ClangBuiltin<"__nvvm_exit">,
4823    Intrinsic<[], [], [IntrConvergent, IntrInaccessibleMemOnly, IntrNoReturn]>;
4824
4825} // let TargetPrefix = "nvvm"
4826