• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//===- AMDILIntrinsics.td - Defines AMDIL Intrinscs -*- 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 amdil-specific intrinsics
11//
12//===---------------------------------------------------------------===//
13//===--------------------------------------------------------------------===//
14// Intrinsic classes
15// Generic versions of the above classes but for Target specific intrinsics
16// instead of SDNode patterns.
17//===--------------------------------------------------------------------===//
18let TargetPrefix = "AMDIL", isTarget = 1 in {
19     class VoidIntLong :
20          Intrinsic<[llvm_i64_ty], [], []>;
21     class VoidIntInt :
22          Intrinsic<[llvm_i32_ty], [], []>;
23     class VoidIntBool :
24          Intrinsic<[llvm_i32_ty], [], []>;
25     class UnaryIntInt :
26          Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>], [IntrNoMem]>;
27     class UnaryIntFloat :
28          Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>], [IntrNoMem]>;
29     class ConvertIntFTOI :
30          Intrinsic<[llvm_anyint_ty], [llvm_anyfloat_ty], [IntrNoMem]>;
31     class ConvertIntITOF :
32          Intrinsic<[llvm_anyfloat_ty], [llvm_anyint_ty], [IntrNoMem]>;
33     class UnaryIntNoRetInt :
34          Intrinsic<[], [llvm_anyint_ty], []>;
35     class UnaryIntNoRetFloat :
36          Intrinsic<[], [llvm_anyfloat_ty], []>;
37     class BinaryIntInt :
38          Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
39     class BinaryIntFloat :
40          Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
41     class BinaryIntNoRetInt :
42          Intrinsic<[], [llvm_anyint_ty, LLVMMatchType<0>], []>;
43     class BinaryIntNoRetFloat :
44          Intrinsic<[], [llvm_anyfloat_ty, LLVMMatchType<0>], []>;
45     class TernaryIntInt :
46          Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>,
47          LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
48     class TernaryIntFloat :
49          Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>,
50          LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
51     class QuaternaryIntInt :
52          Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>,
53          LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>], [IntrNoMem]>;
54     class UnaryAtomicInt :
55          Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
56     class BinaryAtomicInt :
57          Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
58     class TernaryAtomicInt :
59          Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty]>;
60     class UnaryAtomicIntNoRet :
61          Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
62     class BinaryAtomicIntNoRet :
63          Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
64     class TernaryAtomicIntNoRet :
65          Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
66}
67
68let TargetPrefix = "AMDIL", isTarget = 1 in {
69  def int_AMDIL_fabs : GCCBuiltin<"__amdil_fabs">, UnaryIntFloat;
70  def int_AMDIL_abs : GCCBuiltin<"__amdil_abs">, UnaryIntInt;
71
72  def int_AMDIL_bit_extract_i32 : GCCBuiltin<"__amdil_ibit_extract">,
73          TernaryIntInt;
74  def int_AMDIL_bit_extract_u32 : GCCBuiltin<"__amdil_ubit_extract">,
75          TernaryIntInt;
76  def int_AMDIL_bit_reverse_u32 : GCCBuiltin<"__amdil_ubit_reverse">,
77          UnaryIntInt;
78  def int_AMDIL_bit_count_i32 : GCCBuiltin<"__amdil_count_bits">,
79          UnaryIntInt;
80  def int_AMDIL_bit_find_first_lo : GCCBuiltin<"__amdil_ffb_lo">,
81          UnaryIntInt;
82  def int_AMDIL_bit_find_first_hi : GCCBuiltin<"__amdil_ffb_hi">,
83          UnaryIntInt;
84  def int_AMDIL_bit_find_first_sgn : GCCBuiltin<"__amdil_ffb_signed">,
85          UnaryIntInt;
86  def int_AMDIL_media_bitalign : GCCBuiltin<"__amdil_bitalign">,
87                    TernaryIntInt;
88  def int_AMDIL_media_bytealign : GCCBuiltin<"__amdil_bytealign">,
89                    TernaryIntInt;
90  def int_AMDIL_bit_insert_u32 : GCCBuiltin<"__amdil_ubit_insert">,
91                    QuaternaryIntInt;
92  def int_AMDIL_bfi : GCCBuiltin<"__amdil_bfi">,
93      TernaryIntInt;
94  def int_AMDIL_bfm : GCCBuiltin<"__amdil_bfm">,
95      BinaryIntInt;
96  def int_AMDIL_mad_i32 : GCCBuiltin<"__amdil_imad">,
97          TernaryIntInt;
98  def int_AMDIL_mad_u32 : GCCBuiltin<"__amdil_umad">,
99          TernaryIntInt;
100  def int_AMDIL_mad     : GCCBuiltin<"__amdil_mad">,
101          TernaryIntFloat;
102  def int_AMDIL_mulhi_i32 : GCCBuiltin<"__amdil_imul_high">,
103          BinaryIntInt;
104  def int_AMDIL_mulhi_u32 : GCCBuiltin<"__amdil_umul_high">,
105          BinaryIntInt;
106  def int_AMDIL_mul24_i32 : GCCBuiltin<"__amdil_imul24">,
107          BinaryIntInt;
108  def int_AMDIL_mul24_u32 : GCCBuiltin<"__amdil_umul24">,
109          BinaryIntInt;
110  def int_AMDIL_mulhi24_i32 : GCCBuiltin<"__amdil_imul24_high">,
111          BinaryIntInt;
112  def int_AMDIL_mulhi24_u32 : GCCBuiltin<"__amdil_umul24_high">,
113          BinaryIntInt;
114  def int_AMDIL_mad24_i32 : GCCBuiltin<"__amdil_imad24">,
115          TernaryIntInt;
116  def int_AMDIL_mad24_u32 : GCCBuiltin<"__amdil_umad24">,
117          TernaryIntInt;
118  def int_AMDIL_carry_i32 : GCCBuiltin<"__amdil_carry">,
119          BinaryIntInt;
120  def int_AMDIL_borrow_i32 : GCCBuiltin<"__amdil_borrow">,
121          BinaryIntInt;
122  def int_AMDIL_min_i32 : GCCBuiltin<"__amdil_imin">,
123          BinaryIntInt;
124  def int_AMDIL_min_u32 : GCCBuiltin<"__amdil_umin">,
125          BinaryIntInt;
126  def int_AMDIL_min     : GCCBuiltin<"__amdil_min">,
127          BinaryIntFloat;
128  def int_AMDIL_max_i32 : GCCBuiltin<"__amdil_imax">,
129          BinaryIntInt;
130  def int_AMDIL_max_u32 : GCCBuiltin<"__amdil_umax">,
131          BinaryIntInt;
132  def int_AMDIL_max     : GCCBuiltin<"__amdil_max">,
133          BinaryIntFloat;
134  def int_AMDIL_media_lerp_u4 : GCCBuiltin<"__amdil_u4lerp">,
135          TernaryIntInt;
136  def int_AMDIL_media_sad : GCCBuiltin<"__amdil_sad">,
137          TernaryIntInt;
138  def int_AMDIL_media_sad_hi : GCCBuiltin<"__amdil_sadhi">,
139          TernaryIntInt;
140  def int_AMDIL_fraction : GCCBuiltin<"__amdil_fraction">,
141          UnaryIntFloat;
142  def int_AMDIL_clamp : GCCBuiltin<"__amdil_clamp">,
143          TernaryIntFloat;
144  def int_AMDIL_pireduce : GCCBuiltin<"__amdil_pireduce">,
145          UnaryIntFloat;
146  def int_AMDIL_round_nearest : GCCBuiltin<"__amdil_round_nearest">,
147          UnaryIntFloat;
148  def int_AMDIL_round_neginf : GCCBuiltin<"__amdil_round_neginf">,
149          UnaryIntFloat;
150  def int_AMDIL_round_posinf : GCCBuiltin<"__amdil_round_posinf">,
151          UnaryIntFloat;
152  def int_AMDIL_round_zero : GCCBuiltin<"__amdil_round_zero">,
153          UnaryIntFloat;
154  def int_AMDIL_acos : GCCBuiltin<"__amdil_acos">,
155          UnaryIntFloat;
156  def int_AMDIL_atan : GCCBuiltin<"__amdil_atan">,
157          UnaryIntFloat;
158  def int_AMDIL_asin : GCCBuiltin<"__amdil_asin">,
159          UnaryIntFloat;
160  def int_AMDIL_cos : GCCBuiltin<"__amdil_cos">,
161          UnaryIntFloat;
162  def int_AMDIL_cos_vec : GCCBuiltin<"__amdil_cos_vec">,
163          UnaryIntFloat;
164  def int_AMDIL_tan : GCCBuiltin<"__amdil_tan">,
165          UnaryIntFloat;
166  def int_AMDIL_sin : GCCBuiltin<"__amdil_sin">,
167          UnaryIntFloat;
168  def int_AMDIL_sin_vec : GCCBuiltin<"__amdil_sin_vec">,
169          UnaryIntFloat;
170  def int_AMDIL_pow : GCCBuiltin<"__amdil_pow">, BinaryIntFloat;
171  def int_AMDIL_div : GCCBuiltin<"__amdil_div">, BinaryIntFloat;
172  def int_AMDIL_udiv : GCCBuiltin<"__amdil_udiv">, BinaryIntInt;
173  def int_AMDIL_sqrt: GCCBuiltin<"__amdil_sqrt">,
174          UnaryIntFloat;
175  def int_AMDIL_sqrt_vec: GCCBuiltin<"__amdil_sqrt_vec">,
176          UnaryIntFloat;
177  def int_AMDIL_exp : GCCBuiltin<"__amdil_exp">,
178          UnaryIntFloat;
179  def int_AMDIL_exp_vec : GCCBuiltin<"__amdil_exp_vec">,
180          UnaryIntFloat;
181  def int_AMDIL_exn : GCCBuiltin<"__amdil_exn">,
182          UnaryIntFloat;
183  def int_AMDIL_log : GCCBuiltin<"__amdil_log">,
184          UnaryIntFloat;
185  def int_AMDIL_log_vec : GCCBuiltin<"__amdil_log_vec">,
186          UnaryIntFloat;
187  def int_AMDIL_ln : GCCBuiltin<"__amdil_ln">,
188          UnaryIntFloat;
189  def int_AMDIL_sign: GCCBuiltin<"__amdil_sign">,
190          UnaryIntFloat;
191  def int_AMDIL_fma: GCCBuiltin<"__amdil_fma">,
192          TernaryIntFloat;
193  def int_AMDIL_rsq : GCCBuiltin<"__amdil_rsq">,
194          UnaryIntFloat;
195  def int_AMDIL_rsq_vec : GCCBuiltin<"__amdil_rsq_vec">,
196          UnaryIntFloat;
197  def int_AMDIL_length : GCCBuiltin<"__amdil_length">,
198          UnaryIntFloat;
199  def int_AMDIL_lerp : GCCBuiltin<"__amdil_lerp">,
200          TernaryIntFloat;
201  def int_AMDIL_media_sad4 : GCCBuiltin<"__amdil_sad4">,
202      Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty,
203           llvm_v4i32_ty, llvm_i32_ty], []>;
204
205  def int_AMDIL_frexp_f64 : GCCBuiltin<"__amdil_frexp">,
206        Intrinsic<[llvm_v2i64_ty], [llvm_double_ty], []>;
207 def int_AMDIL_ldexp : GCCBuiltin<"__amdil_ldexp">,
208    Intrinsic<[llvm_anyfloat_ty], [llvm_anyfloat_ty, llvm_anyint_ty], []>;
209  def int_AMDIL_drcp : GCCBuiltin<"__amdil_rcp">,
210      Intrinsic<[llvm_double_ty], [llvm_double_ty], []>;
211  def int_AMDIL_convert_f16_f32 : GCCBuiltin<"__amdil_half_to_float">,
212      ConvertIntITOF;
213  def int_AMDIL_convert_f32_f16 : GCCBuiltin<"__amdil_float_to_half">,
214      ConvertIntFTOI;
215  def int_AMDIL_convert_f32_i32_rpi : GCCBuiltin<"__amdil_float_to_int_rpi">,
216      ConvertIntFTOI;
217  def int_AMDIL_convert_f32_i32_flr : GCCBuiltin<"__amdil_float_to_int_flr">,
218      ConvertIntFTOI;
219  def int_AMDIL_convert_f32_f16_near : GCCBuiltin<"__amdil_float_to_half_near">,
220      ConvertIntFTOI;
221  def int_AMDIL_convert_f32_f16_neg_inf : GCCBuiltin<"__amdil_float_to_half_neg_inf">,
222      ConvertIntFTOI;
223  def int_AMDIL_convert_f32_f16_plus_inf : GCCBuiltin<"__amdil_float_to_half_plus_inf">,
224      ConvertIntFTOI;
225 def int_AMDIL_media_convert_f2v4u8 : GCCBuiltin<"__amdil_f_2_u4">,
226      Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], []>;
227  def int_AMDIL_media_unpack_byte_0 : GCCBuiltin<"__amdil_unpack_0">,
228      ConvertIntITOF;
229  def int_AMDIL_media_unpack_byte_1 : GCCBuiltin<"__amdil_unpack_1">,
230      ConvertIntITOF;
231  def int_AMDIL_media_unpack_byte_2 : GCCBuiltin<"__amdil_unpack_2">,
232      ConvertIntITOF;
233  def int_AMDIL_media_unpack_byte_3 : GCCBuiltin<"__amdil_unpack_3">,
234      ConvertIntITOF;
235  def int_AMDIL_dp2_add : GCCBuiltin<"__amdil_dp2_add">,
236        Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
237          llvm_v2f32_ty, llvm_float_ty], []>;
238  def int_AMDIL_dp2 : GCCBuiltin<"__amdil_dp2">,
239        Intrinsic<[llvm_float_ty], [llvm_v2f32_ty,
240          llvm_v2f32_ty], []>;
241  def int_AMDIL_dp3 : GCCBuiltin<"__amdil_dp3">,
242        Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
243          llvm_v4f32_ty], []>;
244  def int_AMDIL_dp4 : GCCBuiltin<"__amdil_dp4">,
245        Intrinsic<[llvm_float_ty], [llvm_v4f32_ty,
246          llvm_v4f32_ty], []>;
247}
248