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