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