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