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