1 //===- IntrinsicsNVVM.td - Defines NVVM intrinsics ---------*- tablegen -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines all of the NVVM-specific intrinsics for use with NVPTX.
12 //===----------------------------------------------------------------------===//
14 def llvm_anyi64ptr_ty : LLVMAnyPointerType<llvm_i64_ty>; // (space)i64*
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
254 def int_nvvm_fabs_d : GCCBuiltin<"__nvvm_fabs_d">,
255 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
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]>;
266 def int_nvvm_round_d : GCCBuiltin<"__nvvm_round_d">,
267 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
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]>;
278 def int_nvvm_trunc_d : GCCBuiltin<"__nvvm_trunc_d">,
279 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
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]>;
290 def int_nvvm_saturate_d : GCCBuiltin<"__nvvm_saturate_d">,
291 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
401 def int_nvvm_rcp_approx_ftz_d : GCCBuiltin<"__nvvm_rcp_approx_ftz_d">,
402 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
408 def int_nvvm_sqrt_rn_ftz_f : GCCBuiltin<"__nvvm_sqrt_rn_ftz_f">,
409 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
410 def int_nvvm_sqrt_rn_f : GCCBuiltin<"__nvvm_sqrt_rn_f">,
411 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
412 def int_nvvm_sqrt_rz_ftz_f : GCCBuiltin<"__nvvm_sqrt_rz_ftz_f">,
413 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
414 def int_nvvm_sqrt_rz_f : GCCBuiltin<"__nvvm_sqrt_rz_f">,
415 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
416 def int_nvvm_sqrt_rm_ftz_f : GCCBuiltin<"__nvvm_sqrt_rm_ftz_f">,
417 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
418 def int_nvvm_sqrt_rm_f : GCCBuiltin<"__nvvm_sqrt_rm_f">,
419 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
420 def int_nvvm_sqrt_rp_ftz_f : GCCBuiltin<"__nvvm_sqrt_rp_ftz_f">,
421 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
422 def int_nvvm_sqrt_rp_f : GCCBuiltin<"__nvvm_sqrt_rp_f">,
423 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
424 def int_nvvm_sqrt_approx_ftz_f : GCCBuiltin<"__nvvm_sqrt_approx_ftz_f">,
425 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
426 def int_nvvm_sqrt_approx_f : GCCBuiltin<"__nvvm_sqrt_approx_f">,
427 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
429 def int_nvvm_sqrt_rn_d : GCCBuiltin<"__nvvm_sqrt_rn_d">,
430 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
431 def int_nvvm_sqrt_rz_d : GCCBuiltin<"__nvvm_sqrt_rz_d">,
432 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
433 def int_nvvm_sqrt_rm_d : GCCBuiltin<"__nvvm_sqrt_rm_d">,
434 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
435 def int_nvvm_sqrt_rp_d : GCCBuiltin<"__nvvm_sqrt_rp_d">,
436 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
442 def int_nvvm_rsqrt_approx_ftz_f : GCCBuiltin<"__nvvm_rsqrt_approx_ftz_f">,
443 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
444 def int_nvvm_rsqrt_approx_f : GCCBuiltin<"__nvvm_rsqrt_approx_f">,
445 Intrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>;
446 def int_nvvm_rsqrt_approx_d : GCCBuiltin<"__nvvm_rsqrt_approx_d">,
447 Intrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>;
453 def int_nvvm_add_rn_ftz_f : GCCBuiltin<"__nvvm_add_rn_ftz_f">,
454 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
455 [IntrNoMem, Commutative]>;
456 def int_nvvm_add_rn_f : GCCBuiltin<"__nvvm_add_rn_f">,
457 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
458 [IntrNoMem, Commutative]>;
459 def int_nvvm_add_rz_ftz_f : GCCBuiltin<"__nvvm_add_rz_ftz_f">,
460 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
461 [IntrNoMem, Commutative]>;
462 def int_nvvm_add_rz_f : GCCBuiltin<"__nvvm_add_rz_f">,
463 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
464 [IntrNoMem, Commutative]>;
465 def int_nvvm_add_rm_ftz_f : GCCBuiltin<"__nvvm_add_rm_ftz_f">,
466 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
467 [IntrNoMem, Commutative]>;
468 def int_nvvm_add_rm_f : GCCBuiltin<"__nvvm_add_rm_f">,
469 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
470 [IntrNoMem, Commutative]>;
471 def int_nvvm_add_rp_ftz_f : GCCBuiltin<"__nvvm_add_rp_ftz_f">,
472 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
473 [IntrNoMem, Commutative]>;
474 def int_nvvm_add_rp_f : GCCBuiltin<"__nvvm_add_rp_f">,
475 Intrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty],
476 [IntrNoMem, Commutative]>;
478 def int_nvvm_add_rn_d : GCCBuiltin<"__nvvm_add_rn_d">,
479 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
480 [IntrNoMem, Commutative]>;
481 def int_nvvm_add_rz_d : GCCBuiltin<"__nvvm_add_rz_d">,
482 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
483 [IntrNoMem, Commutative]>;
484 def int_nvvm_add_rm_d : GCCBuiltin<"__nvvm_add_rm_d">,
485 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
486 [IntrNoMem, Commutative]>;
487 def int_nvvm_add_rp_d : GCCBuiltin<"__nvvm_add_rp_d">,
488 Intrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty],
489 [IntrNoMem, Commutative]>;
495 def int_nvvm_d2f_rn_ftz : GCCBuiltin<"__nvvm_d2f_rn_ftz">,
496 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
497 def int_nvvm_d2f_rn : GCCBuiltin<"__nvvm_d2f_rn">,
498 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
499 def int_nvvm_d2f_rz_ftz : GCCBuiltin<"__nvvm_d2f_rz_ftz">,
500 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
501 def int_nvvm_d2f_rz : GCCBuiltin<"__nvvm_d2f_rz">,
502 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
503 def int_nvvm_d2f_rm_ftz : GCCBuiltin<"__nvvm_d2f_rm_ftz">,
504 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
505 def int_nvvm_d2f_rm : GCCBuiltin<"__nvvm_d2f_rm">,
506 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
507 def int_nvvm_d2f_rp_ftz : GCCBuiltin<"__nvvm_d2f_rp_ftz">,
508 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
509 def int_nvvm_d2f_rp : GCCBuiltin<"__nvvm_d2f_rp">,
510 Intrinsic<[llvm_float_ty], [llvm_double_ty], [IntrNoMem]>;
512 def int_nvvm_d2i_rn : GCCBuiltin<"__nvvm_d2i_rn">,
513 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
514 def int_nvvm_d2i_rz : GCCBuiltin<"__nvvm_d2i_rz">,
515 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
516 def int_nvvm_d2i_rm : GCCBuiltin<"__nvvm_d2i_rm">,
517 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
518 def int_nvvm_d2i_rp : GCCBuiltin<"__nvvm_d2i_rp">,
519 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
521 def int_nvvm_d2ui_rn : GCCBuiltin<"__nvvm_d2ui_rn">,
522 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
523 def int_nvvm_d2ui_rz : GCCBuiltin<"__nvvm_d2ui_rz">,
524 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
525 def int_nvvm_d2ui_rm : GCCBuiltin<"__nvvm_d2ui_rm">,
526 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
527 def int_nvvm_d2ui_rp : GCCBuiltin<"__nvvm_d2ui_rp">,
528 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
530 def int_nvvm_i2d_rn : GCCBuiltin<"__nvvm_i2d_rn">,
531 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
532 def int_nvvm_i2d_rz : GCCBuiltin<"__nvvm_i2d_rz">,
533 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
534 def int_nvvm_i2d_rm : GCCBuiltin<"__nvvm_i2d_rm">,
535 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
536 def int_nvvm_i2d_rp : GCCBuiltin<"__nvvm_i2d_rp">,
537 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
539 def int_nvvm_ui2d_rn : GCCBuiltin<"__nvvm_ui2d_rn">,
540 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
541 def int_nvvm_ui2d_rz : GCCBuiltin<"__nvvm_ui2d_rz">,
542 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
543 def int_nvvm_ui2d_rm : GCCBuiltin<"__nvvm_ui2d_rm">,
544 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
545 def int_nvvm_ui2d_rp : GCCBuiltin<"__nvvm_ui2d_rp">,
546 Intrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrNoMem]>;
548 def int_nvvm_f2i_rn_ftz : GCCBuiltin<"__nvvm_f2i_rn_ftz">,
549 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
550 def int_nvvm_f2i_rn : GCCBuiltin<"__nvvm_f2i_rn">,
551 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
552 def int_nvvm_f2i_rz_ftz : GCCBuiltin<"__nvvm_f2i_rz_ftz">,
553 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
554 def int_nvvm_f2i_rz : GCCBuiltin<"__nvvm_f2i_rz">,
555 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
556 def int_nvvm_f2i_rm_ftz : GCCBuiltin<"__nvvm_f2i_rm_ftz">,
557 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
558 def int_nvvm_f2i_rm : GCCBuiltin<"__nvvm_f2i_rm">,
559 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
560 def int_nvvm_f2i_rp_ftz : GCCBuiltin<"__nvvm_f2i_rp_ftz">,
561 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
562 def int_nvvm_f2i_rp : GCCBuiltin<"__nvvm_f2i_rp">,
563 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
565 def int_nvvm_f2ui_rn_ftz : GCCBuiltin<"__nvvm_f2ui_rn_ftz">,
566 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
567 def int_nvvm_f2ui_rn : GCCBuiltin<"__nvvm_f2ui_rn">,
568 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
569 def int_nvvm_f2ui_rz_ftz : GCCBuiltin<"__nvvm_f2ui_rz_ftz">,
570 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
571 def int_nvvm_f2ui_rz : GCCBuiltin<"__nvvm_f2ui_rz">,
572 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
573 def int_nvvm_f2ui_rm_ftz : GCCBuiltin<"__nvvm_f2ui_rm_ftz">,
574 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
575 def int_nvvm_f2ui_rm : GCCBuiltin<"__nvvm_f2ui_rm">,
576 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
577 def int_nvvm_f2ui_rp_ftz : GCCBuiltin<"__nvvm_f2ui_rp_ftz">,
578 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
579 def int_nvvm_f2ui_rp : GCCBuiltin<"__nvvm_f2ui_rp">,
580 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
582 def int_nvvm_i2f_rn : GCCBuiltin<"__nvvm_i2f_rn">,
583 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
584 def int_nvvm_i2f_rz : GCCBuiltin<"__nvvm_i2f_rz">,
585 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
586 def int_nvvm_i2f_rm : GCCBuiltin<"__nvvm_i2f_rm">,
587 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
588 def int_nvvm_i2f_rp : GCCBuiltin<"__nvvm_i2f_rp">,
589 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
591 def int_nvvm_ui2f_rn : GCCBuiltin<"__nvvm_ui2f_rn">,
592 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
593 def int_nvvm_ui2f_rz : GCCBuiltin<"__nvvm_ui2f_rz">,
594 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
595 def int_nvvm_ui2f_rm : GCCBuiltin<"__nvvm_ui2f_rm">,
596 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
597 def int_nvvm_ui2f_rp : GCCBuiltin<"__nvvm_ui2f_rp">,
598 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
600 def int_nvvm_lohi_i2d : GCCBuiltin<"__nvvm_lohi_i2d">,
601 Intrinsic<[llvm_double_ty], [llvm_i32_ty, llvm_i32_ty],
602 [IntrNoMem, Commutative]>;
604 def int_nvvm_d2i_lo : GCCBuiltin<"__nvvm_d2i_lo">,
605 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
606 def int_nvvm_d2i_hi : GCCBuiltin<"__nvvm_d2i_hi">,
607 Intrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>;
609 def int_nvvm_f2ll_rn_ftz : GCCBuiltin<"__nvvm_f2ll_rn_ftz">,
610 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
611 def int_nvvm_f2ll_rn : GCCBuiltin<"__nvvm_f2ll_rn">,
612 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
613 def int_nvvm_f2ll_rz_ftz : GCCBuiltin<"__nvvm_f2ll_rz_ftz">,
614 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
615 def int_nvvm_f2ll_rz : GCCBuiltin<"__nvvm_f2ll_rz">,
616 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
617 def int_nvvm_f2ll_rm_ftz : GCCBuiltin<"__nvvm_f2ll_rm_ftz">,
618 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
619 def int_nvvm_f2ll_rm : GCCBuiltin<"__nvvm_f2ll_rm">,
620 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
621 def int_nvvm_f2ll_rp_ftz : GCCBuiltin<"__nvvm_f2ll_rp_ftz">,
622 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
623 def int_nvvm_f2ll_rp : GCCBuiltin<"__nvvm_f2ll_rp">,
624 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
626 def int_nvvm_f2ull_rn_ftz : GCCBuiltin<"__nvvm_f2ull_rn_ftz">,
627 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
628 def int_nvvm_f2ull_rn : GCCBuiltin<"__nvvm_f2ull_rn">,
629 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
630 def int_nvvm_f2ull_rz_ftz : GCCBuiltin<"__nvvm_f2ull_rz_ftz">,
631 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
632 def int_nvvm_f2ull_rz : GCCBuiltin<"__nvvm_f2ull_rz">,
633 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
634 def int_nvvm_f2ull_rm_ftz : GCCBuiltin<"__nvvm_f2ull_rm_ftz">,
635 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
636 def int_nvvm_f2ull_rm : GCCBuiltin<"__nvvm_f2ull_rm">,
637 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
638 def int_nvvm_f2ull_rp_ftz : GCCBuiltin<"__nvvm_f2ull_rp_ftz">,
639 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
640 def int_nvvm_f2ull_rp : GCCBuiltin<"__nvvm_f2ull_rp">,
641 Intrinsic<[llvm_i64_ty], [llvm_float_ty], [IntrNoMem]>;
643 def int_nvvm_d2ll_rn : GCCBuiltin<"__nvvm_d2ll_rn">,
644 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
645 def int_nvvm_d2ll_rz : GCCBuiltin<"__nvvm_d2ll_rz">,
646 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
647 def int_nvvm_d2ll_rm : GCCBuiltin<"__nvvm_d2ll_rm">,
648 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
649 def int_nvvm_d2ll_rp : GCCBuiltin<"__nvvm_d2ll_rp">,
650 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
652 def int_nvvm_d2ull_rn : GCCBuiltin<"__nvvm_d2ull_rn">,
653 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
654 def int_nvvm_d2ull_rz : GCCBuiltin<"__nvvm_d2ull_rz">,
655 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
656 def int_nvvm_d2ull_rm : GCCBuiltin<"__nvvm_d2ull_rm">,
657 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
658 def int_nvvm_d2ull_rp : GCCBuiltin<"__nvvm_d2ull_rp">,
659 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
661 def int_nvvm_ll2f_rn : GCCBuiltin<"__nvvm_ll2f_rn">,
662 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
663 def int_nvvm_ll2f_rz : GCCBuiltin<"__nvvm_ll2f_rz">,
664 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
665 def int_nvvm_ll2f_rm : GCCBuiltin<"__nvvm_ll2f_rm">,
666 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
667 def int_nvvm_ll2f_rp : GCCBuiltin<"__nvvm_ll2f_rp">,
668 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
669 def int_nvvm_ull2f_rn : GCCBuiltin<"__nvvm_ull2f_rn">,
670 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
671 def int_nvvm_ull2f_rz : GCCBuiltin<"__nvvm_ull2f_rz">,
672 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
673 def int_nvvm_ull2f_rm : GCCBuiltin<"__nvvm_ull2f_rm">,
674 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
675 def int_nvvm_ull2f_rp : GCCBuiltin<"__nvvm_ull2f_rp">,
676 Intrinsic<[llvm_float_ty], [llvm_i64_ty], [IntrNoMem]>;
678 def int_nvvm_ll2d_rn : GCCBuiltin<"__nvvm_ll2d_rn">,
679 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
680 def int_nvvm_ll2d_rz : GCCBuiltin<"__nvvm_ll2d_rz">,
681 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
682 def int_nvvm_ll2d_rm : GCCBuiltin<"__nvvm_ll2d_rm">,
683 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
684 def int_nvvm_ll2d_rp : GCCBuiltin<"__nvvm_ll2d_rp">,
685 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
686 def int_nvvm_ull2d_rn : GCCBuiltin<"__nvvm_ull2d_rn">,
687 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
688 def int_nvvm_ull2d_rz : GCCBuiltin<"__nvvm_ull2d_rz">,
689 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
690 def int_nvvm_ull2d_rm : GCCBuiltin<"__nvvm_ull2d_rm">,
691 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
692 def int_nvvm_ull2d_rp : GCCBuiltin<"__nvvm_ull2d_rp">,
693 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
695 def int_nvvm_f2h_rn_ftz : GCCBuiltin<"__nvvm_f2h_rn_ftz">,
696 Intrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem]>;
697 def int_nvvm_f2h_rn : GCCBuiltin<"__nvvm_f2h_rn">,
698 Intrinsic<[llvm_i16_ty], [llvm_float_ty], [IntrNoMem]>;
700 def int_nvvm_h2f : GCCBuiltin<"__nvvm_h2f">,
701 Intrinsic<[llvm_float_ty], [llvm_i16_ty], [IntrNoMem]>;
707 def int_nvvm_bitcast_f2i : GCCBuiltin<"__nvvm_bitcast_f2i">,
708 Intrinsic<[llvm_i32_ty], [llvm_float_ty], [IntrNoMem]>;
709 def int_nvvm_bitcast_i2f : GCCBuiltin<"__nvvm_bitcast_i2f">,
710 Intrinsic<[llvm_float_ty], [llvm_i32_ty], [IntrNoMem]>;
712 def int_nvvm_bitcast_ll2d : GCCBuiltin<"__nvvm_bitcast_ll2d">,
713 Intrinsic<[llvm_double_ty], [llvm_i64_ty], [IntrNoMem]>;
714 def int_nvvm_bitcast_d2ll : GCCBuiltin<"__nvvm_bitcast_d2ll">,
715 Intrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>;
718 // Atomic not available as an llvm intrinsic.
719 def int_nvvm_atomic_load_add_f32 : Intrinsic<[llvm_float_ty],
720 [LLVMAnyPointerType<llvm_float_ty>, llvm_float_ty],
721 [IntrReadWriteArgMem, NoCapture<0>]>;
722 def int_nvvm_atomic_load_inc_32 : Intrinsic<[llvm_i32_ty],
723 [LLVMAnyPointerType<llvm_i32_ty>, llvm_i32_ty],
724 [IntrReadWriteArgMem, NoCapture<0>]>;
725 def int_nvvm_atomic_load_dec_32 : Intrinsic<[llvm_i32_ty],
726 [LLVMAnyPointerType<llvm_i32_ty>, llvm_i32_ty],
727 [IntrReadWriteArgMem, NoCapture<0>]>;
730 def int_cuda_syncthreads : GCCBuiltin<"__syncthreads">,
731 Intrinsic<[], [], []>;
732 def int_nvvm_barrier0 : GCCBuiltin<"__nvvm_bar0">,
733 Intrinsic<[], [], []>;
734 def int_nvvm_barrier0_popc : GCCBuiltin<"__nvvm_bar0_popc">,
735 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
736 def int_nvvm_barrier0_and : GCCBuiltin<"__nvvm_bar0_and">,
737 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
738 def int_nvvm_barrier0_or : GCCBuiltin<"__nvvm_bar0_or">,
739 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
742 def int_nvvm_membar_cta : GCCBuiltin<"__nvvm_membar_cta">,
743 Intrinsic<[], [], []>;
744 def int_nvvm_membar_gl : GCCBuiltin<"__nvvm_membar_gl">,
745 Intrinsic<[], [], []>;
746 def int_nvvm_membar_sys : GCCBuiltin<"__nvvm_membar_sys">,
747 Intrinsic<[], [], []>;
750 // Accessing special registers
751 def int_nvvm_read_ptx_sreg_tid_x :
752 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
753 GCCBuiltin<"__nvvm_read_ptx_sreg_tid_x">;
754 def int_nvvm_read_ptx_sreg_tid_y :
755 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
756 GCCBuiltin<"__nvvm_read_ptx_sreg_tid_y">;
757 def int_nvvm_read_ptx_sreg_tid_z :
758 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
759 GCCBuiltin<"__nvvm_read_ptx_sreg_tid_z">;
761 def int_nvvm_read_ptx_sreg_ntid_x :
762 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
763 GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_x">;
764 def int_nvvm_read_ptx_sreg_ntid_y :
765 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
766 GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_y">;
767 def int_nvvm_read_ptx_sreg_ntid_z :
768 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
769 GCCBuiltin<"__nvvm_read_ptx_sreg_ntid_z">;
771 def int_nvvm_read_ptx_sreg_ctaid_x :
772 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
773 GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_x">;
774 def int_nvvm_read_ptx_sreg_ctaid_y :
775 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
776 GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_y">;
777 def int_nvvm_read_ptx_sreg_ctaid_z :
778 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
779 GCCBuiltin<"__nvvm_read_ptx_sreg_ctaid_z">;
781 def int_nvvm_read_ptx_sreg_nctaid_x :
782 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
783 GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_x">;
784 def int_nvvm_read_ptx_sreg_nctaid_y :
785 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
786 GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_y">;
787 def int_nvvm_read_ptx_sreg_nctaid_z :
788 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
789 GCCBuiltin<"__nvvm_read_ptx_sreg_nctaid_z">;
791 def int_nvvm_read_ptx_sreg_warpsize :
792 Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
793 GCCBuiltin<"__nvvm_read_ptx_sreg_warpsize">;
796 // Generated within nvvm. Use for ldu on sm_20 or later
797 // @TODO: Revisit this, Changed LLVMAnyPointerType to LLVMPointerType
798 def int_nvvm_ldu_global_i : Intrinsic<[llvm_anyint_ty],
799 [LLVMPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
800 "llvm.nvvm.ldu.global.i">;
801 def int_nvvm_ldu_global_f : Intrinsic<[llvm_anyfloat_ty],
802 [LLVMPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
803 "llvm.nvvm.ldu.global.f">;
804 def int_nvvm_ldu_global_p : Intrinsic<[llvm_anyptr_ty],
805 [LLVMPointerType<LLVMMatchType<0>>], [IntrReadMem, NoCapture<0>],
806 "llvm.nvvm.ldu.global.p">;
809 // Use for generic pointers
810 // - These intrinsics are used to convert address spaces.
811 // - The input pointer and output pointer must have the same type, except for
812 // the address-space. (This restriction is not enforced here as there is
813 // currently no way to describe it).
814 // - This complements the llvm bitcast, which can be used to cast one type
815 // of pointer to another type of pointer, while the address space remains
817 def int_nvvm_ptr_local_to_gen: Intrinsic<[llvm_anyptr_ty],
818 [llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
819 "llvm.nvvm.ptr.local.to.gen">;
820 def int_nvvm_ptr_shared_to_gen: Intrinsic<[llvm_anyptr_ty],
821 [llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
822 "llvm.nvvm.ptr.shared.to.gen">;
823 def int_nvvm_ptr_global_to_gen: Intrinsic<[llvm_anyptr_ty],
824 [llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
825 "llvm.nvvm.ptr.global.to.gen">;
826 def int_nvvm_ptr_constant_to_gen: Intrinsic<[llvm_anyptr_ty],
827 [llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
828 "llvm.nvvm.ptr.constant.to.gen">;
830 def int_nvvm_ptr_gen_to_global: Intrinsic<[llvm_anyptr_ty],
831 [llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
832 "llvm.nvvm.ptr.gen.to.global">;
833 def int_nvvm_ptr_gen_to_shared: Intrinsic<[llvm_anyptr_ty],
834 [llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
835 "llvm.nvvm.ptr.gen.to.shared">;
836 def int_nvvm_ptr_gen_to_local: Intrinsic<[llvm_anyptr_ty],
837 [llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
838 "llvm.nvvm.ptr.gen.to.local">;
839 def int_nvvm_ptr_gen_to_constant: Intrinsic<[llvm_anyptr_ty],
840 [llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
841 "llvm.nvvm.ptr.gen.to.constant">;
843 // Used in nvvm internally to help address space opt and ptx code generation
844 // This is for params that are passed to kernel functions by pointer by-val.
845 def int_nvvm_ptr_gen_to_param: Intrinsic<[llvm_anyptr_ty],
847 [IntrNoMem, NoCapture<0>],
848 "llvm.nvvm.ptr.gen.to.param">;
850 // Move intrinsics, used in nvvm internally
852 def int_nvvm_move_i8 : Intrinsic<[llvm_i8_ty], [llvm_i8_ty], [IntrNoMem],
853 "llvm.nvvm.move.i8">;
854 def int_nvvm_move_i16 : Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem],
855 "llvm.nvvm.move.i16">;
856 def int_nvvm_move_i32 : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem],
857 "llvm.nvvm.move.i32">;
858 def int_nvvm_move_i64 : Intrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem],
859 "llvm.nvvm.move.i64">;
860 def int_nvvm_move_float : Intrinsic<[llvm_float_ty], [llvm_float_ty],
861 [IntrNoMem], "llvm.nvvm.move.float">;
862 def int_nvvm_move_double : Intrinsic<[llvm_double_ty], [llvm_double_ty],
863 [IntrNoMem], "llvm.nvvm.move.double">;
864 def int_nvvm_move_ptr : Intrinsic<[llvm_anyptr_ty], [llvm_anyptr_ty],
865 [IntrNoMem, NoCapture<0>], "llvm.nvvm.move.ptr">;
869 def int_nvvm_compiler_error :
870 Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.error">;
871 def int_nvvm_compiler_warn :
872 Intrinsic<[], [llvm_anyptr_ty], [], "llvm.nvvm.compiler.warn">;
875 // Old PTX back-end intrinsics retained here for backwards-compatibility
877 multiclass PTXReadSpecialRegisterIntrinsic_v4i32<string prefix> {
878 // FIXME: Do we need the 128-bit integer type version?
879 // def _r64 : Intrinsic<[llvm_i128_ty], [], [IntrNoMem]>;
881 // FIXME: Enable this once v4i32 support is enabled in back-end.
882 // def _v4i16 : Intrinsic<[llvm_v4i32_ty], [], [IntrNoMem]>;
884 def _x : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
885 GCCBuiltin<!strconcat(prefix, "_x")>;
886 def _y : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
887 GCCBuiltin<!strconcat(prefix, "_y")>;
888 def _z : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
889 GCCBuiltin<!strconcat(prefix, "_z")>;
890 def _w : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
891 GCCBuiltin<!strconcat(prefix, "_w")>;
894 class PTXReadSpecialRegisterIntrinsic_r32<string name>
895 : Intrinsic<[llvm_i32_ty], [], [IntrNoMem]>,
898 class PTXReadSpecialRegisterIntrinsic_r64<string name>
899 : Intrinsic<[llvm_i64_ty], [], [IntrNoMem]>,
902 defm int_ptx_read_tid : PTXReadSpecialRegisterIntrinsic_v4i32
903 <"__builtin_ptx_read_tid">;
904 defm int_ptx_read_ntid : PTXReadSpecialRegisterIntrinsic_v4i32
905 <"__builtin_ptx_read_ntid">;
907 def int_ptx_read_laneid : PTXReadSpecialRegisterIntrinsic_r32
908 <"__builtin_ptx_read_laneid">;
909 def int_ptx_read_warpid : PTXReadSpecialRegisterIntrinsic_r32
910 <"__builtin_ptx_read_warpid">;
911 def int_ptx_read_nwarpid : PTXReadSpecialRegisterIntrinsic_r32
912 <"__builtin_ptx_read_nwarpid">;
914 defm int_ptx_read_ctaid : PTXReadSpecialRegisterIntrinsic_v4i32
915 <"__builtin_ptx_read_ctaid">;
916 defm int_ptx_read_nctaid : PTXReadSpecialRegisterIntrinsic_v4i32
917 <"__builtin_ptx_read_nctaid">;
919 def int_ptx_read_smid : PTXReadSpecialRegisterIntrinsic_r32
920 <"__builtin_ptx_read_smid">;
921 def int_ptx_read_nsmid : PTXReadSpecialRegisterIntrinsic_r32
922 <"__builtin_ptx_read_nsmid">;
923 def int_ptx_read_gridid : PTXReadSpecialRegisterIntrinsic_r32
924 <"__builtin_ptx_read_gridid">;
926 def int_ptx_read_lanemask_eq : PTXReadSpecialRegisterIntrinsic_r32
927 <"__builtin_ptx_read_lanemask_eq">;
928 def int_ptx_read_lanemask_le : PTXReadSpecialRegisterIntrinsic_r32
929 <"__builtin_ptx_read_lanemask_le">;
930 def int_ptx_read_lanemask_lt : PTXReadSpecialRegisterIntrinsic_r32
931 <"__builtin_ptx_read_lanemask_lt">;
932 def int_ptx_read_lanemask_ge : PTXReadSpecialRegisterIntrinsic_r32
933 <"__builtin_ptx_read_lanemask_ge">;
934 def int_ptx_read_lanemask_gt : PTXReadSpecialRegisterIntrinsic_r32
935 <"__builtin_ptx_read_lanemask_gt">;
937 def int_ptx_read_clock : PTXReadSpecialRegisterIntrinsic_r32
938 <"__builtin_ptx_read_clock">;
939 def int_ptx_read_clock64 : PTXReadSpecialRegisterIntrinsic_r64
940 <"__builtin_ptx_read_clock64">;
942 def int_ptx_read_pm0 : PTXReadSpecialRegisterIntrinsic_r32
943 <"__builtin_ptx_read_pm0">;
944 def int_ptx_read_pm1 : PTXReadSpecialRegisterIntrinsic_r32
945 <"__builtin_ptx_read_pm1">;
946 def int_ptx_read_pm2 : PTXReadSpecialRegisterIntrinsic_r32
947 <"__builtin_ptx_read_pm2">;
948 def int_ptx_read_pm3 : PTXReadSpecialRegisterIntrinsic_r32
949 <"__builtin_ptx_read_pm3">;
951 def int_ptx_bar_sync : Intrinsic<[], [llvm_i32_ty], []>,
952 GCCBuiltin<"__builtin_ptx_bar_sync">;