1 //===- AMDILIntrinsics.td - Defines AMDIL Intrinscs -*- 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 amdil-specific intrinsics
12 //===---------------------------------------------------------------===//
14 let TargetPrefix = "AMDIL", isTarget = 1 in {
15 //------------- Synchronization Functions - OpenCL 6.11.9 --------------------//
16 def int_AMDIL_fence : GCCBuiltin<"mem_fence">,
18 def int_AMDIL_fence_global : GCCBuiltin<"mem_fence_global">,
20 def int_AMDIL_fence_local : GCCBuiltin<"mem_fence_local">,
22 def int_AMDIL_fence_region : GCCBuiltin<"mem_fence_region">,
24 def int_AMDIL_fence_read_only : GCCBuiltin<"read_mem_fence">,
26 def int_AMDIL_fence_read_only_global : GCCBuiltin<"read_mem_fence_global">,
28 def int_AMDIL_fence_read_only_local : GCCBuiltin<"read_mem_fence_local">,
30 def int_AMDIL_fence_read_only_region : GCCBuiltin<"read_mem_fence_region">,
32 def int_AMDIL_fence_write_only : GCCBuiltin<"write_mem_fence">,
34 def int_AMDIL_fence_write_only_global : GCCBuiltin<"write_mem_fence_global">,
36 def int_AMDIL_fence_write_only_local : GCCBuiltin<"write_mem_fence_local">,
38 def int_AMDIL_fence_write_only_region : GCCBuiltin<"write_mem_fence_region">,
41 def int_AMDIL_early_exit : GCCBuiltin<"__amdil_early_exit">,
44 def int_AMDIL_cmov_logical : GCCBuiltin<"__amdil_cmov_logical">,
46 def int_AMDIL_fabs : GCCBuiltin<"__amdil_fabs">, UnaryIntFloat;
47 def int_AMDIL_abs : GCCBuiltin<"__amdil_abs">, UnaryIntInt;
49 def int_AMDIL_bit_extract_i32 : GCCBuiltin<"__amdil_ibit_extract">,
51 def int_AMDIL_bit_extract_u32 : GCCBuiltin<"__amdil_ubit_extract">,
53 def int_AMDIL_bit_reverse_u32 : GCCBuiltin<"__amdil_ubit_reverse">,
55 def int_AMDIL_bit_count_i32 : GCCBuiltin<"__amdil_count_bits">,
57 def int_AMDIL_bit_find_first_lo : GCCBuiltin<"__amdil_ffb_lo">,
59 def int_AMDIL_bit_find_first_hi : GCCBuiltin<"__amdil_ffb_hi">,
61 def int_AMDIL_bit_find_first_sgn : GCCBuiltin<"__amdil_ffb_signed">,
63 def int_AMDIL_media_bitalign : GCCBuiltin<"__amdil_bitalign">,
65 def int_AMDIL_media_bytealign : GCCBuiltin<"__amdil_bytealign">,
67 def int_AMDIL_bit_insert_u32 : GCCBuiltin<"__amdil_ubit_insert">,
69 def int_AMDIL_bfi : GCCBuiltin<"__amdil_bfi">,
71 def int_AMDIL_bfm : GCCBuiltin<"__amdil_bfm">,
73 def int_AMDIL_mad_i32 : GCCBuiltin<"__amdil_imad">,
75 def int_AMDIL_mad_u32 : GCCBuiltin<"__amdil_umad">,
77 def int_AMDIL_mad : GCCBuiltin<"__amdil_mad">,
79 def int_AMDIL_mulhi_i32 : GCCBuiltin<"__amdil_imul_high">,
81 def int_AMDIL_mulhi_u32 : GCCBuiltin<"__amdil_umul_high">,
83 def int_AMDIL_mul24_i32 : GCCBuiltin<"__amdil_imul24">,
85 def int_AMDIL_mul24_u32 : GCCBuiltin<"__amdil_umul24">,
87 def int_AMDIL_mulhi24_i32 : GCCBuiltin<"__amdil_imul24_high">,
89 def int_AMDIL_mulhi24_u32 : GCCBuiltin<"__amdil_umul24_high">,
91 def int_AMDIL_mad24_i32 : GCCBuiltin<"__amdil_imad24">,
93 def int_AMDIL_mad24_u32 : GCCBuiltin<"__amdil_umad24">,
95 def int_AMDIL_carry_i32 : GCCBuiltin<"__amdil_carry">,
97 def int_AMDIL_borrow_i32 : GCCBuiltin<"__amdil_borrow">,
99 def int_AMDIL_min_i32 : GCCBuiltin<"__amdil_imin">,
101 def int_AMDIL_min_u32 : GCCBuiltin<"__amdil_umin">,
103 def int_AMDIL_min : GCCBuiltin<"__amdil_min">,
105 def int_AMDIL_max_i32 : GCCBuiltin<"__amdil_imax">,
107 def int_AMDIL_max_u32 : GCCBuiltin<"__amdil_umax">,
109 def int_AMDIL_max : GCCBuiltin<"__amdil_max">,
111 def int_AMDIL_media_lerp_u4 : GCCBuiltin<"__amdil_u4lerp">,
113 def int_AMDIL_media_sad : GCCBuiltin<"__amdil_sad">,
115 def int_AMDIL_media_sad_hi : GCCBuiltin<"__amdil_sadhi">,
117 def int_AMDIL_fraction : GCCBuiltin<"__amdil_fraction">,
119 def int_AMDIL_clamp : GCCBuiltin<"__amdil_clamp">,
121 def int_AMDIL_pireduce : GCCBuiltin<"__amdil_pireduce">,
123 def int_AMDIL_round_nearest : GCCBuiltin<"__amdil_round_nearest">,
125 def int_AMDIL_round_neginf : GCCBuiltin<"__amdil_round_neginf">,
127 def int_AMDIL_round_posinf : GCCBuiltin<"__amdil_round_posinf">,
129 def int_AMDIL_round_zero : GCCBuiltin<"__amdil_round_zero">,
131 def int_AMDIL_acos : GCCBuiltin<"__amdil_acos">,
133 def int_AMDIL_atan : GCCBuiltin<"__amdil_atan">,
135 def int_AMDIL_asin : GCCBuiltin<"__amdil_asin">,
137 def int_AMDIL_cos : GCCBuiltin<"__amdil_cos">,
139 def int_AMDIL_cos_vec : GCCBuiltin<"__amdil_cos_vec">,
141 def int_AMDIL_tan : GCCBuiltin<"__amdil_tan">,
143 def int_AMDIL_sin : GCCBuiltin<"__amdil_sin">,
145 def int_AMDIL_sin_vec : GCCBuiltin<"__amdil_sin_vec">,
147 def int_AMDIL_pow : GCCBuiltin<"__amdil_pow">, BinaryIntFloat;
148 def int_AMDIL_div : GCCBuiltin<"__amdil_div">, BinaryIntFloat;
149 def int_AMDIL_udiv : GCCBuiltin<"__amdil_udiv">, BinaryIntInt;
150 def int_AMDIL_sqrt: GCCBuiltin<"__amdil_sqrt">,
152 def int_AMDIL_sqrt_vec: GCCBuiltin<"__amdil_sqrt_vec">,
154 def int_AMDIL_exp : GCCBuiltin<"__amdil_exp">,
156 def int_AMDIL_exp_vec : GCCBuiltin<"__amdil_exp_vec">,
158 def int_AMDIL_exn : GCCBuiltin<"__amdil_exn">,
160 def int_AMDIL_log : GCCBuiltin<"__amdil_log">,
162 def int_AMDIL_log_vec : GCCBuiltin<"__amdil_log_vec">,
164 def int_AMDIL_ln : GCCBuiltin<"__amdil_ln">,
166 def int_AMDIL_sign: GCCBuiltin<"__amdil_sign">,
168 def int_AMDIL_fma: GCCBuiltin<"__amdil_fma">,
170 def int_AMDIL_rsq : GCCBuiltin<"__amdil_rsq">,
172 def int_AMDIL_rsq_vec : GCCBuiltin<"__amdil_rsq_vec">,
174 def int_AMDIL_length : GCCBuiltin<"__amdil_length">,
176 def int_AMDIL_lerp : GCCBuiltin<"__amdil_lerp">,
178 def int_AMDIL_media_sad4 : GCCBuiltin<"__amdil_sad4">,
179 Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty,
180 llvm_v4i32_ty, llvm_i32_ty], []>;
182 def int_AMDIL_frexp_f64 : GCCBuiltin<"__amdil_frexp">,
183 Intrinsic<[llvm_v2i64_ty], [llvm_double_ty], []>;
184 def int_AMDIL_ldexp : GCCBuiltin<"__amdil_ldexp">,
185 Intrinsic<[llvm_anyfloat_ty], [llvm_anyfloat_ty, llvm_anyint_ty], []>;
186 def int_AMDIL_drcp : GCCBuiltin<"__amdil_rcp">,
187 Intrinsic<[llvm_double_ty], [llvm_double_ty], []>;
188 def int_AMDIL_convert_f16_f32 : GCCBuiltin<"__amdil_half_to_float">,
190 def int_AMDIL_convert_f32_f16 : GCCBuiltin<"__amdil_float_to_half">,
192 def int_AMDIL_convert_f32_i32_rpi : GCCBuiltin<"__amdil_float_to_int_rpi">,
194 def int_AMDIL_convert_f32_i32_flr : GCCBuiltin<"__amdil_float_to_int_flr">,
196 def int_AMDIL_convert_f32_f16_near : GCCBuiltin<"__amdil_float_to_half_near">,
198 def int_AMDIL_convert_f32_f16_neg_inf : GCCBuiltin<"__amdil_float_to_half_neg_inf">,
200 def int_AMDIL_convert_f32_f16_plus_inf : GCCBuiltin<"__amdil_float_to_half_plus_inf">,
202 def int_AMDIL_media_convert_f2v4u8 : GCCBuiltin<"__amdil_f_2_u4">,
203 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], []>;
204 def int_AMDIL_media_unpack_byte_0 : GCCBuiltin<"__amdil_unpack_0">,
206 def int_AMDIL_media_unpack_byte_1 : GCCBuiltin<"__amdil_unpack_1">,
208 def int_AMDIL_media_unpack_byte_2 : GCCBuiltin<"__amdil_unpack_2">,
210 def int_AMDIL_media_unpack_byte_3 : GCCBuiltin<"__amdil_unpack_3">,
212 def int_AMDIL_dp2_add : GCCBuiltin<"__amdil_dp2_add">,
213 Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
214 llvm_v2f32_ty, llvm_float_ty], []>;
215 def int_AMDIL_dp2 : GCCBuiltin<"__amdil_dp2">,
216 Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
218 def int_AMDIL_dp3 : GCCBuiltin<"__amdil_dp3">,
219 Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
221 def int_AMDIL_dp4 : GCCBuiltin<"__amdil_dp4">,
222 Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
224 //===---------------------- Image functions begin ------------------------===//
225 def int_AMDIL_image1d_write : GCCBuiltin<"__amdil_image1d_write">,
226 Intrinsic<[], [llvm_ptr_ty, llvm_v2i32_ty, llvm_v4i32_ty], [IntrReadWriteArgMem]>;
228 def int_AMDIL_image1d_read_norm : GCCBuiltin<"__amdil_image1d_read_norm">,
229 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
231 def int_AMDIL_image1d_read_unnorm : GCCBuiltin<"__amdil_image1d_read_unnorm">,
232 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
234 def int_AMDIL_image1d_info0 : GCCBuiltin<"__amdil_image1d_info0">,
235 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
237 def int_AMDIL_image1d_info1 : GCCBuiltin<"__amdil_image1d_info1">,
238 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
240 def int_AMDIL_image1d_array_write : GCCBuiltin<"__amdil_image1d_array_write">,
241 Intrinsic<[], [llvm_ptr_ty, llvm_v2i32_ty, llvm_v4i32_ty], [IntrReadWriteArgMem]>;
243 def int_AMDIL_image1d_array_read_norm : GCCBuiltin<"__amdil_image1d_array_read_norm">,
244 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
246 def int_AMDIL_image1d_array_read_unnorm : GCCBuiltin<"__amdil_image1d_array_read_unnorm">,
247 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
249 def int_AMDIL_image1d_array_info0 : GCCBuiltin<"__amdil_image1d_array_info0">,
250 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
252 def int_AMDIL_image1d_array_info1 : GCCBuiltin<"__amdil_image1d_array_info1">,
253 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
255 def int_AMDIL_image2d_write : GCCBuiltin<"__amdil_image2d_write">,
256 Intrinsic<[], [llvm_ptr_ty, llvm_v2i32_ty, llvm_v4i32_ty], [IntrReadWriteArgMem]>;
258 def int_AMDIL_image2d_read_norm : GCCBuiltin<"__amdil_image2d_read_norm">,
259 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
261 def int_AMDIL_image2d_read_unnorm : GCCBuiltin<"__amdil_image2d_read_unnorm">,
262 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
264 def int_AMDIL_image2d_info0 : GCCBuiltin<"__amdil_image2d_info0">,
265 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
267 def int_AMDIL_image2d_info1 : GCCBuiltin<"__amdil_image2d_info1">,
268 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
270 def int_AMDIL_image2d_array_write : GCCBuiltin<"__amdil_image2d_array_write">,
271 Intrinsic<[], [llvm_ptr_ty, llvm_v2i32_ty, llvm_v4i32_ty], [IntrReadWriteArgMem]>;
273 def int_AMDIL_image2d_array_read_norm : GCCBuiltin<"__amdil_image2d_array_read_norm">,
274 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
276 def int_AMDIL_image2d_array_read_unnorm : GCCBuiltin<"__amdil_image2d_array_read_unnorm">,
277 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
279 def int_AMDIL_image2d_array_info0 : GCCBuiltin<"__amdil_image2d_array_info0">,
280 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
282 def int_AMDIL_image2d_array_info1 : GCCBuiltin<"__amdil_image2d_array_info1">,
283 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
285 def int_AMDIL_image3d_write : GCCBuiltin<"__amdil_image3d_write">,
286 Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty], [IntrReadWriteArgMem]>;
288 def int_AMDIL_image3d_read_norm : GCCBuiltin<"__amdil_image3d_read_norm">,
289 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
291 def int_AMDIL_image3d_read_unnorm : GCCBuiltin<"__amdil_image3d_read_unnorm">,
292 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
294 def int_AMDIL_image3d_info0 : GCCBuiltin<"__amdil_image3d_info0">,
295 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
297 def int_AMDIL_image3d_info1 : GCCBuiltin<"__amdil_image3d_info1">,
298 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], []>;
300 //===---------------------- Image functions end --------------------------===//
302 def int_AMDIL_append_alloc_i32 : GCCBuiltin<"__amdil_append_alloc">,
303 Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrReadWriteArgMem]>;
304 def int_AMDIL_append_consume_i32 : GCCBuiltin<"__amdil_append_consume">,
305 Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrReadWriteArgMem]>;
306 def int_AMDIL_append_alloc_i32_noret : GCCBuiltin<"__amdil_append_alloc_noret">,
307 Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrReadWriteArgMem]>;
308 def int_AMDIL_append_consume_i32_noret : GCCBuiltin<"__amdil_append_consume_noret">,
309 Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], [IntrReadWriteArgMem]>;
311 def int_AMDIL_get_global_id : GCCBuiltin<"__amdil_get_global_id_int">,
312 Intrinsic<[llvm_v4i32_ty], [], []>;
313 def int_AMDIL_get_local_id : GCCBuiltin<"__amdil_get_local_id_int">,
314 Intrinsic<[llvm_v4i32_ty], [], []>;
315 def int_AMDIL_get_group_id : GCCBuiltin<"__amdil_get_group_id_int">,
316 Intrinsic<[llvm_v4i32_ty], [], []>;
317 def int_AMDIL_get_num_groups : GCCBuiltin<"__amdil_get_num_groups_int">,
318 Intrinsic<[llvm_v4i32_ty], [], []>;
319 def int_AMDIL_get_local_size : GCCBuiltin<"__amdil_get_local_size_int">,
320 Intrinsic<[llvm_v4i32_ty], [], []>;
321 def int_AMDIL_get_global_size : GCCBuiltin<"__amdil_get_global_size_int">,
322 Intrinsic<[llvm_v4i32_ty], [], []>;
323 def int_AMDIL_get_global_offset : GCCBuiltin<"__amdil_get_global_offset_int">,
324 Intrinsic<[llvm_v4i32_ty], [], []>;
325 def int_AMDIL_get_work_dim : GCCBuiltin<"get_work_dim">,
326 Intrinsic<[llvm_i32_ty], [], []>;
327 def int_AMDIL_get_printf_offset : GCCBuiltin<"__amdil_get_printf_offset">,
328 Intrinsic<[llvm_i32_ty], []>;
329 def int_AMDIL_get_printf_size : GCCBuiltin<"__amdil_get_printf_size">,
330 Intrinsic<[llvm_i32_ty], []>;
332 /// Intrinsics for atomic instructions with no return value
333 /// Signed 32 bit integer atomics for global address space
334 def int_AMDIL_atomic_add_gi32_noret : GCCBuiltin<"__atomic_add_gi32_noret">,
335 BinaryAtomicIntNoRet;
336 def int_AMDIL_atomic_sub_gi32_noret : GCCBuiltin<"__atomic_sub_gi32_noret">,
337 BinaryAtomicIntNoRet;
338 def int_AMDIL_atomic_rsub_gi32_noret : GCCBuiltin<"__atomic_rsub_gi32_noret">,
339 BinaryAtomicIntNoRet;
340 def int_AMDIL_atomic_xchg_gi32_noret : GCCBuiltin<"__atomic_xchg_gi32_noret">,
341 BinaryAtomicIntNoRet;
342 def int_AMDIL_atomic_inc_gi32_noret : GCCBuiltin<"__atomic_inc_gi32_noret">,
343 BinaryAtomicIntNoRet;
344 def int_AMDIL_atomic_dec_gi32_noret : GCCBuiltin<"__atomic_dec_gi32_noret">,
345 BinaryAtomicIntNoRet;
346 def int_AMDIL_atomic_cmpxchg_gi32_noret : GCCBuiltin<"__atomic_cmpxchg_gi32_noret">,
347 TernaryAtomicIntNoRet;
348 def int_AMDIL_atomic_min_gi32_noret : GCCBuiltin<"__atomic_min_gi32_noret">,
349 BinaryAtomicIntNoRet;
350 def int_AMDIL_atomic_max_gi32_noret : GCCBuiltin<"__atomic_max_gi32_noret">,
351 BinaryAtomicIntNoRet;
352 def int_AMDIL_atomic_and_gi32_noret : GCCBuiltin<"__atomic_and_gi32_noret">,
353 BinaryAtomicIntNoRet;
354 def int_AMDIL_atomic_or_gi32_noret : GCCBuiltin<"__atomic_or_gi32_noret">,
355 BinaryAtomicIntNoRet;
356 def int_AMDIL_atomic_xor_gi32_noret : GCCBuiltin<"__atomic_xor_gi32_noret">,
357 BinaryAtomicIntNoRet;
361 /// Unsigned 32 bit integer atomics for global address space
362 def int_AMDIL_atomic_add_gu32_noret : GCCBuiltin<"__atomic_add_gu32_noret">,
363 BinaryAtomicIntNoRet;
364 def int_AMDIL_atomic_sub_gu32_noret : GCCBuiltin<"__atomic_sub_gu32_noret">,
365 BinaryAtomicIntNoRet;
366 def int_AMDIL_atomic_rsub_gu32_noret : GCCBuiltin<"__atomic_rsub_gu32_noret">,
367 BinaryAtomicIntNoRet;
368 def int_AMDIL_atomic_xchg_gu32_noret : GCCBuiltin<"__atomic_xchg_gu32_noret">,
369 BinaryAtomicIntNoRet;
370 def int_AMDIL_atomic_inc_gu32_noret : GCCBuiltin<"__atomic_inc_gu32_noret">,
371 BinaryAtomicIntNoRet;
372 def int_AMDIL_atomic_dec_gu32_noret : GCCBuiltin<"__atomic_dec_gu32_noret">,
373 BinaryAtomicIntNoRet;
374 def int_AMDIL_atomic_cmpxchg_gu32_noret : GCCBuiltin<"__atomic_cmpxchg_gu32_noret">,
375 TernaryAtomicIntNoRet;
376 def int_AMDIL_atomic_min_gu32_noret : GCCBuiltin<"__atomic_min_gu32_noret">,
377 BinaryAtomicIntNoRet;
378 def int_AMDIL_atomic_max_gu32_noret : GCCBuiltin<"__atomic_max_gu32_noret">,
379 BinaryAtomicIntNoRet;
380 def int_AMDIL_atomic_and_gu32_noret : GCCBuiltin<"__atomic_and_gu32_noret">,
381 BinaryAtomicIntNoRet;
382 def int_AMDIL_atomic_or_gu32_noret : GCCBuiltin<"__atomic_or_gu32_noret">,
383 BinaryAtomicIntNoRet;
384 def int_AMDIL_atomic_xor_gu32_noret : GCCBuiltin<"__atomic_xor_gu32_noret">,
385 BinaryAtomicIntNoRet;
388 /// Intrinsics for atomic instructions with a return value
389 /// Signed 32 bit integer atomics for global address space
390 def int_AMDIL_atomic_add_gi32 : GCCBuiltin<"__atomic_add_gi32">,
392 def int_AMDIL_atomic_sub_gi32 : GCCBuiltin<"__atomic_sub_gi32">,
394 def int_AMDIL_atomic_rsub_gi32 : GCCBuiltin<"__atomic_rsub_gi32">,
396 def int_AMDIL_atomic_xchg_gi32 : GCCBuiltin<"__atomic_xchg_gi32">,
398 def int_AMDIL_atomic_inc_gi32 : GCCBuiltin<"__atomic_inc_gi32">,
400 def int_AMDIL_atomic_dec_gi32 : GCCBuiltin<"__atomic_dec_gi32">,
402 def int_AMDIL_atomic_cmpxchg_gi32 : GCCBuiltin<"__atomic_cmpxchg_gi32">,
404 def int_AMDIL_atomic_min_gi32 : GCCBuiltin<"__atomic_min_gi32">,
406 def int_AMDIL_atomic_max_gi32 : GCCBuiltin<"__atomic_max_gi32">,
408 def int_AMDIL_atomic_and_gi32 : GCCBuiltin<"__atomic_and_gi32">,
410 def int_AMDIL_atomic_or_gi32 : GCCBuiltin<"__atomic_or_gi32">,
412 def int_AMDIL_atomic_xor_gi32 : GCCBuiltin<"__atomic_xor_gi32">,
415 /// 32 bit float atomics required by OpenCL
416 def int_AMDIL_atomic_xchg_gf32 : GCCBuiltin<"__atomic_xchg_gf32">,
418 def int_AMDIL_atomic_xchg_gf32_noret : GCCBuiltin<"__atomic_xchg_gf32_noret">,
419 BinaryAtomicIntNoRet;
421 /// Unsigned 32 bit integer atomics for global address space
422 def int_AMDIL_atomic_add_gu32 : GCCBuiltin<"__atomic_add_gu32">,
424 def int_AMDIL_atomic_sub_gu32 : GCCBuiltin<"__atomic_sub_gu32">,
426 def int_AMDIL_atomic_rsub_gu32 : GCCBuiltin<"__atomic_rsub_gu32">,
428 def int_AMDIL_atomic_xchg_gu32 : GCCBuiltin<"__atomic_xchg_gu32">,
430 def int_AMDIL_atomic_inc_gu32 : GCCBuiltin<"__atomic_inc_gu32">,
432 def int_AMDIL_atomic_dec_gu32 : GCCBuiltin<"__atomic_dec_gu32">,
434 def int_AMDIL_atomic_cmpxchg_gu32 : GCCBuiltin<"__atomic_cmpxchg_gu32">,
436 def int_AMDIL_atomic_min_gu32 : GCCBuiltin<"__atomic_min_gu32">,
438 def int_AMDIL_atomic_max_gu32 : GCCBuiltin<"__atomic_max_gu32">,
440 def int_AMDIL_atomic_and_gu32 : GCCBuiltin<"__atomic_and_gu32">,
442 def int_AMDIL_atomic_or_gu32 : GCCBuiltin<"__atomic_or_gu32">,
444 def int_AMDIL_atomic_xor_gu32 : GCCBuiltin<"__atomic_xor_gu32">,
448 /// Intrinsics for atomic instructions with no return value
449 /// Signed 32 bit integer atomics for local address space
450 def int_AMDIL_atomic_add_li32_noret : GCCBuiltin<"__atomic_add_li32_noret">,
451 BinaryAtomicIntNoRet;
452 def int_AMDIL_atomic_sub_li32_noret : GCCBuiltin<"__atomic_sub_li32_noret">,
453 BinaryAtomicIntNoRet;
454 def int_AMDIL_atomic_rsub_li32_noret : GCCBuiltin<"__atomic_rsub_li32_noret">,
455 BinaryAtomicIntNoRet;
456 def int_AMDIL_atomic_xchg_li32_noret : GCCBuiltin<"__atomic_xchg_li32_noret">,
457 BinaryAtomicIntNoRet;
458 def int_AMDIL_atomic_inc_li32_noret : GCCBuiltin<"__atomic_inc_li32_noret">,
459 BinaryAtomicIntNoRet;
460 def int_AMDIL_atomic_dec_li32_noret : GCCBuiltin<"__atomic_dec_li32_noret">,
461 BinaryAtomicIntNoRet;
462 def int_AMDIL_atomic_cmpxchg_li32_noret : GCCBuiltin<"__atomic_cmpxchg_li32_noret">,
463 TernaryAtomicIntNoRet;
464 def int_AMDIL_atomic_min_li32_noret : GCCBuiltin<"__atomic_min_li32_noret">,
465 BinaryAtomicIntNoRet;
466 def int_AMDIL_atomic_max_li32_noret : GCCBuiltin<"__atomic_max_li32_noret">,
467 BinaryAtomicIntNoRet;
468 def int_AMDIL_atomic_and_li32_noret : GCCBuiltin<"__atomic_and_li32_noret">,
469 BinaryAtomicIntNoRet;
470 def int_AMDIL_atomic_or_li32_noret : GCCBuiltin<"__atomic_or_li32_noret">,
471 BinaryAtomicIntNoRet;
472 def int_AMDIL_atomic_mskor_li32_noret : GCCBuiltin<"__atomic_mskor_li32_noret">,
473 TernaryAtomicIntNoRet;
474 def int_AMDIL_atomic_xor_li32_noret : GCCBuiltin<"__atomic_xor_li32_noret">,
475 BinaryAtomicIntNoRet;
477 /// Signed 32 bit integer atomics for region address space
478 def int_AMDIL_atomic_add_ri32_noret : GCCBuiltin<"__atomic_add_ri32_noret">,
479 BinaryAtomicIntNoRet;
480 def int_AMDIL_atomic_sub_ri32_noret : GCCBuiltin<"__atomic_sub_ri32_noret">,
481 BinaryAtomicIntNoRet;
482 def int_AMDIL_atomic_rsub_ri32_noret : GCCBuiltin<"__atomic_rsub_ri32_noret">,
483 BinaryAtomicIntNoRet;
484 def int_AMDIL_atomic_xchg_ri32_noret : GCCBuiltin<"__atomic_xchg_ri32_noret">,
485 BinaryAtomicIntNoRet;
486 def int_AMDIL_atomic_inc_ri32_noret : GCCBuiltin<"__atomic_inc_ri32_noret">,
487 BinaryAtomicIntNoRet;
488 def int_AMDIL_atomic_dec_ri32_noret : GCCBuiltin<"__atomic_dec_ri32_noret">,
489 BinaryAtomicIntNoRet;
490 def int_AMDIL_atomic_cmpxchg_ri32_noret : GCCBuiltin<"__atomic_cmpxchg_ri32_noret">,
491 TernaryAtomicIntNoRet;
492 def int_AMDIL_atomic_min_ri32_noret : GCCBuiltin<"__atomic_min_ri32_noret">,
493 BinaryAtomicIntNoRet;
494 def int_AMDIL_atomic_max_ri32_noret : GCCBuiltin<"__atomic_max_ri32_noret">,
495 BinaryAtomicIntNoRet;
496 def int_AMDIL_atomic_and_ri32_noret : GCCBuiltin<"__atomic_and_ri32_noret">,
497 BinaryAtomicIntNoRet;
498 def int_AMDIL_atomic_or_ri32_noret : GCCBuiltin<"__atomic_or_ri32_noret">,
499 BinaryAtomicIntNoRet;
500 def int_AMDIL_atomic_mskor_ri32_noret : GCCBuiltin<"__atomic_mskor_ri32_noret">,
501 TernaryAtomicIntNoRet;
502 def int_AMDIL_atomic_xor_ri32_noret : GCCBuiltin<"__atomic_xor_ri32_noret">,
503 BinaryAtomicIntNoRet;
507 /// Unsigned 32 bit integer atomics for local address space
508 def int_AMDIL_atomic_add_lu32_noret : GCCBuiltin<"__atomic_add_lu32_noret">,
509 BinaryAtomicIntNoRet;
510 def int_AMDIL_atomic_sub_lu32_noret : GCCBuiltin<"__atomic_sub_lu32_noret">,
511 BinaryAtomicIntNoRet;
512 def int_AMDIL_atomic_rsub_lu32_noret : GCCBuiltin<"__atomic_rsub_lu32_noret">,
513 BinaryAtomicIntNoRet;
514 def int_AMDIL_atomic_xchg_lu32_noret : GCCBuiltin<"__atomic_xchg_lu32_noret">,
515 BinaryAtomicIntNoRet;
516 def int_AMDIL_atomic_inc_lu32_noret : GCCBuiltin<"__atomic_inc_lu32_noret">,
517 BinaryAtomicIntNoRet;
518 def int_AMDIL_atomic_dec_lu32_noret : GCCBuiltin<"__atomic_dec_lu32_noret">,
519 BinaryAtomicIntNoRet;
520 def int_AMDIL_atomic_cmpxchg_lu32_noret : GCCBuiltin<"__atomic_cmpxchg_lu32_noret">,
521 TernaryAtomicIntNoRet;
522 def int_AMDIL_atomic_min_lu32_noret : GCCBuiltin<"__atomic_min_lu32_noret">,
523 BinaryAtomicIntNoRet;
524 def int_AMDIL_atomic_max_lu32_noret : GCCBuiltin<"__atomic_max_lu32_noret">,
525 BinaryAtomicIntNoRet;
526 def int_AMDIL_atomic_and_lu32_noret : GCCBuiltin<"__atomic_and_lu32_noret">,
527 BinaryAtomicIntNoRet;
528 def int_AMDIL_atomic_or_lu32_noret : GCCBuiltin<"__atomic_or_lu32_noret">,
529 BinaryAtomicIntNoRet;
530 def int_AMDIL_atomic_mskor_lu32_noret : GCCBuiltin<"__atomic_mskor_lu32_noret">,
531 TernaryAtomicIntNoRet;
532 def int_AMDIL_atomic_xor_lu32_noret : GCCBuiltin<"__atomic_xor_lu32_noret">,
533 BinaryAtomicIntNoRet;
535 /// Unsigned 32 bit integer atomics for region address space
536 def int_AMDIL_atomic_add_ru32_noret : GCCBuiltin<"__atomic_add_ru32_noret">,
537 BinaryAtomicIntNoRet;
538 def int_AMDIL_atomic_sub_ru32_noret : GCCBuiltin<"__atomic_sub_ru32_noret">,
539 BinaryAtomicIntNoRet;
540 def int_AMDIL_atomic_rsub_ru32_noret : GCCBuiltin<"__atomic_rsub_ru32_noret">,
541 BinaryAtomicIntNoRet;
542 def int_AMDIL_atomic_xchg_ru32_noret : GCCBuiltin<"__atomic_xchg_ru32_noret">,
543 BinaryAtomicIntNoRet;
544 def int_AMDIL_atomic_inc_ru32_noret : GCCBuiltin<"__atomic_inc_ru32_noret">,
545 BinaryAtomicIntNoRet;
546 def int_AMDIL_atomic_dec_ru32_noret : GCCBuiltin<"__atomic_dec_ru32_noret">,
547 BinaryAtomicIntNoRet;
548 def int_AMDIL_atomic_cmpxchg_ru32_noret : GCCBuiltin<"__atomic_cmpxchg_ru32_noret">,
549 TernaryAtomicIntNoRet;
550 def int_AMDIL_atomic_min_ru32_noret : GCCBuiltin<"__atomic_min_ru32_noret">,
551 BinaryAtomicIntNoRet;
552 def int_AMDIL_atomic_max_ru32_noret : GCCBuiltin<"__atomic_max_ru32_noret">,
553 BinaryAtomicIntNoRet;
554 def int_AMDIL_atomic_and_ru32_noret : GCCBuiltin<"__atomic_and_ru32_noret">,
555 BinaryAtomicIntNoRet;
556 def int_AMDIL_atomic_or_ru32_noret : GCCBuiltin<"__atomic_or_ru32_noret">,
557 BinaryAtomicIntNoRet;
558 def int_AMDIL_atomic_mskor_ru32_noret : GCCBuiltin<"__atomic_mskor_ru32_noret">,
559 TernaryAtomicIntNoRet;
560 def int_AMDIL_atomic_xor_ru32_noret : GCCBuiltin<"__atomic_xor_ru32_noret">,
561 BinaryAtomicIntNoRet;
563 def int_AMDIL_get_cycle_count : GCCBuiltin<"__amdil_get_cycle_count">,
566 def int_AMDIL_compute_unit_id : GCCBuiltin<"__amdil_compute_unit_id">,
569 def int_AMDIL_wavefront_id : GCCBuiltin<"__amdil_wavefront_id">,
573 /// Intrinsics for atomic instructions with a return value
574 /// Signed 32 bit integer atomics for local address space
575 def int_AMDIL_atomic_add_li32 : GCCBuiltin<"__atomic_add_li32">,
577 def int_AMDIL_atomic_sub_li32 : GCCBuiltin<"__atomic_sub_li32">,
579 def int_AMDIL_atomic_rsub_li32 : GCCBuiltin<"__atomic_rsub_li32">,
581 def int_AMDIL_atomic_xchg_li32 : GCCBuiltin<"__atomic_xchg_li32">,
583 def int_AMDIL_atomic_inc_li32 : GCCBuiltin<"__atomic_inc_li32">,
585 def int_AMDIL_atomic_dec_li32 : GCCBuiltin<"__atomic_dec_li32">,
587 def int_AMDIL_atomic_cmpxchg_li32 : GCCBuiltin<"__atomic_cmpxchg_li32">,
589 def int_AMDIL_atomic_min_li32 : GCCBuiltin<"__atomic_min_li32">,
591 def int_AMDIL_atomic_max_li32 : GCCBuiltin<"__atomic_max_li32">,
593 def int_AMDIL_atomic_and_li32 : GCCBuiltin<"__atomic_and_li32">,
595 def int_AMDIL_atomic_or_li32 : GCCBuiltin<"__atomic_or_li32">,
597 def int_AMDIL_atomic_mskor_li32 : GCCBuiltin<"__atomic_mskor_li32">,
599 def int_AMDIL_atomic_xor_li32 : GCCBuiltin<"__atomic_xor_li32">,
602 /// Signed 32 bit integer atomics for region address space
603 def int_AMDIL_atomic_add_ri32 : GCCBuiltin<"__atomic_add_ri32">,
605 def int_AMDIL_atomic_sub_ri32 : GCCBuiltin<"__atomic_sub_ri32">,
607 def int_AMDIL_atomic_rsub_ri32 : GCCBuiltin<"__atomic_rsub_ri32">,
609 def int_AMDIL_atomic_xchg_ri32 : GCCBuiltin<"__atomic_xchg_ri32">,
611 def int_AMDIL_atomic_inc_ri32 : GCCBuiltin<"__atomic_inc_ri32">,
613 def int_AMDIL_atomic_dec_ri32 : GCCBuiltin<"__atomic_dec_ri32">,
615 def int_AMDIL_atomic_cmpxchg_ri32 : GCCBuiltin<"__atomic_cmpxchg_ri32">,
617 def int_AMDIL_atomic_min_ri32 : GCCBuiltin<"__atomic_min_ri32">,
619 def int_AMDIL_atomic_max_ri32 : GCCBuiltin<"__atomic_max_ri32">,
621 def int_AMDIL_atomic_and_ri32 : GCCBuiltin<"__atomic_and_ri32">,
623 def int_AMDIL_atomic_or_ri32 : GCCBuiltin<"__atomic_or_ri32">,
625 def int_AMDIL_atomic_mskor_ri32 : GCCBuiltin<"__atomic_mskor_ri32">,
627 def int_AMDIL_atomic_xor_ri32 : GCCBuiltin<"__atomic_xor_ri32">,
630 /// 32 bit float atomics required by OpenCL
631 def int_AMDIL_atomic_xchg_lf32 : GCCBuiltin<"__atomic_xchg_lf32">,
633 def int_AMDIL_atomic_xchg_lf32_noret : GCCBuiltin<"__atomic_xchg_lf32_noret">,
634 BinaryAtomicIntNoRet;
635 def int_AMDIL_atomic_xchg_rf32 : GCCBuiltin<"__atomic_xchg_rf32">,
637 def int_AMDIL_atomic_xchg_rf32_noret : GCCBuiltin<"__atomic_xchg_rf32_noret">,
638 BinaryAtomicIntNoRet;
640 /// Unsigned 32 bit integer atomics for local address space
641 def int_AMDIL_atomic_add_lu32 : GCCBuiltin<"__atomic_add_lu32">,
643 def int_AMDIL_atomic_sub_lu32 : GCCBuiltin<"__atomic_sub_lu32">,
645 def int_AMDIL_atomic_rsub_lu32 : GCCBuiltin<"__atomic_rsub_lu32">,
647 def int_AMDIL_atomic_xchg_lu32 : GCCBuiltin<"__atomic_xchg_lu32">,
649 def int_AMDIL_atomic_inc_lu32 : GCCBuiltin<"__atomic_inc_lu32">,
651 def int_AMDIL_atomic_dec_lu32 : GCCBuiltin<"__atomic_dec_lu32">,
653 def int_AMDIL_atomic_cmpxchg_lu32 : GCCBuiltin<"__atomic_cmpxchg_lu32">,
655 def int_AMDIL_atomic_min_lu32 : GCCBuiltin<"__atomic_min_lu32">,
657 def int_AMDIL_atomic_max_lu32 : GCCBuiltin<"__atomic_max_lu32">,
659 def int_AMDIL_atomic_and_lu32 : GCCBuiltin<"__atomic_and_lu32">,
661 def int_AMDIL_atomic_or_lu32 : GCCBuiltin<"__atomic_or_lu32">,
663 def int_AMDIL_atomic_mskor_lu32 : GCCBuiltin<"__atomic_mskor_lu32">,
665 def int_AMDIL_atomic_xor_lu32 : GCCBuiltin<"__atomic_xor_lu32">,
668 /// Unsigned 32 bit integer atomics for region address space
669 def int_AMDIL_atomic_add_ru32 : GCCBuiltin<"__atomic_add_ru32">,
671 def int_AMDIL_atomic_sub_ru32 : GCCBuiltin<"__atomic_sub_ru32">,
673 def int_AMDIL_atomic_rsub_ru32 : GCCBuiltin<"__atomic_rsub_ru32">,
675 def int_AMDIL_atomic_xchg_ru32 : GCCBuiltin<"__atomic_xchg_ru32">,
677 def int_AMDIL_atomic_inc_ru32 : GCCBuiltin<"__atomic_inc_ru32">,
679 def int_AMDIL_atomic_dec_ru32 : GCCBuiltin<"__atomic_dec_ru32">,
681 def int_AMDIL_atomic_cmpxchg_ru32 : GCCBuiltin<"__atomic_cmpxchg_ru32">,
683 def int_AMDIL_atomic_min_ru32 : GCCBuiltin<"__atomic_min_ru32">,
685 def int_AMDIL_atomic_max_ru32 : GCCBuiltin<"__atomic_max_ru32">,
687 def int_AMDIL_atomic_and_ru32 : GCCBuiltin<"__atomic_and_ru32">,
689 def int_AMDIL_atomic_or_ru32 : GCCBuiltin<"__atomic_or_ru32">,
691 def int_AMDIL_atomic_mskor_ru32 : GCCBuiltin<"__atomic_mskor_ru32">,
693 def int_AMDIL_atomic_xor_ru32 : GCCBuiltin<"__atomic_xor_ru32">,
696 /// Semaphore signal/wait/init
697 def int_AMDIL_semaphore_init : GCCBuiltin<"__amdil_semaphore_init">,
698 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty]>;
699 def int_AMDIL_semaphore_wait : GCCBuiltin<"__amdil_semaphore_wait">,
700 Intrinsic<[], [llvm_ptr_ty]>;
701 def int_AMDIL_semaphore_signal : GCCBuiltin<"__amdil_semaphore_signal">,
702 Intrinsic<[], [llvm_ptr_ty]>;
703 def int_AMDIL_semaphore_size : GCCBuiltin<"__amdil_max_semaphore_size">,
704 Intrinsic<[llvm_i32_ty], []>;