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