[NVPTX] Fix handling of ldg/ldu intrinsics.
[oota-llvm.git] / include / llvm / IR / IntrinsicsNVVM.td
1 //===- IntrinsicsNVVM.td - Defines NVVM intrinsics ---------*- tablegen -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines all of the NVVM-specific intrinsics for use with NVPTX.
11 //
12 //===----------------------------------------------------------------------===//
13
14 def 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
799 def int_nvvm_ldu_global_i : Intrinsic<[llvm_anyint_ty],
800   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
801   "llvm.nvvm.ldu.global.i">;
802 def int_nvvm_ldu_global_f : Intrinsic<[llvm_anyfloat_ty],
803   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
804   "llvm.nvvm.ldu.global.f">;
805 def 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
810 def int_nvvm_ldg_global_i : Intrinsic<[llvm_anyint_ty],
811   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
812   "llvm.nvvm.ldg.global.i">;
813 def int_nvvm_ldg_global_f : Intrinsic<[llvm_anyfloat_ty],
814   [LLVMAnyPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
815   "llvm.nvvm.ldg.global.f">;
816 def 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.
828 def int_nvvm_ptr_local_to_gen: Intrinsic<[llvm_anyptr_ty],
829                  [llvm_anyptr_ty], [IntrNoMem],
830                  "llvm.nvvm.ptr.local.to.gen">;
831 def int_nvvm_ptr_shared_to_gen: Intrinsic<[llvm_anyptr_ty],
832                  [llvm_anyptr_ty], [IntrNoMem],
833                  "llvm.nvvm.ptr.shared.to.gen">;
834 def int_nvvm_ptr_global_to_gen: Intrinsic<[llvm_anyptr_ty],
835                  [llvm_anyptr_ty], [IntrNoMem],
836                  "llvm.nvvm.ptr.global.to.gen">;
837 def int_nvvm_ptr_constant_to_gen: Intrinsic<[llvm_anyptr_ty],
838                  [llvm_anyptr_ty], [IntrNoMem],
839                  "llvm.nvvm.ptr.constant.to.gen">;
840
841 def int_nvvm_ptr_gen_to_global: Intrinsic<[llvm_anyptr_ty],
842                  [llvm_anyptr_ty], [IntrNoMem],
843                  "llvm.nvvm.ptr.gen.to.global">;
844 def int_nvvm_ptr_gen_to_shared: Intrinsic<[llvm_anyptr_ty],
845                  [llvm_anyptr_ty], [IntrNoMem],
846                  "llvm.nvvm.ptr.gen.to.shared">;
847 def int_nvvm_ptr_gen_to_local: Intrinsic<[llvm_anyptr_ty],
848                  [llvm_anyptr_ty], [IntrNoMem],
849                  "llvm.nvvm.ptr.gen.to.local">;
850 def 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.
856 def 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
863 def int_nvvm_move_i16 : Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem],
864   "llvm.nvvm.move.i16">;
865 def int_nvvm_move_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem],
866   "llvm.nvvm.move.i32">;
867 def int_nvvm_move_i64 : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem],
868   "llvm.nvvm.move.i64">;
869 def int_nvvm_move_float : Intrinsic<[llvm_float_ty], [llvm_float_ty],
870   [IntrNoMem], "llvm.nvvm.move.float">;
871 def int_nvvm_move_double : Intrinsic<[llvm_double_ty], [llvm_double_ty],
872   [IntrNoMem], "llvm.nvvm.move.double">;
873 def 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
878 def int_nvvm_texsurf_handle
879   : Intrinsic<[llvm_i64_ty], [llvm_metadata_ty, llvm_anyi64ptr_ty],
880               [IntrNoMem], "llvm.nvvm.texsurf.handle">;
881 def int_nvvm_texsurf_handle_internal
882   : Intrinsic<[llvm_i64_ty], [llvm_anyptr_ty],
883               [IntrNoMem], "llvm.nvvm.texsurf.handle.internal">;
884
885 /// Error / Warn
886 def int_nvvm_compiler_error :
887     Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.error">;
888 def int_nvvm_compiler_warn :
889     Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.warn">;
890
891 // isspacep.{const, global, local, shared}
892 def int_nvvm_isspacep_const
893   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
894               "llvm.nvvm.isspacep.const">,
895     GCCBuiltin<"__nvvm_isspacep_const">;
896 def int_nvvm_isspacep_global
897   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
898               "llvm.nvvm.isspacep.global">,
899     GCCBuiltin<"__nvvm_isspacep_global">;
900 def int_nvvm_isspacep_local
901   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
902               "llvm.nvvm.isspacep.local">,
903     GCCBuiltin<"__nvvm_isspacep_local">;
904 def int_nvvm_isspacep_shared
905   : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty], [IntrNoMem],
906               "llvm.nvvm.isspacep.shared">,
907     GCCBuiltin<"__nvvm_isspacep_shared">;
908
909 // Environment register read
910 def int_nvvm_read_ptx_sreg_envreg0
911   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
912               "llvm.nvvm.read.ptx.sreg.envreg0">,
913     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg0">;
914 def int_nvvm_read_ptx_sreg_envreg1
915   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
916               "llvm.nvvm.read.ptx.sreg.envreg1">,
917     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg1">;
918 def int_nvvm_read_ptx_sreg_envreg2
919   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
920               "llvm.nvvm.read.ptx.sreg.envreg2">,
921     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg2">;
922 def int_nvvm_read_ptx_sreg_envreg3
923   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
924               "llvm.nvvm.read.ptx.sreg.envreg3">,
925     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg3">;
926 def int_nvvm_read_ptx_sreg_envreg4
927   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
928               "llvm.nvvm.read.ptx.sreg.envreg4">,
929     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg4">;
930 def int_nvvm_read_ptx_sreg_envreg5
931   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
932               "llvm.nvvm.read.ptx.sreg.envreg5">,
933     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg5">;
934 def int_nvvm_read_ptx_sreg_envreg6
935   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
936               "llvm.nvvm.read.ptx.sreg.envreg6">,
937     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg6">;
938 def int_nvvm_read_ptx_sreg_envreg7
939   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
940               "llvm.nvvm.read.ptx.sreg.envreg7">,
941     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg7">;
942 def int_nvvm_read_ptx_sreg_envreg8
943   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
944               "llvm.nvvm.read.ptx.sreg.envreg8">,
945     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg8">;
946 def int_nvvm_read_ptx_sreg_envreg9
947   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
948               "llvm.nvvm.read.ptx.sreg.envreg9">,
949     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg9">;
950 def int_nvvm_read_ptx_sreg_envreg10
951   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
952               "llvm.nvvm.read.ptx.sreg.envreg10">,
953     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg10">;
954 def int_nvvm_read_ptx_sreg_envreg11
955   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
956               "llvm.nvvm.read.ptx.sreg.envreg11">,
957     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg11">;
958 def int_nvvm_read_ptx_sreg_envreg12
959   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
960               "llvm.nvvm.read.ptx.sreg.envreg12">,
961     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg12">;
962 def int_nvvm_read_ptx_sreg_envreg13
963   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
964               "llvm.nvvm.read.ptx.sreg.envreg13">,
965     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg13">;
966 def int_nvvm_read_ptx_sreg_envreg14
967   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
968               "llvm.nvvm.read.ptx.sreg.envreg14">,
969     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg14">;
970 def int_nvvm_read_ptx_sreg_envreg15
971   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
972               "llvm.nvvm.read.ptx.sreg.envreg15">,
973     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg15">;
974 def int_nvvm_read_ptx_sreg_envreg16
975   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
976               "llvm.nvvm.read.ptx.sreg.envreg16">,
977     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg16">;
978 def int_nvvm_read_ptx_sreg_envreg17
979   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
980               "llvm.nvvm.read.ptx.sreg.envreg17">,
981     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg17">;
982 def int_nvvm_read_ptx_sreg_envreg18
983   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
984               "llvm.nvvm.read.ptx.sreg.envreg18">,
985     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg18">;
986 def int_nvvm_read_ptx_sreg_envreg19
987   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
988               "llvm.nvvm.read.ptx.sreg.envreg19">,
989     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg19">;
990 def int_nvvm_read_ptx_sreg_envreg20
991   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
992               "llvm.nvvm.read.ptx.sreg.envreg20">,
993     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg20">;
994 def int_nvvm_read_ptx_sreg_envreg21
995   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
996               "llvm.nvvm.read.ptx.sreg.envreg21">,
997     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg21">;
998 def int_nvvm_read_ptx_sreg_envreg22
999   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1000               "llvm.nvvm.read.ptx.sreg.envreg22">,
1001     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg22">;
1002 def int_nvvm_read_ptx_sreg_envreg23
1003   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1004               "llvm.nvvm.read.ptx.sreg.envreg23">,
1005     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg23">;
1006 def int_nvvm_read_ptx_sreg_envreg24
1007   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1008               "llvm.nvvm.read.ptx.sreg.envreg24">,
1009     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg24">;
1010 def int_nvvm_read_ptx_sreg_envreg25
1011   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1012               "llvm.nvvm.read.ptx.sreg.envreg25">,
1013     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg25">;
1014 def int_nvvm_read_ptx_sreg_envreg26
1015   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1016               "llvm.nvvm.read.ptx.sreg.envreg26">,
1017     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg26">;
1018 def int_nvvm_read_ptx_sreg_envreg27
1019   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1020               "llvm.nvvm.read.ptx.sreg.envreg27">,
1021     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg27">;
1022 def int_nvvm_read_ptx_sreg_envreg28
1023   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1024               "llvm.nvvm.read.ptx.sreg.envreg28">,
1025     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg28">;
1026 def int_nvvm_read_ptx_sreg_envreg29
1027   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1028               "llvm.nvvm.read.ptx.sreg.envreg29">,
1029     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg29">;
1030 def int_nvvm_read_ptx_sreg_envreg30
1031   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1032               "llvm.nvvm.read.ptx.sreg.envreg30">,
1033     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg30">;
1034 def int_nvvm_read_ptx_sreg_envreg31
1035   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem],
1036               "llvm.nvvm.read.ptx.sreg.envreg31">,
1037     GCCBuiltin<"__nvvm_read_ptx_sreg_envreg31">;
1038
1039
1040 // Texture Fetch
1041 def int_nvvm_tex_1d_v4f32_i32
1042   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1043               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1044               "llvm.nvvm.tex.1d.v4f32.i32">;
1045 def int_nvvm_tex_1d_v4f32_f32
1046   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1047               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1048               "llvm.nvvm.tex.1d.v4f32.f32">;
1049 def int_nvvm_tex_1d_level_v4f32_f32
1050   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1051               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1052               "llvm.nvvm.tex.1d.level.v4f32.f32">;
1053 def int_nvvm_tex_1d_grad_v4f32_f32
1054   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1055               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1056                llvm_float_ty], [],
1057               "llvm.nvvm.tex.1d.grad.v4f32.f32">;
1058 def int_nvvm_tex_1d_v4i32_i32
1059   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1060               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [],
1061               "llvm.nvvm.tex.1d.v4i32.i32">;
1062 def int_nvvm_tex_1d_v4i32_f32
1063   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1064               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty], [],
1065               "llvm.nvvm.tex.1d.v4i32.f32">;
1066 def int_nvvm_tex_1d_level_v4i32_f32
1067   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1068               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1069               "llvm.nvvm.tex.1d.level.v4i32.f32.level">;
1070 def int_nvvm_tex_1d_grad_v4i32_f32
1071   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1072               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1073                llvm_float_ty], [],
1074               "llvm.nvvm.tex.1d.grad.v4i32.f32">;
1075
1076 def int_nvvm_tex_1d_array_v4f32_i32
1077   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1078               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1079               "llvm.nvvm.tex.1d.array.v4f32.i32">;
1080 def int_nvvm_tex_1d_array_v4f32_f32
1081   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1082               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1083               "llvm.nvvm.tex.1d.array.v4f32.f32">;
1084 def int_nvvm_tex_1d_array_level_v4f32_f32
1085   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1086               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1087                llvm_float_ty], [],
1088               "llvm.nvvm.tex.1d.array.level.v4f32.f32">;
1089 def int_nvvm_tex_1d_array_grad_v4f32_f32
1090   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1091               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1092                llvm_float_ty, llvm_float_ty], [],
1093               "llvm.nvvm.tex.1d.array.grad.v4f32.f32">;
1094 def int_nvvm_tex_1d_array_v4i32_i32
1095   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1096               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1097               "llvm.nvvm.tex.1d.array.v4i32.i32">;
1098 def int_nvvm_tex_1d_array_v4i32_f32
1099   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1100               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty], [],
1101               "llvm.nvvm.tex.1d.array.v4i32.f32">;
1102 def int_nvvm_tex_1d_array_level_v4i32_f32
1103   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1104               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1105                llvm_float_ty], [],
1106               "llvm.nvvm.tex.1d.array.level.v4i32.f32">;
1107 def int_nvvm_tex_1d_array_grad_v4i32_f32
1108   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1109               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1110                llvm_float_ty, llvm_float_ty], [],
1111               "llvm.nvvm.tex.1d.array.grad.v4i32.f32">;
1112
1113 def int_nvvm_tex_2d_v4f32_i32
1114   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1115               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1116               "llvm.nvvm.tex.2d.v4f32.i32">;
1117 def int_nvvm_tex_2d_v4f32_f32
1118   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1119               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1120               "llvm.nvvm.tex.2d.v4f32.f32">;
1121 def int_nvvm_tex_2d_level_v4f32_f32
1122   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1123               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1124                llvm_float_ty], [],
1125               "llvm.nvvm.tex.2d.level.v4f32.f32">;
1126 def int_nvvm_tex_2d_grad_v4f32_f32
1127   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1128               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1129                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1130               "llvm.nvvm.tex.2d.grad.v4f32.f32">;
1131 def int_nvvm_tex_2d_v4i32_i32
1132   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1133               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1134               "llvm.nvvm.tex.2d.v4i32.i32">;
1135 def int_nvvm_tex_2d_v4i32_f32
1136   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1137               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty], [],
1138               "llvm.nvvm.tex.2d.v4i32.f32">;
1139 def int_nvvm_tex_2d_level_v4i32_f32
1140   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1141               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1142                llvm_float_ty], [],
1143               "llvm.nvvm.tex.2d.level.v4i32.f32">;
1144 def int_nvvm_tex_2d_grad_v4i32_f32
1145   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1146               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1147                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1148               "llvm.nvvm.tex.2d.grad.v4i32.f32">;
1149
1150 def int_nvvm_tex_2d_array_v4f32_i32
1151   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1152               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1153                llvm_i32_ty], [],
1154               "llvm.nvvm.tex.2d.array.v4f32.i32">;
1155 def int_nvvm_tex_2d_array_v4f32_f32
1156   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1157               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1158                llvm_float_ty], [],
1159               "llvm.nvvm.tex.2d.array.v4f32.f32">;
1160 def int_nvvm_tex_2d_array_level_v4f32_f32
1161   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1162               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1163                llvm_float_ty, llvm_float_ty], [],
1164               "llvm.nvvm.tex.2d.array.level.v4f32.f32">;
1165 def int_nvvm_tex_2d_array_grad_v4f32_f32
1166   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1167               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1168                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1169                llvm_float_ty], [],
1170               "llvm.nvvm.tex.2d.array.grad.v4f32.f32">;
1171 def int_nvvm_tex_2d_array_v4i32_i32
1172   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1173               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1174                llvm_i32_ty], [],
1175               "llvm.nvvm.tex.2d.array.v4i32.i32">;
1176 def int_nvvm_tex_2d_array_v4i32_f32
1177   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1178               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1179                llvm_float_ty], [],
1180               "llvm.nvvm.tex.2d.array.v4i32.f32">;
1181 def int_nvvm_tex_2d_array_level_v4i32_f32
1182   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1183               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1184                llvm_float_ty, llvm_float_ty], [],
1185               "llvm.nvvm.tex.2d.array.level.v4i32.f32">;
1186 def int_nvvm_tex_2d_array_grad_v4i32_f32
1187   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1188               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_float_ty,
1189                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1190                llvm_float_ty], [],
1191               "llvm.nvvm.tex.2d.array.grad.v4i32.f32">;
1192
1193 def int_nvvm_tex_3d_v4f32_i32
1194   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1195               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1196               [], "llvm.nvvm.tex.3d.v4f32.i32">;
1197 def int_nvvm_tex_3d_v4f32_f32
1198   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1199               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1200                llvm_float_ty], [],
1201               "llvm.nvvm.tex.3d.v4f32.f32">;
1202 def int_nvvm_tex_3d_level_v4f32_f32
1203   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1204               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1205                llvm_float_ty, llvm_float_ty], [],
1206               "llvm.nvvm.tex.3d.level.v4f32.f32">;
1207 def int_nvvm_tex_3d_grad_v4f32_f32
1208   : Intrinsic<[llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty],
1209               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1210                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1211                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1212               "llvm.nvvm.tex.3d.grad.v4f32.f32">;
1213 def int_nvvm_tex_3d_v4i32_i32
1214   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1215               [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1216               [], "llvm.nvvm.tex.3d.v4i32.i32">;
1217 def int_nvvm_tex_3d_v4i32_f32
1218   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1219               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1220                llvm_float_ty], [],
1221               "llvm.nvvm.tex.3d.v4i32.f32">;
1222 def int_nvvm_tex_3d_level_v4i32_f32
1223   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1224               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1225                llvm_float_ty, llvm_float_ty], [],
1226               "llvm.nvvm.tex.3d.level.v4i32.f32">;
1227 def int_nvvm_tex_3d_grad_v4i32_f32
1228   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1229               [llvm_i64_ty, llvm_i64_ty, llvm_float_ty, llvm_float_ty,
1230                llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_float_ty,
1231                llvm_float_ty, llvm_float_ty, llvm_float_ty], [],
1232               "llvm.nvvm.tex.3d.grad.v4i32.f32">;
1233
1234 // Surface Load
1235 def int_nvvm_suld_1d_i8_trap
1236   : Intrinsic<[llvm_i16_ty],
1237               [llvm_i64_ty, llvm_i32_ty], [],
1238               "llvm.nvvm.suld.1d.i8.trap">;
1239 def int_nvvm_suld_1d_i16_trap
1240   : Intrinsic<[llvm_i16_ty],
1241               [llvm_i64_ty, llvm_i32_ty], [],
1242               "llvm.nvvm.suld.1d.i16.trap">;
1243 def int_nvvm_suld_1d_i32_trap
1244   : Intrinsic<[llvm_i32_ty],
1245               [llvm_i64_ty, llvm_i32_ty], [],
1246               "llvm.nvvm.suld.1d.i32.trap">;
1247 def int_nvvm_suld_1d_v2i8_trap
1248   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1249               [llvm_i64_ty, llvm_i32_ty], [],
1250               "llvm.nvvm.suld.1d.v2i8.trap">;
1251 def int_nvvm_suld_1d_v2i16_trap
1252   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1253               [llvm_i64_ty, llvm_i32_ty], [],
1254               "llvm.nvvm.suld.1d.v2i16.trap">;
1255 def int_nvvm_suld_1d_v2i32_trap
1256   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1257               [llvm_i64_ty, llvm_i32_ty], [],
1258               "llvm.nvvm.suld.1d.v2i32.trap">;
1259 def int_nvvm_suld_1d_v4i8_trap
1260   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1261               [llvm_i64_ty, llvm_i32_ty], [],
1262               "llvm.nvvm.suld.1d.v4i8.trap">;
1263 def int_nvvm_suld_1d_v4i16_trap
1264   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1265               [llvm_i64_ty, llvm_i32_ty], [],
1266               "llvm.nvvm.suld.1d.v4i16.trap">;
1267 def int_nvvm_suld_1d_v4i32_trap
1268   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1269               [llvm_i64_ty, llvm_i32_ty], [],
1270               "llvm.nvvm.suld.1d.v4i32.trap">;
1271
1272 def int_nvvm_suld_1d_array_i8_trap
1273   : Intrinsic<[llvm_i16_ty],
1274               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1275               "llvm.nvvm.suld.1d.array.i8.trap">;
1276 def int_nvvm_suld_1d_array_i16_trap
1277   : Intrinsic<[llvm_i16_ty],
1278               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1279               "llvm.nvvm.suld.1d.array.i16.trap">;
1280 def int_nvvm_suld_1d_array_i32_trap
1281   : Intrinsic<[llvm_i32_ty],
1282               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1283               "llvm.nvvm.suld.1d.array.i32.trap">;
1284 def int_nvvm_suld_1d_array_v2i8_trap
1285   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1286               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1287               "llvm.nvvm.suld.1d.array.v2i8.trap">;
1288 def int_nvvm_suld_1d_array_v2i16_trap
1289   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1290               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1291               "llvm.nvvm.suld.1d.array.v2i16.trap">;
1292 def int_nvvm_suld_1d_array_v2i32_trap
1293   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1294               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1295               "llvm.nvvm.suld.1d.array.v2i32.trap">;
1296 def int_nvvm_suld_1d_array_v4i8_trap
1297   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1298               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1299               "llvm.nvvm.suld.1d.array.v4i8.trap">;
1300 def int_nvvm_suld_1d_array_v4i16_trap
1301   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1302               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1303               "llvm.nvvm.suld.1d.array.v4i16.trap">;
1304 def int_nvvm_suld_1d_array_v4i32_trap
1305   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1306               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1307               "llvm.nvvm.suld.1d.array.v4i32.trap">;
1308
1309 def int_nvvm_suld_2d_i8_trap
1310   : Intrinsic<[llvm_i16_ty],
1311               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1312               "llvm.nvvm.suld.2d.i8.trap">;
1313 def int_nvvm_suld_2d_i16_trap
1314   : Intrinsic<[llvm_i16_ty],
1315               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1316               "llvm.nvvm.suld.2d.i16.trap">;
1317 def int_nvvm_suld_2d_i32_trap
1318   : Intrinsic<[llvm_i32_ty],
1319               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1320               "llvm.nvvm.suld.2d.i32.trap">;
1321 def int_nvvm_suld_2d_v2i8_trap
1322   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1323               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1324               "llvm.nvvm.suld.2d.v2i8.trap">;
1325 def int_nvvm_suld_2d_v2i16_trap
1326   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1327               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1328               "llvm.nvvm.suld.2d.v2i16.trap">;
1329 def int_nvvm_suld_2d_v2i32_trap
1330   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1331               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1332               "llvm.nvvm.suld.2d.v2i32.trap">;
1333 def int_nvvm_suld_2d_v4i8_trap
1334   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1335               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1336               "llvm.nvvm.suld.2d.v4i8.trap">;
1337 def int_nvvm_suld_2d_v4i16_trap
1338   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1339               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1340               "llvm.nvvm.suld.2d.v4i16.trap">;
1341 def int_nvvm_suld_2d_v4i32_trap
1342   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1343               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1344               "llvm.nvvm.suld.2d.v4i32.trap">;
1345
1346 def int_nvvm_suld_2d_array_i8_trap
1347   : Intrinsic<[llvm_i16_ty],
1348               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1349               "llvm.nvvm.suld.2d.array.i8.trap">;
1350 def int_nvvm_suld_2d_array_i16_trap
1351   : Intrinsic<[llvm_i16_ty],
1352               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1353               "llvm.nvvm.suld.2d.array.i16.trap">;
1354 def int_nvvm_suld_2d_array_i32_trap
1355   : Intrinsic<[llvm_i32_ty],
1356               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1357               "llvm.nvvm.suld.2d.array.i32.trap">;
1358 def int_nvvm_suld_2d_array_v2i8_trap
1359   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1360               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1361               "llvm.nvvm.suld.2d.array.v2i8.trap">;
1362 def int_nvvm_suld_2d_array_v2i16_trap
1363   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1364               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1365               "llvm.nvvm.suld.2d.array.v2i16.trap">;
1366 def int_nvvm_suld_2d_array_v2i32_trap
1367   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1368               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1369               "llvm.nvvm.suld.2d.array.v2i32.trap">;
1370 def int_nvvm_suld_2d_array_v4i8_trap
1371   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1372               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1373               "llvm.nvvm.suld.2d.array.v4i8.trap">;
1374 def int_nvvm_suld_2d_array_v4i16_trap
1375   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1376               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1377               "llvm.nvvm.suld.2d.array.v4i16.trap">;
1378 def int_nvvm_suld_2d_array_v4i32_trap
1379   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1380               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1381               "llvm.nvvm.suld.2d.array.v4i32.trap">;
1382
1383 def int_nvvm_suld_3d_i8_trap
1384   : Intrinsic<[llvm_i16_ty],
1385               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1386               "llvm.nvvm.suld.3d.i8.trap">;
1387 def int_nvvm_suld_3d_i16_trap
1388   : Intrinsic<[llvm_i16_ty],
1389               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1390               "llvm.nvvm.suld.3d.i16.trap">;
1391 def int_nvvm_suld_3d_i32_trap
1392   : Intrinsic<[llvm_i32_ty],
1393               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1394               "llvm.nvvm.suld.3d.i32.trap">;
1395 def int_nvvm_suld_3d_v2i8_trap
1396   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1397               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1398               "llvm.nvvm.suld.3d.v2i8.trap">;
1399 def int_nvvm_suld_3d_v2i16_trap
1400   : Intrinsic<[llvm_i16_ty, llvm_i16_ty],
1401               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1402               "llvm.nvvm.suld.3d.v2i16.trap">;
1403 def int_nvvm_suld_3d_v2i32_trap
1404   : Intrinsic<[llvm_i32_ty, llvm_i32_ty],
1405               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1406               "llvm.nvvm.suld.3d.v2i32.trap">;
1407 def int_nvvm_suld_3d_v4i8_trap
1408   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1409               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1410               "llvm.nvvm.suld.3d.v4i8.trap">;
1411 def int_nvvm_suld_3d_v4i16_trap
1412   : Intrinsic<[llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty],
1413               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1414               "llvm.nvvm.suld.3d.v4i16.trap">;
1415 def int_nvvm_suld_3d_v4i32_trap
1416   : Intrinsic<[llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
1417               [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1418               "llvm.nvvm.suld.3d.v4i32.trap">;
1419
1420 //===- Texture Query ------------------------------------------------------===//
1421
1422 def int_nvvm_txq_channel_order
1423   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1424               "llvm.nvvm.txq.channel.order">,
1425     GCCBuiltin<"__nvvm_txq_channel_order">;
1426 def int_nvvm_txq_channel_data_type
1427   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1428               "llvm.nvvm.txq.channel.data.type">,
1429     GCCBuiltin<"__nvvm_txq_channel_data_type">;
1430 def int_nvvm_txq_width
1431   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1432               "llvm.nvvm.txq.width">,
1433     GCCBuiltin<"__nvvm_txq_width">;
1434 def int_nvvm_txq_height
1435   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1436               "llvm.nvvm.txq.height">,
1437     GCCBuiltin<"__nvvm_txq_height">;
1438 def int_nvvm_txq_depth
1439   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1440               "llvm.nvvm.txq.depth">,
1441     GCCBuiltin<"__nvvm_txq_depth">;
1442 def int_nvvm_txq_array_size
1443   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1444               "llvm.nvvm.txq.array.size">,
1445     GCCBuiltin<"__nvvm_txq_array_size">;
1446 def int_nvvm_txq_num_samples
1447   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1448               "llvm.nvvm.txq.num.samples">,
1449     GCCBuiltin<"__nvvm_txq_num_samples">;
1450 def int_nvvm_txq_num_mipmap_levels
1451   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1452               "llvm.nvvm.txq.num.mipmap.levels">,
1453     GCCBuiltin<"__nvvm_txq_num_mipmap_levels">;
1454
1455 //===- Surface Query ------------------------------------------------------===//
1456
1457 def int_nvvm_suq_channel_order
1458   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1459               "llvm.nvvm.suq.channel.order">,
1460     GCCBuiltin<"__nvvm_suq_channel_order">;
1461 def int_nvvm_suq_channel_data_type
1462   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1463               "llvm.nvvm.suq.channel.data.type">,
1464     GCCBuiltin<"__nvvm_suq_channel_data_type">;
1465 def int_nvvm_suq_width
1466   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1467               "llvm.nvvm.suq.width">,
1468     GCCBuiltin<"__nvvm_suq_width">;
1469 def int_nvvm_suq_height
1470   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1471               "llvm.nvvm.suq.height">,
1472     GCCBuiltin<"__nvvm_suq_height">;
1473 def int_nvvm_suq_depth
1474   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1475               "llvm.nvvm.suq.depth">,
1476     GCCBuiltin<"__nvvm_suq_depth">;
1477 def int_nvvm_suq_array_size
1478   : Intrinsic<[llvm_i32_ty], [llvm_i64_ty], [IntrNoMem],
1479               "llvm.nvvm.suq.array.size">,
1480     GCCBuiltin<"__nvvm_suq_array_size">;
1481
1482
1483 //===- Handle Query -------------------------------------------------------===//
1484
1485 def int_nvvm_istypep_sampler
1486   : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
1487               "llvm.nvvm.istypep.sampler">,
1488     GCCBuiltin<"__nvvm_istypep_sampler">;
1489 def int_nvvm_istypep_surface
1490   : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
1491               "llvm.nvvm.istypep.surface">,
1492     GCCBuiltin<"__nvvm_istypep_surface">;
1493 def int_nvvm_istypep_texture
1494   : Intrinsic<[llvm_i1_ty], [llvm_i64_ty], [IntrNoMem],
1495               "llvm.nvvm.istypep.texture">,
1496     GCCBuiltin<"__nvvm_istypep_texture">;
1497
1498
1499
1500 //===- Surface Stores -----------------------------------------------------===//
1501
1502 // Unformatted
1503
1504 def int_nvvm_sust_b_1d_i8_trap
1505   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
1506               "llvm.nvvm.sust.b.1d.i8.trap">,
1507     GCCBuiltin<"__nvvm_sust_b_1d_i8_trap">;
1508 def int_nvvm_sust_b_1d_i16_trap
1509   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
1510               "llvm.nvvm.sust.b.1d.i16.trap">,
1511     GCCBuiltin<"__nvvm_sust_b_1d_i16_trap">;
1512 def int_nvvm_sust_b_1d_i32_trap
1513   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1514               "llvm.nvvm.sust.b.1d.i32.trap">,
1515     GCCBuiltin<"__nvvm_sust_b_1d_i32_trap">;
1516 def int_nvvm_sust_b_1d_v2i8_trap
1517   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
1518               "llvm.nvvm.sust.b.1d.v2i8.trap">,
1519     GCCBuiltin<"__nvvm_sust_b_1d_v2i8_trap">;
1520 def int_nvvm_sust_b_1d_v2i16_trap
1521   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
1522               "llvm.nvvm.sust.b.1d.v2i16.trap">,
1523     GCCBuiltin<"__nvvm_sust_b_1d_v2i16_trap">;
1524 def int_nvvm_sust_b_1d_v2i32_trap
1525   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1526               "llvm.nvvm.sust.b.1d.v2i32.trap">,
1527     GCCBuiltin<"__nvvm_sust_b_1d_v2i32_trap">;
1528 def int_nvvm_sust_b_1d_v4i8_trap
1529   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
1530                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1531               "llvm.nvvm.sust.b.1d.v4i8.trap">,
1532     GCCBuiltin<"__nvvm_sust_b_1d_v4i8_trap">;
1533 def int_nvvm_sust_b_1d_v4i16_trap
1534   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
1535                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1536               "llvm.nvvm.sust.b.1d.v4i16.trap">,
1537     GCCBuiltin<"__nvvm_sust_b_1d_v4i16_trap">;
1538 def int_nvvm_sust_b_1d_v4i32_trap
1539   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1540                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1541               "llvm.nvvm.sust.b.1d.v4i32.trap">,
1542     GCCBuiltin<"__nvvm_sust_b_1d_v4i32_trap">;
1543
1544
1545 def int_nvvm_sust_b_1d_array_i8_trap
1546   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1547               "llvm.nvvm.sust.b.1d.array.i8.trap">,
1548     GCCBuiltin<"__nvvm_sust_b_1d_array_i8_trap">;
1549 def int_nvvm_sust_b_1d_array_i16_trap
1550   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1551               "llvm.nvvm.sust.b.1d.array.i16.trap">,
1552     GCCBuiltin<"__nvvm_sust_b_1d_array_i16_trap">;
1553 def int_nvvm_sust_b_1d_array_i32_trap
1554   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1555               "llvm.nvvm.sust.b.1d.array.i32.trap">,
1556     GCCBuiltin<"__nvvm_sust_b_1d_array_i32_trap">;
1557 def int_nvvm_sust_b_1d_array_v2i8_trap
1558   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1559                    llvm_i16_ty, llvm_i16_ty], [],
1560               "llvm.nvvm.sust.b.1d.array.v2i8.trap">,
1561     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i8_trap">;
1562 def int_nvvm_sust_b_1d_array_v2i16_trap
1563   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1564                    llvm_i16_ty, llvm_i16_ty], [],
1565               "llvm.nvvm.sust.b.1d.array.v2i16.trap">,
1566     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i16_trap">;
1567 def int_nvvm_sust_b_1d_array_v2i32_trap
1568   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1569                    llvm_i32_ty, llvm_i32_ty], [],
1570               "llvm.nvvm.sust.b.1d.array.v2i32.trap">,
1571     GCCBuiltin<"__nvvm_sust_b_1d_array_v2i32_trap">;
1572 def int_nvvm_sust_b_1d_array_v4i8_trap
1573   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1574                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1575               "llvm.nvvm.sust.b.1d.array.v4i8.trap">,
1576     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i8_trap">;
1577 def int_nvvm_sust_b_1d_array_v4i16_trap
1578   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1579                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1580               "llvm.nvvm.sust.b.1d.array.v4i16.trap">,
1581     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i16_trap">;
1582 def int_nvvm_sust_b_1d_array_v4i32_trap
1583   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1584                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1585               "llvm.nvvm.sust.b.1d.array.v4i32.trap">,
1586     GCCBuiltin<"__nvvm_sust_b_1d_array_v4i32_trap">;
1587
1588
1589 def int_nvvm_sust_b_2d_i8_trap
1590   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1591               "llvm.nvvm.sust.b.2d.i8.trap">,
1592     GCCBuiltin<"__nvvm_sust_b_2d_i8_trap">;
1593 def int_nvvm_sust_b_2d_i16_trap
1594   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1595               "llvm.nvvm.sust.b.2d.i16.trap">,
1596     GCCBuiltin<"__nvvm_sust_b_2d_i16_trap">;
1597 def int_nvvm_sust_b_2d_i32_trap
1598   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1599               "llvm.nvvm.sust.b.2d.i32.trap">,
1600     GCCBuiltin<"__nvvm_sust_b_2d_i32_trap">;
1601 def int_nvvm_sust_b_2d_v2i8_trap
1602   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1603                    llvm_i16_ty, llvm_i16_ty], [],
1604               "llvm.nvvm.sust.b.2d.v2i8.trap">,
1605     GCCBuiltin<"__nvvm_sust_b_2d_v2i8_trap">;
1606 def int_nvvm_sust_b_2d_v2i16_trap
1607   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1608                    llvm_i16_ty, llvm_i16_ty], [],
1609               "llvm.nvvm.sust.b.2d.v2i16.trap">,
1610     GCCBuiltin<"__nvvm_sust_b_2d_v2i16_trap">;
1611 def int_nvvm_sust_b_2d_v2i32_trap
1612   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1613                    llvm_i32_ty, llvm_i32_ty], [],
1614               "llvm.nvvm.sust.b.2d.v2i32.trap">,
1615     GCCBuiltin<"__nvvm_sust_b_2d_v2i32_trap">;
1616 def int_nvvm_sust_b_2d_v4i8_trap
1617   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1618                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1619               "llvm.nvvm.sust.b.2d.v4i8.trap">,
1620     GCCBuiltin<"__nvvm_sust_b_2d_v4i8_trap">;
1621 def int_nvvm_sust_b_2d_v4i16_trap
1622   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1623                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1624               "llvm.nvvm.sust.b.2d.v4i16.trap">,
1625     GCCBuiltin<"__nvvm_sust_b_2d_v4i16_trap">;
1626 def int_nvvm_sust_b_2d_v4i32_trap
1627   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1628                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1629               "llvm.nvvm.sust.b.2d.v4i32.trap">,
1630     GCCBuiltin<"__nvvm_sust_b_2d_v4i32_trap">;
1631
1632
1633 def int_nvvm_sust_b_2d_array_i8_trap
1634   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1635                    llvm_i32_ty, llvm_i16_ty], [],
1636               "llvm.nvvm.sust.b.2d.array.i8.trap">,
1637     GCCBuiltin<"__nvvm_sust_b_2d_array_i8_trap">;
1638 def int_nvvm_sust_b_2d_array_i16_trap
1639   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1640                    llvm_i32_ty, llvm_i16_ty], [],
1641               "llvm.nvvm.sust.b.2d.array.i16.trap">,
1642     GCCBuiltin<"__nvvm_sust_b_2d_array_i16_trap">;
1643 def int_nvvm_sust_b_2d_array_i32_trap
1644   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1645                    llvm_i32_ty, llvm_i32_ty], [],
1646               "llvm.nvvm.sust.b.2d.array.i32.trap">,
1647     GCCBuiltin<"__nvvm_sust_b_2d_array_i32_trap">;
1648 def int_nvvm_sust_b_2d_array_v2i8_trap
1649   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1650                    llvm_i16_ty, llvm_i16_ty], [],
1651               "llvm.nvvm.sust.b.2d.array.v2i8.trap">,
1652     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i8_trap">;
1653 def int_nvvm_sust_b_2d_array_v2i16_trap
1654   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1655                    llvm_i16_ty, llvm_i16_ty], [],
1656               "llvm.nvvm.sust.b.2d.array.v2i16.trap">,
1657     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i16_trap">;
1658 def int_nvvm_sust_b_2d_array_v2i32_trap
1659   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1660                    llvm_i32_ty, llvm_i32_ty], [],
1661               "llvm.nvvm.sust.b.2d.array.v2i32.trap">,
1662     GCCBuiltin<"__nvvm_sust_b_2d_array_v2i32_trap">;
1663 def int_nvvm_sust_b_2d_array_v4i8_trap
1664   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1665                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1666               "llvm.nvvm.sust.b.2d.array.v4i8.trap">,
1667     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i8_trap">;
1668 def int_nvvm_sust_b_2d_array_v4i16_trap
1669   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1670                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1671               "llvm.nvvm.sust.b.2d.array.v4i16.trap">,
1672     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i16_trap">;
1673 def int_nvvm_sust_b_2d_array_v4i32_trap
1674   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1675                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1676               "llvm.nvvm.sust.b.2d.array.v4i32.trap">,
1677     GCCBuiltin<"__nvvm_sust_b_2d_array_v4i32_trap">;
1678
1679
1680 def int_nvvm_sust_b_3d_i8_trap
1681   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1682                    llvm_i32_ty, llvm_i16_ty], [],
1683               "llvm.nvvm.sust.b.3d.i8.trap">,
1684     GCCBuiltin<"__nvvm_sust_b_3d_i8_trap">;
1685 def int_nvvm_sust_b_3d_i16_trap
1686   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1687                    llvm_i32_ty, llvm_i16_ty], [],
1688               "llvm.nvvm.sust.b.3d.i16.trap">,
1689     GCCBuiltin<"__nvvm_sust_b_3d_i16_trap">;
1690 def int_nvvm_sust_b_3d_i32_trap
1691   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1692                    llvm_i32_ty, llvm_i32_ty], [],
1693               "llvm.nvvm.sust.b.3d.i32.trap">,
1694     GCCBuiltin<"__nvvm_sust_b_3d_i32_trap">;
1695 def int_nvvm_sust_b_3d_v2i8_trap
1696   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1697                    llvm_i16_ty, llvm_i16_ty], [],
1698               "llvm.nvvm.sust.b.3d.v2i8.trap">,
1699     GCCBuiltin<"__nvvm_sust_b_3d_v2i8_trap">;
1700 def int_nvvm_sust_b_3d_v2i16_trap
1701   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1702                    llvm_i16_ty, llvm_i16_ty], [],
1703               "llvm.nvvm.sust.b.3d.v2i16.trap">,
1704     GCCBuiltin<"__nvvm_sust_b_3d_v2i16_trap">;
1705 def int_nvvm_sust_b_3d_v2i32_trap
1706   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1707                    llvm_i32_ty, llvm_i32_ty], [],
1708               "llvm.nvvm.sust.b.3d.v2i32.trap">,
1709     GCCBuiltin<"__nvvm_sust_b_3d_v2i32_trap">;
1710 def int_nvvm_sust_b_3d_v4i8_trap
1711   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1712                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1713               "llvm.nvvm.sust.b.3d.v4i8.trap">,
1714     GCCBuiltin<"__nvvm_sust_b_3d_v4i8_trap">;
1715 def int_nvvm_sust_b_3d_v4i16_trap
1716   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1717                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1718               "llvm.nvvm.sust.b.3d.v4i16.trap">,
1719     GCCBuiltin<"__nvvm_sust_b_3d_v4i16_trap">;
1720 def int_nvvm_sust_b_3d_v4i32_trap
1721   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1722                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1723               "llvm.nvvm.sust.b.3d.v4i32.trap">,
1724     GCCBuiltin<"__nvvm_sust_b_3d_v4i32_trap">;
1725
1726 // Formatted
1727
1728 def int_nvvm_sust_p_1d_i8_trap
1729   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
1730               "llvm.nvvm.sust.p.1d.i8.trap">,
1731     GCCBuiltin<"__nvvm_sust_p_1d_i8_trap">;
1732 def int_nvvm_sust_p_1d_i16_trap
1733   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty], [],
1734               "llvm.nvvm.sust.p.1d.i16.trap">,
1735     GCCBuiltin<"__nvvm_sust_p_1d_i16_trap">;
1736 def int_nvvm_sust_p_1d_i32_trap
1737   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], [],
1738               "llvm.nvvm.sust.p.1d.i32.trap">,
1739     GCCBuiltin<"__nvvm_sust_p_1d_i32_trap">;
1740 def int_nvvm_sust_p_1d_v2i8_trap
1741   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
1742               "llvm.nvvm.sust.p.1d.v2i8.trap">,
1743     GCCBuiltin<"__nvvm_sust_p_1d_v2i8_trap">;
1744 def int_nvvm_sust_p_1d_v2i16_trap
1745   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty, llvm_i16_ty], [],
1746               "llvm.nvvm.sust.p.1d.v2i16.trap">,
1747     GCCBuiltin<"__nvvm_sust_p_1d_v2i16_trap">;
1748 def int_nvvm_sust_p_1d_v2i32_trap
1749   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1750               "llvm.nvvm.sust.p.1d.v2i32.trap">,
1751     GCCBuiltin<"__nvvm_sust_p_1d_v2i32_trap">;
1752 def int_nvvm_sust_p_1d_v4i8_trap
1753   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
1754                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1755               "llvm.nvvm.sust.p.1d.v4i8.trap">,
1756     GCCBuiltin<"__nvvm_sust_p_1d_v4i8_trap">;
1757 def int_nvvm_sust_p_1d_v4i16_trap
1758   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i16_ty,
1759                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1760               "llvm.nvvm.sust.p.1d.v4i16.trap">,
1761     GCCBuiltin<"__nvvm_sust_p_1d_v4i16_trap">;
1762 def int_nvvm_sust_p_1d_v4i32_trap
1763   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1764                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1765               "llvm.nvvm.sust.p.1d.v4i32.trap">,
1766     GCCBuiltin<"__nvvm_sust_p_1d_v4i32_trap">;
1767
1768
1769 def int_nvvm_sust_p_1d_array_i8_trap
1770   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1771               "llvm.nvvm.sust.p.1d.array.i8.trap">,
1772     GCCBuiltin<"__nvvm_sust_p_1d_array_i8_trap">;
1773 def int_nvvm_sust_p_1d_array_i16_trap
1774   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1775               "llvm.nvvm.sust.p.1d.array.i16.trap">,
1776     GCCBuiltin<"__nvvm_sust_p_1d_array_i16_trap">;
1777 def int_nvvm_sust_p_1d_array_i32_trap
1778   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1779               "llvm.nvvm.sust.p.1d.array.i32.trap">,
1780     GCCBuiltin<"__nvvm_sust_p_1d_array_i32_trap">;
1781 def int_nvvm_sust_p_1d_array_v2i8_trap
1782   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1783                    llvm_i16_ty, llvm_i16_ty], [],
1784               "llvm.nvvm.sust.p.1d.array.v2i8.trap">,
1785     GCCBuiltin<"__nvvm_sust_p_1d_array_v2i8_trap">;
1786 def int_nvvm_sust_p_1d_array_v2i16_trap
1787   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1788                    llvm_i16_ty, llvm_i16_ty], [],
1789               "llvm.nvvm.sust.p.1d.array.v2i16.trap">,
1790     GCCBuiltin<"__nvvm_sust_p_1d_array_v2i16_trap">;
1791 def int_nvvm_sust_p_1d_array_v2i32_trap
1792   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1793                    llvm_i32_ty, llvm_i32_ty], [],
1794               "llvm.nvvm.sust.p.1d.array.v2i32.trap">,
1795     GCCBuiltin<"__nvvm_sust_p_1d_array_v2i32_trap">;
1796 def int_nvvm_sust_p_1d_array_v4i8_trap
1797   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1798                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1799               "llvm.nvvm.sust.p.1d.array.v4i8.trap">,
1800     GCCBuiltin<"__nvvm_sust_p_1d_array_v4i8_trap">;
1801 def int_nvvm_sust_p_1d_array_v4i16_trap
1802   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1803                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1804               "llvm.nvvm.sust.p.1d.array.v4i16.trap">,
1805     GCCBuiltin<"__nvvm_sust_p_1d_array_v4i16_trap">;
1806 def int_nvvm_sust_p_1d_array_v4i32_trap
1807   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1808                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1809               "llvm.nvvm.sust.p.1d.array.v4i32.trap">,
1810     GCCBuiltin<"__nvvm_sust_p_1d_array_v4i32_trap">;
1811
1812
1813 def int_nvvm_sust_p_2d_i8_trap
1814   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1815               "llvm.nvvm.sust.p.2d.i8.trap">,
1816     GCCBuiltin<"__nvvm_sust_p_2d_i8_trap">;
1817 def int_nvvm_sust_p_2d_i16_trap
1818   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty], [],
1819               "llvm.nvvm.sust.p.2d.i16.trap">,
1820     GCCBuiltin<"__nvvm_sust_p_2d_i16_trap">;
1821 def int_nvvm_sust_p_2d_i32_trap
1822   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1823               "llvm.nvvm.sust.p.2d.i32.trap">,
1824     GCCBuiltin<"__nvvm_sust_p_2d_i32_trap">;
1825 def int_nvvm_sust_p_2d_v2i8_trap
1826   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1827                    llvm_i16_ty, llvm_i16_ty], [],
1828               "llvm.nvvm.sust.p.2d.v2i8.trap">,
1829     GCCBuiltin<"__nvvm_sust_p_2d_v2i8_trap">;
1830 def int_nvvm_sust_p_2d_v2i16_trap
1831   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1832                    llvm_i16_ty, llvm_i16_ty], [],
1833               "llvm.nvvm.sust.p.2d.v2i16.trap">,
1834     GCCBuiltin<"__nvvm_sust_p_2d_v2i16_trap">;
1835 def int_nvvm_sust_p_2d_v2i32_trap
1836   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1837                    llvm_i32_ty, llvm_i32_ty], [],
1838               "llvm.nvvm.sust.p.2d.v2i32.trap">,
1839     GCCBuiltin<"__nvvm_sust_p_2d_v2i32_trap">;
1840 def int_nvvm_sust_p_2d_v4i8_trap
1841   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1842                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1843               "llvm.nvvm.sust.p.2d.v4i8.trap">,
1844     GCCBuiltin<"__nvvm_sust_p_2d_v4i8_trap">;
1845 def int_nvvm_sust_p_2d_v4i16_trap
1846   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i16_ty,
1847                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1848               "llvm.nvvm.sust.p.2d.v4i16.trap">,
1849     GCCBuiltin<"__nvvm_sust_p_2d_v4i16_trap">;
1850 def int_nvvm_sust_p_2d_v4i32_trap
1851   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1852                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1853               "llvm.nvvm.sust.p.2d.v4i32.trap">,
1854     GCCBuiltin<"__nvvm_sust_p_2d_v4i32_trap">;
1855
1856
1857 def int_nvvm_sust_p_2d_array_i8_trap
1858   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1859                    llvm_i32_ty, llvm_i16_ty], [],
1860               "llvm.nvvm.sust.p.2d.array.i8.trap">,
1861     GCCBuiltin<"__nvvm_sust_p_2d_array_i8_trap">;
1862 def int_nvvm_sust_p_2d_array_i16_trap
1863   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1864                    llvm_i32_ty, llvm_i16_ty], [],
1865               "llvm.nvvm.sust.p.2d.array.i16.trap">,
1866     GCCBuiltin<"__nvvm_sust_p_2d_array_i16_trap">;
1867 def int_nvvm_sust_p_2d_array_i32_trap
1868   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1869                    llvm_i32_ty, llvm_i32_ty], [],
1870               "llvm.nvvm.sust.p.2d.array.i32.trap">,
1871     GCCBuiltin<"__nvvm_sust_p_2d_array_i32_trap">;
1872 def int_nvvm_sust_p_2d_array_v2i8_trap
1873   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1874                    llvm_i16_ty, llvm_i16_ty], [],
1875               "llvm.nvvm.sust.p.2d.array.v2i8.trap">,
1876     GCCBuiltin<"__nvvm_sust_p_2d_array_v2i8_trap">;
1877 def int_nvvm_sust_p_2d_array_v2i16_trap
1878   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1879                    llvm_i16_ty, llvm_i16_ty], [],
1880               "llvm.nvvm.sust.p.2d.array.v2i16.trap">,
1881     GCCBuiltin<"__nvvm_sust_p_2d_array_v2i16_trap">;
1882 def int_nvvm_sust_p_2d_array_v2i32_trap
1883   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1884                    llvm_i32_ty, llvm_i32_ty], [],
1885               "llvm.nvvm.sust.p.2d.array.v2i32.trap">,
1886     GCCBuiltin<"__nvvm_sust_p_2d_array_v2i32_trap">;
1887 def int_nvvm_sust_p_2d_array_v4i8_trap
1888   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1889                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1890               "llvm.nvvm.sust.p.2d.array.v4i8.trap">,
1891     GCCBuiltin<"__nvvm_sust_p_2d_array_v4i8_trap">;
1892 def int_nvvm_sust_p_2d_array_v4i16_trap
1893   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1894                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1895               "llvm.nvvm.sust.p.2d.array.v4i16.trap">,
1896     GCCBuiltin<"__nvvm_sust_p_2d_array_v4i16_trap">;
1897 def int_nvvm_sust_p_2d_array_v4i32_trap
1898   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1899                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1900               "llvm.nvvm.sust.p.2d.array.v4i32.trap">,
1901     GCCBuiltin<"__nvvm_sust_p_2d_array_v4i32_trap">;
1902
1903
1904 def int_nvvm_sust_p_3d_i8_trap
1905   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1906                    llvm_i32_ty, llvm_i16_ty], [],
1907               "llvm.nvvm.sust.p.3d.i8.trap">,
1908     GCCBuiltin<"__nvvm_sust_p_3d_i8_trap">;
1909 def int_nvvm_sust_p_3d_i16_trap
1910   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1911                    llvm_i32_ty, llvm_i16_ty], [],
1912               "llvm.nvvm.sust.p.3d.i16.trap">,
1913     GCCBuiltin<"__nvvm_sust_p_3d_i16_trap">;
1914 def int_nvvm_sust_p_3d_i32_trap
1915   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty,
1916                    llvm_i32_ty, llvm_i32_ty], [],
1917               "llvm.nvvm.sust.p.3d.i32.trap">,
1918     GCCBuiltin<"__nvvm_sust_p_3d_i32_trap">;
1919 def int_nvvm_sust_p_3d_v2i8_trap
1920   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1921                    llvm_i16_ty, llvm_i16_ty], [],
1922               "llvm.nvvm.sust.p.3d.v2i8.trap">,
1923     GCCBuiltin<"__nvvm_sust_p_3d_v2i8_trap">;
1924 def int_nvvm_sust_p_3d_v2i16_trap
1925   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1926                    llvm_i16_ty, llvm_i16_ty], [],
1927               "llvm.nvvm.sust.p.3d.v2i16.trap">,
1928     GCCBuiltin<"__nvvm_sust_p_3d_v2i16_trap">;
1929 def int_nvvm_sust_p_3d_v2i32_trap
1930   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1931                    llvm_i32_ty, llvm_i32_ty], [],
1932               "llvm.nvvm.sust.p.3d.v2i32.trap">,
1933     GCCBuiltin<"__nvvm_sust_p_3d_v2i32_trap">;
1934 def int_nvvm_sust_p_3d_v4i8_trap
1935   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1936                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1937               "llvm.nvvm.sust.p.3d.v4i8.trap">,
1938     GCCBuiltin<"__nvvm_sust_p_3d_v4i8_trap">;
1939 def int_nvvm_sust_p_3d_v4i16_trap
1940   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1941                    llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_i16_ty], [],
1942               "llvm.nvvm.sust.p.3d.v4i16.trap">,
1943     GCCBuiltin<"__nvvm_sust_p_3d_v4i16_trap">;
1944 def int_nvvm_sust_p_3d_v4i32_trap
1945   : Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty,
1946                    llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [],
1947               "llvm.nvvm.sust.p.3d.v4i32.trap">,
1948     GCCBuiltin<"__nvvm_sust_p_3d_v4i32_trap">;
1949
1950 def int_nvvm_rotate_b32
1951   : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
1952               [IntrNoMem], "llvm.nvvm.rotate.b32">,
1953               GCCBuiltin<"__nvvm_rotate_b32">;
1954
1955 def int_nvvm_rotate_b64
1956   :Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
1957              [IntrNoMem], "llvm.nvvm.rotate.b64">,
1958              GCCBuiltin<"__nvvm_rotate_b64">;
1959
1960 def int_nvvm_rotate_right_b64
1961   : Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i32_ty],
1962               [IntrNoMem], "llvm.nvvm.rotate.right.b64">,
1963               GCCBuiltin<"__nvvm_rotate_right_b64">;
1964
1965 def int_nvvm_swap_lo_hi_b64
1966   : Intrinsic<[llvm_i64_ty], [llvm_i64_ty],
1967               [IntrNoMem], "llvm.nvvm.swap.lo.hi.b64">,
1968               GCCBuiltin<"__nvvm_swap_lo_hi_b64">;
1969
1970
1971 // Old PTX back-end intrinsics retained here for backwards-compatibility
1972
1973 multiclass PTXReadSpecialRegisterIntrinsic_v4i32<string prefix> {
1974 // FIXME: Do we need the 128-bit integer type version?
1975 //    def _r64   : Intrinsic<[llvm_i128_ty],   [], [IntrNoMem]>;
1976
1977 // FIXME: Enable this once v4i32 support is enabled in back-end.
1978 //    def _v4i16 : Intrinsic<[llvm_v4i32_ty], [], [IntrNoMem]>;
1979
1980   def _x     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1981                GCCBuiltin<!strconcat(prefix, "_x")>;
1982   def _y     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1983                GCCBuiltin<!strconcat(prefix, "_y")>;
1984   def _z     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1985                GCCBuiltin<!strconcat(prefix, "_z")>;
1986   def _w     : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1987                GCCBuiltin<!strconcat(prefix, "_w")>;
1988 }
1989
1990 class PTXReadSpecialRegisterIntrinsic_r32<string name>
1991   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
1992     GCCBuiltin<name>;
1993
1994 class PTXReadSpecialRegisterIntrinsic_r64<string name>
1995   : Intrinsic<[llvm_i64_ty], [], [IntrNoMem]>,
1996     GCCBuiltin<name>;
1997
1998 defm int_ptx_read_tid        : PTXReadSpecialRegisterIntrinsic_v4i32
1999                                <"__builtin_ptx_read_tid">;
2000 defm int_ptx_read_ntid       : PTXReadSpecialRegisterIntrinsic_v4i32
2001                                <"__builtin_ptx_read_ntid">;
2002
2003 def int_ptx_read_laneid      : PTXReadSpecialRegisterIntrinsic_r32
2004                                <"__builtin_ptx_read_laneid">;
2005 def int_ptx_read_warpid      : PTXReadSpecialRegisterIntrinsic_r32
2006                                <"__builtin_ptx_read_warpid">;
2007 def int_ptx_read_nwarpid     : PTXReadSpecialRegisterIntrinsic_r32
2008                                <"__builtin_ptx_read_nwarpid">;
2009
2010 defm int_ptx_read_ctaid      : PTXReadSpecialRegisterIntrinsic_v4i32
2011                                <"__builtin_ptx_read_ctaid">;
2012 defm int_ptx_read_nctaid     : PTXReadSpecialRegisterIntrinsic_v4i32
2013                                <"__builtin_ptx_read_nctaid">;
2014
2015 def int_ptx_read_smid        : PTXReadSpecialRegisterIntrinsic_r32
2016                                <"__builtin_ptx_read_smid">;
2017 def int_ptx_read_nsmid       : PTXReadSpecialRegisterIntrinsic_r32
2018                                <"__builtin_ptx_read_nsmid">;
2019 def int_ptx_read_gridid      : PTXReadSpecialRegisterIntrinsic_r32
2020                                <"__builtin_ptx_read_gridid">;
2021
2022 def int_ptx_read_lanemask_eq : PTXReadSpecialRegisterIntrinsic_r32
2023                                <"__builtin_ptx_read_lanemask_eq">;
2024 def int_ptx_read_lanemask_le : PTXReadSpecialRegisterIntrinsic_r32
2025                                <"__builtin_ptx_read_lanemask_le">;
2026 def int_ptx_read_lanemask_lt : PTXReadSpecialRegisterIntrinsic_r32
2027                                <"__builtin_ptx_read_lanemask_lt">;
2028 def int_ptx_read_lanemask_ge : PTXReadSpecialRegisterIntrinsic_r32
2029                                <"__builtin_ptx_read_lanemask_ge">;
2030 def int_ptx_read_lanemask_gt : PTXReadSpecialRegisterIntrinsic_r32
2031                                <"__builtin_ptx_read_lanemask_gt">;
2032
2033 def int_ptx_read_clock       : PTXReadSpecialRegisterIntrinsic_r32
2034                                <"__builtin_ptx_read_clock">;
2035 def int_ptx_read_clock64     : PTXReadSpecialRegisterIntrinsic_r64
2036                                <"__builtin_ptx_read_clock64">;
2037
2038 def int_ptx_read_pm0         : PTXReadSpecialRegisterIntrinsic_r32
2039                                <"__builtin_ptx_read_pm0">;
2040 def int_ptx_read_pm1         : PTXReadSpecialRegisterIntrinsic_r32
2041                                <"__builtin_ptx_read_pm1">;
2042 def int_ptx_read_pm2         : PTXReadSpecialRegisterIntrinsic_r32
2043                                <"__builtin_ptx_read_pm2">;
2044 def int_ptx_read_pm3         : PTXReadSpecialRegisterIntrinsic_r32
2045                                <"__builtin_ptx_read_pm3">;
2046
2047 def int_ptx_bar_sync : Intrinsic<[], [llvm_i32_ty], []>,
2048                        GCCBuiltin<"__builtin_ptx_bar_sync">;