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