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