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