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
14def llvm_anyi64ptr_ty     : LLVMAnyPointerType<llvm_i64_ty>;     // (space)i64*
15
16//
17// MISC
18//
19
20  def int_nvvm_clz_i : GCCBuiltin<"__nvvm_clz_i">,
21      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
22  def int_nvvm_clz_ll : GCCBuiltin<"__nvvm_clz_ll">,
23      Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem]>;
24
25  def int_nvvm_popc_i : GCCBuiltin<"__nvvm_popc_i">,
26      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
27  def int_nvvm_popc_ll : GCCBuiltin<"__nvvm_popc_ll">,
28      Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem]>;
29
30  def int_nvvm_prmt : GCCBuiltin<"__nvvm_prmt">,
31      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
32        [IntrNoMem, Commutative]>;
33
34//
35// Min Max
36//
37
38  def int_nvvm_min_i : GCCBuiltin<"__nvvm_min_i">,
39      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
40        [IntrNoMem, Commutative]>;
41  def int_nvvm_min_ui : GCCBuiltin<"__nvvm_min_ui">,
42      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
43        [IntrNoMem, Commutative]>;
44
45  def int_nvvm_min_ll : GCCBuiltin<"__nvvm_min_ll">,
46      Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
47        [IntrNoMem, Commutative]>;
48  def int_nvvm_min_ull : GCCBuiltin<"__nvvm_min_ull">,
49      Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
50        [IntrNoMem, Commutative]>;
51
52  def int_nvvm_max_i : GCCBuiltin<"__nvvm_max_i">,
53      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
54        [IntrNoMem, Commutative]>;
55  def int_nvvm_max_ui : GCCBuiltin<"__nvvm_max_ui">,
56      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
57        [IntrNoMem, Commutative]>;
58
59  def int_nvvm_max_ll : GCCBuiltin<"__nvvm_max_ll">,
60      Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
61        [IntrNoMem, Commutative]>;
62  def int_nvvm_max_ull : GCCBuiltin<"__nvvm_max_ull">,
63      Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
64        [IntrNoMem, Commutative]>;
65
66  def int_nvvm_fmin_f : GCCBuiltin<"__nvvm_fmin_f">,
67      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
68        [IntrNoMem, Commutative]>;
69  def int_nvvm_fmin_ftz_f : GCCBuiltin<"__nvvm_fmin_ftz_f">,
70      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
71        [IntrNoMem, Commutative]>;
72
73  def int_nvvm_fmax_f : GCCBuiltin<"__nvvm_fmax_f">,
74      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty]
75        , [IntrNoMem, Commutative]>;
76  def int_nvvm_fmax_ftz_f : GCCBuiltin<"__nvvm_fmax_ftz_f">,
77      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
78        [IntrNoMem, Commutative]>;
79
80  def int_nvvm_fmin_d : GCCBuiltin<"__nvvm_fmin_d">,
81      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
82        [IntrNoMem, Commutative]>;
83  def int_nvvm_fmax_d : GCCBuiltin<"__nvvm_fmax_d">,
84      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
85        [IntrNoMem, Commutative]>;
86
87//
88// Multiplication
89//
90
91  def int_nvvm_mulhi_i : GCCBuiltin<"__nvvm_mulhi_i">,
92      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
93        [IntrNoMem, Commutative]>;
94  def int_nvvm_mulhi_ui : GCCBuiltin<"__nvvm_mulhi_ui">,
95      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
96        [IntrNoMem, Commutative]>;
97
98  def int_nvvm_mulhi_ll : GCCBuiltin<"__nvvm_mulhi_ll">,
99      Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
100        [IntrNoMem, Commutative]>;
101  def int_nvvm_mulhi_ull : GCCBuiltin<"__nvvm_mulhi_ull">,
102      Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
103        [IntrNoMem, Commutative]>;
104
105  def int_nvvm_mul_rn_ftz_f : GCCBuiltin<"__nvvm_mul_rn_ftz_f">,
106      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
107        [IntrNoMem, Commutative]>;
108  def int_nvvm_mul_rn_f : GCCBuiltin<"__nvvm_mul_rn_f">,
109      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
110        [IntrNoMem, Commutative]>;
111  def int_nvvm_mul_rz_ftz_f : GCCBuiltin<"__nvvm_mul_rz_ftz_f">,
112      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
113        [IntrNoMem, Commutative]>;
114  def int_nvvm_mul_rz_f : GCCBuiltin<"__nvvm_mul_rz_f">,
115      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
116        [IntrNoMem, Commutative]>;
117  def int_nvvm_mul_rm_ftz_f : GCCBuiltin<"__nvvm_mul_rm_ftz_f">,
118      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
119        [IntrNoMem, Commutative]>;
120  def int_nvvm_mul_rm_f : GCCBuiltin<"__nvvm_mul_rm_f">,
121      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
122        [IntrNoMem, Commutative]>;
123  def int_nvvm_mul_rp_ftz_f : GCCBuiltin<"__nvvm_mul_rp_ftz_f">,
124      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
125        [IntrNoMem, Commutative]>;
126  def int_nvvm_mul_rp_f : GCCBuiltin<"__nvvm_mul_rp_f">,
127      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
128        [IntrNoMem, Commutative]>;
129
130  def int_nvvm_mul_rn_d : GCCBuiltin<"__nvvm_mul_rn_d">,
131      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
132        [IntrNoMem, Commutative]>;
133  def int_nvvm_mul_rz_d : GCCBuiltin<"__nvvm_mul_rz_d">,
134      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
135        [IntrNoMem, Commutative]>;
136  def int_nvvm_mul_rm_d : GCCBuiltin<"__nvvm_mul_rm_d">,
137      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
138        [IntrNoMem, Commutative]>;
139  def int_nvvm_mul_rp_d : GCCBuiltin<"__nvvm_mul_rp_d">,
140      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
141        [IntrNoMem, Commutative]>;
142
143  def int_nvvm_mul24_i : GCCBuiltin<"__nvvm_mul24_i">,
144      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
145        [IntrNoMem, Commutative]>;
146  def int_nvvm_mul24_ui : GCCBuiltin<"__nvvm_mul24_ui">,
147      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
148        [IntrNoMem, Commutative]>;
149
150//
151// Div
152//
153
154  def int_nvvm_div_approx_ftz_f : GCCBuiltin<"__nvvm_div_approx_ftz_f">,
155      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
156        [IntrNoMem, Commutative]>;
157  def int_nvvm_div_approx_f : GCCBuiltin<"__nvvm_div_approx_f">,
158      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
159        [IntrNoMem, Commutative]>;
160
161  def int_nvvm_div_rn_ftz_f : GCCBuiltin<"__nvvm_div_rn_ftz_f">,
162      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
163        [IntrNoMem, Commutative]>;
164  def int_nvvm_div_rn_f : GCCBuiltin<"__nvvm_div_rn_f">,
165      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
166        [IntrNoMem, Commutative]>;
167
168  def int_nvvm_div_rz_ftz_f : GCCBuiltin<"__nvvm_div_rz_ftz_f">,
169      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
170        [IntrNoMem, Commutative]>;
171  def int_nvvm_div_rz_f : GCCBuiltin<"__nvvm_div_rz_f">,
172      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
173        [IntrNoMem, Commutative]>;
174
175  def int_nvvm_div_rm_ftz_f : GCCBuiltin<"__nvvm_div_rm_ftz_f">,
176      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
177        [IntrNoMem, Commutative]>;
178  def int_nvvm_div_rm_f : GCCBuiltin<"__nvvm_div_rm_f">,
179      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
180        [IntrNoMem, Commutative]>;
181
182  def int_nvvm_div_rp_ftz_f : GCCBuiltin<"__nvvm_div_rp_ftz_f">,
183      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
184        [IntrNoMem, Commutative]>;
185  def int_nvvm_div_rp_f : GCCBuiltin<"__nvvm_div_rp_f">,
186      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
187        [IntrNoMem, Commutative]>;
188
189  def int_nvvm_div_rn_d : GCCBuiltin<"__nvvm_div_rn_d">,
190      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
191        [IntrNoMem, Commutative]>;
192  def int_nvvm_div_rz_d : GCCBuiltin<"__nvvm_div_rz_d">,
193      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
194        [IntrNoMem, Commutative]>;
195  def int_nvvm_div_rm_d : GCCBuiltin<"__nvvm_div_rm_d">,
196      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
197        [IntrNoMem, Commutative]>;
198  def int_nvvm_div_rp_d : GCCBuiltin<"__nvvm_div_rp_d">,
199      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
200        [IntrNoMem, Commutative]>;
201
202//
203// Brev
204//
205
206  def int_nvvm_brev32 : GCCBuiltin<"__nvvm_brev32">,
207      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
208  def int_nvvm_brev64 : GCCBuiltin<"__nvvm_brev64">,
209      Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem]>;
210
211//
212// Sad
213//
214
215  def int_nvvm_sad_i : GCCBuiltin<"__nvvm_sad_i">,
216      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
217        [IntrNoMem, Commutative]>;
218  def int_nvvm_sad_ui : GCCBuiltin<"__nvvm_sad_ui">,
219      Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
220        [IntrNoMem, Commutative]>;
221
222//
223// Floor  Ceil
224//
225
226  def int_nvvm_floor_ftz_f : GCCBuiltin<"__nvvm_floor_ftz_f">,
227      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
228  def int_nvvm_floor_f : GCCBuiltin<"__nvvm_floor_f">,
229      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
230  def int_nvvm_floor_d : GCCBuiltin<"__nvvm_floor_d">,
231      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
232
233  def int_nvvm_ceil_ftz_f : GCCBuiltin<"__nvvm_ceil_ftz_f">,
234      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
235  def int_nvvm_ceil_f : GCCBuiltin<"__nvvm_ceil_f">,
236      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
237  def int_nvvm_ceil_d : GCCBuiltin<"__nvvm_ceil_d">,
238      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
239
240//
241// Abs
242//
243
244  def int_nvvm_abs_i : GCCBuiltin<"__nvvm_abs_i">,
245      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
246  def int_nvvm_abs_ll : GCCBuiltin<"__nvvm_abs_ll">,
247      Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem]>;
248
249  def int_nvvm_fabs_ftz_f : GCCBuiltin<"__nvvm_fabs_ftz_f">,
250      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
251  def int_nvvm_fabs_f : GCCBuiltin<"__nvvm_fabs_f">,
252      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
253
254  def int_nvvm_fabs_d : GCCBuiltin<"__nvvm_fabs_d">,
255      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
256
257//
258// Round
259//
260
261  def int_nvvm_round_ftz_f : GCCBuiltin<"__nvvm_round_ftz_f">,
262      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
263  def int_nvvm_round_f : GCCBuiltin<"__nvvm_round_f">,
264      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
265
266  def int_nvvm_round_d : GCCBuiltin<"__nvvm_round_d">,
267      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
268
269//
270// Trunc
271//
272
273  def int_nvvm_trunc_ftz_f : GCCBuiltin<"__nvvm_trunc_ftz_f">,
274      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
275  def int_nvvm_trunc_f : GCCBuiltin<"__nvvm_trunc_f">,
276      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
277
278  def int_nvvm_trunc_d : GCCBuiltin<"__nvvm_trunc_d">,
279      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
280
281//
282// Saturate
283//
284
285  def int_nvvm_saturate_ftz_f : GCCBuiltin<"__nvvm_saturate_ftz_f">,
286      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
287  def int_nvvm_saturate_f : GCCBuiltin<"__nvvm_saturate_f">,
288      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
289
290  def int_nvvm_saturate_d : GCCBuiltin<"__nvvm_saturate_d">,
291      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
292
293//
294// Exp2  Log2
295//
296
297  def int_nvvm_ex2_approx_ftz_f : GCCBuiltin<"__nvvm_ex2_approx_ftz_f">,
298      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
299  def int_nvvm_ex2_approx_f : GCCBuiltin<"__nvvm_ex2_approx_f">,
300      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
301  def int_nvvm_ex2_approx_d : GCCBuiltin<"__nvvm_ex2_approx_d">,
302      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
303
304  def int_nvvm_lg2_approx_ftz_f : GCCBuiltin<"__nvvm_lg2_approx_ftz_f">,
305      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
306  def int_nvvm_lg2_approx_f : GCCBuiltin<"__nvvm_lg2_approx_f">,
307      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
308  def int_nvvm_lg2_approx_d : GCCBuiltin<"__nvvm_lg2_approx_d">,
309      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
310
311//
312// Sin  Cos
313//
314
315  def int_nvvm_sin_approx_ftz_f : GCCBuiltin<"__nvvm_sin_approx_ftz_f">,
316      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
317  def int_nvvm_sin_approx_f : GCCBuiltin<"__nvvm_sin_approx_f">,
318      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
319
320  def int_nvvm_cos_approx_ftz_f : GCCBuiltin<"__nvvm_cos_approx_ftz_f">,
321      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
322  def int_nvvm_cos_approx_f : GCCBuiltin<"__nvvm_cos_approx_f">,
323      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
324
325//
326// Fma
327//
328
329  def int_nvvm_fma_rn_ftz_f : GCCBuiltin<"__nvvm_fma_rn_ftz_f">,
330      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
331        [IntrNoMem, Commutative]>;
332  def int_nvvm_fma_rn_f : GCCBuiltin<"__nvvm_fma_rn_f">,
333      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
334        [IntrNoMem, Commutative]>;
335  def int_nvvm_fma_rz_ftz_f : GCCBuiltin<"__nvvm_fma_rz_ftz_f">,
336      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
337        [IntrNoMem, Commutative]>;
338  def int_nvvm_fma_rz_f : GCCBuiltin<"__nvvm_fma_rz_f">,
339      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
340        [IntrNoMem, Commutative]>;
341  def int_nvvm_fma_rm_ftz_f : GCCBuiltin<"__nvvm_fma_rm_ftz_f">,
342      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
343        [IntrNoMem, Commutative]>;
344  def int_nvvm_fma_rm_f : GCCBuiltin<"__nvvm_fma_rm_f">,
345      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
346        [IntrNoMem, Commutative]>;
347  def int_nvvm_fma_rp_ftz_f : GCCBuiltin<"__nvvm_fma_rp_ftz_f">,
348      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
349        [IntrNoMem, Commutative]>;
350  def int_nvvm_fma_rp_f : GCCBuiltin<"__nvvm_fma_rp_f">,
351      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty],
352        [IntrNoMem, Commutative]>;
353
354  def int_nvvm_fma_rn_d : GCCBuiltin<"__nvvm_fma_rn_d">,
355      Intrinsic<[llvm_double_ty],
356        [llvm_double_ty, llvm_double_ty, llvm_double_ty],
357        [IntrNoMem, Commutative]>;
358  def int_nvvm_fma_rz_d : GCCBuiltin<"__nvvm_fma_rz_d">,
359      Intrinsic<[llvm_double_ty],
360        [llvm_double_ty, llvm_double_ty, llvm_double_ty],
361        [IntrNoMem, Commutative]>;
362  def int_nvvm_fma_rm_d : GCCBuiltin<"__nvvm_fma_rm_d">,
363      Intrinsic<[llvm_double_ty],
364        [llvm_double_ty, llvm_double_ty, llvm_double_ty],
365        [IntrNoMem, Commutative]>;
366  def int_nvvm_fma_rp_d : GCCBuiltin<"__nvvm_fma_rp_d">,
367      Intrinsic<[llvm_double_ty],
368        [llvm_double_ty, llvm_double_ty, llvm_double_ty],
369        [IntrNoMem, Commutative]>;
370
371//
372// Rcp
373//
374
375  def int_nvvm_rcp_rn_ftz_f : GCCBuiltin<"__nvvm_rcp_rn_ftz_f">,
376      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
377  def int_nvvm_rcp_rn_f : GCCBuiltin<"__nvvm_rcp_rn_f">,
378      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
379  def int_nvvm_rcp_rz_ftz_f : GCCBuiltin<"__nvvm_rcp_rz_ftz_f">,
380      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
381  def int_nvvm_rcp_rz_f : GCCBuiltin<"__nvvm_rcp_rz_f">,
382      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
383  def int_nvvm_rcp_rm_ftz_f : GCCBuiltin<"__nvvm_rcp_rm_ftz_f">,
384      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
385  def int_nvvm_rcp_rm_f : GCCBuiltin<"__nvvm_rcp_rm_f">,
386      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
387  def int_nvvm_rcp_rp_ftz_f : GCCBuiltin<"__nvvm_rcp_rp_ftz_f">,
388      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
389  def int_nvvm_rcp_rp_f : GCCBuiltin<"__nvvm_rcp_rp_f">,
390      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
391
392  def int_nvvm_rcp_rn_d : GCCBuiltin<"__nvvm_rcp_rn_d">,
393      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
394  def int_nvvm_rcp_rz_d : GCCBuiltin<"__nvvm_rcp_rz_d">,
395      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
396  def int_nvvm_rcp_rm_d : GCCBuiltin<"__nvvm_rcp_rm_d">,
397      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
398  def int_nvvm_rcp_rp_d : GCCBuiltin<"__nvvm_rcp_rp_d">,
399      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
400
401  def int_nvvm_rcp_approx_ftz_d : GCCBuiltin<"__nvvm_rcp_approx_ftz_d">,
402      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
403
404//
405// Sqrt
406//
407
408  def int_nvvm_sqrt_f : GCCBuiltin<"__nvvm_sqrt_f">,
409      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
410  def int_nvvm_sqrt_rn_ftz_f : GCCBuiltin<"__nvvm_sqrt_rn_ftz_f">,
411      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
412  def int_nvvm_sqrt_rn_f : GCCBuiltin<"__nvvm_sqrt_rn_f">,
413      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
414  def int_nvvm_sqrt_rz_ftz_f : GCCBuiltin<"__nvvm_sqrt_rz_ftz_f">,
415      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
416  def int_nvvm_sqrt_rz_f : GCCBuiltin<"__nvvm_sqrt_rz_f">,
417      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
418  def int_nvvm_sqrt_rm_ftz_f : GCCBuiltin<"__nvvm_sqrt_rm_ftz_f">,
419      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
420  def int_nvvm_sqrt_rm_f : GCCBuiltin<"__nvvm_sqrt_rm_f">,
421      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
422  def int_nvvm_sqrt_rp_ftz_f : GCCBuiltin<"__nvvm_sqrt_rp_ftz_f">,
423      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
424  def int_nvvm_sqrt_rp_f : GCCBuiltin<"__nvvm_sqrt_rp_f">,
425      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
426  def int_nvvm_sqrt_approx_ftz_f : GCCBuiltin<"__nvvm_sqrt_approx_ftz_f">,
427      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
428  def int_nvvm_sqrt_approx_f : GCCBuiltin<"__nvvm_sqrt_approx_f">,
429      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
430
431  def int_nvvm_sqrt_rn_d : GCCBuiltin<"__nvvm_sqrt_rn_d">,
432      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
433  def int_nvvm_sqrt_rz_d : GCCBuiltin<"__nvvm_sqrt_rz_d">,
434      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
435  def int_nvvm_sqrt_rm_d : GCCBuiltin<"__nvvm_sqrt_rm_d">,
436      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
437  def int_nvvm_sqrt_rp_d : GCCBuiltin<"__nvvm_sqrt_rp_d">,
438      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
439
440//
441// Rsqrt
442//
443
444  def int_nvvm_rsqrt_approx_ftz_f : GCCBuiltin<"__nvvm_rsqrt_approx_ftz_f">,
445      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
446  def int_nvvm_rsqrt_approx_f : GCCBuiltin<"__nvvm_rsqrt_approx_f">,
447      Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
448  def int_nvvm_rsqrt_approx_d : GCCBuiltin<"__nvvm_rsqrt_approx_d">,
449      Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
450
451//
452// Add
453//
454
455  def int_nvvm_add_rn_ftz_f : GCCBuiltin<"__nvvm_add_rn_ftz_f">,
456      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
457        [IntrNoMem, Commutative]>;
458  def int_nvvm_add_rn_f : GCCBuiltin<"__nvvm_add_rn_f">,
459      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
460        [IntrNoMem, Commutative]>;
461  def int_nvvm_add_rz_ftz_f : GCCBuiltin<"__nvvm_add_rz_ftz_f">,
462      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
463        [IntrNoMem, Commutative]>;
464  def int_nvvm_add_rz_f : GCCBuiltin<"__nvvm_add_rz_f">,
465      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
466        [IntrNoMem, Commutative]>;
467  def int_nvvm_add_rm_ftz_f : GCCBuiltin<"__nvvm_add_rm_ftz_f">,
468      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
469        [IntrNoMem, Commutative]>;
470  def int_nvvm_add_rm_f : GCCBuiltin<"__nvvm_add_rm_f">,
471      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
472        [IntrNoMem, Commutative]>;
473  def int_nvvm_add_rp_ftz_f : GCCBuiltin<"__nvvm_add_rp_ftz_f">,
474      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
475        [IntrNoMem, Commutative]>;
476  def int_nvvm_add_rp_f : GCCBuiltin<"__nvvm_add_rp_f">,
477      Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
478        [IntrNoMem, Commutative]>;
479
480  def int_nvvm_add_rn_d : GCCBuiltin<"__nvvm_add_rn_d">,
481      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
482        [IntrNoMem, Commutative]>;
483  def int_nvvm_add_rz_d : GCCBuiltin<"__nvvm_add_rz_d">,
484      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
485        [IntrNoMem, Commutative]>;
486  def int_nvvm_add_rm_d : GCCBuiltin<"__nvvm_add_rm_d">,
487      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
488        [IntrNoMem, Commutative]>;
489  def int_nvvm_add_rp_d : GCCBuiltin<"__nvvm_add_rp_d">,
490      Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
491        [IntrNoMem, Commutative]>;
492
493//
494// Convert
495//
496
497  def int_nvvm_d2f_rn_ftz : GCCBuiltin<"__nvvm_d2f_rn_ftz">,
498      Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
499  def int_nvvm_d2f_rn : GCCBuiltin<"__nvvm_d2f_rn">,
500      Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
501  def int_nvvm_d2f_rz_ftz : GCCBuiltin<"__nvvm_d2f_rz_ftz">,
502      Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
503  def int_nvvm_d2f_rz : GCCBuiltin<"__nvvm_d2f_rz">,
504      Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
505  def int_nvvm_d2f_rm_ftz : GCCBuiltin<"__nvvm_d2f_rm_ftz">,
506      Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
507  def int_nvvm_d2f_rm : GCCBuiltin<"__nvvm_d2f_rm">,
508      Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
509  def int_nvvm_d2f_rp_ftz : GCCBuiltin<"__nvvm_d2f_rp_ftz">,
510      Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
511  def int_nvvm_d2f_rp : GCCBuiltin<"__nvvm_d2f_rp">,
512      Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
513
514  def int_nvvm_d2i_rn : GCCBuiltin<"__nvvm_d2i_rn">,
515      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
516  def int_nvvm_d2i_rz : GCCBuiltin<"__nvvm_d2i_rz">,
517      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
518  def int_nvvm_d2i_rm : GCCBuiltin<"__nvvm_d2i_rm">,
519      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
520  def int_nvvm_d2i_rp : GCCBuiltin<"__nvvm_d2i_rp">,
521      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
522
523  def int_nvvm_d2ui_rn : GCCBuiltin<"__nvvm_d2ui_rn">,
524      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
525  def int_nvvm_d2ui_rz : GCCBuiltin<"__nvvm_d2ui_rz">,
526      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
527  def int_nvvm_d2ui_rm : GCCBuiltin<"__nvvm_d2ui_rm">,
528      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
529  def int_nvvm_d2ui_rp : GCCBuiltin<"__nvvm_d2ui_rp">,
530      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
531
532  def int_nvvm_i2d_rn : GCCBuiltin<"__nvvm_i2d_rn">,
533      Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
534  def int_nvvm_i2d_rz : GCCBuiltin<"__nvvm_i2d_rz">,
535      Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
536  def int_nvvm_i2d_rm : GCCBuiltin<"__nvvm_i2d_rm">,
537      Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
538  def int_nvvm_i2d_rp : GCCBuiltin<"__nvvm_i2d_rp">,
539      Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
540
541  def int_nvvm_ui2d_rn : GCCBuiltin<"__nvvm_ui2d_rn">,
542      Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
543  def int_nvvm_ui2d_rz : GCCBuiltin<"__nvvm_ui2d_rz">,
544      Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
545  def int_nvvm_ui2d_rm : GCCBuiltin<"__nvvm_ui2d_rm">,
546      Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
547  def int_nvvm_ui2d_rp : GCCBuiltin<"__nvvm_ui2d_rp">,
548      Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
549
550  def int_nvvm_f2i_rn_ftz : GCCBuiltin<"__nvvm_f2i_rn_ftz">,
551      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
552  def int_nvvm_f2i_rn : GCCBuiltin<"__nvvm_f2i_rn">,
553      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
554  def int_nvvm_f2i_rz_ftz : GCCBuiltin<"__nvvm_f2i_rz_ftz">,
555      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
556  def int_nvvm_f2i_rz : GCCBuiltin<"__nvvm_f2i_rz">,
557      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
558  def int_nvvm_f2i_rm_ftz : GCCBuiltin<"__nvvm_f2i_rm_ftz">,
559      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
560  def int_nvvm_f2i_rm : GCCBuiltin<"__nvvm_f2i_rm">,
561      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
562  def int_nvvm_f2i_rp_ftz : GCCBuiltin<"__nvvm_f2i_rp_ftz">,
563      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
564  def int_nvvm_f2i_rp : GCCBuiltin<"__nvvm_f2i_rp">,
565      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
566
567  def int_nvvm_f2ui_rn_ftz : GCCBuiltin<"__nvvm_f2ui_rn_ftz">,
568      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
569  def int_nvvm_f2ui_rn : GCCBuiltin<"__nvvm_f2ui_rn">,
570      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
571  def int_nvvm_f2ui_rz_ftz : GCCBuiltin<"__nvvm_f2ui_rz_ftz">,
572      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
573  def int_nvvm_f2ui_rz : GCCBuiltin<"__nvvm_f2ui_rz">,
574      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
575  def int_nvvm_f2ui_rm_ftz : GCCBuiltin<"__nvvm_f2ui_rm_ftz">,
576      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
577  def int_nvvm_f2ui_rm : GCCBuiltin<"__nvvm_f2ui_rm">,
578      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
579  def int_nvvm_f2ui_rp_ftz : GCCBuiltin<"__nvvm_f2ui_rp_ftz">,
580      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
581  def int_nvvm_f2ui_rp : GCCBuiltin<"__nvvm_f2ui_rp">,
582      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
583
584  def int_nvvm_i2f_rn : GCCBuiltin<"__nvvm_i2f_rn">,
585      Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
586  def int_nvvm_i2f_rz : GCCBuiltin<"__nvvm_i2f_rz">,
587      Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
588  def int_nvvm_i2f_rm : GCCBuiltin<"__nvvm_i2f_rm">,
589      Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
590  def int_nvvm_i2f_rp : GCCBuiltin<"__nvvm_i2f_rp">,
591      Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
592
593  def int_nvvm_ui2f_rn : GCCBuiltin<"__nvvm_ui2f_rn">,
594      Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
595  def int_nvvm_ui2f_rz : GCCBuiltin<"__nvvm_ui2f_rz">,
596      Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
597  def int_nvvm_ui2f_rm : GCCBuiltin<"__nvvm_ui2f_rm">,
598      Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
599  def int_nvvm_ui2f_rp : GCCBuiltin<"__nvvm_ui2f_rp">,
600      Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
601
602  def int_nvvm_lohi_i2d : GCCBuiltin<"__nvvm_lohi_i2d">,
603      Intrinsic<[llvm_double_ty], [llvm_i32_ty, llvm_i32_ty],
604        [IntrNoMem, Commutative]>;
605
606  def int_nvvm_d2i_lo : GCCBuiltin<"__nvvm_d2i_lo">,
607      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
608  def int_nvvm_d2i_hi : GCCBuiltin<"__nvvm_d2i_hi">,
609      Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
610
611  def int_nvvm_f2ll_rn_ftz : GCCBuiltin<"__nvvm_f2ll_rn_ftz">,
612      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
613  def int_nvvm_f2ll_rn : GCCBuiltin<"__nvvm_f2ll_rn">,
614      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
615  def int_nvvm_f2ll_rz_ftz : GCCBuiltin<"__nvvm_f2ll_rz_ftz">,
616      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
617  def int_nvvm_f2ll_rz : GCCBuiltin<"__nvvm_f2ll_rz">,
618      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
619  def int_nvvm_f2ll_rm_ftz : GCCBuiltin<"__nvvm_f2ll_rm_ftz">,
620      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
621  def int_nvvm_f2ll_rm : GCCBuiltin<"__nvvm_f2ll_rm">,
622      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
623  def int_nvvm_f2ll_rp_ftz : GCCBuiltin<"__nvvm_f2ll_rp_ftz">,
624      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
625  def int_nvvm_f2ll_rp : GCCBuiltin<"__nvvm_f2ll_rp">,
626      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
627
628  def int_nvvm_f2ull_rn_ftz : GCCBuiltin<"__nvvm_f2ull_rn_ftz">,
629      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
630  def int_nvvm_f2ull_rn : GCCBuiltin<"__nvvm_f2ull_rn">,
631      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
632  def int_nvvm_f2ull_rz_ftz : GCCBuiltin<"__nvvm_f2ull_rz_ftz">,
633      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
634  def int_nvvm_f2ull_rz : GCCBuiltin<"__nvvm_f2ull_rz">,
635      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
636  def int_nvvm_f2ull_rm_ftz : GCCBuiltin<"__nvvm_f2ull_rm_ftz">,
637      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
638  def int_nvvm_f2ull_rm : GCCBuiltin<"__nvvm_f2ull_rm">,
639      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
640  def int_nvvm_f2ull_rp_ftz : GCCBuiltin<"__nvvm_f2ull_rp_ftz">,
641      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
642  def int_nvvm_f2ull_rp : GCCBuiltin<"__nvvm_f2ull_rp">,
643      Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
644
645  def int_nvvm_d2ll_rn : GCCBuiltin<"__nvvm_d2ll_rn">,
646      Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
647  def int_nvvm_d2ll_rz : GCCBuiltin<"__nvvm_d2ll_rz">,
648      Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
649  def int_nvvm_d2ll_rm : GCCBuiltin<"__nvvm_d2ll_rm">,
650      Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
651  def int_nvvm_d2ll_rp : GCCBuiltin<"__nvvm_d2ll_rp">,
652      Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
653
654  def int_nvvm_d2ull_rn : GCCBuiltin<"__nvvm_d2ull_rn">,
655      Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
656  def int_nvvm_d2ull_rz : GCCBuiltin<"__nvvm_d2ull_rz">,
657      Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
658  def int_nvvm_d2ull_rm : GCCBuiltin<"__nvvm_d2ull_rm">,
659      Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
660  def int_nvvm_d2ull_rp : GCCBuiltin<"__nvvm_d2ull_rp">,
661      Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
662
663  def int_nvvm_ll2f_rn : GCCBuiltin<"__nvvm_ll2f_rn">,
664      Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
665  def int_nvvm_ll2f_rz : GCCBuiltin<"__nvvm_ll2f_rz">,
666      Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
667  def int_nvvm_ll2f_rm : GCCBuiltin<"__nvvm_ll2f_rm">,
668      Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
669  def int_nvvm_ll2f_rp : GCCBuiltin<"__nvvm_ll2f_rp">,
670      Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
671  def int_nvvm_ull2f_rn : GCCBuiltin<"__nvvm_ull2f_rn">,
672      Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
673  def int_nvvm_ull2f_rz : GCCBuiltin<"__nvvm_ull2f_rz">,
674      Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
675  def int_nvvm_ull2f_rm : GCCBuiltin<"__nvvm_ull2f_rm">,
676      Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
677  def int_nvvm_ull2f_rp : GCCBuiltin<"__nvvm_ull2f_rp">,
678      Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
679
680  def int_nvvm_ll2d_rn : GCCBuiltin<"__nvvm_ll2d_rn">,
681      Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
682  def int_nvvm_ll2d_rz : GCCBuiltin<"__nvvm_ll2d_rz">,
683      Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
684  def int_nvvm_ll2d_rm : GCCBuiltin<"__nvvm_ll2d_rm">,
685      Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
686  def int_nvvm_ll2d_rp : GCCBuiltin<"__nvvm_ll2d_rp">,
687      Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
688  def int_nvvm_ull2d_rn : GCCBuiltin<"__nvvm_ull2d_rn">,
689      Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
690  def int_nvvm_ull2d_rz : GCCBuiltin<"__nvvm_ull2d_rz">,
691      Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
692  def int_nvvm_ull2d_rm : GCCBuiltin<"__nvvm_ull2d_rm">,
693      Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
694  def int_nvvm_ull2d_rp : GCCBuiltin<"__nvvm_ull2d_rp">,
695      Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
696
697  def int_nvvm_f2h_rn_ftz : GCCBuiltin<"__nvvm_f2h_rn_ftz">,
698      Intrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem]>;
699  def int_nvvm_f2h_rn : GCCBuiltin<"__nvvm_f2h_rn">,
700      Intrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem]>;
701
702  def int_nvvm_h2f : GCCBuiltin<"__nvvm_h2f">,
703      Intrinsic<[llvm_float_ty], [llvm_i16_ty], [IntrNoMem]>;
704
705//
706// Bitcast
707//
708
709  def int_nvvm_bitcast_f2i : GCCBuiltin<"__nvvm_bitcast_f2i">,
710      Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
711  def int_nvvm_bitcast_i2f : GCCBuiltin<"__nvvm_bitcast_i2f">,
712      Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
713
714  def int_nvvm_bitcast_ll2d : GCCBuiltin<"__nvvm_bitcast_ll2d">,
715      Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
716  def int_nvvm_bitcast_d2ll : GCCBuiltin<"__nvvm_bitcast_d2ll">,
717      Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
718
719
720// Atomic not available as an llvm intrinsic.
721  def int_nvvm_atomic_load_add_f32 : Intrinsic<[llvm_float_ty],
722          [LLVMAnyPointerType<llvm_float_ty>, llvm_float_ty],
723                                      [IntrReadWriteArgMem, NoCapture<0>]>;
724  def int_nvvm_atomic_load_inc_32 : Intrinsic<[llvm_i32_ty],
725          [LLVMAnyPointerType<llvm_i32_ty>, llvm_i32_ty],
726                                      [IntrReadWriteArgMem, NoCapture<0>]>;
727  def int_nvvm_atomic_load_dec_32 : Intrinsic<[llvm_i32_ty],
728          [LLVMAnyPointerType<llvm_i32_ty>, llvm_i32_ty],
729                                      [IntrReadWriteArgMem, NoCapture<0>]>;
730
731// Bar.Sync
732  def int_cuda_syncthreads : GCCBuiltin<"__syncthreads">,
733      Intrinsic<[], [], [IntrNoDuplicate]>;
734  def int_nvvm_barrier0 : GCCBuiltin<"__nvvm_bar0">,
735      Intrinsic<[], [], [IntrNoDuplicate]>;
736  def int_nvvm_barrier0_popc : GCCBuiltin<"__nvvm_bar0_popc">,
737      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoDuplicate]>;
738  def int_nvvm_barrier0_and : GCCBuiltin<"__nvvm_bar0_and">,
739      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoDuplicate]>;
740  def int_nvvm_barrier0_or : GCCBuiltin<"__nvvm_bar0_or">,
741      Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoDuplicate]>;
742
743  // Membar
744  def int_nvvm_membar_cta : GCCBuiltin<"__nvvm_membar_cta">,
745      Intrinsic<[], [], []>;
746  def int_nvvm_membar_gl : GCCBuiltin<"__nvvm_membar_gl">,
747      Intrinsic<[], [], []>;
748  def int_nvvm_membar_sys : GCCBuiltin<"__nvvm_membar_sys">,
749      Intrinsic<[], [], []>;
750
751
752// Accessing special registers
753  def int_nvvm_read_ptx_sreg_tid_x :
754      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
755      GCCBuiltin<"__nvvm_read_ptx_sreg_tid_x">;
756  def int_nvvm_read_ptx_sreg_tid_y :
757      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
758      GCCBuiltin<"__nvvm_read_ptx_sreg_tid_y">;
759  def int_nvvm_read_ptx_sreg_tid_z :
760      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
761      GCCBuiltin<"__nvvm_read_ptx_sreg_tid_z">;
762
763  def int_nvvm_read_ptx_sreg_ntid_x :
764      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
765      GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_x">;
766  def int_nvvm_read_ptx_sreg_ntid_y :
767      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
768      GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_y">;
769  def int_nvvm_read_ptx_sreg_ntid_z :
770      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
771      GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_z">;
772
773  def int_nvvm_read_ptx_sreg_ctaid_x :
774      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
775      GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_x">;
776  def int_nvvm_read_ptx_sreg_ctaid_y :
777      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
778      GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_y">;
779  def int_nvvm_read_ptx_sreg_ctaid_z :
780      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
781      GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_z">;
782
783  def int_nvvm_read_ptx_sreg_nctaid_x :
784      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
785      GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_x">;
786  def int_nvvm_read_ptx_sreg_nctaid_y :
787      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
788      GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_y">;
789  def int_nvvm_read_ptx_sreg_nctaid_z :
790      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
791      GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_z">;
792
793  def int_nvvm_read_ptx_sreg_warpsize :
794      Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
795      GCCBuiltin<"__nvvm_read_ptx_sreg_warpsize">;
796
797
798// Generated within nvvm. Use for ldu on sm_20 or later
799def int_nvvm_ldu_global_i : Intrinsic<[llvm_anyint_ty],
800  [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
801  "llvm.nvvm.ldu.global.i">;
802def int_nvvm_ldu_global_f : Intrinsic<[llvm_anyfloat_ty],
803  [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
804  "llvm.nvvm.ldu.global.f">;
805def int_nvvm_ldu_global_p : Intrinsic<[llvm_anyptr_ty],
806  [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
807  "llvm.nvvm.ldu.global.p">;
808
809// Generated within nvvm. Use for ldg on sm_35 or later
810def int_nvvm_ldg_global_i : Intrinsic<[llvm_anyint_ty],
811  [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
812  "llvm.nvvm.ldg.global.i">;
813def int_nvvm_ldg_global_f : Intrinsic<[llvm_anyfloat_ty],
814  [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
815  "llvm.nvvm.ldg.global.f">;
816def int_nvvm_ldg_global_p : Intrinsic<[llvm_anyptr_ty],
817  [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
818  "llvm.nvvm.ldg.global.p">;
819
820// Use for generic pointers
821// - These intrinsics are used to convert address spaces.
822// - The input pointer and output pointer must have the same type, except for
823//   the address-space. (This restriction is not enforced here as there is
824//   currently no way to describe it).
825// - This complements the llvm bitcast, which can be used to cast one type
826//   of pointer to another type of pointer, while the address space remains
827//   the same.
828def int_nvvm_ptr_local_to_gen: Intrinsic<[llvm_anyptr_ty],
829                 [llvm_anyptr_ty], [IntrNoMem],
830                 "llvm.nvvm.ptr.local.to.gen">;
831def int_nvvm_ptr_shared_to_gen: Intrinsic<[llvm_anyptr_ty],
832                 [llvm_anyptr_ty], [IntrNoMem],
833                 "llvm.nvvm.ptr.shared.to.gen">;
834def int_nvvm_ptr_global_to_gen: Intrinsic<[llvm_anyptr_ty],
835                 [llvm_anyptr_ty], [IntrNoMem],
836                 "llvm.nvvm.ptr.global.to.gen">;
837def int_nvvm_ptr_constant_to_gen: Intrinsic<[llvm_anyptr_ty],
838                 [llvm_anyptr_ty], [IntrNoMem],
839                 "llvm.nvvm.ptr.constant.to.gen">;
840
841def int_nvvm_ptr_gen_to_global: Intrinsic<[llvm_anyptr_ty],
842                 [llvm_anyptr_ty], [IntrNoMem],
843                 "llvm.nvvm.ptr.gen.to.global">;
844def int_nvvm_ptr_gen_to_shared: Intrinsic<[llvm_anyptr_ty],
845                 [llvm_anyptr_ty], [IntrNoMem],
846                 "llvm.nvvm.ptr.gen.to.shared">;
847def int_nvvm_ptr_gen_to_local: Intrinsic<[llvm_anyptr_ty],
848                 [llvm_anyptr_ty], [IntrNoMem],
849                 "llvm.nvvm.ptr.gen.to.local">;
850def int_nvvm_ptr_gen_to_constant: Intrinsic<[llvm_anyptr_ty],
851                 [llvm_anyptr_ty], [IntrNoMem],
852                 "llvm.nvvm.ptr.gen.to.constant">;
853
854// Used in nvvm internally to help address space opt and ptx code generation
855// This is for params that are passed to kernel functions by pointer by-val.
856def int_nvvm_ptr_gen_to_param: Intrinsic<[llvm_anyptr_ty],
857                                     [llvm_anyptr_ty],
858                                   [IntrNoMem],
859                                   "llvm.nvvm.ptr.gen.to.param">;
860
861// Move intrinsics, used in nvvm internally
862
863def int_nvvm_move_i16 : Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem],
864  "llvm.nvvm.move.i16">;
865def int_nvvm_move_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem],
866  "llvm.nvvm.move.i32">;
867def int_nvvm_move_i64 : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem],
868  "llvm.nvvm.move.i64">;
869def int_nvvm_move_float : Intrinsic<[llvm_float_ty], [llvm_float_ty],
870  [IntrNoMem], "llvm.nvvm.move.float">;
871def int_nvvm_move_double : Intrinsic<[llvm_double_ty], [llvm_double_ty],
872  [IntrNoMem], "llvm.nvvm.move.double">;
873def int_nvvm_move_ptr : Intrinsic<[llvm_anyptr_ty], [llvm_anyptr_ty],
874  [IntrNoMem, NoCapture<0>], "llvm.nvvm.move.ptr">;
875
876
877// For getting the handle from a texture or surface variable
878def int_nvvm_texsurf_handle
879  : Intrinsic<[llvm_i64_ty], [llvm_metadata_ty, llvm_anyi64ptr_ty],
880              [IntrNoMem], "llvm.nvvm.texsurf.handle">;
881def int_nvvm_texsurf_handle_internal
882  : Intrinsic<[llvm_i64_ty], [llvm_anyptr_ty],
883              [IntrNoMem], "llvm.nvvm.texsurf.handle.internal">;
884
885/// Error / Warn
886def int_nvvm_compiler_error :
887    Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.error">;
888def int_nvvm_compiler_warn :
889    Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.warn">;
890
891def int_nvvm_reflect :
892  Intrinsic<[llvm_i32_ty], [llvm_anyptr_ty], [IntrNoMem], "llvm.nvvm.reflect">;
893
894// isspacep.{const, global, local, shared}
895def int_nvvm_isspacep_const
896  : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
897              "llvm.nvvm.isspacep.const">,
898    GCCBuiltin<"__nvvm_isspacep_const">;
899def int_nvvm_isspacep_global
900  : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
901              "llvm.nvvm.isspacep.global">,
902    GCCBuiltin<"__nvvm_isspacep_global">;
903def int_nvvm_isspacep_local
904  : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
905              "llvm.nvvm.isspacep.local">,
906    GCCBuiltin<"__nvvm_isspacep_local">;
907def int_nvvm_isspacep_shared
908  : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
909              "llvm.nvvm.isspacep.shared">,
910    GCCBuiltin<"__nvvm_isspacep_shared">;
911
912// Environment register read
913def int_nvvm_read_ptx_sreg_envreg0
914  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
915              "llvm.nvvm.read.ptx.sreg.envreg0">,
916    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg0">;
917def int_nvvm_read_ptx_sreg_envreg1
918  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
919              "llvm.nvvm.read.ptx.sreg.envreg1">,
920    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg1">;
921def int_nvvm_read_ptx_sreg_envreg2
922  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
923              "llvm.nvvm.read.ptx.sreg.envreg2">,
924    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg2">;
925def int_nvvm_read_ptx_sreg_envreg3
926  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
927              "llvm.nvvm.read.ptx.sreg.envreg3">,
928    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg3">;
929def int_nvvm_read_ptx_sreg_envreg4
930  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
931              "llvm.nvvm.read.ptx.sreg.envreg4">,
932    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg4">;
933def int_nvvm_read_ptx_sreg_envreg5
934  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
935              "llvm.nvvm.read.ptx.sreg.envreg5">,
936    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg5">;
937def int_nvvm_read_ptx_sreg_envreg6
938  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
939              "llvm.nvvm.read.ptx.sreg.envreg6">,
940    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg6">;
941def int_nvvm_read_ptx_sreg_envreg7
942  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
943              "llvm.nvvm.read.ptx.sreg.envreg7">,
944    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg7">;
945def int_nvvm_read_ptx_sreg_envreg8
946  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
947              "llvm.nvvm.read.ptx.sreg.envreg8">,
948    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg8">;
949def int_nvvm_read_ptx_sreg_envreg9
950  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
951              "llvm.nvvm.read.ptx.sreg.envreg9">,
952    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg9">;
953def int_nvvm_read_ptx_sreg_envreg10
954  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
955              "llvm.nvvm.read.ptx.sreg.envreg10">,
956    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg10">;
957def int_nvvm_read_ptx_sreg_envreg11
958  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
959              "llvm.nvvm.read.ptx.sreg.envreg11">,
960    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg11">;
961def int_nvvm_read_ptx_sreg_envreg12
962  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
963              "llvm.nvvm.read.ptx.sreg.envreg12">,
964    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg12">;
965def int_nvvm_read_ptx_sreg_envreg13
966  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
967              "llvm.nvvm.read.ptx.sreg.envreg13">,
968    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg13">;
969def int_nvvm_read_ptx_sreg_envreg14
970  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
971              "llvm.nvvm.read.ptx.sreg.envreg14">,
972    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg14">;
973def int_nvvm_read_ptx_sreg_envreg15
974  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
975              "llvm.nvvm.read.ptx.sreg.envreg15">,
976    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg15">;
977def int_nvvm_read_ptx_sreg_envreg16
978  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
979              "llvm.nvvm.read.ptx.sreg.envreg16">,
980    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg16">;
981def int_nvvm_read_ptx_sreg_envreg17
982  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
983              "llvm.nvvm.read.ptx.sreg.envreg17">,
984    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg17">;
985def int_nvvm_read_ptx_sreg_envreg18
986  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
987              "llvm.nvvm.read.ptx.sreg.envreg18">,
988    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg18">;
989def int_nvvm_read_ptx_sreg_envreg19
990  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
991              "llvm.nvvm.read.ptx.sreg.envreg19">,
992    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg19">;
993def int_nvvm_read_ptx_sreg_envreg20
994  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
995              "llvm.nvvm.read.ptx.sreg.envreg20">,
996    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg20">;
997def int_nvvm_read_ptx_sreg_envreg21
998  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
999              "llvm.nvvm.read.ptx.sreg.envreg21">,
1000    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg21">;
1001def int_nvvm_read_ptx_sreg_envreg22
1002  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1003              "llvm.nvvm.read.ptx.sreg.envreg22">,
1004    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg22">;
1005def int_nvvm_read_ptx_sreg_envreg23
1006  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1007              "llvm.nvvm.read.ptx.sreg.envreg23">,
1008    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg23">;
1009def int_nvvm_read_ptx_sreg_envreg24
1010  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1011              "llvm.nvvm.read.ptx.sreg.envreg24">,
1012    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg24">;
1013def int_nvvm_read_ptx_sreg_envreg25
1014  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1015              "llvm.nvvm.read.ptx.sreg.envreg25">,
1016    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg25">;
1017def int_nvvm_read_ptx_sreg_envreg26
1018  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1019              "llvm.nvvm.read.ptx.sreg.envreg26">,
1020    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg26">;
1021def int_nvvm_read_ptx_sreg_envreg27
1022  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1023              "llvm.nvvm.read.ptx.sreg.envreg27">,
1024    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg27">;
1025def int_nvvm_read_ptx_sreg_envreg28
1026  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1027              "llvm.nvvm.read.ptx.sreg.envreg28">,
1028    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg28">;
1029def int_nvvm_read_ptx_sreg_envreg29
1030  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1031              "llvm.nvvm.read.ptx.sreg.envreg29">,
1032    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg29">;
1033def int_nvvm_read_ptx_sreg_envreg30
1034  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1035              "llvm.nvvm.read.ptx.sreg.envreg30">,
1036    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg30">;
1037def int_nvvm_read_ptx_sreg_envreg31
1038  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1039              "llvm.nvvm.read.ptx.sreg.envreg31">,
1040    GCCBuiltin<"__nvvm_read_ptx_sreg_envreg31">;
1041
1042
1043// Texture Fetch
1044def int_nvvm_tex_1d_v4f32_i32
1045  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1046              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1047              "llvm.nvvm.tex.1d.v4f32.i32">;
1048def int_nvvm_tex_1d_v4f32_f32
1049  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1050              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1051              "llvm.nvvm.tex.1d.v4f32.f32">;
1052def int_nvvm_tex_1d_level_v4f32_f32
1053  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1054              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1055              "llvm.nvvm.tex.1d.level.v4f32.f32">;
1056def int_nvvm_tex_1d_grad_v4f32_f32
1057  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1058              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1059               llvm_float_ty], [],
1060              "llvm.nvvm.tex.1d.grad.v4f32.f32">;
1061def int_nvvm_tex_1d_v4i32_i32
1062  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1063              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1064              "llvm.nvvm.tex.1d.v4i32.i32">;
1065def int_nvvm_tex_1d_v4i32_f32
1066  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1067              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1068              "llvm.nvvm.tex.1d.v4i32.f32">;
1069def int_nvvm_tex_1d_level_v4i32_f32
1070  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1071              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1072              "llvm.nvvm.tex.1d.level.v4i32.f32.level">;
1073def int_nvvm_tex_1d_grad_v4i32_f32
1074  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1075              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1076               llvm_float_ty], [],
1077              "llvm.nvvm.tex.1d.grad.v4i32.f32">;
1078
1079def int_nvvm_tex_1d_array_v4f32_i32
1080  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1081              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1082              "llvm.nvvm.tex.1d.array.v4f32.i32">;
1083def int_nvvm_tex_1d_array_v4f32_f32
1084  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1085              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1086              "llvm.nvvm.tex.1d.array.v4f32.f32">;
1087def int_nvvm_tex_1d_array_level_v4f32_f32
1088  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1089              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1090               llvm_float_ty], [],
1091              "llvm.nvvm.tex.1d.array.level.v4f32.f32">;
1092def int_nvvm_tex_1d_array_grad_v4f32_f32
1093  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1094              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1095               llvm_float_ty, llvm_float_ty], [],
1096              "llvm.nvvm.tex.1d.array.grad.v4f32.f32">;
1097def int_nvvm_tex_1d_array_v4i32_i32
1098  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1099              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1100              "llvm.nvvm.tex.1d.array.v4i32.i32">;
1101def int_nvvm_tex_1d_array_v4i32_f32
1102  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1103              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1104              "llvm.nvvm.tex.1d.array.v4i32.f32">;
1105def int_nvvm_tex_1d_array_level_v4i32_f32
1106  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1107              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1108               llvm_float_ty], [],
1109              "llvm.nvvm.tex.1d.array.level.v4i32.f32">;
1110def int_nvvm_tex_1d_array_grad_v4i32_f32
1111  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1112              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1113               llvm_float_ty, llvm_float_ty], [],
1114              "llvm.nvvm.tex.1d.array.grad.v4i32.f32">;
1115
1116def int_nvvm_tex_2d_v4f32_i32
1117  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1118              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1119              "llvm.nvvm.tex.2d.v4f32.i32">;
1120def int_nvvm_tex_2d_v4f32_f32
1121  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1122              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1123              "llvm.nvvm.tex.2d.v4f32.f32">;
1124def int_nvvm_tex_2d_level_v4f32_f32
1125  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1126              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1127               llvm_float_ty], [],
1128              "llvm.nvvm.tex.2d.level.v4f32.f32">;
1129def int_nvvm_tex_2d_grad_v4f32_f32
1130  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1131              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1132               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1133              "llvm.nvvm.tex.2d.grad.v4f32.f32">;
1134def int_nvvm_tex_2d_v4i32_i32
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_i32_ty], [],
1137              "llvm.nvvm.tex.2d.v4i32.i32">;
1138def int_nvvm_tex_2d_v4i32_f32
1139  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1140              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1141              "llvm.nvvm.tex.2d.v4i32.f32">;
1142def int_nvvm_tex_2d_level_v4i32_f32
1143  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1144              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1145               llvm_float_ty], [],
1146              "llvm.nvvm.tex.2d.level.v4i32.f32">;
1147def int_nvvm_tex_2d_grad_v4i32_f32
1148  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1149              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1150               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1151              "llvm.nvvm.tex.2d.grad.v4i32.f32">;
1152
1153def int_nvvm_tex_2d_array_v4f32_i32
1154  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1155              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1156               llvm_i32_ty], [],
1157              "llvm.nvvm.tex.2d.array.v4f32.i32">;
1158def int_nvvm_tex_2d_array_v4f32_f32
1159  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1160              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1161               llvm_float_ty], [],
1162              "llvm.nvvm.tex.2d.array.v4f32.f32">;
1163def int_nvvm_tex_2d_array_level_v4f32_f32
1164  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1165              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1166               llvm_float_ty, llvm_float_ty], [],
1167              "llvm.nvvm.tex.2d.array.level.v4f32.f32">;
1168def int_nvvm_tex_2d_array_grad_v4f32_f32
1169  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1170              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1171               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1172               llvm_float_ty], [],
1173              "llvm.nvvm.tex.2d.array.grad.v4f32.f32">;
1174def int_nvvm_tex_2d_array_v4i32_i32
1175  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1176              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1177               llvm_i32_ty], [],
1178              "llvm.nvvm.tex.2d.array.v4i32.i32">;
1179def int_nvvm_tex_2d_array_v4i32_f32
1180  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1181              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1182               llvm_float_ty], [],
1183              "llvm.nvvm.tex.2d.array.v4i32.f32">;
1184def int_nvvm_tex_2d_array_level_v4i32_f32
1185  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1186              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1187               llvm_float_ty, llvm_float_ty], [],
1188              "llvm.nvvm.tex.2d.array.level.v4i32.f32">;
1189def int_nvvm_tex_2d_array_grad_v4i32_f32
1190  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1191              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1192               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1193               llvm_float_ty], [],
1194              "llvm.nvvm.tex.2d.array.grad.v4i32.f32">;
1195
1196def int_nvvm_tex_3d_v4f32_i32
1197  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1198              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1199              [], "llvm.nvvm.tex.3d.v4f32.i32">;
1200def int_nvvm_tex_3d_v4f32_f32
1201  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1202              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1203               llvm_float_ty], [],
1204              "llvm.nvvm.tex.3d.v4f32.f32">;
1205def int_nvvm_tex_3d_level_v4f32_f32
1206  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1207              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1208               llvm_float_ty, llvm_float_ty], [],
1209              "llvm.nvvm.tex.3d.level.v4f32.f32">;
1210def int_nvvm_tex_3d_grad_v4f32_f32
1211  : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1212              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1213               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1214               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1215              "llvm.nvvm.tex.3d.grad.v4f32.f32">;
1216def int_nvvm_tex_3d_v4i32_i32
1217  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1218              [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1219              [], "llvm.nvvm.tex.3d.v4i32.i32">;
1220def int_nvvm_tex_3d_v4i32_f32
1221  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1222              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1223               llvm_float_ty], [],
1224              "llvm.nvvm.tex.3d.v4i32.f32">;
1225def int_nvvm_tex_3d_level_v4i32_f32
1226  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1227              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1228               llvm_float_ty, llvm_float_ty], [],
1229              "llvm.nvvm.tex.3d.level.v4i32.f32">;
1230def int_nvvm_tex_3d_grad_v4i32_f32
1231  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1232              [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1233               llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1234               llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1235              "llvm.nvvm.tex.3d.grad.v4i32.f32">;
1236
1237// Surface Load
1238def int_nvvm_suld_1d_i8_trap
1239  : Intrinsic<[llvm_i16_ty],
1240              [llvm_i64_ty, llvm_i32_ty], [],
1241              "llvm.nvvm.suld.1d.i8.trap">;
1242def int_nvvm_suld_1d_i16_trap
1243  : Intrinsic<[llvm_i16_ty],
1244              [llvm_i64_ty, llvm_i32_ty], [],
1245              "llvm.nvvm.suld.1d.i16.trap">;
1246def int_nvvm_suld_1d_i32_trap
1247  : Intrinsic<[llvm_i32_ty],
1248              [llvm_i64_ty, llvm_i32_ty], [],
1249              "llvm.nvvm.suld.1d.i32.trap">;
1250def int_nvvm_suld_1d_v2i8_trap
1251  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1252              [llvm_i64_ty, llvm_i32_ty], [],
1253              "llvm.nvvm.suld.1d.v2i8.trap">;
1254def int_nvvm_suld_1d_v2i16_trap
1255  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1256              [llvm_i64_ty, llvm_i32_ty], [],
1257              "llvm.nvvm.suld.1d.v2i16.trap">;
1258def int_nvvm_suld_1d_v2i32_trap
1259  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1260              [llvm_i64_ty, llvm_i32_ty], [],
1261              "llvm.nvvm.suld.1d.v2i32.trap">;
1262def int_nvvm_suld_1d_v4i8_trap
1263  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1264              [llvm_i64_ty, llvm_i32_ty], [],
1265              "llvm.nvvm.suld.1d.v4i8.trap">;
1266def int_nvvm_suld_1d_v4i16_trap
1267  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1268              [llvm_i64_ty, llvm_i32_ty], [],
1269              "llvm.nvvm.suld.1d.v4i16.trap">;
1270def int_nvvm_suld_1d_v4i32_trap
1271  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1272              [llvm_i64_ty, llvm_i32_ty], [],
1273              "llvm.nvvm.suld.1d.v4i32.trap">;
1274
1275def int_nvvm_suld_1d_array_i8_trap
1276  : Intrinsic<[llvm_i16_ty],
1277              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1278              "llvm.nvvm.suld.1d.array.i8.trap">;
1279def int_nvvm_suld_1d_array_i16_trap
1280  : Intrinsic<[llvm_i16_ty],
1281              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1282              "llvm.nvvm.suld.1d.array.i16.trap">;
1283def int_nvvm_suld_1d_array_i32_trap
1284  : Intrinsic<[llvm_i32_ty],
1285              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1286              "llvm.nvvm.suld.1d.array.i32.trap">;
1287def int_nvvm_suld_1d_array_v2i8_trap
1288  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1289              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1290              "llvm.nvvm.suld.1d.array.v2i8.trap">;
1291def int_nvvm_suld_1d_array_v2i16_trap
1292  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1293              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1294              "llvm.nvvm.suld.1d.array.v2i16.trap">;
1295def int_nvvm_suld_1d_array_v2i32_trap
1296  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1297              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1298              "llvm.nvvm.suld.1d.array.v2i32.trap">;
1299def int_nvvm_suld_1d_array_v4i8_trap
1300  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1301              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1302              "llvm.nvvm.suld.1d.array.v4i8.trap">;
1303def int_nvvm_suld_1d_array_v4i16_trap
1304  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1305              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1306              "llvm.nvvm.suld.1d.array.v4i16.trap">;
1307def int_nvvm_suld_1d_array_v4i32_trap
1308  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1309              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1310              "llvm.nvvm.suld.1d.array.v4i32.trap">;
1311
1312def int_nvvm_suld_2d_i8_trap
1313  : Intrinsic<[llvm_i16_ty],
1314              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1315              "llvm.nvvm.suld.2d.i8.trap">;
1316def int_nvvm_suld_2d_i16_trap
1317  : Intrinsic<[llvm_i16_ty],
1318              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1319              "llvm.nvvm.suld.2d.i16.trap">;
1320def int_nvvm_suld_2d_i32_trap
1321  : Intrinsic<[llvm_i32_ty],
1322              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1323              "llvm.nvvm.suld.2d.i32.trap">;
1324def int_nvvm_suld_2d_v2i8_trap
1325  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1326              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1327              "llvm.nvvm.suld.2d.v2i8.trap">;
1328def int_nvvm_suld_2d_v2i16_trap
1329  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1330              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1331              "llvm.nvvm.suld.2d.v2i16.trap">;
1332def int_nvvm_suld_2d_v2i32_trap
1333  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1334              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1335              "llvm.nvvm.suld.2d.v2i32.trap">;
1336def int_nvvm_suld_2d_v4i8_trap
1337  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1338              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1339              "llvm.nvvm.suld.2d.v4i8.trap">;
1340def int_nvvm_suld_2d_v4i16_trap
1341  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1342              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1343              "llvm.nvvm.suld.2d.v4i16.trap">;
1344def int_nvvm_suld_2d_v4i32_trap
1345  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1346              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1347              "llvm.nvvm.suld.2d.v4i32.trap">;
1348
1349def int_nvvm_suld_2d_array_i8_trap
1350  : Intrinsic<[llvm_i16_ty],
1351              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1352              "llvm.nvvm.suld.2d.array.i8.trap">;
1353def int_nvvm_suld_2d_array_i16_trap
1354  : Intrinsic<[llvm_i16_ty],
1355              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1356              "llvm.nvvm.suld.2d.array.i16.trap">;
1357def int_nvvm_suld_2d_array_i32_trap
1358  : Intrinsic<[llvm_i32_ty],
1359              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1360              "llvm.nvvm.suld.2d.array.i32.trap">;
1361def int_nvvm_suld_2d_array_v2i8_trap
1362  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1363              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1364              "llvm.nvvm.suld.2d.array.v2i8.trap">;
1365def int_nvvm_suld_2d_array_v2i16_trap
1366  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1367              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1368              "llvm.nvvm.suld.2d.array.v2i16.trap">;
1369def int_nvvm_suld_2d_array_v2i32_trap
1370  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1371              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1372              "llvm.nvvm.suld.2d.array.v2i32.trap">;
1373def int_nvvm_suld_2d_array_v4i8_trap
1374  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1375              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1376              "llvm.nvvm.suld.2d.array.v4i8.trap">;
1377def int_nvvm_suld_2d_array_v4i16_trap
1378  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1379              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1380              "llvm.nvvm.suld.2d.array.v4i16.trap">;
1381def int_nvvm_suld_2d_array_v4i32_trap
1382  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1383              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1384              "llvm.nvvm.suld.2d.array.v4i32.trap">;
1385
1386def int_nvvm_suld_3d_i8_trap
1387  : Intrinsic<[llvm_i16_ty],
1388              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1389              "llvm.nvvm.suld.3d.i8.trap">;
1390def int_nvvm_suld_3d_i16_trap
1391  : Intrinsic<[llvm_i16_ty],
1392              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1393              "llvm.nvvm.suld.3d.i16.trap">;
1394def int_nvvm_suld_3d_i32_trap
1395  : Intrinsic<[llvm_i32_ty],
1396              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1397              "llvm.nvvm.suld.3d.i32.trap">;
1398def int_nvvm_suld_3d_v2i8_trap
1399  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1400              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1401              "llvm.nvvm.suld.3d.v2i8.trap">;
1402def int_nvvm_suld_3d_v2i16_trap
1403  : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1404              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1405              "llvm.nvvm.suld.3d.v2i16.trap">;
1406def int_nvvm_suld_3d_v2i32_trap
1407  : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1408              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1409              "llvm.nvvm.suld.3d.v2i32.trap">;
1410def int_nvvm_suld_3d_v4i8_trap
1411  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1412              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1413              "llvm.nvvm.suld.3d.v4i8.trap">;
1414def int_nvvm_suld_3d_v4i16_trap
1415  : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1416              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1417              "llvm.nvvm.suld.3d.v4i16.trap">;
1418def int_nvvm_suld_3d_v4i32_trap
1419  : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1420              [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1421              "llvm.nvvm.suld.3d.v4i32.trap">;
1422
1423//===- Texture Query ------------------------------------------------------===//
1424
1425def int_nvvm_txq_channel_order
1426  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1427              "llvm.nvvm.txq.channel.order">,
1428    GCCBuiltin<"__nvvm_txq_channel_order">;
1429def int_nvvm_txq_channel_data_type
1430  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1431              "llvm.nvvm.txq.channel.data.type">,
1432    GCCBuiltin<"__nvvm_txq_channel_data_type">;
1433def int_nvvm_txq_width
1434  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1435              "llvm.nvvm.txq.width">,
1436    GCCBuiltin<"__nvvm_txq_width">;
1437def int_nvvm_txq_height
1438  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1439              "llvm.nvvm.txq.height">,
1440    GCCBuiltin<"__nvvm_txq_height">;
1441def int_nvvm_txq_depth
1442  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1443              "llvm.nvvm.txq.depth">,
1444    GCCBuiltin<"__nvvm_txq_depth">;
1445def int_nvvm_txq_array_size
1446  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1447              "llvm.nvvm.txq.array.size">,
1448    GCCBuiltin<"__nvvm_txq_array_size">;
1449def int_nvvm_txq_num_samples
1450  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1451              "llvm.nvvm.txq.num.samples">,
1452    GCCBuiltin<"__nvvm_txq_num_samples">;
1453def int_nvvm_txq_num_mipmap_levels
1454  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1455              "llvm.nvvm.txq.num.mipmap.levels">,
1456    GCCBuiltin<"__nvvm_txq_num_mipmap_levels">;
1457
1458//===- Surface Query ------------------------------------------------------===//
1459
1460def int_nvvm_suq_channel_order
1461  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1462              "llvm.nvvm.suq.channel.order">,
1463    GCCBuiltin<"__nvvm_suq_channel_order">;
1464def int_nvvm_suq_channel_data_type
1465  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1466              "llvm.nvvm.suq.channel.data.type">,
1467    GCCBuiltin<"__nvvm_suq_channel_data_type">;
1468def int_nvvm_suq_width
1469  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1470              "llvm.nvvm.suq.width">,
1471    GCCBuiltin<"__nvvm_suq_width">;
1472def int_nvvm_suq_height
1473  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1474              "llvm.nvvm.suq.height">,
1475    GCCBuiltin<"__nvvm_suq_height">;
1476def int_nvvm_suq_depth
1477  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1478              "llvm.nvvm.suq.depth">,
1479    GCCBuiltin<"__nvvm_suq_depth">;
1480def int_nvvm_suq_array_size
1481  : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1482              "llvm.nvvm.suq.array.size">,
1483    GCCBuiltin<"__nvvm_suq_array_size">;
1484
1485
1486//===- Handle Query -------------------------------------------------------===//
1487
1488def int_nvvm_istypep_sampler
1489  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
1490              "llvm.nvvm.istypep.sampler">,
1491    GCCBuiltin<"__nvvm_istypep_sampler">;
1492def int_nvvm_istypep_surface
1493  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
1494              "llvm.nvvm.istypep.surface">,
1495    GCCBuiltin<"__nvvm_istypep_surface">;
1496def int_nvvm_istypep_texture
1497  : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
1498              "llvm.nvvm.istypep.texture">,
1499    GCCBuiltin<"__nvvm_istypep_texture">;
1500
1501
1502
1503//===- Surface Stores -----------------------------------------------------===//
1504
1505// Unformatted
1506
1507def int_nvvm_sust_b_1d_i8_trap
1508  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
1509              "llvm.nvvm.sust.b.1d.i8.trap">,
1510    GCCBuiltin<"__nvvm_sust_b_1d_i8_trap">;
1511def int_nvvm_sust_b_1d_i16_trap
1512  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
1513              "llvm.nvvm.sust.b.1d.i16.trap">,
1514    GCCBuiltin<"__nvvm_sust_b_1d_i16_trap">;
1515def int_nvvm_sust_b_1d_i32_trap
1516  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1517              "llvm.nvvm.sust.b.1d.i32.trap">,
1518    GCCBuiltin<"__nvvm_sust_b_1d_i32_trap">;
1519def int_nvvm_sust_b_1d_v2i8_trap
1520  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
1521              "llvm.nvvm.sust.b.1d.v2i8.trap">,
1522    GCCBuiltin<"__nvvm_sust_b_1d_v2i8_trap">;
1523def int_nvvm_sust_b_1d_v2i16_trap
1524  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
1525              "llvm.nvvm.sust.b.1d.v2i16.trap">,
1526    GCCBuiltin<"__nvvm_sust_b_1d_v2i16_trap">;
1527def int_nvvm_sust_b_1d_v2i32_trap
1528  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1529              "llvm.nvvm.sust.b.1d.v2i32.trap">,
1530    GCCBuiltin<"__nvvm_sust_b_1d_v2i32_trap">;
1531def int_nvvm_sust_b_1d_v4i8_trap
1532  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
1533                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1534              "llvm.nvvm.sust.b.1d.v4i8.trap">,
1535    GCCBuiltin<"__nvvm_sust_b_1d_v4i8_trap">;
1536def int_nvvm_sust_b_1d_v4i16_trap
1537  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
1538                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1539              "llvm.nvvm.sust.b.1d.v4i16.trap">,
1540    GCCBuiltin<"__nvvm_sust_b_1d_v4i16_trap">;
1541def int_nvvm_sust_b_1d_v4i32_trap
1542  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1543                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1544              "llvm.nvvm.sust.b.1d.v4i32.trap">,
1545    GCCBuiltin<"__nvvm_sust_b_1d_v4i32_trap">;
1546
1547
1548def int_nvvm_sust_b_1d_array_i8_trap
1549  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1550              "llvm.nvvm.sust.b.1d.array.i8.trap">,
1551    GCCBuiltin<"__nvvm_sust_b_1d_array_i8_trap">;
1552def int_nvvm_sust_b_1d_array_i16_trap
1553  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1554              "llvm.nvvm.sust.b.1d.array.i16.trap">,
1555    GCCBuiltin<"__nvvm_sust_b_1d_array_i16_trap">;
1556def int_nvvm_sust_b_1d_array_i32_trap
1557  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1558              "llvm.nvvm.sust.b.1d.array.i32.trap">,
1559    GCCBuiltin<"__nvvm_sust_b_1d_array_i32_trap">;
1560def int_nvvm_sust_b_1d_array_v2i8_trap
1561  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1562                   llvm_i16_ty, llvm_i16_ty], [],
1563              "llvm.nvvm.sust.b.1d.array.v2i8.trap">,
1564    GCCBuiltin<"__nvvm_sust_b_1d_array_v2i8_trap">;
1565def int_nvvm_sust_b_1d_array_v2i16_trap
1566  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1567                   llvm_i16_ty, llvm_i16_ty], [],
1568              "llvm.nvvm.sust.b.1d.array.v2i16.trap">,
1569    GCCBuiltin<"__nvvm_sust_b_1d_array_v2i16_trap">;
1570def int_nvvm_sust_b_1d_array_v2i32_trap
1571  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1572                   llvm_i32_ty, llvm_i32_ty], [],
1573              "llvm.nvvm.sust.b.1d.array.v2i32.trap">,
1574    GCCBuiltin<"__nvvm_sust_b_1d_array_v2i32_trap">;
1575def int_nvvm_sust_b_1d_array_v4i8_trap
1576  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1577                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1578              "llvm.nvvm.sust.b.1d.array.v4i8.trap">,
1579    GCCBuiltin<"__nvvm_sust_b_1d_array_v4i8_trap">;
1580def int_nvvm_sust_b_1d_array_v4i16_trap
1581  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1582                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1583              "llvm.nvvm.sust.b.1d.array.v4i16.trap">,
1584    GCCBuiltin<"__nvvm_sust_b_1d_array_v4i16_trap">;
1585def int_nvvm_sust_b_1d_array_v4i32_trap
1586  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1587                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1588              "llvm.nvvm.sust.b.1d.array.v4i32.trap">,
1589    GCCBuiltin<"__nvvm_sust_b_1d_array_v4i32_trap">;
1590
1591
1592def int_nvvm_sust_b_2d_i8_trap
1593  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1594              "llvm.nvvm.sust.b.2d.i8.trap">,
1595    GCCBuiltin<"__nvvm_sust_b_2d_i8_trap">;
1596def int_nvvm_sust_b_2d_i16_trap
1597  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1598              "llvm.nvvm.sust.b.2d.i16.trap">,
1599    GCCBuiltin<"__nvvm_sust_b_2d_i16_trap">;
1600def int_nvvm_sust_b_2d_i32_trap
1601  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1602              "llvm.nvvm.sust.b.2d.i32.trap">,
1603    GCCBuiltin<"__nvvm_sust_b_2d_i32_trap">;
1604def int_nvvm_sust_b_2d_v2i8_trap
1605  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1606                   llvm_i16_ty, llvm_i16_ty], [],
1607              "llvm.nvvm.sust.b.2d.v2i8.trap">,
1608    GCCBuiltin<"__nvvm_sust_b_2d_v2i8_trap">;
1609def int_nvvm_sust_b_2d_v2i16_trap
1610  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1611                   llvm_i16_ty, llvm_i16_ty], [],
1612              "llvm.nvvm.sust.b.2d.v2i16.trap">,
1613    GCCBuiltin<"__nvvm_sust_b_2d_v2i16_trap">;
1614def int_nvvm_sust_b_2d_v2i32_trap
1615  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1616                   llvm_i32_ty, llvm_i32_ty], [],
1617              "llvm.nvvm.sust.b.2d.v2i32.trap">,
1618    GCCBuiltin<"__nvvm_sust_b_2d_v2i32_trap">;
1619def int_nvvm_sust_b_2d_v4i8_trap
1620  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1621                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1622              "llvm.nvvm.sust.b.2d.v4i8.trap">,
1623    GCCBuiltin<"__nvvm_sust_b_2d_v4i8_trap">;
1624def int_nvvm_sust_b_2d_v4i16_trap
1625  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1626                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1627              "llvm.nvvm.sust.b.2d.v4i16.trap">,
1628    GCCBuiltin<"__nvvm_sust_b_2d_v4i16_trap">;
1629def int_nvvm_sust_b_2d_v4i32_trap
1630  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1631                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1632              "llvm.nvvm.sust.b.2d.v4i32.trap">,
1633    GCCBuiltin<"__nvvm_sust_b_2d_v4i32_trap">;
1634
1635
1636def int_nvvm_sust_b_2d_array_i8_trap
1637  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1638                   llvm_i32_ty, llvm_i16_ty], [],
1639              "llvm.nvvm.sust.b.2d.array.i8.trap">,
1640    GCCBuiltin<"__nvvm_sust_b_2d_array_i8_trap">;
1641def int_nvvm_sust_b_2d_array_i16_trap
1642  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1643                   llvm_i32_ty, llvm_i16_ty], [],
1644              "llvm.nvvm.sust.b.2d.array.i16.trap">,
1645    GCCBuiltin<"__nvvm_sust_b_2d_array_i16_trap">;
1646def int_nvvm_sust_b_2d_array_i32_trap
1647  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1648                   llvm_i32_ty, llvm_i32_ty], [],
1649              "llvm.nvvm.sust.b.2d.array.i32.trap">,
1650    GCCBuiltin<"__nvvm_sust_b_2d_array_i32_trap">;
1651def int_nvvm_sust_b_2d_array_v2i8_trap
1652  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1653                   llvm_i16_ty, llvm_i16_ty], [],
1654              "llvm.nvvm.sust.b.2d.array.v2i8.trap">,
1655    GCCBuiltin<"__nvvm_sust_b_2d_array_v2i8_trap">;
1656def int_nvvm_sust_b_2d_array_v2i16_trap
1657  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1658                   llvm_i16_ty, llvm_i16_ty], [],
1659              "llvm.nvvm.sust.b.2d.array.v2i16.trap">,
1660    GCCBuiltin<"__nvvm_sust_b_2d_array_v2i16_trap">;
1661def int_nvvm_sust_b_2d_array_v2i32_trap
1662  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1663                   llvm_i32_ty, llvm_i32_ty], [],
1664              "llvm.nvvm.sust.b.2d.array.v2i32.trap">,
1665    GCCBuiltin<"__nvvm_sust_b_2d_array_v2i32_trap">;
1666def int_nvvm_sust_b_2d_array_v4i8_trap
1667  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1668                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1669              "llvm.nvvm.sust.b.2d.array.v4i8.trap">,
1670    GCCBuiltin<"__nvvm_sust_b_2d_array_v4i8_trap">;
1671def int_nvvm_sust_b_2d_array_v4i16_trap
1672  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1673                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1674              "llvm.nvvm.sust.b.2d.array.v4i16.trap">,
1675    GCCBuiltin<"__nvvm_sust_b_2d_array_v4i16_trap">;
1676def int_nvvm_sust_b_2d_array_v4i32_trap
1677  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1678                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1679              "llvm.nvvm.sust.b.2d.array.v4i32.trap">,
1680    GCCBuiltin<"__nvvm_sust_b_2d_array_v4i32_trap">;
1681
1682
1683def int_nvvm_sust_b_3d_i8_trap
1684  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1685                   llvm_i32_ty, llvm_i16_ty], [],
1686              "llvm.nvvm.sust.b.3d.i8.trap">,
1687    GCCBuiltin<"__nvvm_sust_b_3d_i8_trap">;
1688def int_nvvm_sust_b_3d_i16_trap
1689  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1690                   llvm_i32_ty, llvm_i16_ty], [],
1691              "llvm.nvvm.sust.b.3d.i16.trap">,
1692    GCCBuiltin<"__nvvm_sust_b_3d_i16_trap">;
1693def int_nvvm_sust_b_3d_i32_trap
1694  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1695                   llvm_i32_ty, llvm_i32_ty], [],
1696              "llvm.nvvm.sust.b.3d.i32.trap">,
1697    GCCBuiltin<"__nvvm_sust_b_3d_i32_trap">;
1698def int_nvvm_sust_b_3d_v2i8_trap
1699  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1700                   llvm_i16_ty, llvm_i16_ty], [],
1701              "llvm.nvvm.sust.b.3d.v2i8.trap">,
1702    GCCBuiltin<"__nvvm_sust_b_3d_v2i8_trap">;
1703def int_nvvm_sust_b_3d_v2i16_trap
1704  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1705                   llvm_i16_ty, llvm_i16_ty], [],
1706              "llvm.nvvm.sust.b.3d.v2i16.trap">,
1707    GCCBuiltin<"__nvvm_sust_b_3d_v2i16_trap">;
1708def int_nvvm_sust_b_3d_v2i32_trap
1709  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1710                   llvm_i32_ty, llvm_i32_ty], [],
1711              "llvm.nvvm.sust.b.3d.v2i32.trap">,
1712    GCCBuiltin<"__nvvm_sust_b_3d_v2i32_trap">;
1713def int_nvvm_sust_b_3d_v4i8_trap
1714  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1715                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1716              "llvm.nvvm.sust.b.3d.v4i8.trap">,
1717    GCCBuiltin<"__nvvm_sust_b_3d_v4i8_trap">;
1718def int_nvvm_sust_b_3d_v4i16_trap
1719  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1720                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1721              "llvm.nvvm.sust.b.3d.v4i16.trap">,
1722    GCCBuiltin<"__nvvm_sust_b_3d_v4i16_trap">;
1723def int_nvvm_sust_b_3d_v4i32_trap
1724  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1725                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1726              "llvm.nvvm.sust.b.3d.v4i32.trap">,
1727    GCCBuiltin<"__nvvm_sust_b_3d_v4i32_trap">;
1728
1729// Formatted
1730
1731def int_nvvm_sust_p_1d_i8_trap
1732  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
1733              "llvm.nvvm.sust.p.1d.i8.trap">,
1734    GCCBuiltin<"__nvvm_sust_p_1d_i8_trap">;
1735def int_nvvm_sust_p_1d_i16_trap
1736  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
1737              "llvm.nvvm.sust.p.1d.i16.trap">,
1738    GCCBuiltin<"__nvvm_sust_p_1d_i16_trap">;
1739def int_nvvm_sust_p_1d_i32_trap
1740  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1741              "llvm.nvvm.sust.p.1d.i32.trap">,
1742    GCCBuiltin<"__nvvm_sust_p_1d_i32_trap">;
1743def int_nvvm_sust_p_1d_v2i8_trap
1744  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
1745              "llvm.nvvm.sust.p.1d.v2i8.trap">,
1746    GCCBuiltin<"__nvvm_sust_p_1d_v2i8_trap">;
1747def int_nvvm_sust_p_1d_v2i16_trap
1748  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
1749              "llvm.nvvm.sust.p.1d.v2i16.trap">,
1750    GCCBuiltin<"__nvvm_sust_p_1d_v2i16_trap">;
1751def int_nvvm_sust_p_1d_v2i32_trap
1752  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1753              "llvm.nvvm.sust.p.1d.v2i32.trap">,
1754    GCCBuiltin<"__nvvm_sust_p_1d_v2i32_trap">;
1755def int_nvvm_sust_p_1d_v4i8_trap
1756  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
1757                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1758              "llvm.nvvm.sust.p.1d.v4i8.trap">,
1759    GCCBuiltin<"__nvvm_sust_p_1d_v4i8_trap">;
1760def int_nvvm_sust_p_1d_v4i16_trap
1761  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
1762                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1763              "llvm.nvvm.sust.p.1d.v4i16.trap">,
1764    GCCBuiltin<"__nvvm_sust_p_1d_v4i16_trap">;
1765def int_nvvm_sust_p_1d_v4i32_trap
1766  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1767                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1768              "llvm.nvvm.sust.p.1d.v4i32.trap">,
1769    GCCBuiltin<"__nvvm_sust_p_1d_v4i32_trap">;
1770
1771
1772def int_nvvm_sust_p_1d_array_i8_trap
1773  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1774              "llvm.nvvm.sust.p.1d.array.i8.trap">,
1775    GCCBuiltin<"__nvvm_sust_p_1d_array_i8_trap">;
1776def int_nvvm_sust_p_1d_array_i16_trap
1777  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1778              "llvm.nvvm.sust.p.1d.array.i16.trap">,
1779    GCCBuiltin<"__nvvm_sust_p_1d_array_i16_trap">;
1780def int_nvvm_sust_p_1d_array_i32_trap
1781  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1782              "llvm.nvvm.sust.p.1d.array.i32.trap">,
1783    GCCBuiltin<"__nvvm_sust_p_1d_array_i32_trap">;
1784def int_nvvm_sust_p_1d_array_v2i8_trap
1785  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1786                   llvm_i16_ty, llvm_i16_ty], [],
1787              "llvm.nvvm.sust.p.1d.array.v2i8.trap">,
1788    GCCBuiltin<"__nvvm_sust_p_1d_array_v2i8_trap">;
1789def int_nvvm_sust_p_1d_array_v2i16_trap
1790  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1791                   llvm_i16_ty, llvm_i16_ty], [],
1792              "llvm.nvvm.sust.p.1d.array.v2i16.trap">,
1793    GCCBuiltin<"__nvvm_sust_p_1d_array_v2i16_trap">;
1794def int_nvvm_sust_p_1d_array_v2i32_trap
1795  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1796                   llvm_i32_ty, llvm_i32_ty], [],
1797              "llvm.nvvm.sust.p.1d.array.v2i32.trap">,
1798    GCCBuiltin<"__nvvm_sust_p_1d_array_v2i32_trap">;
1799def int_nvvm_sust_p_1d_array_v4i8_trap
1800  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1801                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1802              "llvm.nvvm.sust.p.1d.array.v4i8.trap">,
1803    GCCBuiltin<"__nvvm_sust_p_1d_array_v4i8_trap">;
1804def int_nvvm_sust_p_1d_array_v4i16_trap
1805  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1806                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1807              "llvm.nvvm.sust.p.1d.array.v4i16.trap">,
1808    GCCBuiltin<"__nvvm_sust_p_1d_array_v4i16_trap">;
1809def int_nvvm_sust_p_1d_array_v4i32_trap
1810  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1811                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1812              "llvm.nvvm.sust.p.1d.array.v4i32.trap">,
1813    GCCBuiltin<"__nvvm_sust_p_1d_array_v4i32_trap">;
1814
1815
1816def int_nvvm_sust_p_2d_i8_trap
1817  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1818              "llvm.nvvm.sust.p.2d.i8.trap">,
1819    GCCBuiltin<"__nvvm_sust_p_2d_i8_trap">;
1820def int_nvvm_sust_p_2d_i16_trap
1821  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1822              "llvm.nvvm.sust.p.2d.i16.trap">,
1823    GCCBuiltin<"__nvvm_sust_p_2d_i16_trap">;
1824def int_nvvm_sust_p_2d_i32_trap
1825  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1826              "llvm.nvvm.sust.p.2d.i32.trap">,
1827    GCCBuiltin<"__nvvm_sust_p_2d_i32_trap">;
1828def int_nvvm_sust_p_2d_v2i8_trap
1829  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1830                   llvm_i16_ty, llvm_i16_ty], [],
1831              "llvm.nvvm.sust.p.2d.v2i8.trap">,
1832    GCCBuiltin<"__nvvm_sust_p_2d_v2i8_trap">;
1833def int_nvvm_sust_p_2d_v2i16_trap
1834  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1835                   llvm_i16_ty, llvm_i16_ty], [],
1836              "llvm.nvvm.sust.p.2d.v2i16.trap">,
1837    GCCBuiltin<"__nvvm_sust_p_2d_v2i16_trap">;
1838def int_nvvm_sust_p_2d_v2i32_trap
1839  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1840                   llvm_i32_ty, llvm_i32_ty], [],
1841              "llvm.nvvm.sust.p.2d.v2i32.trap">,
1842    GCCBuiltin<"__nvvm_sust_p_2d_v2i32_trap">;
1843def int_nvvm_sust_p_2d_v4i8_trap
1844  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1845                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1846              "llvm.nvvm.sust.p.2d.v4i8.trap">,
1847    GCCBuiltin<"__nvvm_sust_p_2d_v4i8_trap">;
1848def int_nvvm_sust_p_2d_v4i16_trap
1849  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1850                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1851              "llvm.nvvm.sust.p.2d.v4i16.trap">,
1852    GCCBuiltin<"__nvvm_sust_p_2d_v4i16_trap">;
1853def int_nvvm_sust_p_2d_v4i32_trap
1854  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1855                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1856              "llvm.nvvm.sust.p.2d.v4i32.trap">,
1857    GCCBuiltin<"__nvvm_sust_p_2d_v4i32_trap">;
1858
1859
1860def int_nvvm_sust_p_2d_array_i8_trap
1861  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1862                   llvm_i32_ty, llvm_i16_ty], [],
1863              "llvm.nvvm.sust.p.2d.array.i8.trap">,
1864    GCCBuiltin<"__nvvm_sust_p_2d_array_i8_trap">;
1865def int_nvvm_sust_p_2d_array_i16_trap
1866  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1867                   llvm_i32_ty, llvm_i16_ty], [],
1868              "llvm.nvvm.sust.p.2d.array.i16.trap">,
1869    GCCBuiltin<"__nvvm_sust_p_2d_array_i16_trap">;
1870def int_nvvm_sust_p_2d_array_i32_trap
1871  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1872                   llvm_i32_ty, llvm_i32_ty], [],
1873              "llvm.nvvm.sust.p.2d.array.i32.trap">,
1874    GCCBuiltin<"__nvvm_sust_p_2d_array_i32_trap">;
1875def int_nvvm_sust_p_2d_array_v2i8_trap
1876  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1877                   llvm_i16_ty, llvm_i16_ty], [],
1878              "llvm.nvvm.sust.p.2d.array.v2i8.trap">,
1879    GCCBuiltin<"__nvvm_sust_p_2d_array_v2i8_trap">;
1880def int_nvvm_sust_p_2d_array_v2i16_trap
1881  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1882                   llvm_i16_ty, llvm_i16_ty], [],
1883              "llvm.nvvm.sust.p.2d.array.v2i16.trap">,
1884    GCCBuiltin<"__nvvm_sust_p_2d_array_v2i16_trap">;
1885def int_nvvm_sust_p_2d_array_v2i32_trap
1886  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1887                   llvm_i32_ty, llvm_i32_ty], [],
1888              "llvm.nvvm.sust.p.2d.array.v2i32.trap">,
1889    GCCBuiltin<"__nvvm_sust_p_2d_array_v2i32_trap">;
1890def int_nvvm_sust_p_2d_array_v4i8_trap
1891  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1892                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1893              "llvm.nvvm.sust.p.2d.array.v4i8.trap">,
1894    GCCBuiltin<"__nvvm_sust_p_2d_array_v4i8_trap">;
1895def int_nvvm_sust_p_2d_array_v4i16_trap
1896  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1897                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1898              "llvm.nvvm.sust.p.2d.array.v4i16.trap">,
1899    GCCBuiltin<"__nvvm_sust_p_2d_array_v4i16_trap">;
1900def int_nvvm_sust_p_2d_array_v4i32_trap
1901  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1902                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1903              "llvm.nvvm.sust.p.2d.array.v4i32.trap">,
1904    GCCBuiltin<"__nvvm_sust_p_2d_array_v4i32_trap">;
1905
1906
1907def int_nvvm_sust_p_3d_i8_trap
1908  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1909                   llvm_i32_ty, llvm_i16_ty], [],
1910              "llvm.nvvm.sust.p.3d.i8.trap">,
1911    GCCBuiltin<"__nvvm_sust_p_3d_i8_trap">;
1912def int_nvvm_sust_p_3d_i16_trap
1913  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1914                   llvm_i32_ty, llvm_i16_ty], [],
1915              "llvm.nvvm.sust.p.3d.i16.trap">,
1916    GCCBuiltin<"__nvvm_sust_p_3d_i16_trap">;
1917def int_nvvm_sust_p_3d_i32_trap
1918  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1919                   llvm_i32_ty, llvm_i32_ty], [],
1920              "llvm.nvvm.sust.p.3d.i32.trap">,
1921    GCCBuiltin<"__nvvm_sust_p_3d_i32_trap">;
1922def int_nvvm_sust_p_3d_v2i8_trap
1923  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1924                   llvm_i16_ty, llvm_i16_ty], [],
1925              "llvm.nvvm.sust.p.3d.v2i8.trap">,
1926    GCCBuiltin<"__nvvm_sust_p_3d_v2i8_trap">;
1927def int_nvvm_sust_p_3d_v2i16_trap
1928  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1929                   llvm_i16_ty, llvm_i16_ty], [],
1930              "llvm.nvvm.sust.p.3d.v2i16.trap">,
1931    GCCBuiltin<"__nvvm_sust_p_3d_v2i16_trap">;
1932def int_nvvm_sust_p_3d_v2i32_trap
1933  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1934                   llvm_i32_ty, llvm_i32_ty], [],
1935              "llvm.nvvm.sust.p.3d.v2i32.trap">,
1936    GCCBuiltin<"__nvvm_sust_p_3d_v2i32_trap">;
1937def int_nvvm_sust_p_3d_v4i8_trap
1938  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1939                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1940              "llvm.nvvm.sust.p.3d.v4i8.trap">,
1941    GCCBuiltin<"__nvvm_sust_p_3d_v4i8_trap">;
1942def int_nvvm_sust_p_3d_v4i16_trap
1943  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1944                   llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1945              "llvm.nvvm.sust.p.3d.v4i16.trap">,
1946    GCCBuiltin<"__nvvm_sust_p_3d_v4i16_trap">;
1947def int_nvvm_sust_p_3d_v4i32_trap
1948  : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1949                   llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1950              "llvm.nvvm.sust.p.3d.v4i32.trap">,
1951    GCCBuiltin<"__nvvm_sust_p_3d_v4i32_trap">;
1952
1953def int_nvvm_rotate_b32
1954  : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
1955              [IntrNoMem], "llvm.nvvm.rotate.b32">,
1956              GCCBuiltin<"__nvvm_rotate_b32">;
1957
1958def int_nvvm_rotate_b64
1959  :Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
1960             [IntrNoMem], "llvm.nvvm.rotate.b64">,
1961             GCCBuiltin<"__nvvm_rotate_b64">;
1962
1963def int_nvvm_rotate_right_b64
1964  : Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
1965              [IntrNoMem], "llvm.nvvm.rotate.right.b64">,
1966              GCCBuiltin<"__nvvm_rotate_right_b64">;
1967
1968def int_nvvm_swap_lo_hi_b64
1969  : Intrinsic<[llvm_i64_ty], [llvm_i64_ty],
1970              [IntrNoMem], "llvm.nvvm.swap.lo.hi.b64">,
1971              GCCBuiltin<"__nvvm_swap_lo_hi_b64">;
1972
1973
1974// Old PTX back-end intrinsics retained here for backwards-compatibility
1975
1976multiclass PTXReadSpecialRegisterIntrinsic_v4i32<string prefix> {
1977// FIXME: Do we need the 128-bit integer type version?
1978//    def _r64   : Intrinsic<[llvm_i128_ty],   [], [IntrNoMem]>;
1979
1980// FIXME: Enable this once v4i32 support is enabled in back-end.
1981//    def _v4i16 : Intrinsic<[llvm_v4i32_ty], [], [IntrNoMem]>;
1982
1983  def _x     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1984               GCCBuiltin<!strconcat(prefix, "_x")>;
1985  def _y     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1986               GCCBuiltin<!strconcat(prefix, "_y")>;
1987  def _z     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1988               GCCBuiltin<!strconcat(prefix, "_z")>;
1989  def _w     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1990               GCCBuiltin<!strconcat(prefix, "_w")>;
1991}
1992
1993class PTXReadSpecialRegisterIntrinsic_r32<string name>
1994  : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1995    GCCBuiltin<name>;
1996
1997class PTXReadSpecialRegisterIntrinsic_r64<string name>
1998  : Intrinsic<[llvm_i64_ty], [], [IntrNoMem]>,
1999    GCCBuiltin<name>;
2000
2001defm int_ptx_read_tid        : PTXReadSpecialRegisterIntrinsic_v4i32
2002                               <"__builtin_ptx_read_tid">;
2003defm int_ptx_read_ntid       : PTXReadSpecialRegisterIntrinsic_v4i32
2004                               <"__builtin_ptx_read_ntid">;
2005
2006def int_ptx_read_laneid      : PTXReadSpecialRegisterIntrinsic_r32
2007                               <"__builtin_ptx_read_laneid">;
2008def int_ptx_read_warpid      : PTXReadSpecialRegisterIntrinsic_r32
2009                               <"__builtin_ptx_read_warpid">;
2010def int_ptx_read_nwarpid     : PTXReadSpecialRegisterIntrinsic_r32
2011                               <"__builtin_ptx_read_nwarpid">;
2012
2013defm int_ptx_read_ctaid      : PTXReadSpecialRegisterIntrinsic_v4i32
2014                               <"__builtin_ptx_read_ctaid">;
2015defm int_ptx_read_nctaid     : PTXReadSpecialRegisterIntrinsic_v4i32
2016                               <"__builtin_ptx_read_nctaid">;
2017
2018def int_ptx_read_smid        : PTXReadSpecialRegisterIntrinsic_r32
2019                               <"__builtin_ptx_read_smid">;
2020def int_ptx_read_nsmid       : PTXReadSpecialRegisterIntrinsic_r32
2021                               <"__builtin_ptx_read_nsmid">;
2022def int_ptx_read_gridid      : PTXReadSpecialRegisterIntrinsic_r32
2023                               <"__builtin_ptx_read_gridid">;
2024
2025def int_ptx_read_lanemask_eq : PTXReadSpecialRegisterIntrinsic_r32
2026                               <"__builtin_ptx_read_lanemask_eq">;
2027def int_ptx_read_lanemask_le : PTXReadSpecialRegisterIntrinsic_r32
2028                               <"__builtin_ptx_read_lanemask_le">;
2029def int_ptx_read_lanemask_lt : PTXReadSpecialRegisterIntrinsic_r32
2030                               <"__builtin_ptx_read_lanemask_lt">;
2031def int_ptx_read_lanemask_ge : PTXReadSpecialRegisterIntrinsic_r32
2032                               <"__builtin_ptx_read_lanemask_ge">;
2033def int_ptx_read_lanemask_gt : PTXReadSpecialRegisterIntrinsic_r32
2034                               <"__builtin_ptx_read_lanemask_gt">;
2035
2036def int_ptx_read_clock       : PTXReadSpecialRegisterIntrinsic_r32
2037                               <"__builtin_ptx_read_clock">;
2038def int_ptx_read_clock64     : PTXReadSpecialRegisterIntrinsic_r64
2039                               <"__builtin_ptx_read_clock64">;
2040
2041def int_ptx_read_pm0         : PTXReadSpecialRegisterIntrinsic_r32
2042                               <"__builtin_ptx_read_pm0">;
2043def int_ptx_read_pm1         : PTXReadSpecialRegisterIntrinsic_r32
2044                               <"__builtin_ptx_read_pm1">;
2045def int_ptx_read_pm2         : PTXReadSpecialRegisterIntrinsic_r32
2046                               <"__builtin_ptx_read_pm2">;
2047def int_ptx_read_pm3         : PTXReadSpecialRegisterIntrinsic_r32
2048                               <"__builtin_ptx_read_pm3">;
2049
2050def int_ptx_bar_sync : Intrinsic<[], [llvm_i32_ty], []>,
2051                       GCCBuiltin<"__builtin_ptx_bar_sync">;
2052