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