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