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