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 //===--------------------------------------------------------------------===// 18 let 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 68 let TargetPrefix = "AMDIL", isTarget = 1 in { 69 def int_AMDIL_abs : GCCBuiltin<"__amdil_abs">, UnaryIntInt; 70 71 def int_AMDIL_bit_extract_i32 : GCCBuiltin<"__amdil_ibit_extract">, 72 TernaryIntInt; 73 def int_AMDIL_bit_extract_u32 : GCCBuiltin<"__amdil_ubit_extract">, 74 TernaryIntInt; 75 def int_AMDIL_bit_reverse_u32 : GCCBuiltin<"__amdil_ubit_reverse">, 76 UnaryIntInt; 77 def int_AMDIL_bit_count_i32 : GCCBuiltin<"__amdil_count_bits">, 78 UnaryIntInt; 79 def int_AMDIL_bit_find_first_lo : GCCBuiltin<"__amdil_ffb_lo">, 80 UnaryIntInt; 81 def int_AMDIL_bit_find_first_hi : GCCBuiltin<"__amdil_ffb_hi">, 82 UnaryIntInt; 83 def int_AMDIL_bit_find_first_sgn : GCCBuiltin<"__amdil_ffb_signed">, 84 UnaryIntInt; 85 def int_AMDIL_media_bitalign : GCCBuiltin<"__amdil_bitalign">, 86 TernaryIntInt; 87 def int_AMDIL_media_bytealign : GCCBuiltin<"__amdil_bytealign">, 88 TernaryIntInt; 89 def int_AMDIL_bit_insert_u32 : GCCBuiltin<"__amdil_ubit_insert">, 90 QuaternaryIntInt; 91 def int_AMDIL_bfi : GCCBuiltin<"__amdil_bfi">, 92 TernaryIntInt; 93 def int_AMDIL_bfm : GCCBuiltin<"__amdil_bfm">, 94 BinaryIntInt; 95 def int_AMDIL_mulhi_i32 : GCCBuiltin<"__amdil_imul_high">, 96 BinaryIntInt; 97 def int_AMDIL_mulhi_u32 : GCCBuiltin<"__amdil_umul_high">, 98 BinaryIntInt; 99 def int_AMDIL_mul24_i32 : GCCBuiltin<"__amdil_imul24">, 100 BinaryIntInt; 101 def int_AMDIL_mul24_u32 : GCCBuiltin<"__amdil_umul24">, 102 BinaryIntInt; 103 def int_AMDIL_mulhi24_i32 : GCCBuiltin<"__amdil_imul24_high">, 104 BinaryIntInt; 105 def int_AMDIL_mulhi24_u32 : GCCBuiltin<"__amdil_umul24_high">, 106 BinaryIntInt; 107 def int_AMDIL_carry_i32 : GCCBuiltin<"__amdil_carry">, 108 BinaryIntInt; 109 def int_AMDIL_borrow_i32 : GCCBuiltin<"__amdil_borrow">, 110 BinaryIntInt; 111 def int_AMDIL_min_i32 : GCCBuiltin<"__amdil_imin">, 112 BinaryIntInt; 113 def int_AMDIL_min_u32 : GCCBuiltin<"__amdil_umin">, 114 BinaryIntInt; 115 def int_AMDIL_min : GCCBuiltin<"__amdil_min">, 116 BinaryIntFloat; 117 def int_AMDIL_max_i32 : GCCBuiltin<"__amdil_imax">, 118 BinaryIntInt; 119 def int_AMDIL_max_u32 : GCCBuiltin<"__amdil_umax">, 120 BinaryIntInt; 121 def int_AMDIL_max : GCCBuiltin<"__amdil_max">, 122 BinaryIntFloat; 123 def int_AMDIL_media_lerp_u4 : GCCBuiltin<"__amdil_u4lerp">, 124 TernaryIntInt; 125 def int_AMDIL_media_sad : GCCBuiltin<"__amdil_sad">, 126 TernaryIntInt; 127 def int_AMDIL_media_sad_hi : GCCBuiltin<"__amdil_sadhi">, 128 TernaryIntInt; 129 def int_AMDIL_fraction : GCCBuiltin<"__amdil_fraction">, 130 UnaryIntFloat; 131 def int_AMDIL_clamp : GCCBuiltin<"__amdil_clamp">, 132 TernaryIntFloat; 133 def int_AMDIL_pireduce : GCCBuiltin<"__amdil_pireduce">, 134 UnaryIntFloat; 135 def int_AMDIL_round_nearest : GCCBuiltin<"__amdil_round_nearest">, 136 UnaryIntFloat; 137 def int_AMDIL_round_neginf : GCCBuiltin<"__amdil_round_neginf">, 138 UnaryIntFloat; 139 def int_AMDIL_round_zero : GCCBuiltin<"__amdil_round_zero">, 140 UnaryIntFloat; 141 def int_AMDIL_acos : GCCBuiltin<"__amdil_acos">, 142 UnaryIntFloat; 143 def int_AMDIL_atan : GCCBuiltin<"__amdil_atan">, 144 UnaryIntFloat; 145 def int_AMDIL_asin : GCCBuiltin<"__amdil_asin">, 146 UnaryIntFloat; 147 def int_AMDIL_cos : GCCBuiltin<"__amdil_cos">, 148 UnaryIntFloat; 149 def int_AMDIL_cos_vec : GCCBuiltin<"__amdil_cos_vec">, 150 UnaryIntFloat; 151 def int_AMDIL_tan : GCCBuiltin<"__amdil_tan">, 152 UnaryIntFloat; 153 def int_AMDIL_sin : GCCBuiltin<"__amdil_sin">, 154 UnaryIntFloat; 155 def int_AMDIL_sin_vec : GCCBuiltin<"__amdil_sin_vec">, 156 UnaryIntFloat; 157 def int_AMDIL_pow : GCCBuiltin<"__amdil_pow">, BinaryIntFloat; 158 def int_AMDIL_div : GCCBuiltin<"__amdil_div">, BinaryIntFloat; 159 def int_AMDIL_udiv : GCCBuiltin<"__amdil_udiv">, BinaryIntInt; 160 def int_AMDIL_sqrt: GCCBuiltin<"__amdil_sqrt">, 161 UnaryIntFloat; 162 def int_AMDIL_sqrt_vec: GCCBuiltin<"__amdil_sqrt_vec">, 163 UnaryIntFloat; 164 def int_AMDIL_exp : GCCBuiltin<"__amdil_exp">, 165 UnaryIntFloat; 166 def int_AMDIL_exp_vec : GCCBuiltin<"__amdil_exp_vec">, 167 UnaryIntFloat; 168 def int_AMDIL_exn : GCCBuiltin<"__amdil_exn">, 169 UnaryIntFloat; 170 def int_AMDIL_log_vec : GCCBuiltin<"__amdil_log_vec">, 171 UnaryIntFloat; 172 def int_AMDIL_ln : GCCBuiltin<"__amdil_ln">, 173 UnaryIntFloat; 174 def int_AMDIL_sign: GCCBuiltin<"__amdil_sign">, 175 UnaryIntFloat; 176 def int_AMDIL_fma: GCCBuiltin<"__amdil_fma">, 177 TernaryIntFloat; 178 def int_AMDIL_rsq : GCCBuiltin<"__amdil_rsq">, 179 UnaryIntFloat; 180 def int_AMDIL_rsq_vec : GCCBuiltin<"__amdil_rsq_vec">, 181 UnaryIntFloat; 182 def int_AMDIL_length : GCCBuiltin<"__amdil_length">, 183 UnaryIntFloat; 184 def int_AMDIL_lerp : GCCBuiltin<"__amdil_lerp">, 185 TernaryIntFloat; 186 def int_AMDIL_media_sad4 : GCCBuiltin<"__amdil_sad4">, 187 Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, 188 llvm_v4i32_ty, llvm_i32_ty], []>; 189 190 def int_AMDIL_frexp_f64 : GCCBuiltin<"__amdil_frexp">, 191 Intrinsic<[llvm_v2i64_ty], [llvm_double_ty], []>; 192 def int_AMDIL_ldexp : GCCBuiltin<"__amdil_ldexp">, 193 Intrinsic<[llvm_anyfloat_ty], [llvm_anyfloat_ty, llvm_anyint_ty], []>; 194 def int_AMDIL_drcp : GCCBuiltin<"__amdil_rcp">, 195 Intrinsic<[llvm_double_ty], [llvm_double_ty], []>; 196 def int_AMDIL_convert_f16_f32 : GCCBuiltin<"__amdil_half_to_float">, 197 ConvertIntITOF; 198 def int_AMDIL_convert_f32_f16 : GCCBuiltin<"__amdil_float_to_half">, 199 ConvertIntFTOI; 200 def int_AMDIL_convert_f32_i32_rpi : GCCBuiltin<"__amdil_float_to_int_rpi">, 201 ConvertIntFTOI; 202 def int_AMDIL_convert_f32_i32_flr : GCCBuiltin<"__amdil_float_to_int_flr">, 203 ConvertIntFTOI; 204 def int_AMDIL_convert_f32_f16_near : GCCBuiltin<"__amdil_float_to_half_near">, 205 ConvertIntFTOI; 206 def int_AMDIL_convert_f32_f16_neg_inf : GCCBuiltin<"__amdil_float_to_half_neg_inf">, 207 ConvertIntFTOI; 208 def int_AMDIL_convert_f32_f16_plus_inf : GCCBuiltin<"__amdil_float_to_half_plus_inf">, 209 ConvertIntFTOI; 210 def int_AMDIL_media_convert_f2v4u8 : GCCBuiltin<"__amdil_f_2_u4">, 211 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], []>; 212 def int_AMDIL_media_unpack_byte_0 : GCCBuiltin<"__amdil_unpack_0">, 213 ConvertIntITOF; 214 def int_AMDIL_media_unpack_byte_1 : GCCBuiltin<"__amdil_unpack_1">, 215 ConvertIntITOF; 216 def int_AMDIL_media_unpack_byte_2 : GCCBuiltin<"__amdil_unpack_2">, 217 ConvertIntITOF; 218 def int_AMDIL_media_unpack_byte_3 : GCCBuiltin<"__amdil_unpack_3">, 219 ConvertIntITOF; 220 def int_AMDIL_dp2_add : GCCBuiltin<"__amdil_dp2_add">, 221 Intrinsic<[llvm_float_ty], [llvm_v2f32_ty, 222 llvm_v2f32_ty, llvm_float_ty], []>; 223 def int_AMDIL_dp2 : GCCBuiltin<"__amdil_dp2">, 224 Intrinsic<[llvm_float_ty], [llvm_v2f32_ty, 225 llvm_v2f32_ty], []>; 226 def int_AMDIL_dp3 : GCCBuiltin<"__amdil_dp3">, 227 Intrinsic<[llvm_float_ty], [llvm_v4f32_ty, 228 llvm_v4f32_ty], []>; 229 def int_AMDIL_dp4 : GCCBuiltin<"__amdil_dp4">, 230 Intrinsic<[llvm_float_ty], [llvm_v4f32_ty, 231 llvm_v4f32_ty], []>; 232 } 233