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