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