1//===- IntrinsicsPowerPC.td - Defines PowerPC intrinsics ---*- tablegen -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file defines all of the PowerPC-specific intrinsics. 10// 11//===----------------------------------------------------------------------===// 12 13//===----------------------------------------------------------------------===// 14// Definitions for all PowerPC intrinsics. 15// 16 17// Non-altivec intrinsics. 18let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 19 // dcba/dcbf/dcbi/dcbst/dcbt/dcbz/dcbzl(PPC970) instructions. 20 def int_ppc_dcba : Intrinsic<[], [llvm_ptr_ty], []>; 21 def int_ppc_dcbf : ClangBuiltin<"__builtin_dcbf">, 22 Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>; 23 def int_ppc_dcbfps : Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>; 24 def int_ppc_dcbstps : Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>; 25 def int_ppc_dcbi : Intrinsic<[], [llvm_ptr_ty], []>; 26 def int_ppc_dcbt_with_hint: Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], 27 [IntrArgMemOnly, NoCapture<ArgIndex<0>>, ImmArg<ArgIndex<1>>]>; 28 def int_ppc_dcbtst_with_hint: Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], 29 [IntrArgMemOnly, NoCapture<ArgIndex<0>>, ImmArg<ArgIndex<1>>]>; 30 def int_ppc_dcbzl : Intrinsic<[], [llvm_ptr_ty], []>; 31 32 // Emit pseudo instruction as fence of instruction motion 33 def int_ppc_fence : ClangBuiltin<"__builtin_ppc_fence">, 34 DefaultAttrsIntrinsic<[], [], 35 [IntrNoMerge, IntrHasSideEffects]>; 36 37 // Get content from current FPSCR register 38 def int_ppc_readflm : ClangBuiltin<"__builtin_readflm">, 39 DefaultAttrsIntrinsic<[llvm_double_ty], [], 40 [IntrNoMerge, IntrHasSideEffects]>; 41 def int_ppc_mffsl : ClangBuiltin<"__builtin_ppc_mffsl">, 42 DefaultAttrsIntrinsic<[llvm_double_ty], [], 43 [IntrNoMerge, IntrHasSideEffects]>; 44 45 // Set FPSCR register, and return previous content 46 def int_ppc_setflm : ClangBuiltin<"__builtin_setflm">, 47 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], 48 [IntrHasSideEffects]>; 49 50 // Intrinsics for [double]word extended forms of divide instructions 51 def int_ppc_divwe : ClangBuiltin<"__builtin_divwe">, 52 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 53 [IntrNoMem]>; 54 def int_ppc_divweu : ClangBuiltin<"__builtin_divweu">, 55 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 56 [IntrNoMem]>; 57 def int_ppc_divde : ClangBuiltin<"__builtin_divde">, 58 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 59 [IntrNoMem]>; 60 def int_ppc_divdeu : ClangBuiltin<"__builtin_divdeu">, 61 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 62 [IntrNoMem]>; 63 64 def int_ppc_unpack_longdouble : ClangBuiltin<"__builtin_unpack_longdouble">, 65 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_ppcf128_ty, llvm_i32_ty], 66 [IntrNoMem]>; 67 def int_ppc_pack_longdouble : ClangBuiltin<"__builtin_pack_longdouble">, 68 DefaultAttrsIntrinsic<[llvm_ppcf128_ty], [llvm_double_ty, llvm_double_ty], 69 [IntrNoMem]>; 70 71 // Generate a random number 72 def int_ppc_darn : ClangBuiltin<"__builtin_darn">, 73 DefaultAttrsIntrinsic<[llvm_i64_ty], [], 74 [IntrNoMerge, IntrHasSideEffects]>; 75 def int_ppc_darnraw : ClangBuiltin<"__builtin_darn_raw">, 76 DefaultAttrsIntrinsic<[llvm_i64_ty], [], 77 [IntrNoMerge, IntrHasSideEffects]>; 78 def int_ppc_darn32 : ClangBuiltin<"__builtin_darn_32">, 79 DefaultAttrsIntrinsic<[llvm_i32_ty], [], 80 [IntrNoMerge, IntrHasSideEffects]>; 81 82 // Bit permute doubleword 83 def int_ppc_bpermd : ClangBuiltin<"__builtin_bpermd">, 84 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 85 [IntrNoMem]>; 86 87 // Parallel Bits Deposit/Extract Doubleword Builtins. 88 def int_ppc_pdepd 89 : ClangBuiltin<"__builtin_pdepd">, 90 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 91 [IntrNoMem]>; 92 def int_ppc_pextd 93 : ClangBuiltin<"__builtin_pextd">, 94 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 95 [IntrNoMem]>; 96 97 // Centrifuge Doubleword Builtin. 98 def int_ppc_cfuged 99 : ClangBuiltin<"__builtin_cfuged">, 100 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 101 [IntrNoMem]>; 102 103 // Count Leading / Trailing Zeroes under bit Mask Builtins. 104 def int_ppc_cntlzdm 105 : ClangBuiltin<"__builtin_cntlzdm">, 106 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 107 [IntrNoMem]>; 108 def int_ppc_cnttzdm 109 : ClangBuiltin<"__builtin_cnttzdm">, 110 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 111 [IntrNoMem]>; 112 113 def int_ppc_truncf128_round_to_odd 114 : ClangBuiltin<"__builtin_truncf128_round_to_odd">, 115 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_f128_ty], [IntrNoMem]>; 116 def int_ppc_sqrtf128_round_to_odd 117 : ClangBuiltin<"__builtin_sqrtf128_round_to_odd">, 118 DefaultAttrsIntrinsic<[llvm_f128_ty], [llvm_f128_ty], [IntrNoMem]>; 119 def int_ppc_addf128_round_to_odd 120 : ClangBuiltin<"__builtin_addf128_round_to_odd">, 121 DefaultAttrsIntrinsic<[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], 122 [IntrNoMem]>; 123 def int_ppc_subf128_round_to_odd 124 : ClangBuiltin<"__builtin_subf128_round_to_odd">, 125 DefaultAttrsIntrinsic<[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], 126 [IntrNoMem]>; 127 def int_ppc_mulf128_round_to_odd 128 : ClangBuiltin<"__builtin_mulf128_round_to_odd">, 129 DefaultAttrsIntrinsic<[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], 130 [IntrNoMem]>; 131 def int_ppc_divf128_round_to_odd 132 : ClangBuiltin<"__builtin_divf128_round_to_odd">, 133 DefaultAttrsIntrinsic<[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], 134 [IntrNoMem]>; 135 def int_ppc_fmaf128_round_to_odd 136 : ClangBuiltin<"__builtin_fmaf128_round_to_odd">, 137 DefaultAttrsIntrinsic<[llvm_f128_ty], 138 [llvm_f128_ty,llvm_f128_ty,llvm_f128_ty], 139 [IntrNoMem]>; 140 def int_ppc_scalar_extract_expq 141 : ClangBuiltin<"__builtin_vsx_scalar_extract_expq">, 142 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_f128_ty], [IntrNoMem]>; 143 def int_ppc_scalar_insert_exp_qp 144 : ClangBuiltin<"__builtin_vsx_scalar_insert_exp_qp">, 145 DefaultAttrsIntrinsic<[llvm_f128_ty], [llvm_f128_ty, llvm_i64_ty], 146 [IntrNoMem]>; 147 148 // Intrinsics defined to maintain XL compatibility 149 def int_ppc_tdw 150 : ClangBuiltin<"__builtin_ppc_tdw">, 151 Intrinsic <[], [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], [ImmArg<ArgIndex<2>>]>; 152 def int_ppc_tw 153 : ClangBuiltin<"__builtin_ppc_tw">, 154 Intrinsic <[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [ImmArg<ArgIndex<2>>]>; 155 def int_ppc_trapd 156 : ClangBuiltin<"__builtin_ppc_trapd">, 157 Intrinsic <[], [llvm_i64_ty], []>; 158 def int_ppc_trap 159 : ClangBuiltin<"__builtin_ppc_trap">, 160 Intrinsic <[], [llvm_i32_ty], []>; 161 def int_ppc_fcfid 162 : ClangBuiltin<"__builtin_ppc_fcfid">, 163 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 164 def int_ppc_fcfud 165 : ClangBuiltin<"__builtin_ppc_fcfud">, 166 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 167 def int_ppc_fctid 168 : ClangBuiltin<"__builtin_ppc_fctid">, 169 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 170 def int_ppc_fctidz 171 : ClangBuiltin<"__builtin_ppc_fctidz">, 172 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 173 def int_ppc_fctiw 174 : ClangBuiltin<"__builtin_ppc_fctiw">, 175 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 176 def int_ppc_fctiwz 177 : ClangBuiltin<"__builtin_ppc_fctiwz">, 178 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 179 def int_ppc_fctudz 180 : ClangBuiltin<"__builtin_ppc_fctudz">, 181 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 182 def int_ppc_fctuwz 183 : ClangBuiltin<"__builtin_ppc_fctuwz">, 184 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 185 def int_ppc_rlwimi 186 : ClangBuiltin<"__builtin_ppc_rlwimi">, 187 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], 188 [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 189 def int_ppc_rlwnm 190 : ClangBuiltin<"__builtin_ppc_rlwnm">, 191 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], 192 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 193 def int_ppc_rldimi 194 : DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty, llvm_i64_ty], 195 [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<3>>]>; 196 197 // XL compatible select functions 198 // TODO: Add llvm_f128_ty support. 199 def int_ppc_maxfe 200 : DefaultAttrsIntrinsic< 201 [llvm_ppcf128_ty], 202 [llvm_ppcf128_ty, llvm_ppcf128_ty, llvm_ppcf128_ty, llvm_vararg_ty], 203 [IntrNoMem]>; 204 def int_ppc_maxfl 205 : DefaultAttrsIntrinsic< 206 [llvm_double_ty], 207 [llvm_double_ty, llvm_double_ty, llvm_double_ty, llvm_vararg_ty], 208 [IntrNoMem]>; 209 def int_ppc_maxfs 210 : DefaultAttrsIntrinsic< 211 [llvm_float_ty], 212 [llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_vararg_ty], 213 [IntrNoMem]>; 214 def int_ppc_minfe 215 : DefaultAttrsIntrinsic< 216 [llvm_ppcf128_ty], 217 [llvm_ppcf128_ty, llvm_ppcf128_ty, llvm_ppcf128_ty, llvm_vararg_ty], 218 [IntrNoMem]>; 219 def int_ppc_minfl 220 : DefaultAttrsIntrinsic< 221 [llvm_double_ty], 222 [llvm_double_ty, llvm_double_ty, llvm_double_ty, llvm_vararg_ty], 223 [IntrNoMem]>; 224 def int_ppc_minfs 225 : DefaultAttrsIntrinsic< 226 [llvm_float_ty], 227 [llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_vararg_ty], 228 [IntrNoMem]>; 229 // Load of a value provided by the system library at a fixed address. Used for 230 // accessing things like the HWCAP word provided by Glibc. The immediate 231 // argument is not an address but a value defined in 232 // include/llvm/TargetParser/PPCTargetParser.def. Each of the values provided 233 // by Glibc is a 32-bit word. 234 def int_ppc_fixed_addr_ld 235 : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty], 236 [IntrInaccessibleMemOnly, ImmArg<ArgIndex<0>>]>; 237 238} 239 240let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 241 /// PowerPC_Vec_Intrinsic - Base class for all altivec intrinsics. 242 class PowerPC_Vec_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types, 243 list<LLVMType> param_types, 244 list<IntrinsicProperty> properties> 245 : ClangBuiltin<!strconcat("__builtin_altivec_", GCCIntSuffix)>, 246 DefaultAttrsIntrinsic<ret_types, param_types, properties>; 247 248 /// PowerPC_VSX_Intrinsic - Base class for all VSX intrinsics. 249 class PowerPC_VSX_Intrinsic<string GCCIntSuffix, list<LLVMType> ret_types, 250 list<LLVMType> param_types, 251 list<IntrinsicProperty> properties> 252 : ClangBuiltin<!strconcat("__builtin_vsx_", GCCIntSuffix)>, 253 DefaultAttrsIntrinsic<ret_types, param_types, properties>; 254} 255 256//===----------------------------------------------------------------------===// 257// PowerPC MMA Intrinsic Multi Class Definitions. 258// 259 260multiclass PowerPC_MMA_ACC_Intrinsic<list<LLVMType> args> { 261 def NAME: DefaultAttrsIntrinsic<[llvm_v512i1_ty], args, [IntrNoMem]>; 262 def pp : DefaultAttrsIntrinsic<[llvm_v512i1_ty], 263 !listconcat([llvm_v512i1_ty], args), 264 [IntrNoMem]>; 265 def pn : DefaultAttrsIntrinsic<[llvm_v512i1_ty], 266 !listconcat([llvm_v512i1_ty], args), 267 [IntrNoMem]>; 268 def np : DefaultAttrsIntrinsic<[llvm_v512i1_ty], 269 !listconcat([llvm_v512i1_ty], args), 270 [IntrNoMem]>; 271 def nn : DefaultAttrsIntrinsic<[llvm_v512i1_ty], 272 !listconcat([llvm_v512i1_ty], args), 273 [IntrNoMem]>; 274} 275 276multiclass PowerPC_MMA_ACC_PP_Intrinsic<list<LLVMType> args> { 277 def NAME: DefaultAttrsIntrinsic<[llvm_v512i1_ty], args, [IntrNoMem]>; 278 def pp : DefaultAttrsIntrinsic<[llvm_v512i1_ty], 279 !listconcat([llvm_v512i1_ty], args), 280 [IntrNoMem]>; 281} 282 283multiclass PowerPC_MMA_DMR_Intrinsic<list<LLVMType> args> { 284 def NAME: DefaultAttrsIntrinsic<[llvm_v1024i1_ty], args, [IntrNoMem]>; 285 def pp : DefaultAttrsIntrinsic<[llvm_v1024i1_ty], 286 !listconcat([llvm_v1024i1_ty], args), 287 [IntrNoMem]>; 288 def pn : DefaultAttrsIntrinsic<[llvm_v1024i1_ty], 289 !listconcat([llvm_v1024i1_ty], args), 290 [IntrNoMem]>; 291 def np : DefaultAttrsIntrinsic<[llvm_v1024i1_ty], 292 !listconcat([llvm_v1024i1_ty], args), 293 [IntrNoMem]>; 294 def nn : DefaultAttrsIntrinsic<[llvm_v1024i1_ty], 295 !listconcat([llvm_v1024i1_ty], args), 296 [IntrNoMem]>; 297} 298 299multiclass PowerPC_MMA_DMR_PP_Intrinsic<list<LLVMType> args> { 300 def NAME: DefaultAttrsIntrinsic<[llvm_v1024i1_ty], args, [IntrNoMem]>; 301 def pp : DefaultAttrsIntrinsic<[llvm_v1024i1_ty], 302 !listconcat([llvm_v1024i1_ty], args), 303 [IntrNoMem]>; 304} 305 306//===----------------------------------------------------------------------===// 307// PowerPC Altivec Intrinsic Class Definitions. 308// 309 310/// PowerPC_Vec_FF_Intrinsic - A PowerPC intrinsic that takes one v4f32 311/// vector and returns one. These intrinsics have no side effects. 312class PowerPC_Vec_FF_Intrinsic<string GCCIntSuffix> 313 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 314 [llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 315 316/// PowerPC_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32 317/// vectors and returns one. These intrinsics have no side effects. 318class PowerPC_Vec_FFF_Intrinsic<string GCCIntSuffix> 319 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 320 [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 321 [IntrNoMem]>; 322 323/// PowerPC_Vec_BBB_Intrinsic - A PowerPC intrinsic that takes two v16i8 324/// vectors and returns one. These intrinsics have no side effects. 325class PowerPC_Vec_BBB_Intrinsic<string GCCIntSuffix> 326 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 327 [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 328 [IntrNoMem]>; 329 330/// PowerPC_Vec_HHH_Intrinsic - A PowerPC intrinsic that takes two v8i16 331/// vectors and returns one. These intrinsics have no side effects. 332class PowerPC_Vec_HHH_Intrinsic<string GCCIntSuffix> 333 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 334 [llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 335 [IntrNoMem]>; 336 337/// PowerPC_Vec_WWW_Intrinsic - A PowerPC intrinsic that takes two v4i32 338/// vectors and returns one. These intrinsics have no side effects. 339class PowerPC_Vec_WWW_Intrinsic<string GCCIntSuffix> 340 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 341 [llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 342 [IntrNoMem]>; 343 344/// PowerPC_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2i64 345/// vectors and returns one. These intrinsics have no side effects. 346class PowerPC_Vec_DDD_Intrinsic<string GCCIntSuffix> 347 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 348 [llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 349 [IntrNoMem]>; 350 351/// PowerPC_Vec_QQQ_Intrinsic - A PowerPC intrinsic that takes two v1i128 352/// vectors and returns one. These intrinsics have no side effects. 353class PowerPC_Vec_QQQ_Intrinsic<string GCCIntSuffix> 354 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 355 [llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty], 356 [IntrNoMem]>; 357 358/// PowerPC_Vec_QDD_Intrinsic - A PowerPC intrinsic that takes two v2i64 359/// vectors and returns one v1i128. These intrinsics have no side effects. 360class PowerPC_Vec_QDD_Intrinsic<string GCCIntSuffix> 361 : PowerPC_Vec_Intrinsic<GCCIntSuffix, 362 [llvm_v1i128_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 363 [IntrNoMem]>; 364 365//===----------------------------------------------------------------------===// 366// PowerPC VSX Intrinsic Class Definitions. 367// 368 369/// PowerPC_VSX_Vec_DDD_Intrinsic - A PowerPC intrinsic that takes two v2f64 370/// vectors and returns one. These intrinsics have no side effects. 371class PowerPC_VSX_Vec_DDD_Intrinsic<string GCCIntSuffix> 372 : PowerPC_VSX_Intrinsic<GCCIntSuffix, 373 [llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty], 374 [IntrNoMem]>; 375 376/// PowerPC_VSX_Vec_FFF_Intrinsic - A PowerPC intrinsic that takes two v4f32 377/// vectors and returns one. These intrinsics have no side effects. 378class PowerPC_VSX_Vec_FFF_Intrinsic<string GCCIntSuffix> 379 : PowerPC_VSX_Intrinsic<GCCIntSuffix, 380 [llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 381 [IntrNoMem]>; 382 383/// PowerPC_VSX_Sca_DDD_Intrinsic - A PowerPC intrinsic that takes two f64 384/// scalars and returns one. These intrinsics have no side effects. 385class PowerPC_VSX_Sca_DDD_Intrinsic<string GCCIntSuffix> 386 : PowerPC_VSX_Intrinsic<GCCIntSuffix, 387 [llvm_double_ty], [llvm_double_ty, llvm_double_ty], 388 [IntrNoMem]>; 389 390//===----------------------------------------------------------------------===// 391// PowerPC Altivec Intrinsic Definitions. 392 393let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 394 // Data Stream Control. 395 def int_ppc_altivec_dss : ClangBuiltin<"__builtin_altivec_dss">, 396 Intrinsic<[], [llvm_i32_ty], []>; 397 def int_ppc_altivec_dssall : ClangBuiltin<"__builtin_altivec_dssall">, 398 Intrinsic<[], [], []>; 399 def int_ppc_altivec_dst : ClangBuiltin<"__builtin_altivec_dst">, 400 Intrinsic<[], 401 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 402 []>; 403 def int_ppc_altivec_dstt : ClangBuiltin<"__builtin_altivec_dstt">, 404 Intrinsic<[], 405 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 406 []>; 407 def int_ppc_altivec_dstst : ClangBuiltin<"__builtin_altivec_dstst">, 408 Intrinsic<[], 409 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 410 []>; 411 def int_ppc_altivec_dststt : ClangBuiltin<"__builtin_altivec_dststt">, 412 Intrinsic<[], 413 [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], 414 []>; 415 416 // VSCR access. 417 def int_ppc_altivec_mfvscr : ClangBuiltin<"__builtin_altivec_mfvscr">, 418 Intrinsic<[llvm_v8i16_ty], [], [IntrNoMem, IntrHasSideEffects]>; 419 def int_ppc_altivec_mtvscr : ClangBuiltin<"__builtin_altivec_mtvscr">, 420 Intrinsic<[], [llvm_v4i32_ty], [IntrNoMem, IntrHasSideEffects]>; 421 422 423 // Loads. These don't map directly to GCC builtins because they represent the 424 // source address with a single pointer. 425 def int_ppc_altivec_lvx : 426 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], 427 [IntrReadMem, IntrArgMemOnly]>; 428 def int_ppc_altivec_lvxl : 429 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], 430 [IntrReadMem, IntrArgMemOnly]>; 431 def int_ppc_altivec_lvebx : 432 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], 433 [IntrReadMem, IntrArgMemOnly]>; 434 def int_ppc_altivec_lvehx : 435 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_ptr_ty], 436 [IntrReadMem, IntrArgMemOnly]>; 437 def int_ppc_altivec_lvewx : 438 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], 439 [IntrReadMem, IntrArgMemOnly]>; 440 441 // Stores. These don't map directly to GCC builtins because they represent the 442 // source address with a single pointer. 443 def int_ppc_altivec_stvx : 444 DefaultAttrsIntrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 445 [IntrWriteMem, IntrArgMemOnly]>; 446 def int_ppc_altivec_stvxl : 447 DefaultAttrsIntrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 448 [IntrWriteMem, IntrArgMemOnly]>; 449 def int_ppc_altivec_stvebx : 450 DefaultAttrsIntrinsic<[], [llvm_v16i8_ty, llvm_ptr_ty], 451 [IntrWriteMem, IntrArgMemOnly]>; 452 def int_ppc_altivec_stvehx : 453 DefaultAttrsIntrinsic<[], [llvm_v8i16_ty, llvm_ptr_ty], 454 [IntrWriteMem, IntrArgMemOnly]>; 455 def int_ppc_altivec_stvewx : 456 DefaultAttrsIntrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 457 [IntrWriteMem, IntrArgMemOnly]>; 458 459 // Comparisons setting a vector. 460 def int_ppc_altivec_vcmpbfp : ClangBuiltin<"__builtin_altivec_vcmpbfp">, 461 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 462 [IntrNoMem]>; 463 def int_ppc_altivec_vcmpeqfp : ClangBuiltin<"__builtin_altivec_vcmpeqfp">, 464 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 465 [IntrNoMem]>; 466 def int_ppc_altivec_vcmpgefp : ClangBuiltin<"__builtin_altivec_vcmpgefp">, 467 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 468 [IntrNoMem]>; 469 def int_ppc_altivec_vcmpgtfp : ClangBuiltin<"__builtin_altivec_vcmpgtfp">, 470 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4f32_ty], 471 [IntrNoMem]>; 472 473 def int_ppc_altivec_vcmpequd : ClangBuiltin<"__builtin_altivec_vcmpequd">, 474 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 475 [IntrNoMem]>; 476 def int_ppc_altivec_vcmpgtsd : ClangBuiltin<"__builtin_altivec_vcmpgtsd">, 477 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 478 [IntrNoMem]>; 479 def int_ppc_altivec_vcmpgtud : ClangBuiltin<"__builtin_altivec_vcmpgtud">, 480 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 481 [IntrNoMem]>; 482 483 def int_ppc_altivec_vcmpequw : ClangBuiltin<"__builtin_altivec_vcmpequw">, 484 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 485 [IntrNoMem]>; 486 def int_ppc_altivec_vcmpgtsw : ClangBuiltin<"__builtin_altivec_vcmpgtsw">, 487 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 488 [IntrNoMem]>; 489 def int_ppc_altivec_vcmpgtuw : ClangBuiltin<"__builtin_altivec_vcmpgtuw">, 490 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 491 [IntrNoMem]>; 492 def int_ppc_altivec_vcmpnew : ClangBuiltin<"__builtin_altivec_vcmpnew">, 493 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 494 [IntrNoMem]>; 495 def int_ppc_altivec_vcmpnezw : ClangBuiltin<"__builtin_altivec_vcmpnezw">, 496 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 497 [IntrNoMem]>; 498 499 def int_ppc_altivec_vcmpequh : ClangBuiltin<"__builtin_altivec_vcmpequh">, 500 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 501 [IntrNoMem]>; 502 def int_ppc_altivec_vcmpgtsh : ClangBuiltin<"__builtin_altivec_vcmpgtsh">, 503 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 504 [IntrNoMem]>; 505 def int_ppc_altivec_vcmpgtuh : ClangBuiltin<"__builtin_altivec_vcmpgtuh">, 506 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 507 [IntrNoMem]>; 508 def int_ppc_altivec_vcmpneh : ClangBuiltin<"__builtin_altivec_vcmpneh">, 509 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 510 [IntrNoMem]>; 511 def int_ppc_altivec_vcmpnezh : ClangBuiltin<"__builtin_altivec_vcmpnezh">, 512 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 513 [IntrNoMem]>; 514 515 def int_ppc_altivec_vcmpequb : ClangBuiltin<"__builtin_altivec_vcmpequb">, 516 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 517 [IntrNoMem]>; 518 def int_ppc_altivec_vcmpgtsb : ClangBuiltin<"__builtin_altivec_vcmpgtsb">, 519 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 520 [IntrNoMem]>; 521 def int_ppc_altivec_vcmpgtub : ClangBuiltin<"__builtin_altivec_vcmpgtub">, 522 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 523 [IntrNoMem]>; 524 def int_ppc_altivec_vcmpneb : ClangBuiltin<"__builtin_altivec_vcmpneb">, 525 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 526 [IntrNoMem]>; 527 def int_ppc_altivec_vcmpnezb : ClangBuiltin<"__builtin_altivec_vcmpnezb">, 528 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 529 [IntrNoMem]>; 530 531 def int_ppc_altivec_vcmpequq : ClangBuiltin<"__builtin_altivec_vcmpequq">, 532 DefaultAttrsIntrinsic<[llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty], 533 [IntrNoMem]>; 534 def int_ppc_altivec_vcmpgtsq : ClangBuiltin<"__builtin_altivec_vcmpgtsq">, 535 DefaultAttrsIntrinsic<[llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty], 536 [IntrNoMem]>; 537 def int_ppc_altivec_vcmpgtuq : ClangBuiltin<"__builtin_altivec_vcmpgtuq">, 538 DefaultAttrsIntrinsic<[llvm_v1i128_ty], [llvm_v1i128_ty, llvm_v1i128_ty], 539 [IntrNoMem]>; 540 def int_ppc_altivec_vcmpequq_p : ClangBuiltin<"__builtin_altivec_vcmpequq_p">, 541 DefaultAttrsIntrinsic<[llvm_i32_ty], 542 [llvm_i32_ty,llvm_v1i128_ty,llvm_v1i128_ty], 543 [IntrNoMem]>; 544 def int_ppc_altivec_vcmpgtsq_p : ClangBuiltin<"__builtin_altivec_vcmpgtsq_p">, 545 DefaultAttrsIntrinsic<[llvm_i32_ty], 546 [llvm_i32_ty,llvm_v1i128_ty,llvm_v1i128_ty], 547 [IntrNoMem]>; 548 def int_ppc_altivec_vcmpgtuq_p : ClangBuiltin<"__builtin_altivec_vcmpgtuq_p">, 549 DefaultAttrsIntrinsic<[llvm_i32_ty], 550 [llvm_i32_ty,llvm_v1i128_ty,llvm_v1i128_ty], 551 [IntrNoMem]>; 552 553 // Predicate Comparisons. The first operand specifies interpretation of CR6. 554 def int_ppc_altivec_vcmpbfp_p : ClangBuiltin<"__builtin_altivec_vcmpbfp_p">, 555 DefaultAttrsIntrinsic<[llvm_i32_ty], 556 [llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 557 [IntrNoMem]>; 558 def int_ppc_altivec_vcmpeqfp_p : ClangBuiltin<"__builtin_altivec_vcmpeqfp_p">, 559 DefaultAttrsIntrinsic<[llvm_i32_ty], 560 [llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 561 [IntrNoMem]>; 562 def int_ppc_altivec_vcmpgefp_p : ClangBuiltin<"__builtin_altivec_vcmpgefp_p">, 563 DefaultAttrsIntrinsic<[llvm_i32_ty], 564 [llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 565 [IntrNoMem]>; 566 def int_ppc_altivec_vcmpgtfp_p : ClangBuiltin<"__builtin_altivec_vcmpgtfp_p">, 567 DefaultAttrsIntrinsic<[llvm_i32_ty], 568 [llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 569 [IntrNoMem]>; 570 571 def int_ppc_altivec_vcmpequd_p : ClangBuiltin<"__builtin_altivec_vcmpequd_p">, 572 DefaultAttrsIntrinsic<[llvm_i32_ty], 573 [llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty], 574 [IntrNoMem]>; 575 def int_ppc_altivec_vcmpgtsd_p : ClangBuiltin<"__builtin_altivec_vcmpgtsd_p">, 576 DefaultAttrsIntrinsic<[llvm_i32_ty], 577 [llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty], 578 [IntrNoMem]>; 579 def int_ppc_altivec_vcmpgtud_p : ClangBuiltin<"__builtin_altivec_vcmpgtud_p">, 580 DefaultAttrsIntrinsic<[llvm_i32_ty], 581 [llvm_i32_ty,llvm_v2i64_ty,llvm_v2i64_ty], 582 [IntrNoMem]>; 583 584 def int_ppc_altivec_vcmpequw_p : ClangBuiltin<"__builtin_altivec_vcmpequw_p">, 585 DefaultAttrsIntrinsic<[llvm_i32_ty], 586 [llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 587 [IntrNoMem]>; 588 def int_ppc_altivec_vcmpgtsw_p : ClangBuiltin<"__builtin_altivec_vcmpgtsw_p">, 589 DefaultAttrsIntrinsic<[llvm_i32_ty], 590 [llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 591 [IntrNoMem]>; 592 def int_ppc_altivec_vcmpgtuw_p : ClangBuiltin<"__builtin_altivec_vcmpgtuw_p">, 593 DefaultAttrsIntrinsic<[llvm_i32_ty], 594 [llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 595 [IntrNoMem]>; 596 def int_ppc_altivec_vcmpnew_p : ClangBuiltin<"__builtin_altivec_vcmpnew_p">, 597 DefaultAttrsIntrinsic<[llvm_i32_ty], 598 [llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 599 [IntrNoMem]>; 600 def int_ppc_altivec_vcmpnezw_p : ClangBuiltin<"__builtin_altivec_vcmpnezw_p">, 601 DefaultAttrsIntrinsic<[llvm_i32_ty], 602 [llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty], 603 [IntrNoMem]>; 604 605 def int_ppc_altivec_vcmpequh_p : ClangBuiltin<"__builtin_altivec_vcmpequh_p">, 606 DefaultAttrsIntrinsic<[llvm_i32_ty], 607 [llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 608 [IntrNoMem]>; 609 def int_ppc_altivec_vcmpgtsh_p : ClangBuiltin<"__builtin_altivec_vcmpgtsh_p">, 610 DefaultAttrsIntrinsic<[llvm_i32_ty], 611 [llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 612 [IntrNoMem]>; 613 def int_ppc_altivec_vcmpgtuh_p : ClangBuiltin<"__builtin_altivec_vcmpgtuh_p">, 614 DefaultAttrsIntrinsic<[llvm_i32_ty], 615 [llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 616 [IntrNoMem]>; 617 def int_ppc_altivec_vcmpneh_p : ClangBuiltin<"__builtin_altivec_vcmpneh_p">, 618 DefaultAttrsIntrinsic<[llvm_i32_ty], 619 [llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 620 [IntrNoMem]>; 621 def int_ppc_altivec_vcmpnezh_p : ClangBuiltin<"__builtin_altivec_vcmpnezh_p">, 622 DefaultAttrsIntrinsic<[llvm_i32_ty], 623 [llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty], 624 [IntrNoMem]>; 625 626 def int_ppc_altivec_vcmpequb_p : ClangBuiltin<"__builtin_altivec_vcmpequb_p">, 627 DefaultAttrsIntrinsic<[llvm_i32_ty], 628 [llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 629 [IntrNoMem]>; 630 def int_ppc_altivec_vcmpgtsb_p : ClangBuiltin<"__builtin_altivec_vcmpgtsb_p">, 631 DefaultAttrsIntrinsic<[llvm_i32_ty], 632 [llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 633 [IntrNoMem]>; 634 def int_ppc_altivec_vcmpgtub_p : ClangBuiltin<"__builtin_altivec_vcmpgtub_p">, 635 DefaultAttrsIntrinsic<[llvm_i32_ty], 636 [llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 637 [IntrNoMem]>; 638 def int_ppc_altivec_vcmpneb_p : ClangBuiltin<"__builtin_altivec_vcmpneb_p">, 639 DefaultAttrsIntrinsic<[llvm_i32_ty], 640 [llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 641 [IntrNoMem]>; 642 def int_ppc_altivec_vcmpnezb_p : ClangBuiltin<"__builtin_altivec_vcmpnezb_p">, 643 DefaultAttrsIntrinsic<[llvm_i32_ty], 644 [llvm_i32_ty,llvm_v16i8_ty,llvm_v16i8_ty], 645 [IntrNoMem]>; 646 def int_ppc_altivec_vclzlsbb : ClangBuiltin<"__builtin_altivec_vclzlsbb">, 647 DefaultAttrsIntrinsic<[llvm_i32_ty],[llvm_v16i8_ty],[IntrNoMem]>; 648 def int_ppc_altivec_vctzlsbb : ClangBuiltin<"__builtin_altivec_vctzlsbb">, 649 DefaultAttrsIntrinsic<[llvm_i32_ty],[llvm_v16i8_ty],[IntrNoMem]>; 650 def int_ppc_altivec_vprtybw : ClangBuiltin<"__builtin_altivec_vprtybw">, 651 DefaultAttrsIntrinsic<[llvm_v4i32_ty],[llvm_v4i32_ty],[IntrNoMem]>; 652 def int_ppc_altivec_vprtybd : ClangBuiltin<"__builtin_altivec_vprtybd">, 653 DefaultAttrsIntrinsic<[llvm_v2i64_ty],[llvm_v2i64_ty],[IntrNoMem]>; 654 def int_ppc_altivec_vprtybq : ClangBuiltin<"__builtin_altivec_vprtybq">, 655 DefaultAttrsIntrinsic<[llvm_v1i128_ty],[llvm_v1i128_ty],[IntrNoMem]>; 656 657 // BCD intrinsics. 658 def int_ppc_national2packed: ClangBuiltin<"__builtin_ppc_national2packed">, 659 DefaultAttrsIntrinsic<[llvm_v16i8_ty],[llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>; 660 def int_ppc_packed2national: ClangBuiltin<"__builtin_ppc_packed2national">, 661 DefaultAttrsIntrinsic<[llvm_v16i8_ty],[llvm_v16i8_ty], [IntrNoMem]>; 662 def int_ppc_packed2zoned: ClangBuiltin<"__builtin_ppc_packed2zoned">, 663 DefaultAttrsIntrinsic<[llvm_v16i8_ty],[llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>; 664 def int_ppc_zoned2packed: ClangBuiltin<"__builtin_ppc_zoned2packed">, 665 DefaultAttrsIntrinsic<[llvm_v16i8_ty],[llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>; 666 def int_ppc_cdtbcdd : ClangBuiltin<"__builtin_ppc_cdtbcd">, 667 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem]>; 668 def int_ppc_cbcdtdd: ClangBuiltin<"__builtin_ppc_cbcdtd">, 669 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty], [IntrNoMem]>; 670 def int_ppc_addg6sd: ClangBuiltin<"__builtin_ppc_addg6s">, 671 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 672 def int_ppc_cdtbcd : ClangBuiltin<"__builtin_cdtbcd">, 673 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>; 674 def int_ppc_cbcdtd: ClangBuiltin<"__builtin_cbcdtd">, 675 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>; 676 def int_ppc_addg6s: ClangBuiltin<"__builtin_addg6s">, 677 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 678 679 def int_ppc_bcdadd : ClangBuiltin<"__builtin_ppc_bcdadd">, 680 DefaultAttrsIntrinsic< 681 [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], 682 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 683 def int_ppc_bcdadd_p : ClangBuiltin<"__builtin_ppc_bcdadd_p">, 684 DefaultAttrsIntrinsic< 685 [llvm_i32_ty], [llvm_i32_ty, llvm_v16i8_ty, llvm_v16i8_ty], 686 [IntrNoMem, ImmArg<ArgIndex<0>>]>; 687 def int_ppc_bcdsub : ClangBuiltin<"__builtin_ppc_bcdsub">, 688 DefaultAttrsIntrinsic< 689 [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], 690 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 691 def int_ppc_bcdsub_p : ClangBuiltin<"__builtin_ppc_bcdsub_p">, 692 DefaultAttrsIntrinsic< 693 [llvm_i32_ty], [llvm_i32_ty, llvm_v16i8_ty, llvm_v16i8_ty], 694 [IntrNoMem, ImmArg<ArgIndex<0>>]>; 695 696 // P10 Vector Extract with Mask 697 def int_ppc_altivec_vextractbm : ClangBuiltin<"__builtin_altivec_vextractbm">, 698 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>; 699 def int_ppc_altivec_vextracthm : ClangBuiltin<"__builtin_altivec_vextracthm">, 700 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 701 def int_ppc_altivec_vextractwm : ClangBuiltin<"__builtin_altivec_vextractwm">, 702 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4i32_ty], [IntrNoMem]>; 703 def int_ppc_altivec_vextractdm : ClangBuiltin<"__builtin_altivec_vextractdm">, 704 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2i64_ty], [IntrNoMem]>; 705 def int_ppc_altivec_vextractqm : ClangBuiltin<"__builtin_altivec_vextractqm">, 706 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v1i128_ty], [IntrNoMem]>; 707 708 // P10 Vector Expand with Mask 709 def int_ppc_altivec_vexpandbm : ClangBuiltin<"__builtin_altivec_vexpandbm">, 710 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>; 711 def int_ppc_altivec_vexpandhm : ClangBuiltin<"__builtin_altivec_vexpandhm">, 712 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>; 713 def int_ppc_altivec_vexpandwm : ClangBuiltin<"__builtin_altivec_vexpandwm">, 714 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>; 715 def int_ppc_altivec_vexpanddm : ClangBuiltin<"__builtin_altivec_vexpanddm">, 716 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>; 717 def int_ppc_altivec_vexpandqm : ClangBuiltin<"__builtin_altivec_vexpandqm">, 718 DefaultAttrsIntrinsic<[llvm_v1i128_ty], [llvm_v1i128_ty], [IntrNoMem]>; 719 720 // P10 Vector Count with Mask intrinsics. 721 def int_ppc_altivec_vcntmbb : ClangBuiltin<"__builtin_altivec_vcntmbb">, 722 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v16i8_ty, llvm_i32_ty], 723 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 724 def int_ppc_altivec_vcntmbh : ClangBuiltin<"__builtin_altivec_vcntmbh">, 725 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v8i16_ty, llvm_i32_ty], 726 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 727 def int_ppc_altivec_vcntmbw : ClangBuiltin<"__builtin_altivec_vcntmbw">, 728 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v4i32_ty, llvm_i32_ty], 729 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 730 def int_ppc_altivec_vcntmbd : ClangBuiltin<"__builtin_altivec_vcntmbd">, 731 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty], 732 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 733 734 // P10 Move to VSR with Mask Intrinsics. 735 def int_ppc_altivec_mtvsrbm : ClangBuiltin<"__builtin_altivec_mtvsrbm">, 736 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_i64_ty], [IntrNoMem]>; 737 def int_ppc_altivec_mtvsrhm : ClangBuiltin<"__builtin_altivec_mtvsrhm">, 738 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_i64_ty], [IntrNoMem]>; 739 def int_ppc_altivec_mtvsrwm : ClangBuiltin<"__builtin_altivec_mtvsrwm">, 740 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_i64_ty], [IntrNoMem]>; 741 def int_ppc_altivec_mtvsrdm : ClangBuiltin<"__builtin_altivec_mtvsrdm">, 742 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_i64_ty], [IntrNoMem]>; 743 def int_ppc_altivec_mtvsrqm : ClangBuiltin<"__builtin_altivec_mtvsrqm">, 744 DefaultAttrsIntrinsic<[llvm_v1i128_ty], [llvm_i64_ty], [IntrNoMem]>; 745 746 // P10 Vector Parallel Bits Deposit/Extract Doubleword Builtins. 747 def int_ppc_altivec_vpdepd : ClangBuiltin<"__builtin_altivec_vpdepd">, 748 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 749 [IntrNoMem]>; 750 def int_ppc_altivec_vpextd : ClangBuiltin<"__builtin_altivec_vpextd">, 751 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 752 [IntrNoMem]>; 753 754 // P10 Vector String Isolate Intrinsics. 755 def int_ppc_altivec_vstribr : ClangBuiltin<"__builtin_altivec_vstribr">, 756 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>; 757 def int_ppc_altivec_vstribl : ClangBuiltin<"__builtin_altivec_vstribl">, 758 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>; 759 def int_ppc_altivec_vstrihr : ClangBuiltin<"__builtin_altivec_vstrihr">, 760 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>; 761 def int_ppc_altivec_vstrihl : ClangBuiltin<"__builtin_altivec_vstrihl">, 762 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>; 763 // Predicate Intrinsics: The first operand specifies interpretation of CR6. 764 def int_ppc_altivec_vstribr_p : ClangBuiltin<"__builtin_altivec_vstribr_p">, 765 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_v16i8_ty], 766 [IntrNoMem]>; 767 def int_ppc_altivec_vstribl_p : ClangBuiltin<"__builtin_altivec_vstribl_p">, 768 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_v16i8_ty], 769 [IntrNoMem]>; 770 def int_ppc_altivec_vstrihr_p : ClangBuiltin<"__builtin_altivec_vstrihr_p">, 771 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_v8i16_ty], 772 [IntrNoMem]>; 773 def int_ppc_altivec_vstrihl_p : ClangBuiltin<"__builtin_altivec_vstrihl_p">, 774 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_v8i16_ty], 775 [IntrNoMem]>; 776 777 // P10 Vector Centrifuge Builtin. 778 def int_ppc_altivec_vcfuged : ClangBuiltin<"__builtin_altivec_vcfuged">, 779 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 780 [IntrNoMem]>; 781 782 // P10 Vector Gather Every Nth Bit Builtin. 783 def int_ppc_altivec_vgnb : ClangBuiltin<"__builtin_altivec_vgnb">, 784 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v1i128_ty, llvm_i32_ty], 785 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 786 787 // P10 Vector Clear Bytes 788 def int_ppc_altivec_vclrlb : ClangBuiltin<"__builtin_altivec_vclrlb">, 789 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], 790 [IntrNoMem]>; 791 def int_ppc_altivec_vclrrb : ClangBuiltin<"__builtin_altivec_vclrrb">, 792 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i32_ty], 793 [IntrNoMem]>; 794 795 // P10 Vector Shift Double Bit Immediate. 796 def int_ppc_altivec_vsldbi : ClangBuiltin<"__builtin_altivec_vsldbi">, 797 DefaultAttrsIntrinsic<[llvm_v16i8_ty], 798 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], 799 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 800 def int_ppc_altivec_vsrdbi : ClangBuiltin<"__builtin_altivec_vsrdbi">, 801 DefaultAttrsIntrinsic<[llvm_v16i8_ty], 802 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], 803 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 804 805 // P10 Vector Insert. 806 def int_ppc_altivec_vinsblx : ClangBuiltin<"__builtin_altivec_vinsblx">, 807 DefaultAttrsIntrinsic<[llvm_v16i8_ty], 808 [llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty], 809 [IntrNoMem]>; 810 def int_ppc_altivec_vinsbrx : ClangBuiltin<"__builtin_altivec_vinsbrx">, 811 DefaultAttrsIntrinsic<[llvm_v16i8_ty], 812 [llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty], 813 [IntrNoMem]>; 814 def int_ppc_altivec_vinshlx : ClangBuiltin<"__builtin_altivec_vinshlx">, 815 DefaultAttrsIntrinsic<[llvm_v8i16_ty], 816 [llvm_v8i16_ty, llvm_i32_ty, llvm_i32_ty], 817 [IntrNoMem]>; 818 def int_ppc_altivec_vinshrx : ClangBuiltin<"__builtin_altivec_vinshrx">, 819 DefaultAttrsIntrinsic<[llvm_v8i16_ty], 820 [llvm_v8i16_ty, llvm_i32_ty, llvm_i32_ty], 821 [IntrNoMem]>; 822 def int_ppc_altivec_vinswlx : ClangBuiltin<"__builtin_altivec_vinswlx">, 823 DefaultAttrsIntrinsic<[llvm_v4i32_ty], 824 [llvm_v4i32_ty, llvm_i32_ty, llvm_i32_ty], 825 [IntrNoMem]>; 826 def int_ppc_altivec_vinswrx : ClangBuiltin<"__builtin_altivec_vinswrx">, 827 DefaultAttrsIntrinsic<[llvm_v4i32_ty], 828 [llvm_v4i32_ty, llvm_i32_ty, llvm_i32_ty], 829 [IntrNoMem]>; 830 def int_ppc_altivec_vinsdlx : ClangBuiltin<"__builtin_altivec_vinsdlx">, 831 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 832 [llvm_v2i64_ty, llvm_i64_ty, llvm_i64_ty], 833 [IntrNoMem]>; 834 def int_ppc_altivec_vinsdrx : ClangBuiltin<"__builtin_altivec_vinsdrx">, 835 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 836 [llvm_v2i64_ty, llvm_i64_ty, llvm_i64_ty], 837 [IntrNoMem]>; 838 def int_ppc_altivec_vinsbvlx : ClangBuiltin<"__builtin_altivec_vinsbvlx">, 839 DefaultAttrsIntrinsic<[llvm_v16i8_ty], 840 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty], 841 [IntrNoMem]>; 842 def int_ppc_altivec_vinsbvrx : ClangBuiltin<"__builtin_altivec_vinsbvrx">, 843 DefaultAttrsIntrinsic<[llvm_v16i8_ty], 844 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty], 845 [IntrNoMem]>; 846 def int_ppc_altivec_vinshvlx : ClangBuiltin<"__builtin_altivec_vinshvlx">, 847 DefaultAttrsIntrinsic<[llvm_v8i16_ty], 848 [llvm_v8i16_ty, llvm_i32_ty, llvm_v8i16_ty], 849 [IntrNoMem]>; 850 def int_ppc_altivec_vinshvrx : ClangBuiltin<"__builtin_altivec_vinshvrx">, 851 DefaultAttrsIntrinsic<[llvm_v8i16_ty], 852 [llvm_v8i16_ty, llvm_i32_ty, llvm_v8i16_ty], 853 [IntrNoMem]>; 854 def int_ppc_altivec_vinswvlx : ClangBuiltin<"__builtin_altivec_vinswvlx">, 855 DefaultAttrsIntrinsic<[llvm_v4i32_ty], 856 [llvm_v4i32_ty, llvm_i32_ty, llvm_v4i32_ty], 857 [IntrNoMem]>; 858 def int_ppc_altivec_vinswvrx : ClangBuiltin<"__builtin_altivec_vinswvrx">, 859 DefaultAttrsIntrinsic<[llvm_v4i32_ty], 860 [llvm_v4i32_ty, llvm_i32_ty, llvm_v4i32_ty], 861 [IntrNoMem]>; 862 // P10 Vector Insert with immediate. 863 def int_ppc_altivec_vinsw : 864 DefaultAttrsIntrinsic<[llvm_v4i32_ty], 865 [llvm_v4i32_ty, llvm_i32_ty, llvm_i32_ty], 866 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 867 def int_ppc_altivec_vinsd : 868 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 869 [llvm_v2i64_ty, llvm_i64_ty, llvm_i32_ty], 870 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 871 // P10 Vector Extract. 872 def int_ppc_altivec_vextdubvlx : ClangBuiltin<"__builtin_altivec_vextdubvlx">, 873 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 874 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], 875 [IntrNoMem]>; 876 def int_ppc_altivec_vextdubvrx : ClangBuiltin<"__builtin_altivec_vextdubvrx">, 877 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 878 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], 879 [IntrNoMem]>; 880 def int_ppc_altivec_vextduhvlx : ClangBuiltin<"__builtin_altivec_vextduhvlx">, 881 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 882 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty], 883 [IntrNoMem]>; 884 def int_ppc_altivec_vextduhvrx : ClangBuiltin<"__builtin_altivec_vextduhvrx">, 885 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 886 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty], 887 [IntrNoMem]>; 888 def int_ppc_altivec_vextduwvlx : ClangBuiltin<"__builtin_altivec_vextduwvlx">, 889 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 890 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], 891 [IntrNoMem]>; 892 def int_ppc_altivec_vextduwvrx : ClangBuiltin<"__builtin_altivec_vextduwvrx">, 893 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 894 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], 895 [IntrNoMem]>; 896 def int_ppc_altivec_vextddvlx : ClangBuiltin<"__builtin_altivec_vextddvlx">, 897 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 898 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], 899 [IntrNoMem]>; 900 def int_ppc_altivec_vextddvrx : ClangBuiltin<"__builtin_altivec_vextddvrx">, 901 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 902 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], 903 [IntrNoMem]>; 904} 905 906// Vector average. 907def int_ppc_altivec_vavgsb : PowerPC_Vec_BBB_Intrinsic<"vavgsb">; 908def int_ppc_altivec_vavgsh : PowerPC_Vec_HHH_Intrinsic<"vavgsh">; 909def int_ppc_altivec_vavgsw : PowerPC_Vec_WWW_Intrinsic<"vavgsw">; 910def int_ppc_altivec_vavgub : PowerPC_Vec_BBB_Intrinsic<"vavgub">; 911def int_ppc_altivec_vavguh : PowerPC_Vec_HHH_Intrinsic<"vavguh">; 912def int_ppc_altivec_vavguw : PowerPC_Vec_WWW_Intrinsic<"vavguw">; 913 914// Vector maximum. 915def int_ppc_altivec_vmaxfp : PowerPC_Vec_FFF_Intrinsic<"vmaxfp">; 916def int_ppc_altivec_vmaxsb : PowerPC_Vec_BBB_Intrinsic<"vmaxsb">; 917def int_ppc_altivec_vmaxsh : PowerPC_Vec_HHH_Intrinsic<"vmaxsh">; 918def int_ppc_altivec_vmaxsw : PowerPC_Vec_WWW_Intrinsic<"vmaxsw">; 919def int_ppc_altivec_vmaxsd : PowerPC_Vec_DDD_Intrinsic<"vmaxsd">; 920def int_ppc_altivec_vmaxub : PowerPC_Vec_BBB_Intrinsic<"vmaxub">; 921def int_ppc_altivec_vmaxuh : PowerPC_Vec_HHH_Intrinsic<"vmaxuh">; 922def int_ppc_altivec_vmaxuw : PowerPC_Vec_WWW_Intrinsic<"vmaxuw">; 923def int_ppc_altivec_vmaxud : PowerPC_Vec_DDD_Intrinsic<"vmaxud">; 924 925// Vector minimum. 926def int_ppc_altivec_vminfp : PowerPC_Vec_FFF_Intrinsic<"vminfp">; 927def int_ppc_altivec_vminsb : PowerPC_Vec_BBB_Intrinsic<"vminsb">; 928def int_ppc_altivec_vminsh : PowerPC_Vec_HHH_Intrinsic<"vminsh">; 929def int_ppc_altivec_vminsw : PowerPC_Vec_WWW_Intrinsic<"vminsw">; 930def int_ppc_altivec_vminsd : PowerPC_Vec_DDD_Intrinsic<"vminsd">; 931def int_ppc_altivec_vminub : PowerPC_Vec_BBB_Intrinsic<"vminub">; 932def int_ppc_altivec_vminuh : PowerPC_Vec_HHH_Intrinsic<"vminuh">; 933def int_ppc_altivec_vminuw : PowerPC_Vec_WWW_Intrinsic<"vminuw">; 934def int_ppc_altivec_vminud : PowerPC_Vec_DDD_Intrinsic<"vminud">; 935 936// Saturating adds. 937def int_ppc_altivec_vaddubs : PowerPC_Vec_BBB_Intrinsic<"vaddubs">; 938def int_ppc_altivec_vaddsbs : PowerPC_Vec_BBB_Intrinsic<"vaddsbs">; 939def int_ppc_altivec_vadduhs : PowerPC_Vec_HHH_Intrinsic<"vadduhs">; 940def int_ppc_altivec_vaddshs : PowerPC_Vec_HHH_Intrinsic<"vaddshs">; 941def int_ppc_altivec_vadduws : PowerPC_Vec_WWW_Intrinsic<"vadduws">; 942def int_ppc_altivec_vaddsws : PowerPC_Vec_WWW_Intrinsic<"vaddsws">; 943def int_ppc_altivec_vaddcuw : PowerPC_Vec_WWW_Intrinsic<"vaddcuw">; 944def int_ppc_altivec_vaddcuq : PowerPC_Vec_QQQ_Intrinsic<"vaddcuq">; 945 946// Saturating subs. 947def int_ppc_altivec_vsububs : PowerPC_Vec_BBB_Intrinsic<"vsububs">; 948def int_ppc_altivec_vsubsbs : PowerPC_Vec_BBB_Intrinsic<"vsubsbs">; 949def int_ppc_altivec_vsubuhs : PowerPC_Vec_HHH_Intrinsic<"vsubuhs">; 950def int_ppc_altivec_vsubshs : PowerPC_Vec_HHH_Intrinsic<"vsubshs">; 951def int_ppc_altivec_vsubuws : PowerPC_Vec_WWW_Intrinsic<"vsubuws">; 952def int_ppc_altivec_vsubsws : PowerPC_Vec_WWW_Intrinsic<"vsubsws">; 953def int_ppc_altivec_vsubcuw : PowerPC_Vec_WWW_Intrinsic<"vsubcuw">; 954def int_ppc_altivec_vsubcuq : PowerPC_Vec_QQQ_Intrinsic<"vsubcuq">; 955 956let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 957 // Saturating multiply-adds. 958 def int_ppc_altivec_vmhaddshs : ClangBuiltin<"__builtin_altivec_vmhaddshs">, 959 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 960 llvm_v8i16_ty, llvm_v8i16_ty], 961 [IntrNoMem, IntrHasSideEffects]>; 962 def int_ppc_altivec_vmhraddshs : ClangBuiltin<"__builtin_altivec_vmhraddshs">, 963 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 964 llvm_v8i16_ty, llvm_v8i16_ty], 965 [IntrNoMem, IntrHasSideEffects]>; 966 967 def int_ppc_altivec_vmaddfp : ClangBuiltin<"__builtin_altivec_vmaddfp">, 968 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 969 llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 970 def int_ppc_altivec_vnmsubfp : ClangBuiltin<"__builtin_altivec_vnmsubfp">, 971 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 972 llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 973 974 // Vector Multiply Sum Instructions. 975 def int_ppc_altivec_vmsummbm : ClangBuiltin<"__builtin_altivec_vmsummbm">, 976 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 977 llvm_v4i32_ty], [IntrNoMem]>; 978 def int_ppc_altivec_vmsumshm : ClangBuiltin<"__builtin_altivec_vmsumshm">, 979 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 980 llvm_v4i32_ty], [IntrNoMem]>; 981 def int_ppc_altivec_vmsumshs : ClangBuiltin<"__builtin_altivec_vmsumshs">, 982 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 983 llvm_v4i32_ty], [IntrNoMem, IntrHasSideEffects]>; 984 def int_ppc_altivec_vmsumubm : ClangBuiltin<"__builtin_altivec_vmsumubm">, 985 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 986 llvm_v4i32_ty], [IntrNoMem]>; 987 def int_ppc_altivec_vmsumuhm : ClangBuiltin<"__builtin_altivec_vmsumuhm">, 988 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 989 llvm_v4i32_ty], [IntrNoMem]>; 990 def int_ppc_altivec_vmsumudm : ClangBuiltin<"__builtin_altivec_vmsumudm">, 991 DefaultAttrsIntrinsic<[llvm_v1i128_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 992 llvm_v1i128_ty], [IntrNoMem]>; 993 def int_ppc_altivec_vmsumuhs : ClangBuiltin<"__builtin_altivec_vmsumuhs">, 994 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 995 llvm_v4i32_ty], [IntrNoMem, IntrHasSideEffects]>; 996 def int_ppc_altivec_vmsumcud : ClangBuiltin<"__builtin_altivec_vmsumcud">, 997 DefaultAttrsIntrinsic<[llvm_v1i128_ty], 998 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v1i128_ty], 999 [IntrNoMem]>; 1000 1001 // Vector Multiply Instructions. 1002 def int_ppc_altivec_vmulesb : ClangBuiltin<"__builtin_altivec_vmulesb">, 1003 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 1004 [IntrNoMem]>; 1005 def int_ppc_altivec_vmulesh : ClangBuiltin<"__builtin_altivec_vmulesh">, 1006 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1007 [IntrNoMem]>; 1008 def int_ppc_altivec_vmulesw : ClangBuiltin<"__builtin_altivec_vmulesw">, 1009 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1010 [IntrNoMem]>; 1011 def int_ppc_altivec_vmulesd : PowerPC_Vec_QDD_Intrinsic<"vmulesd">; 1012 def int_ppc_altivec_vmuleub : ClangBuiltin<"__builtin_altivec_vmuleub">, 1013 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 1014 [IntrNoMem]>; 1015 def int_ppc_altivec_vmuleuh : ClangBuiltin<"__builtin_altivec_vmuleuh">, 1016 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1017 [IntrNoMem]>; 1018 def int_ppc_altivec_vmuleuw : ClangBuiltin<"__builtin_altivec_vmuleuw">, 1019 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1020 [IntrNoMem]>; 1021 def int_ppc_altivec_vmuleud : PowerPC_Vec_QDD_Intrinsic<"vmuleud">; 1022 1023 def int_ppc_altivec_vmulosb : ClangBuiltin<"__builtin_altivec_vmulosb">, 1024 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 1025 [IntrNoMem]>; 1026 def int_ppc_altivec_vmulosh : ClangBuiltin<"__builtin_altivec_vmulosh">, 1027 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1028 [IntrNoMem]>; 1029 def int_ppc_altivec_vmulosw : ClangBuiltin<"__builtin_altivec_vmulosw">, 1030 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1031 [IntrNoMem]>; 1032 def int_ppc_altivec_vmulosd : PowerPC_Vec_QDD_Intrinsic<"vmulosd">; 1033 def int_ppc_altivec_vmuloub : ClangBuiltin<"__builtin_altivec_vmuloub">, 1034 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 1035 [IntrNoMem]>; 1036 def int_ppc_altivec_vmulouh : ClangBuiltin<"__builtin_altivec_vmulouh">, 1037 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1038 [IntrNoMem]>; 1039 def int_ppc_altivec_vmulouw : ClangBuiltin<"__builtin_altivec_vmulouw">, 1040 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1041 [IntrNoMem]>; 1042 def int_ppc_altivec_vmuloud : PowerPC_Vec_QDD_Intrinsic<"vmuloud">; 1043 1044 // Vector Sum Instructions. 1045 def int_ppc_altivec_vsumsws : ClangBuiltin<"__builtin_altivec_vsumsws">, 1046 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1047 [IntrNoMem, IntrHasSideEffects]>; 1048 def int_ppc_altivec_vsum2sws : ClangBuiltin<"__builtin_altivec_vsum2sws">, 1049 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1050 [IntrNoMem, IntrHasSideEffects]>; 1051 def int_ppc_altivec_vsum4sbs : ClangBuiltin<"__builtin_altivec_vsum4sbs">, 1052 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty], 1053 [IntrNoMem, IntrHasSideEffects]>; 1054 def int_ppc_altivec_vsum4shs : ClangBuiltin<"__builtin_altivec_vsum4shs">, 1055 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v4i32_ty], 1056 [IntrNoMem, IntrHasSideEffects]>; 1057 def int_ppc_altivec_vsum4ubs : ClangBuiltin<"__builtin_altivec_vsum4ubs">, 1058 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v4i32_ty], 1059 [IntrNoMem, IntrHasSideEffects]>; 1060 1061 // Vector Sign Extension Instructions 1062 def int_ppc_altivec_vextsb2w : ClangBuiltin<"__builtin_altivec_vextsb2w">, 1063 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>; 1064 def int_ppc_altivec_vextsb2d : ClangBuiltin<"__builtin_altivec_vextsb2d">, 1065 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>; 1066 def int_ppc_altivec_vextsh2w : ClangBuiltin<"__builtin_altivec_vextsh2w">, 1067 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 1068 def int_ppc_altivec_vextsh2d : ClangBuiltin<"__builtin_altivec_vextsh2d">, 1069 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>; 1070 def int_ppc_altivec_vextsw2d : ClangBuiltin<"__builtin_altivec_vextsw2d">, 1071 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 1072 def int_ppc_altivec_vextsd2q : ClangBuiltin<"__builtin_altivec_vextsd2q">, 1073 DefaultAttrsIntrinsic<[llvm_v1i128_ty], [llvm_v2i64_ty], [IntrNoMem]>; 1074 1075 // Other multiplies. 1076 def int_ppc_altivec_vmladduhm : ClangBuiltin<"__builtin_altivec_vmladduhm">, 1077 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 1078 llvm_v8i16_ty], [IntrNoMem]>; 1079 1080 // Packs. 1081 def int_ppc_altivec_vpkpx : ClangBuiltin<"__builtin_altivec_vpkpx">, 1082 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1083 [IntrNoMem]>; 1084 def int_ppc_altivec_vpkshss : ClangBuiltin<"__builtin_altivec_vpkshss">, 1085 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1086 [IntrNoMem, IntrHasSideEffects]>; 1087 def int_ppc_altivec_vpkshus : ClangBuiltin<"__builtin_altivec_vpkshus">, 1088 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1089 [IntrNoMem, IntrHasSideEffects]>; 1090 def int_ppc_altivec_vpkswss : ClangBuiltin<"__builtin_altivec_vpkswss">, 1091 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1092 [IntrNoMem, IntrHasSideEffects]>; 1093 def int_ppc_altivec_vpkswus : ClangBuiltin<"__builtin_altivec_vpkswus">, 1094 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1095 [IntrNoMem, IntrHasSideEffects]>; 1096 def int_ppc_altivec_vpksdss : ClangBuiltin<"__builtin_altivec_vpksdss">, 1097 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1098 [IntrNoMem, IntrHasSideEffects]>; 1099 def int_ppc_altivec_vpksdus : ClangBuiltin<"__builtin_altivec_vpksdus">, 1100 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1101 [IntrNoMem, IntrHasSideEffects]>; 1102 // vpkuhum is lowered to a shuffle. 1103 def int_ppc_altivec_vpkuhus : ClangBuiltin<"__builtin_altivec_vpkuhus">, 1104 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1105 [IntrNoMem, IntrHasSideEffects]>; 1106 // vpkuwum is lowered to a shuffle. 1107 def int_ppc_altivec_vpkuwus : ClangBuiltin<"__builtin_altivec_vpkuwus">, 1108 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1109 [IntrNoMem, IntrHasSideEffects]>; 1110 // vpkudum is lowered to a shuffle. 1111 def int_ppc_altivec_vpkudus : ClangBuiltin<"__builtin_altivec_vpkudus">, 1112 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1113 [IntrNoMem, IntrHasSideEffects]>; 1114 1115 // Unpacks. 1116 def int_ppc_altivec_vupkhpx : ClangBuiltin<"__builtin_altivec_vupkhpx">, 1117 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 1118 def int_ppc_altivec_vupkhsb : ClangBuiltin<"__builtin_altivec_vupkhsb">, 1119 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 1120 def int_ppc_altivec_vupkhsh : ClangBuiltin<"__builtin_altivec_vupkhsh">, 1121 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 1122 def int_ppc_altivec_vupkhsw : ClangBuiltin<"__builtin_altivec_vupkhsw">, 1123 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 1124 def int_ppc_altivec_vupklpx : ClangBuiltin<"__builtin_altivec_vupklpx">, 1125 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 1126 def int_ppc_altivec_vupklsb : ClangBuiltin<"__builtin_altivec_vupklsb">, 1127 DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 1128 def int_ppc_altivec_vupklsh : ClangBuiltin<"__builtin_altivec_vupklsh">, 1129 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 1130 def int_ppc_altivec_vupklsw : ClangBuiltin<"__builtin_altivec_vupklsw">, 1131 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 1132 1133 1134 // FP <-> integer conversion. 1135 def int_ppc_altivec_vcfsx : ClangBuiltin<"__builtin_altivec_vcfsx">, 1136 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty], 1137 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 1138 def int_ppc_altivec_vcfux : ClangBuiltin<"__builtin_altivec_vcfux">, 1139 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty, llvm_i32_ty], 1140 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 1141 def int_ppc_altivec_vctsxs : ClangBuiltin<"__builtin_altivec_vctsxs">, 1142 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty], 1143 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 1144 def int_ppc_altivec_vctuxs : ClangBuiltin<"__builtin_altivec_vctuxs">, 1145 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_i32_ty], 1146 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 1147 1148 def int_ppc_altivec_vrfim : ClangBuiltin<"__builtin_altivec_vrfim">, 1149 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1150 def int_ppc_altivec_vrfin : ClangBuiltin<"__builtin_altivec_vrfin">, 1151 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1152 def int_ppc_altivec_vrfip : ClangBuiltin<"__builtin_altivec_vrfip">, 1153 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1154 def int_ppc_altivec_vrfiz : ClangBuiltin<"__builtin_altivec_vrfiz">, 1155 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1156 1157 // Add Extended Quadword 1158 def int_ppc_altivec_vaddeuqm : ClangBuiltin<"__builtin_altivec_vaddeuqm">, 1159 DefaultAttrsIntrinsic<[llvm_v1i128_ty], 1160 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 1161 [IntrNoMem]>; 1162 def int_ppc_altivec_vaddecuq : ClangBuiltin<"__builtin_altivec_vaddecuq">, 1163 DefaultAttrsIntrinsic<[llvm_v1i128_ty], 1164 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 1165 [IntrNoMem]>; 1166 1167 // Sub Extended Quadword 1168 def int_ppc_altivec_vsubeuqm : ClangBuiltin<"__builtin_altivec_vsubeuqm">, 1169 DefaultAttrsIntrinsic<[llvm_v1i128_ty], 1170 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 1171 [IntrNoMem]>; 1172 def int_ppc_altivec_vsubecuq : ClangBuiltin<"__builtin_altivec_vsubecuq">, 1173 DefaultAttrsIntrinsic<[llvm_v1i128_ty], 1174 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 1175 [IntrNoMem]>; 1176 1177 // P10 Vector Count Leading / Trailing Zeroes under bit Mask Builtins. 1178 def int_ppc_altivec_vclzdm : ClangBuiltin<"__builtin_altivec_vclzdm">, 1179 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1180 [IntrNoMem]>; 1181 def int_ppc_altivec_vctzdm : ClangBuiltin<"__builtin_altivec_vctzdm">, 1182 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1183 [IntrNoMem]>; 1184} 1185 1186def int_ppc_altivec_vsl : PowerPC_Vec_WWW_Intrinsic<"vsl">; 1187def int_ppc_altivec_vslo : PowerPC_Vec_WWW_Intrinsic<"vslo">; 1188 1189def int_ppc_altivec_vslb : PowerPC_Vec_BBB_Intrinsic<"vslb">; 1190def int_ppc_altivec_vslv : PowerPC_Vec_BBB_Intrinsic<"vslv">; 1191def int_ppc_altivec_vsrv : PowerPC_Vec_BBB_Intrinsic<"vsrv">; 1192def int_ppc_altivec_vslh : PowerPC_Vec_HHH_Intrinsic<"vslh">; 1193def int_ppc_altivec_vslw : PowerPC_Vec_WWW_Intrinsic<"vslw">; 1194 1195// Right Shifts. 1196def int_ppc_altivec_vsr : PowerPC_Vec_WWW_Intrinsic<"vsr">; 1197def int_ppc_altivec_vsro : PowerPC_Vec_WWW_Intrinsic<"vsro">; 1198 1199def int_ppc_altivec_vsrb : PowerPC_Vec_BBB_Intrinsic<"vsrb">; 1200def int_ppc_altivec_vsrh : PowerPC_Vec_HHH_Intrinsic<"vsrh">; 1201def int_ppc_altivec_vsrw : PowerPC_Vec_WWW_Intrinsic<"vsrw">; 1202def int_ppc_altivec_vsrab : PowerPC_Vec_BBB_Intrinsic<"vsrab">; 1203def int_ppc_altivec_vsrah : PowerPC_Vec_HHH_Intrinsic<"vsrah">; 1204def int_ppc_altivec_vsraw : PowerPC_Vec_WWW_Intrinsic<"vsraw">; 1205 1206// Rotates. 1207def int_ppc_altivec_vrlb : PowerPC_Vec_BBB_Intrinsic<"vrlb">; 1208def int_ppc_altivec_vrlh : PowerPC_Vec_HHH_Intrinsic<"vrlh">; 1209def int_ppc_altivec_vrlw : PowerPC_Vec_WWW_Intrinsic<"vrlw">; 1210def int_ppc_altivec_vrld : PowerPC_Vec_DDD_Intrinsic<"vrld">; 1211 1212let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 1213 // Miscellaneous. 1214 def int_ppc_altivec_lvsl : 1215 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>; 1216 def int_ppc_altivec_lvsr : 1217 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>; 1218 1219 def int_ppc_altivec_vperm : ClangBuiltin<"__builtin_altivec_vperm_4si">, 1220 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 1221 llvm_v4i32_ty, llvm_v16i8_ty], [IntrNoMem]>; 1222 def int_ppc_altivec_vsel : ClangBuiltin<"__builtin_altivec_vsel_4si">, 1223 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 1224 llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 1225 def int_ppc_altivec_vgbbd : ClangBuiltin<"__builtin_altivec_vgbbd">, 1226 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>; 1227 def int_ppc_altivec_vbpermq : ClangBuiltin<"__builtin_altivec_vbpermq">, 1228 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 1229 [IntrNoMem]>; 1230 def int_ppc_altivec_vbpermd : ClangBuiltin<"__builtin_altivec_vbpermd">, 1231 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty], 1232 [IntrNoMem]>; 1233} 1234 1235def int_ppc_altivec_vexptefp : PowerPC_Vec_FF_Intrinsic<"vexptefp">; 1236def int_ppc_altivec_vlogefp : PowerPC_Vec_FF_Intrinsic<"vlogefp">; 1237def int_ppc_altivec_vrefp : PowerPC_Vec_FF_Intrinsic<"vrefp">; 1238def int_ppc_altivec_vrsqrtefp : PowerPC_Vec_FF_Intrinsic<"vrsqrtefp">; 1239 1240// Power8 Intrinsics 1241// Crypto 1242let TargetPrefix = "ppc" in { // All PPC intrinsics start with "llvm.ppc.". 1243 def int_ppc_altivec_crypto_vsbox : 1244 ClangBuiltin<"__builtin_altivec_crypto_vsbox">, 1245 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>; 1246 def int_ppc_altivec_crypto_vpermxor : 1247 ClangBuiltin<"__builtin_altivec_crypto_vpermxor">, 1248 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 1249 llvm_v16i8_ty], [IntrNoMem]>; 1250 def int_ppc_altivec_crypto_vpermxor_be : 1251 ClangBuiltin<"__builtin_altivec_crypto_vpermxor_be">, 1252 DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 1253 llvm_v16i8_ty], [IntrNoMem]>; 1254 1255def int_ppc_altivec_crypto_vshasigmad : 1256 ClangBuiltin<"__builtin_altivec_crypto_vshasigmad">, 1257 DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i32_ty, 1258 llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>, 1259 ImmArg<ArgIndex<2>>]>; 1260def int_ppc_altivec_crypto_vshasigmaw : 1261 ClangBuiltin<"__builtin_altivec_crypto_vshasigmaw">, 1262 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i32_ty, 1263 llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>, 1264 ImmArg<ArgIndex<2>>]>; 1265} 1266def int_ppc_altivec_crypto_vcipher : 1267 PowerPC_Vec_DDD_Intrinsic<"crypto_vcipher">; 1268def int_ppc_altivec_crypto_vcipherlast : 1269 PowerPC_Vec_DDD_Intrinsic<"crypto_vcipherlast">; 1270def int_ppc_altivec_crypto_vncipher : 1271 PowerPC_Vec_DDD_Intrinsic<"crypto_vncipher">; 1272def int_ppc_altivec_crypto_vncipherlast : 1273 PowerPC_Vec_DDD_Intrinsic<"crypto_vncipherlast">; 1274def int_ppc_altivec_crypto_vpmsumb : 1275 PowerPC_Vec_BBB_Intrinsic<"crypto_vpmsumb">; 1276def int_ppc_altivec_crypto_vpmsumh : 1277 PowerPC_Vec_HHH_Intrinsic<"crypto_vpmsumh">; 1278def int_ppc_altivec_crypto_vpmsumw : 1279 PowerPC_Vec_WWW_Intrinsic<"crypto_vpmsumw">; 1280def int_ppc_altivec_crypto_vpmsumd : 1281 PowerPC_Vec_DDD_Intrinsic<"crypto_vpmsumd">; 1282 1283// Absolute Difference intrinsics 1284def int_ppc_altivec_vabsdub : PowerPC_Vec_BBB_Intrinsic<"vabsdub">; 1285def int_ppc_altivec_vabsduh : PowerPC_Vec_HHH_Intrinsic<"vabsduh">; 1286def int_ppc_altivec_vabsduw : PowerPC_Vec_WWW_Intrinsic<"vabsduw">; 1287 1288// Vector rotates 1289def int_ppc_altivec_vrlwnm : 1290 PowerPC_Vec_Intrinsic<"vrlwnm", [llvm_v4i32_ty], 1291 [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 1292def int_ppc_altivec_vrlwmi : 1293 PowerPC_Vec_Intrinsic<"vrlwmi", [llvm_v4i32_ty], 1294 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 1295 [IntrNoMem]>; 1296def int_ppc_altivec_vrldnm : 1297 PowerPC_Vec_Intrinsic<"vrldnm", [llvm_v2i64_ty], 1298 [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>; 1299def int_ppc_altivec_vrldmi : 1300 PowerPC_Vec_Intrinsic<"vrldmi", [llvm_v2i64_ty], 1301 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], 1302 [IntrNoMem]>; 1303 1304def int_ppc_altivec_vrlqnm : 1305 PowerPC_Vec_Intrinsic<"vrlqnm", [llvm_v1i128_ty], 1306 [llvm_v1i128_ty, llvm_v1i128_ty], 1307 [IntrNoMem]>; 1308def int_ppc_altivec_vrlqmi : 1309 PowerPC_Vec_Intrinsic<"vrlqmi", [llvm_v1i128_ty], 1310 [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty], 1311 [IntrNoMem]>; 1312 1313// Vector Divide Extended Intrinsics. 1314def int_ppc_altivec_vdivesw : PowerPC_Vec_WWW_Intrinsic<"vdivesw">; 1315def int_ppc_altivec_vdiveuw : PowerPC_Vec_WWW_Intrinsic<"vdiveuw">; 1316def int_ppc_altivec_vdivesd : PowerPC_Vec_DDD_Intrinsic<"vdivesd">; 1317def int_ppc_altivec_vdiveud : PowerPC_Vec_DDD_Intrinsic<"vdiveud">; 1318def int_ppc_altivec_vdivesq : PowerPC_Vec_QQQ_Intrinsic<"vdivesq">; 1319def int_ppc_altivec_vdiveuq : PowerPC_Vec_QQQ_Intrinsic<"vdiveuq">; 1320 1321// Vector Multiply High Intrinsics. 1322def int_ppc_altivec_vmulhsw : PowerPC_Vec_WWW_Intrinsic<"vmulhsw">; 1323def int_ppc_altivec_vmulhuw : PowerPC_Vec_WWW_Intrinsic<"vmulhuw">; 1324def int_ppc_altivec_vmulhsd : PowerPC_Vec_DDD_Intrinsic<"vmulhsd">; 1325def int_ppc_altivec_vmulhud : PowerPC_Vec_DDD_Intrinsic<"vmulhud">; 1326 1327//===----------------------------------------------------------------------===// 1328// PowerPC VSX Intrinsic Definitions. 1329 1330let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 1331 1332// Vector load. 1333def int_ppc_vsx_lxvw4x : 1334 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], 1335 [IntrReadMem, IntrArgMemOnly]>; 1336def int_ppc_vsx_lxvd2x : 1337 DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_ptr_ty], 1338 [IntrReadMem, IntrArgMemOnly]>; 1339def int_ppc_vsx_lxvw4x_be : 1340 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty], 1341 [IntrReadMem, IntrArgMemOnly]>; 1342def int_ppc_vsx_lxvd2x_be : 1343 DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_ptr_ty], 1344 [IntrReadMem, IntrArgMemOnly]>; 1345def int_ppc_vsx_lxvl : 1346 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i64_ty], 1347 [IntrReadMem, IntrArgMemOnly]>; 1348def int_ppc_vsx_lxvll : 1349 DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_i64_ty], 1350 [IntrReadMem, IntrArgMemOnly]>; 1351def int_ppc_vsx_lxvp : 1352 DefaultAttrsIntrinsic<[llvm_v256i1_ty], [llvm_ptr_ty], 1353 [IntrReadMem, IntrArgMemOnly]>; 1354 1355// Vector store. 1356def int_ppc_vsx_stxvw4x : Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 1357 [IntrWriteMem, IntrArgMemOnly]>; 1358def int_ppc_vsx_stxvd2x : Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty], 1359 [IntrWriteMem, IntrArgMemOnly]>; 1360def int_ppc_vsx_stxvw4x_be : Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], 1361 [IntrWriteMem, IntrArgMemOnly]>; 1362def int_ppc_vsx_stxvd2x_be : Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty], 1363 [IntrWriteMem, IntrArgMemOnly]>; 1364def int_ppc_vsx_stxvl : 1365 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i64_ty], 1366 [IntrWriteMem, IntrArgMemOnly]>; 1367def int_ppc_vsx_stxvll : 1368 Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i64_ty], 1369 [IntrWriteMem, IntrArgMemOnly]>; 1370def int_ppc_vsx_stxvp : 1371 Intrinsic<[], [llvm_v256i1_ty, llvm_ptr_ty], [IntrWriteMem, 1372 IntrArgMemOnly]>; 1373// Vector and scalar maximum. 1374def int_ppc_vsx_xvmaxdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmaxdp">; 1375def int_ppc_vsx_xvmaxsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvmaxsp">; 1376def int_ppc_vsx_xsmaxdp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmaxdp">; 1377 1378// Vector and scalar minimum. 1379def int_ppc_vsx_xvmindp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvmindp">; 1380def int_ppc_vsx_xvminsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvminsp">; 1381def int_ppc_vsx_xsmindp : PowerPC_VSX_Sca_DDD_Intrinsic<"xsmindp">; 1382 1383// Vector divide. 1384def int_ppc_vsx_xvdivdp : PowerPC_VSX_Vec_DDD_Intrinsic<"xvdivdp">; 1385def int_ppc_vsx_xvdivsp : PowerPC_VSX_Vec_FFF_Intrinsic<"xvdivsp">; 1386 1387// Vector round-to-infinity (ceil) 1388def int_ppc_vsx_xvrspip : 1389 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1390def int_ppc_vsx_xvrdpip : 1391 DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 1392 1393// Vector reciprocal estimate 1394def int_ppc_vsx_xvresp : ClangBuiltin<"__builtin_vsx_xvresp">, 1395 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1396def int_ppc_vsx_xvredp : ClangBuiltin<"__builtin_vsx_xvredp">, 1397 DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 1398 1399// Vector rsqrte 1400def int_ppc_vsx_xvrsqrtesp : ClangBuiltin<"__builtin_vsx_xvrsqrtesp">, 1401 DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1402def int_ppc_vsx_xvrsqrtedp : ClangBuiltin<"__builtin_vsx_xvrsqrtedp">, 1403 DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 1404 1405// Vector compare 1406def int_ppc_vsx_xvcmpeqdp : 1407 PowerPC_VSX_Intrinsic<"xvcmpeqdp", [llvm_v2i64_ty], 1408 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 1409def int_ppc_vsx_xvcmpeqdp_p : ClangBuiltin<"__builtin_vsx_xvcmpeqdp_p">, 1410 DefaultAttrsIntrinsic<[llvm_i32_ty], 1411 [llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty], 1412 [IntrNoMem]>; 1413def int_ppc_vsx_xvcmpeqsp : 1414 PowerPC_VSX_Intrinsic<"xvcmpeqsp", [llvm_v4i32_ty], 1415 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 1416def int_ppc_vsx_xvcmpeqsp_p : ClangBuiltin<"__builtin_vsx_xvcmpeqsp_p">, 1417 DefaultAttrsIntrinsic<[llvm_i32_ty], 1418 [llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 1419 [IntrNoMem]>; 1420def int_ppc_vsx_xvcmpgedp : 1421 PowerPC_VSX_Intrinsic<"xvcmpgedp", [llvm_v2i64_ty], 1422 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 1423def int_ppc_vsx_xvcmpgedp_p : ClangBuiltin<"__builtin_vsx_xvcmpgedp_p">, 1424 DefaultAttrsIntrinsic<[llvm_i32_ty], 1425 [llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty], 1426 [IntrNoMem]>; 1427def int_ppc_vsx_xvcmpgesp : 1428 PowerPC_VSX_Intrinsic<"xvcmpgesp", [llvm_v4i32_ty], 1429 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 1430def int_ppc_vsx_xvcmpgesp_p : ClangBuiltin<"__builtin_vsx_xvcmpgesp_p">, 1431 DefaultAttrsIntrinsic<[llvm_i32_ty], 1432 [llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 1433 [IntrNoMem]>; 1434def int_ppc_vsx_xvcmpgtdp : 1435 PowerPC_VSX_Intrinsic<"xvcmpgtdp", [llvm_v2i64_ty], 1436 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 1437def int_ppc_vsx_xvcmpgtdp_p : ClangBuiltin<"__builtin_vsx_xvcmpgtdp_p">, 1438 DefaultAttrsIntrinsic<[llvm_i32_ty], 1439 [llvm_i32_ty,llvm_v2f64_ty,llvm_v2f64_ty], 1440 [IntrNoMem]>; 1441def int_ppc_vsx_xvcmpgtsp : 1442 PowerPC_VSX_Intrinsic<"xvcmpgtsp", [llvm_v4i32_ty], 1443 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 1444def int_ppc_vsx_xvcmpgtsp_p : ClangBuiltin<"__builtin_vsx_xvcmpgtsp_p">, 1445 DefaultAttrsIntrinsic<[llvm_i32_ty], 1446 [llvm_i32_ty,llvm_v4f32_ty,llvm_v4f32_ty], 1447 [IntrNoMem]>; 1448def int_ppc_vsx_xxleqv : 1449 PowerPC_VSX_Intrinsic<"xxleqv", [llvm_v4i32_ty], 1450 [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 1451def int_ppc_vsx_xviexpdp : 1452 PowerPC_VSX_Intrinsic<"xviexpdp",[llvm_v2f64_ty], 1453 [llvm_v2i64_ty, llvm_v2i64_ty],[IntrNoMem]>; 1454def int_ppc_vsx_xviexpsp : 1455 PowerPC_VSX_Intrinsic<"xviexpsp",[llvm_v4f32_ty], 1456 [llvm_v4i32_ty, llvm_v4i32_ty],[IntrNoMem]>; 1457def int_ppc_vsx_xvcvdpsxws : 1458 PowerPC_VSX_Intrinsic<"xvcvdpsxws", [llvm_v4i32_ty], 1459 [llvm_v2f64_ty], [IntrNoMem]>; 1460def int_ppc_vsx_xvcvdpuxws : 1461 PowerPC_VSX_Intrinsic<"xvcvdpuxws", [llvm_v4i32_ty], 1462 [llvm_v2f64_ty], [IntrNoMem]>; 1463def int_ppc_vsx_xvcvspsxds : 1464 PowerPC_VSX_Intrinsic<"xvcvspsxds", [llvm_v2i64_ty], 1465 [llvm_v4f32_ty], [IntrNoMem]>; 1466def int_ppc_vsx_xvcvspuxds : 1467 PowerPC_VSX_Intrinsic<"xvcvspuxds", [llvm_v2i64_ty], 1468 [llvm_v4f32_ty], [IntrNoMem]>; 1469def int_ppc_vsx_xvcvsxwdp : 1470 PowerPC_VSX_Intrinsic<"xvcvsxwdp", [llvm_v2f64_ty], 1471 [llvm_v4i32_ty], [IntrNoMem]>; 1472def int_ppc_vsx_xvcvuxwdp : 1473 PowerPC_VSX_Intrinsic<"xvcvuxwdp", [llvm_v2f64_ty], 1474 [llvm_v4i32_ty], [IntrNoMem]>; 1475def int_ppc_vsx_xvcvspdp : 1476 PowerPC_VSX_Intrinsic<"xvcvspdp", [llvm_v2f64_ty], 1477 [llvm_v4f32_ty], [IntrNoMem]>; 1478def int_ppc_vsx_xvcvsxdsp : 1479 PowerPC_VSX_Intrinsic<"xvcvsxdsp", [llvm_v4f32_ty], 1480 [llvm_v2i64_ty], [IntrNoMem]>; 1481def int_ppc_vsx_xvcvuxdsp : 1482 PowerPC_VSX_Intrinsic<"xvcvuxdsp", [llvm_v4f32_ty], 1483 [llvm_v2i64_ty], [IntrNoMem]>; 1484def int_ppc_vsx_xvcvdpsp : 1485 PowerPC_VSX_Intrinsic<"xvcvdpsp", [llvm_v4f32_ty], 1486 [llvm_v2f64_ty], [IntrNoMem]>; 1487def int_ppc_vsx_xvcvsphp : 1488 PowerPC_VSX_Intrinsic<"xvcvsphp", [llvm_v4f32_ty], 1489 [llvm_v4f32_ty], [IntrNoMem]>; 1490def int_ppc_vsx_xvxexpdp : 1491 PowerPC_VSX_Intrinsic<"xvxexpdp", [llvm_v2i64_ty], 1492 [llvm_v2f64_ty], [IntrNoMem]>; 1493def int_ppc_vsx_xvxexpsp : 1494 PowerPC_VSX_Intrinsic<"xvxexpsp", [llvm_v4i32_ty], 1495 [llvm_v4f32_ty], [IntrNoMem]>; 1496def int_ppc_vsx_xvxsigdp : 1497 PowerPC_VSX_Intrinsic<"xvxsigdp", [llvm_v2i64_ty], 1498 [llvm_v2f64_ty], [IntrNoMem]>; 1499def int_ppc_vsx_xvxsigsp : 1500 PowerPC_VSX_Intrinsic<"xvxsigsp", [llvm_v4i32_ty], 1501 [llvm_v4f32_ty], [IntrNoMem]>; 1502def int_ppc_vsx_xvtstdcdp : 1503 PowerPC_VSX_Intrinsic<"xvtstdcdp", [llvm_v2i64_ty], 1504 [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>; 1505def int_ppc_vsx_xvtstdcsp : 1506 PowerPC_VSX_Intrinsic<"xvtstdcsp", [llvm_v4i32_ty], 1507 [llvm_v4f32_ty,llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>; 1508def int_ppc_vsx_xvcvhpsp : 1509 PowerPC_VSX_Intrinsic<"xvcvhpsp", [llvm_v4f32_ty], 1510 [llvm_v8i16_ty],[IntrNoMem]>; 1511def int_ppc_vsx_xvcvspbf16 : 1512 PowerPC_VSX_Intrinsic<"xvcvspbf16", [llvm_v16i8_ty], 1513 [llvm_v16i8_ty], [IntrNoMem]>; 1514def int_ppc_vsx_xvcvbf16spn : 1515 PowerPC_VSX_Intrinsic<"xvcvbf16spn", [llvm_v16i8_ty], 1516 [llvm_v16i8_ty], [IntrNoMem]>; 1517def int_ppc_vsx_xxextractuw : 1518 PowerPC_VSX_Intrinsic<"xxextractuw",[llvm_v2i64_ty], 1519 [llvm_v2i64_ty,llvm_i32_ty], [IntrNoMem]>; 1520def int_ppc_vsx_xxinsertw : 1521 PowerPC_VSX_Intrinsic<"xxinsertw",[llvm_v4i32_ty], 1522 [llvm_v4i32_ty,llvm_v2i64_ty,llvm_i32_ty], 1523 [IntrNoMem]>; 1524def int_ppc_vsx_xvtlsbb : 1525 PowerPC_VSX_Intrinsic<"xvtlsbb", [llvm_i32_ty], 1526 [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>; 1527def int_ppc_vsx_xvtdivdp : 1528 PowerPC_VSX_Intrinsic<"xvtdivdp", [llvm_i32_ty], 1529 [llvm_v2f64_ty, llvm_v2f64_ty], [IntrNoMem]>; 1530def int_ppc_vsx_xvtdivsp : 1531 PowerPC_VSX_Intrinsic<"xvtdivsp", [llvm_i32_ty], 1532 [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem]>; 1533def int_ppc_vsx_xvtsqrtdp : 1534 PowerPC_VSX_Intrinsic<"xvtsqrtdp", [llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 1535def int_ppc_vsx_xvtsqrtsp : 1536 PowerPC_VSX_Intrinsic<"xvtsqrtsp", [llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 1537def int_ppc_vsx_xxeval : 1538 PowerPC_VSX_Intrinsic<"xxeval", [llvm_v2i64_ty], 1539 [llvm_v2i64_ty, llvm_v2i64_ty, 1540 llvm_v2i64_ty, llvm_i32_ty], 1541 [IntrNoMem, ImmArg<ArgIndex<3>>]>; 1542def int_ppc_vsx_xxgenpcvbm : 1543 PowerPC_VSX_Intrinsic<"xxgenpcvbm", [llvm_v16i8_ty], 1544 [llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>; 1545def int_ppc_vsx_xxgenpcvhm : 1546 PowerPC_VSX_Intrinsic<"xxgenpcvhm", [llvm_v8i16_ty], 1547 [llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>; 1548def int_ppc_vsx_xxgenpcvwm : 1549 PowerPC_VSX_Intrinsic<"xxgenpcvwm", [llvm_v4i32_ty], 1550 [llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>; 1551def int_ppc_vsx_xxgenpcvdm : 1552 PowerPC_VSX_Intrinsic<"xxgenpcvdm", [llvm_v2i64_ty], 1553 [llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>; 1554 1555// P10 VSX Vector permute extended. 1556def int_ppc_vsx_xxpermx : 1557 ClangBuiltin<"__builtin_vsx_xxpermx">, 1558 DefaultAttrsIntrinsic<[llvm_v16i8_ty], 1559 [llvm_v16i8_ty,llvm_v16i8_ty,llvm_v16i8_ty, 1560 llvm_i32_ty], 1561 [IntrNoMem, ImmArg<ArgIndex<3>>]>; 1562// P10 VSX Vector Blend Variable. 1563def int_ppc_vsx_xxblendvb: ClangBuiltin<"__builtin_vsx_xxblendvb">, 1564 DefaultAttrsIntrinsic<[llvm_v16i8_ty], 1565 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty], 1566 [IntrNoMem]>; 1567def int_ppc_vsx_xxblendvh: ClangBuiltin<"__builtin_vsx_xxblendvh">, 1568 DefaultAttrsIntrinsic<[llvm_v8i16_ty], 1569 [llvm_v8i16_ty, llvm_v8i16_ty,llvm_v8i16_ty], 1570 [IntrNoMem]>; 1571def int_ppc_vsx_xxblendvw: ClangBuiltin<"__builtin_vsx_xxblendvw">, 1572 DefaultAttrsIntrinsic<[llvm_v4i32_ty], 1573 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 1574 [IntrNoMem]>; 1575def int_ppc_vsx_xxblendvd: ClangBuiltin<"__builtin_vsx_xxblendvd">, 1576 DefaultAttrsIntrinsic<[llvm_v2i64_ty], 1577 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], 1578 [IntrNoMem]>; 1579} 1580 1581//===----------------------------------------------------------------------===// 1582// PowerPC HTM Intrinsic Definitions. 1583 1584let TargetPrefix = "ppc" in { // All intrinsics start with "llvm.ppc.". 1585 1586def int_ppc_tbegin : ClangBuiltin<"__builtin_tbegin">, 1587 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>; 1588def int_ppc_tend : ClangBuiltin<"__builtin_tend">, 1589 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>; 1590 1591def int_ppc_tabort : ClangBuiltin<"__builtin_tabort">, 1592 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 1593def int_ppc_tabortwc : ClangBuiltin<"__builtin_tabortwc">, 1594 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 1595def int_ppc_tabortwci : ClangBuiltin<"__builtin_tabortwci">, 1596 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 1597def int_ppc_tabortdc : ClangBuiltin<"__builtin_tabortdc">, 1598 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 1599def int_ppc_tabortdci : ClangBuiltin<"__builtin_tabortdci">, 1600 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 1601 1602def int_ppc_tcheck : ClangBuiltin<"__builtin_tcheck">, 1603 Intrinsic<[llvm_i32_ty], [], []>; 1604def int_ppc_treclaim : ClangBuiltin<"__builtin_treclaim">, 1605 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 1606def int_ppc_trechkpt : ClangBuiltin<"__builtin_trechkpt">, 1607 Intrinsic<[llvm_i32_ty], [], []>; 1608def int_ppc_tsr : ClangBuiltin<"__builtin_tsr">, 1609 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 1610 1611def int_ppc_get_texasr : ClangBuiltin<"__builtin_get_texasr">, 1612 Intrinsic<[llvm_i64_ty], [], []>; 1613def int_ppc_get_texasru : ClangBuiltin<"__builtin_get_texasru">, 1614 Intrinsic<[llvm_i64_ty], [], []>; 1615def int_ppc_get_tfhar : ClangBuiltin<"__builtin_get_tfhar">, 1616 Intrinsic<[llvm_i64_ty], [], []>; 1617def int_ppc_get_tfiar : ClangBuiltin<"__builtin_get_tfiar">, 1618 Intrinsic<[llvm_i64_ty], [], []>; 1619 1620def int_ppc_set_texasr : ClangBuiltin<"__builtin_set_texasr">, 1621 Intrinsic<[], [llvm_i64_ty], []>; 1622def int_ppc_set_texasru : ClangBuiltin<"__builtin_set_texasru">, 1623 Intrinsic<[], [llvm_i64_ty], []>; 1624def int_ppc_set_tfhar : ClangBuiltin<"__builtin_set_tfhar">, 1625 Intrinsic<[], [llvm_i64_ty], []>; 1626def int_ppc_set_tfiar : ClangBuiltin<"__builtin_set_tfiar">, 1627 Intrinsic<[], [llvm_i64_ty], []>; 1628 1629// Extended mnemonics 1630def int_ppc_tendall : ClangBuiltin<"__builtin_tendall">, 1631 Intrinsic<[llvm_i32_ty], [], []>; 1632def int_ppc_tresume : ClangBuiltin<"__builtin_tresume">, 1633 Intrinsic<[llvm_i32_ty], [], []>; 1634def int_ppc_tsuspend : ClangBuiltin<"__builtin_tsuspend">, 1635 Intrinsic<[llvm_i32_ty], [], []>; 1636 1637def int_ppc_ttest : ClangBuiltin<"__builtin_ttest">, 1638 Intrinsic<[llvm_i64_ty], [], []>; 1639 1640// We currently use llvm.ppc.cfence in the context of atomic load which 1641// in LLVM IR requires its type to be one of integer, pointer and 1642// float point type. So llvm_any_ty here refers to type mentioned above. 1643// Backend is supposed to lower these types to appropriate MVTs. 1644def int_ppc_cfence : Intrinsic<[], [llvm_any_ty], []>; 1645 1646// PowerPC set FPSCR Intrinsic Definitions. 1647def int_ppc_setrnd : ClangBuiltin<"__builtin_setrnd">, 1648 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_i32_ty], [IntrHasSideEffects]>; 1649} 1650 1651let TargetPrefix = "ppc" in { 1652 def int_ppc_vsx_assemble_pair : 1653 DefaultAttrsIntrinsic<[llvm_v256i1_ty], 1654 [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>; 1655 1656 def int_ppc_vsx_disassemble_pair : 1657 DefaultAttrsIntrinsic<[llvm_v16i8_ty, llvm_v16i8_ty], 1658 [llvm_v256i1_ty], [IntrNoMem]>; 1659 1660 def int_ppc_mma_assemble_acc : 1661 DefaultAttrsIntrinsic<[llvm_v512i1_ty], 1662 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty, 1663 llvm_v16i8_ty], [IntrNoMem]>; 1664 1665 def int_ppc_mma_disassemble_acc : 1666 DefaultAttrsIntrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty, 1667 llvm_v16i8_ty], [llvm_v512i1_ty], [IntrNoMem]>; 1668 1669 def int_ppc_mma_xxmtacc : 1670 DefaultAttrsIntrinsic<[llvm_v512i1_ty], [llvm_v512i1_ty], [IntrNoMem]>; 1671 1672 def int_ppc_mma_xxmfacc : 1673 DefaultAttrsIntrinsic<[llvm_v512i1_ty], [llvm_v512i1_ty], [IntrNoMem]>; 1674 1675 def int_ppc_mma_xxsetaccz : 1676 DefaultAttrsIntrinsic<[llvm_v512i1_ty], [], [IntrNoMem]>; 1677 1678 def int_ppc_mma_dmsetdmrz : 1679 DefaultAttrsIntrinsic<[llvm_v1024i1_ty], [], [IntrNoMem]>; 1680 1681 def int_ppc_mma_dmmr : 1682 DefaultAttrsIntrinsic<[llvm_v1024i1_ty], [llvm_v1024i1_ty], [IntrNoMem]>; 1683 1684 def int_ppc_mma_dmxor : 1685 DefaultAttrsIntrinsic<[llvm_v1024i1_ty], [llvm_v1024i1_ty, 1686 llvm_v1024i1_ty], [IntrNoMem]>; 1687 1688 def int_ppc_mma_dmxxextfdmr512 : 1689 DefaultAttrsIntrinsic<[llvm_v256i1_ty, llvm_v256i1_ty], [llvm_v1024i1_ty, 1690 llvm_i32_ty], [IntrNoMem]>; 1691 1692 def int_ppc_mma_dmxxinstdmr512 : 1693 DefaultAttrsIntrinsic<[llvm_v1024i1_ty], [llvm_v1024i1_ty, llvm_v256i1_ty, 1694 llvm_v256i1_ty, llvm_i32_ty], [IntrNoMem]>; 1695 1696 def int_ppc_mma_dmxxextfdmr256 : 1697 DefaultAttrsIntrinsic<[llvm_v256i1_ty], [llvm_v1024i1_ty, llvm_i32_ty], 1698 [IntrNoMem]>; 1699 1700 def int_ppc_mma_dmxxinstdmr256 : 1701 DefaultAttrsIntrinsic<[llvm_v1024i1_ty], [llvm_v1024i1_ty, llvm_v256i1_ty, 1702 llvm_i32_ty], [IntrNoMem]>; 1703 1704 // MMA Reduced-Precision: Outer Product Intrinsic Definitions. 1705 defm int_ppc_mma_xvi4ger8 : 1706 PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>; 1707 defm int_ppc_mma_pmxvi4ger8 : 1708 PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, 1709 llvm_i32_ty, llvm_i32_ty]>; 1710 1711 defm int_ppc_mma_xvi8ger4 : 1712 PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>; 1713 defm int_ppc_mma_pmxvi8ger4 : 1714 PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, 1715 llvm_i32_ty, llvm_i32_ty]>; 1716 1717 defm int_ppc_mma_xvi16ger2s : 1718 PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>; 1719 defm int_ppc_mma_pmxvi16ger2s : 1720 PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, 1721 llvm_i32_ty, llvm_i32_ty]>; 1722 1723 defm int_ppc_mma_xvf16ger2 : 1724 PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>; 1725 defm int_ppc_mma_pmxvf16ger2 : 1726 PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, 1727 llvm_i32_ty, llvm_i32_ty]>; 1728 defm int_ppc_mma_xvf32ger : 1729 PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>; 1730 defm int_ppc_mma_pmxvf32ger : 1731 PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, 1732 llvm_i32_ty]>; 1733 defm int_ppc_mma_xvf64ger : 1734 PowerPC_MMA_ACC_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty]>; 1735 defm int_ppc_mma_pmxvf64ger : 1736 PowerPC_MMA_ACC_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty, llvm_i32_ty, 1737 llvm_i32_ty]>; 1738 1739 // MMA Reduced-Precision: bfloat16 Outer Product Intrinsic Definitions. 1740 defm int_ppc_mma_xvbf16ger2 : 1741 PowerPC_MMA_ACC_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>; 1742 defm int_ppc_mma_pmxvbf16ger2 : 1743 PowerPC_MMA_ACC_Intrinsic< 1744 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty]>; 1745 1746 // MMA Reduced-Precision: Missing Integer-based Outer Product Operations. 1747 defm int_ppc_mma_xvi16ger2 : 1748 PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty]>; 1749 defm int_ppc_mma_pmxvi16ger2 : 1750 PowerPC_MMA_ACC_PP_Intrinsic<[llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, 1751 llvm_i32_ty, llvm_i32_ty]>; 1752 def int_ppc_mma_xvi8ger4spp : 1753 DefaultAttrsIntrinsic<[llvm_v512i1_ty], 1754 [llvm_v512i1_ty, llvm_v16i8_ty, llvm_v16i8_ty], 1755 [IntrNoMem]>; 1756 def int_ppc_mma_pmxvi8ger4spp : 1757 DefaultAttrsIntrinsic<[llvm_v512i1_ty], 1758 [llvm_v512i1_ty, llvm_v16i8_ty, llvm_v16i8_ty, 1759 llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], 1760 [IntrNoMem]>; 1761 defm int_ppc_mma_dmxvi8gerx4 : 1762 PowerPC_MMA_DMR_PP_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty]>; 1763 defm int_ppc_mma_pmdmxvi8gerx4 : 1764 PowerPC_MMA_DMR_PP_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty, llvm_i32_ty, 1765 llvm_i32_ty, llvm_i32_ty]>; 1766 def int_ppc_mma_dmxvi8gerx4spp : 1767 DefaultAttrsIntrinsic<[llvm_v1024i1_ty], 1768 [llvm_v1024i1_ty, llvm_v256i1_ty, llvm_v16i8_ty], 1769 [IntrNoMem]>; 1770 def int_ppc_mma_pmdmxvi8gerx4spp : 1771 DefaultAttrsIntrinsic<[llvm_v1024i1_ty], 1772 [llvm_v1024i1_ty, llvm_v256i1_ty, llvm_v16i8_ty, 1773 llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], 1774 [IntrNoMem]>; 1775 1776 // MMA+ Reduced-Precision: bfloat16 Outer Product Intrinsic Definitions. 1777 defm int_ppc_mma_dmxvbf16gerx2 : 1778 PowerPC_MMA_DMR_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty]>; 1779 defm int_ppc_mma_pmdmxvbf16gerx2 : 1780 PowerPC_MMA_DMR_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty, llvm_i32_ty, 1781 llvm_i32_ty, llvm_i32_ty]>; 1782 1783 // MMA+ Half-precision Outer Product Intrinsic Definitions. 1784 defm int_ppc_mma_dmxvf16gerx2 : 1785 PowerPC_MMA_DMR_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty]>; 1786 defm int_ppc_mma_pmdmxvf16gerx2 : 1787 PowerPC_MMA_DMR_Intrinsic<[llvm_v256i1_ty, llvm_v16i8_ty, llvm_i32_ty, 1788 llvm_i32_ty, llvm_i32_ty]>; 1789 def int_ppc_mma_dmsha2hash : 1790 DefaultAttrsIntrinsic<[llvm_v1024i1_ty], [llvm_v1024i1_ty, 1791 llvm_v1024i1_ty, llvm_i32_ty], 1792 [IntrNoMem, ImmArg<ArgIndex<2>>]>; 1793 1794 def int_ppc_mma_dmsha3hash : 1795 DefaultAttrsIntrinsic<[llvm_v2048i1_ty], [llvm_v2048i1_ty, 1796 llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>; 1797 1798 def int_ppc_mma_dmxxshapad : 1799 DefaultAttrsIntrinsic<[llvm_v1024i1_ty], [llvm_v1024i1_ty, 1800 llvm_v16i8_ty, llvm_i32_ty, llvm_i32_ty, 1801 llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<2>>, 1802 ImmArg<ArgIndex<3>>, ImmArg<ArgIndex<4>>]>; 1803} 1804 1805// XL Compat intrinsics. 1806let TargetPrefix = "ppc" in { 1807 def int_ppc_dcbfl : ClangBuiltin<"__builtin_ppc_dcbfl">, 1808 Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>; 1809 def int_ppc_dcbflp : ClangBuiltin<"__builtin_ppc_dcbflp">, 1810 Intrinsic<[], [llvm_ptr_ty], [IntrArgMemOnly]>; 1811 def int_ppc_dcbst : ClangBuiltin<"__builtin_ppc_dcbst">, 1812 Intrinsic<[], [llvm_ptr_ty], []>; 1813 def int_ppc_dcbt : ClangBuiltin<"__builtin_ppc_dcbt">, 1814 Intrinsic<[], [llvm_ptr_ty], 1815 [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>; 1816 def int_ppc_dcbtst : ClangBuiltin<"__builtin_ppc_dcbtst">, 1817 Intrinsic<[], [llvm_ptr_ty], 1818 [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>; 1819 def int_ppc_dcbz : ClangBuiltin<"__builtin_ppc_dcbz">, 1820 Intrinsic<[], [llvm_ptr_ty], []>; 1821 def int_ppc_icbt : ClangBuiltin<"__builtin_ppc_icbt">, 1822 Intrinsic<[], [llvm_ptr_ty], []>; 1823 1824 // Population Count in each Byte. 1825 def int_ppc_popcntb : 1826 DefaultAttrsIntrinsic<[llvm_anyint_ty], [llvm_anyint_ty], [IntrNoMem]>; 1827 1828 // sync instruction (i.e. sync 0, a.k.a hwsync) 1829 def int_ppc_sync : ClangBuiltin<"__builtin_ppc_sync">, 1830 Intrinsic<[], [], []>; 1831 def int_ppc_iospace_sync : ClangBuiltin<"__builtin_ppc_iospace_sync">, 1832 Intrinsic<[], [], []>; 1833 // isync instruction 1834 def int_ppc_isync : ClangBuiltin<"__builtin_ppc_isync">, 1835 Intrinsic<[], [], []>; 1836 // lwsync is sync 1 1837 def int_ppc_lwsync : ClangBuiltin<"__builtin_ppc_lwsync">, 1838 Intrinsic<[], [], []>; 1839 def int_ppc_iospace_lwsync : ClangBuiltin<"__builtin_ppc_iospace_lwsync">, 1840 Intrinsic<[], [], []>; 1841 // eieio instruction 1842 def int_ppc_eieio : ClangBuiltin<"__builtin_ppc_eieio">, 1843 Intrinsic<[],[],[]>; 1844 def int_ppc_iospace_eieio : ClangBuiltin<"__builtin_ppc_iospace_eieio">, 1845 Intrinsic<[],[],[]>; 1846 def int_ppc_lbarx : 1847 Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], 1848 [IntrReadMem, IntrArgMemOnly]>; 1849 def int_ppc_lharx : 1850 Intrinsic<[llvm_i32_ty],[llvm_ptr_ty], 1851 [IntrReadMem, IntrArgMemOnly]>; 1852 def int_ppc_lwarx : 1853 Intrinsic<[llvm_i32_ty], [llvm_ptr_ty], 1854 [IntrReadMem, IntrArgMemOnly]>; 1855 def int_ppc_ldarx : 1856 Intrinsic<[llvm_i64_ty],[llvm_ptr_ty], 1857 [IntrReadMem, IntrArgMemOnly]>; 1858 1859 def int_ppc_stdcx : 1860 ClangBuiltin<"__builtin_ppc_stdcx">, 1861 Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i64_ty], 1862 [IntrWriteMem, IntrArgMemOnly, IntrNoDuplicate]>; 1863 def int_ppc_stwcx : 1864 ClangBuiltin<"__builtin_ppc_stwcx">, 1865 Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], 1866 [IntrWriteMem, IntrArgMemOnly]>; 1867 def int_ppc_sthcx : 1868 Intrinsic<[llvm_i32_ty], [ llvm_ptr_ty, llvm_i32_ty], 1869 [IntrWriteMem, IntrArgMemOnly, IntrNoDuplicate]>; 1870 def int_ppc_stbcx : 1871 ClangBuiltin<"__builtin_ppc_stbcx">, 1872 Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], 1873 [IntrWriteMem, IntrArgMemOnly, IntrNoDuplicate]>; 1874 def int_ppc_dcbtstt : ClangBuiltin<"__builtin_ppc_dcbtstt">, 1875 Intrinsic<[], [llvm_ptr_ty], 1876 [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>; 1877 def int_ppc_dcbtt : ClangBuiltin<"__builtin_ppc_dcbtt">, 1878 Intrinsic<[], [llvm_ptr_ty], 1879 [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>; 1880 def int_ppc_mftbu : ClangBuiltin<"__builtin_ppc_mftbu">, 1881 DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem]>; 1882 def int_ppc_mfmsr : ClangBuiltin<"__builtin_ppc_mfmsr">, 1883 DefaultAttrsIntrinsic<[llvm_i32_ty], [], [IntrNoMem]>; 1884 def int_ppc_mfspr 1885 : DefaultAttrsIntrinsic<[llvm_anyint_ty], [llvm_i32_ty], [ImmArg<ArgIndex<0>>]>; 1886 def int_ppc_mtmsr 1887 : ClangBuiltin<"__builtin_ppc_mtmsr">, Intrinsic<[], [llvm_i32_ty], []>; 1888 def int_ppc_mtspr 1889 : DefaultAttrsIntrinsic<[], [llvm_i32_ty, llvm_anyint_ty], [ImmArg<ArgIndex<0>>]>; 1890 def int_ppc_stfiw : ClangBuiltin<"__builtin_ppc_stfiw">, 1891 DefaultAttrsIntrinsic<[], [llvm_ptr_ty, llvm_double_ty], 1892 [IntrWriteMem]>; 1893 // compare 1894 def int_ppc_cmpeqb 1895 : ClangBuiltin<"__builtin_ppc_cmpeqb">, 1896 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 1897 [IntrNoMem]>; 1898 def int_ppc_cmprb 1899 : ClangBuiltin<"__builtin_ppc_cmprb">, 1900 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, 1901 llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<0>>]>; 1902 def int_ppc_setb 1903 : ClangBuiltin<"__builtin_ppc_setb">, 1904 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 1905 [IntrNoMem]>; 1906 def int_ppc_cmpb 1907 : DefaultAttrsIntrinsic<[llvm_anyint_ty], 1908 [llvm_anyint_ty, llvm_anyint_ty], [IntrNoMem]>; 1909 // multiply 1910 def int_ppc_mulhd 1911 : ClangBuiltin<"__builtin_ppc_mulhd">, 1912 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 1913 [IntrNoMem]>; 1914 def int_ppc_mulhdu 1915 : ClangBuiltin<"__builtin_ppc_mulhdu">, 1916 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 1917 [IntrNoMem]>; 1918 def int_ppc_mulhw 1919 : ClangBuiltin<"__builtin_ppc_mulhw">, 1920 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 1921 [IntrNoMem]>; 1922 def int_ppc_mulhwu 1923 : ClangBuiltin<"__builtin_ppc_mulhwu">, 1924 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 1925 [IntrNoMem]>; 1926 def int_ppc_maddhd 1927 : ClangBuiltin<"__builtin_ppc_maddhd">, 1928 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, 1929 llvm_i64_ty], [IntrNoMem]>; 1930 def int_ppc_maddhdu 1931 : ClangBuiltin<"__builtin_ppc_maddhdu">, 1932 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, 1933 llvm_i64_ty], [IntrNoMem]>; 1934 def int_ppc_maddld 1935 : ClangBuiltin<"__builtin_ppc_maddld">, 1936 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, 1937 llvm_i64_ty], [IntrNoMem]>; 1938 // load 1939 def int_ppc_load2r 1940 : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_ptr_ty], 1941 [IntrReadMem, IntrArgMemOnly]>; 1942 def int_ppc_load4r 1943 : ClangBuiltin<"__builtin_ppc_load4r">, 1944 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_ptr_ty], 1945 [IntrReadMem, IntrArgMemOnly]>; 1946 def int_ppc_load8r 1947 : ClangBuiltin<"__builtin_ppc_load8r">, 1948 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_ptr_ty], 1949 [IntrReadMem, IntrArgMemOnly]>; 1950 // store 1951 def int_ppc_store2r 1952 : ClangBuiltin<"__builtin_ppc_store2r">, 1953 Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], [IntrWriteMem]>; 1954 def int_ppc_store4r 1955 : ClangBuiltin<"__builtin_ppc_store4r">, 1956 Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], [IntrWriteMem]>; 1957 def int_ppc_store8r 1958 : ClangBuiltin<"__builtin_ppc_store8r">, 1959 Intrinsic<[], [llvm_i64_ty, llvm_ptr_ty], [IntrWriteMem]>; 1960 def int_ppc_insert_exp 1961 : ClangBuiltin<"__builtin_ppc_insert_exp">, 1962 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_i64_ty], 1963 [IntrNoMem]>; 1964 def int_ppc_extract_exp 1965 : ClangBuiltin<"__builtin_ppc_extract_exp">, 1966 DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_double_ty], [IntrNoMem]>; 1967 def int_ppc_extract_sig 1968 : ClangBuiltin<"__builtin_ppc_extract_sig">, 1969 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_double_ty], [IntrNoMem]>; 1970 def int_ppc_mtfsb0 1971 : ClangBuiltin<"__builtin_ppc_mtfsb0">, 1972 DefaultAttrsIntrinsic<[], [llvm_i32_ty], 1973 [IntrNoMem, IntrHasSideEffects, 1974 ImmArg<ArgIndex<0>>]>; 1975 def int_ppc_mtfsb1 1976 : ClangBuiltin<"__builtin_ppc_mtfsb1">, 1977 DefaultAttrsIntrinsic<[], [llvm_i32_ty], 1978 [IntrNoMem, IntrHasSideEffects, 1979 ImmArg<ArgIndex<0>>]>; 1980 def int_ppc_mtfsf : 1981 DefaultAttrsIntrinsic<[], [llvm_i32_ty, llvm_double_ty], 1982 [IntrNoMem, IntrHasSideEffects, 1983 ImmArg<ArgIndex<0>>]>; 1984 def int_ppc_mtfsfi 1985 : ClangBuiltin<"__builtin_ppc_mtfsfi">, 1986 DefaultAttrsIntrinsic<[], [llvm_i32_ty, llvm_i32_ty], 1987 [IntrNoMem, IntrHasSideEffects, 1988 ImmArg<ArgIndex<0>>,ImmArg<ArgIndex<1>>]>; 1989 def int_ppc_fmsub 1990 : ClangBuiltin<"__builtin_ppc_fmsub">, 1991 DefaultAttrsIntrinsic<[llvm_double_ty], 1992 [llvm_double_ty, llvm_double_ty, llvm_double_ty], 1993 [IntrNoMem]>; 1994 def int_ppc_fmsubs 1995 : ClangBuiltin<"__builtin_ppc_fmsubs">, 1996 DefaultAttrsIntrinsic<[llvm_float_ty], 1997 [llvm_float_ty, llvm_float_ty, llvm_float_ty], 1998 [IntrNoMem]>; 1999 def int_ppc_fnmadd 2000 : ClangBuiltin<"__builtin_ppc_fnmadd">, 2001 DefaultAttrsIntrinsic<[llvm_double_ty], 2002 [llvm_double_ty, llvm_double_ty, llvm_double_ty], 2003 [IntrNoMem]>; 2004 def int_ppc_fnmadds 2005 : ClangBuiltin<"__builtin_ppc_fnmadds">, 2006 DefaultAttrsIntrinsic<[llvm_float_ty], 2007 [llvm_float_ty, llvm_float_ty, llvm_float_ty], 2008 [IntrNoMem]>; 2009 def int_ppc_fnmsub 2010 : DefaultAttrsIntrinsic<[llvm_anyfloat_ty], 2011 [LLVMMatchType<0>, LLVMMatchType<0>, 2012 LLVMMatchType<0>], 2013 [IntrNoMem]>; 2014 def int_ppc_fre 2015 : ClangBuiltin<"__builtin_ppc_fre">, 2016 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 2017 def int_ppc_fres 2018 : ClangBuiltin<"__builtin_ppc_fres">, 2019 DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 2020 def int_ppc_addex 2021 : ClangBuiltin<"__builtin_ppc_addex">, 2022 DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty, llvm_i32_ty], 2023 [IntrNoMem, IntrHasSideEffects, ImmArg<ArgIndex<2>>]>; 2024 def int_ppc_fsel : ClangBuiltin<"__builtin_ppc_fsel">, 2025 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty, llvm_double_ty, 2026 llvm_double_ty], [IntrNoMem]>; 2027 def int_ppc_fsels : ClangBuiltin<"__builtin_ppc_fsels">, 2028 DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty, llvm_float_ty, 2029 llvm_float_ty], [IntrNoMem]>; 2030 def int_ppc_frsqrte : ClangBuiltin<"__builtin_ppc_frsqrte">, 2031 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 2032 def int_ppc_frsqrtes : ClangBuiltin<"__builtin_ppc_frsqrtes">, 2033 DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 2034 def int_ppc_compare_exp_uo : ClangBuiltin<"__builtin_ppc_compare_exp_uo">, 2035 DefaultAttrsIntrinsic<[llvm_i32_ty], 2036 [llvm_double_ty, llvm_double_ty], 2037 [IntrNoMem]>; 2038 def int_ppc_compare_exp_lt : ClangBuiltin<"__builtin_ppc_compare_exp_lt">, 2039 DefaultAttrsIntrinsic<[llvm_i32_ty], 2040 [llvm_double_ty, llvm_double_ty], 2041 [IntrNoMem]>; 2042 def int_ppc_compare_exp_gt : ClangBuiltin<"__builtin_ppc_compare_exp_gt">, 2043 DefaultAttrsIntrinsic<[llvm_i32_ty], 2044 [llvm_double_ty, llvm_double_ty], 2045 [IntrNoMem]>; 2046 def int_ppc_compare_exp_eq : ClangBuiltin<"__builtin_ppc_compare_exp_eq">, 2047 DefaultAttrsIntrinsic<[llvm_i32_ty], 2048 [llvm_double_ty, llvm_double_ty], 2049 [IntrNoMem]>; 2050 def int_ppc_test_data_class 2051 : DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_anyfloat_ty, llvm_i32_ty], 2052 [IntrNoMem, ImmArg<ArgIndex<1>>]>; 2053 def int_ppc_fnabs 2054 : ClangBuiltin<"__builtin_ppc_fnabs">, 2055 DefaultAttrsIntrinsic<[llvm_double_ty], [llvm_double_ty], [IntrNoMem]>; 2056 def int_ppc_fnabss 2057 : ClangBuiltin<"__builtin_ppc_fnabss">, 2058 DefaultAttrsIntrinsic<[llvm_float_ty], [llvm_float_ty], [IntrNoMem]>; 2059 2060 def int_ppc_convert_f128_to_ppcf128 2061 : DefaultAttrsIntrinsic<[llvm_ppcf128_ty], [llvm_f128_ty], [IntrNoMem]>; 2062 def int_ppc_convert_ppcf128_to_f128 2063 : DefaultAttrsIntrinsic<[llvm_f128_ty], [llvm_ppcf128_ty], [IntrNoMem]>; 2064} 2065 2066//===----------------------------------------------------------------------===// 2067// PowerPC Atomic Intrinsic Definitions. 2068let TargetPrefix = "ppc" in { 2069 class AtomicRMW128Intrinsic 2070 : Intrinsic<[llvm_i64_ty, llvm_i64_ty], 2071 [llvm_ptr_ty, llvm_i64_ty, llvm_i64_ty], 2072 [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>; 2073 def int_ppc_atomicrmw_xchg_i128 : AtomicRMW128Intrinsic; 2074 def int_ppc_atomicrmw_add_i128 : AtomicRMW128Intrinsic; 2075 def int_ppc_atomicrmw_sub_i128 : AtomicRMW128Intrinsic; 2076 def int_ppc_atomicrmw_and_i128 : AtomicRMW128Intrinsic; 2077 def int_ppc_atomicrmw_or_i128 : AtomicRMW128Intrinsic; 2078 def int_ppc_atomicrmw_xor_i128 : AtomicRMW128Intrinsic; 2079 def int_ppc_atomicrmw_nand_i128 : AtomicRMW128Intrinsic; 2080 def int_ppc_cmpxchg_i128 : Intrinsic<[llvm_i64_ty, llvm_i64_ty], 2081 [llvm_ptr_ty, 2082 llvm_i64_ty, llvm_i64_ty, 2083 llvm_i64_ty, llvm_i64_ty], 2084 [IntrArgMemOnly, NoCapture<ArgIndex<0>>]>; 2085 def int_ppc_atomic_load_i128 : 2086 Intrinsic<[llvm_i64_ty, llvm_i64_ty], 2087 [llvm_ptr_ty], 2088 [IntrArgMemOnly, IntrReadMem, NoCapture<ArgIndex<0>>]>; 2089 def int_ppc_atomic_store_i128 : 2090 Intrinsic<[], [llvm_i64_ty, llvm_i64_ty, llvm_ptr_ty], 2091 [IntrArgMemOnly, IntrWriteMem, NoCapture<ArgIndex<2>>]>; 2092} 2093