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