1//===- IntrinsicsX86.td - Defines X86 intrinsics -----------*- tablegen -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file defines all of the X86-specific intrinsics. 11// 12//===----------------------------------------------------------------------===// 13 14//===----------------------------------------------------------------------===// 15// Interrupt traps 16let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 17 def int_x86_int : Intrinsic<[], [llvm_i8_ty]>; 18} 19 20//===----------------------------------------------------------------------===// 21// SEH intrinsics for Windows 22let TargetPrefix = "x86" in { 23 def int_x86_seh_lsda : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], [IntrNoMem]>; 24 25 // Marks the EH registration node created in LLVM IR prior to code generation. 26 def int_x86_seh_ehregnode : Intrinsic<[], [llvm_ptr_ty], []>; 27 28 // Marks the EH guard slot node created in LLVM IR prior to code generation. 29 def int_x86_seh_ehguard : Intrinsic<[], [llvm_ptr_ty], []>; 30 31 // Given a pointer to the end of an EH registration object, returns the true 32 // parent frame address that can be used with llvm.localrecover. 33 def int_x86_seh_recoverfp : Intrinsic<[llvm_ptr_ty], 34 [llvm_ptr_ty, llvm_ptr_ty], 35 [IntrNoMem]>; 36} 37 38//===----------------------------------------------------------------------===// 39// FLAGS. 40let TargetPrefix = "x86" in { 41 def int_x86_flags_read_u32 : GCCBuiltin<"__builtin_ia32_readeflags_u32">, 42 Intrinsic<[llvm_i32_ty], [], []>; 43 def int_x86_flags_read_u64 : GCCBuiltin<"__builtin_ia32_readeflags_u64">, 44 Intrinsic<[llvm_i64_ty], [], []>; 45 def int_x86_flags_write_u32 : GCCBuiltin<"__builtin_ia32_writeeflags_u32">, 46 Intrinsic<[], [llvm_i32_ty], []>; 47 def int_x86_flags_write_u64 : GCCBuiltin<"__builtin_ia32_writeeflags_u64">, 48 Intrinsic<[], [llvm_i64_ty], []>; 49} 50 51//===----------------------------------------------------------------------===// 52// Read Time Stamp Counter. 53let TargetPrefix = "x86" in { 54 def int_x86_rdtsc : GCCBuiltin<"__builtin_ia32_rdtsc">, 55 Intrinsic<[llvm_i64_ty], [], []>; 56 def int_x86_rdtscp : GCCBuiltin<"__builtin_ia32_rdtscp">, 57 Intrinsic<[llvm_i64_ty], [llvm_ptr_ty], [IntrArgMemOnly]>; 58} 59 60// Read Performance-Monitoring Counter. 61let TargetPrefix = "x86" in { 62 def int_x86_rdpmc : GCCBuiltin<"__builtin_ia32_rdpmc">, 63 Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>; 64} 65 66// Read processor ID. 67let TargetPrefix = "x86" in { 68 def int_x86_rdpid : GCCBuiltin<"__builtin_ia32_rdpid">, 69 Intrinsic<[llvm_i32_ty], [], []>; 70} 71 72//===----------------------------------------------------------------------===// 73// CET SS 74let TargetPrefix = "x86" in { 75 def int_x86_incsspd : GCCBuiltin<"__builtin_ia32_incsspd">, 76 Intrinsic<[], [llvm_i32_ty], []>; 77 def int_x86_incsspq : GCCBuiltin<"__builtin_ia32_incsspq">, 78 Intrinsic<[], [llvm_i64_ty], []>; 79 def int_x86_rdsspd : GCCBuiltin<"__builtin_ia32_rdsspd">, 80 Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>; 81 def int_x86_rdsspq : GCCBuiltin<"__builtin_ia32_rdsspq">, 82 Intrinsic<[llvm_i64_ty], [llvm_i64_ty], []>; 83 def int_x86_saveprevssp : GCCBuiltin<"__builtin_ia32_saveprevssp">, 84 Intrinsic<[], [], []>; 85 def int_x86_rstorssp : GCCBuiltin<"__builtin_ia32_rstorssp">, 86 Intrinsic<[], [llvm_ptr_ty], []>; 87 def int_x86_wrssd : GCCBuiltin<"__builtin_ia32_wrssd">, 88 Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], []>; 89 def int_x86_wrssq : GCCBuiltin<"__builtin_ia32_wrssq">, 90 Intrinsic<[], [llvm_i64_ty, llvm_ptr_ty], []>; 91 def int_x86_wrussd : GCCBuiltin<"__builtin_ia32_wrussd">, 92 Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], []>; 93 def int_x86_wrussq : GCCBuiltin<"__builtin_ia32_wrussq">, 94 Intrinsic<[], [llvm_i64_ty, llvm_ptr_ty], []>; 95 def int_x86_setssbsy : GCCBuiltin<"__builtin_ia32_setssbsy">, 96 Intrinsic<[], [], []>; 97 def int_x86_clrssbsy : GCCBuiltin<"__builtin_ia32_clrssbsy">, 98 Intrinsic<[], [llvm_ptr_ty], []>; 99} 100 101//===----------------------------------------------------------------------===// 102// 3DNow! 103 104let TargetPrefix = "x86" in { 105 def int_x86_3dnow_pavgusb : GCCBuiltin<"__builtin_ia32_pavgusb">, 106 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 107 [IntrNoMem]>; 108 def int_x86_3dnow_pf2id : GCCBuiltin<"__builtin_ia32_pf2id">, 109 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 110 def int_x86_3dnow_pfacc : GCCBuiltin<"__builtin_ia32_pfacc">, 111 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 112 [IntrNoMem]>; 113 def int_x86_3dnow_pfadd : GCCBuiltin<"__builtin_ia32_pfadd">, 114 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 115 [IntrNoMem]>; 116 def int_x86_3dnow_pfcmpeq : GCCBuiltin<"__builtin_ia32_pfcmpeq">, 117 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 118 [IntrNoMem]>; 119 def int_x86_3dnow_pfcmpge : GCCBuiltin<"__builtin_ia32_pfcmpge">, 120 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 121 [IntrNoMem]>; 122 def int_x86_3dnow_pfcmpgt : GCCBuiltin<"__builtin_ia32_pfcmpgt">, 123 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 124 [IntrNoMem]>; 125 def int_x86_3dnow_pfmax : GCCBuiltin<"__builtin_ia32_pfmax">, 126 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 127 [IntrNoMem]>; 128 def int_x86_3dnow_pfmin : GCCBuiltin<"__builtin_ia32_pfmin">, 129 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 130 [IntrNoMem]>; 131 def int_x86_3dnow_pfmul : GCCBuiltin<"__builtin_ia32_pfmul">, 132 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 133 [IntrNoMem]>; 134 def int_x86_3dnow_pfrcp : GCCBuiltin<"__builtin_ia32_pfrcp">, 135 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 136 def int_x86_3dnow_pfrcpit1 : GCCBuiltin<"__builtin_ia32_pfrcpit1">, 137 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 138 [IntrNoMem]>; 139 def int_x86_3dnow_pfrcpit2 : GCCBuiltin<"__builtin_ia32_pfrcpit2">, 140 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 141 [IntrNoMem]>; 142 def int_x86_3dnow_pfrsqrt : GCCBuiltin<"__builtin_ia32_pfrsqrt">, 143 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 144 def int_x86_3dnow_pfrsqit1 : GCCBuiltin<"__builtin_ia32_pfrsqit1">, 145 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 146 [IntrNoMem]>; 147 def int_x86_3dnow_pfsub : GCCBuiltin<"__builtin_ia32_pfsub">, 148 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 149 [IntrNoMem]>; 150 def int_x86_3dnow_pfsubr : GCCBuiltin<"__builtin_ia32_pfsubr">, 151 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 152 [IntrNoMem]>; 153 def int_x86_3dnow_pi2fd : GCCBuiltin<"__builtin_ia32_pi2fd">, 154 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 155 def int_x86_3dnow_pmulhrw : GCCBuiltin<"__builtin_ia32_pmulhrw">, 156 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 157 [IntrNoMem]>; 158} 159 160//===----------------------------------------------------------------------===// 161// 3DNow! extensions 162 163let TargetPrefix = "x86" in { 164 def int_x86_3dnowa_pf2iw : GCCBuiltin<"__builtin_ia32_pf2iw">, 165 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 166 def int_x86_3dnowa_pfnacc : GCCBuiltin<"__builtin_ia32_pfnacc">, 167 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 168 [IntrNoMem]>; 169 def int_x86_3dnowa_pfpnacc : GCCBuiltin<"__builtin_ia32_pfpnacc">, 170 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 171 [IntrNoMem]>; 172 def int_x86_3dnowa_pi2fw : GCCBuiltin<"__builtin_ia32_pi2fw">, 173 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 174 def int_x86_3dnowa_pswapd : 175 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 176} 177 178//===----------------------------------------------------------------------===// 179// SSE1 180 181// Arithmetic ops 182let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 183 def int_x86_sse_rcp_ss : GCCBuiltin<"__builtin_ia32_rcpss">, 184 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 185 [IntrNoMem]>; 186 def int_x86_sse_rcp_ps : GCCBuiltin<"__builtin_ia32_rcpps">, 187 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 188 [IntrNoMem]>; 189 def int_x86_sse_rsqrt_ss : GCCBuiltin<"__builtin_ia32_rsqrtss">, 190 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 191 [IntrNoMem]>; 192 def int_x86_sse_rsqrt_ps : GCCBuiltin<"__builtin_ia32_rsqrtps">, 193 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], 194 [IntrNoMem]>; 195 def int_x86_sse_min_ss : GCCBuiltin<"__builtin_ia32_minss">, 196 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 197 llvm_v4f32_ty], [IntrNoMem]>; 198 def int_x86_sse_min_ps : GCCBuiltin<"__builtin_ia32_minps">, 199 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 200 llvm_v4f32_ty], [IntrNoMem]>; 201 def int_x86_sse_max_ss : GCCBuiltin<"__builtin_ia32_maxss">, 202 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 203 llvm_v4f32_ty], [IntrNoMem]>; 204 def int_x86_sse_max_ps : GCCBuiltin<"__builtin_ia32_maxps">, 205 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 206 llvm_v4f32_ty], [IntrNoMem]>; 207} 208 209// Comparison ops 210let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 211 def int_x86_sse_cmp_ss : GCCBuiltin<"__builtin_ia32_cmpss">, 212 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 213 llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>; 214 // NOTE: This comparison intrinsic is not used by clang as long as the 215 // distinction in signaling behaviour is not implemented. 216 def int_x86_sse_cmp_ps : 217 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 218 llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>; 219 def int_x86_sse_comieq_ss : GCCBuiltin<"__builtin_ia32_comieq">, 220 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 221 llvm_v4f32_ty], [IntrNoMem]>; 222 def int_x86_sse_comilt_ss : GCCBuiltin<"__builtin_ia32_comilt">, 223 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 224 llvm_v4f32_ty], [IntrNoMem]>; 225 def int_x86_sse_comile_ss : GCCBuiltin<"__builtin_ia32_comile">, 226 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 227 llvm_v4f32_ty], [IntrNoMem]>; 228 def int_x86_sse_comigt_ss : GCCBuiltin<"__builtin_ia32_comigt">, 229 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 230 llvm_v4f32_ty], [IntrNoMem]>; 231 def int_x86_sse_comige_ss : GCCBuiltin<"__builtin_ia32_comige">, 232 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 233 llvm_v4f32_ty], [IntrNoMem]>; 234 def int_x86_sse_comineq_ss : GCCBuiltin<"__builtin_ia32_comineq">, 235 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 236 llvm_v4f32_ty], [IntrNoMem]>; 237 def int_x86_sse_ucomieq_ss : GCCBuiltin<"__builtin_ia32_ucomieq">, 238 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 239 llvm_v4f32_ty], [IntrNoMem]>; 240 def int_x86_sse_ucomilt_ss : GCCBuiltin<"__builtin_ia32_ucomilt">, 241 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 242 llvm_v4f32_ty], [IntrNoMem]>; 243 def int_x86_sse_ucomile_ss : GCCBuiltin<"__builtin_ia32_ucomile">, 244 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 245 llvm_v4f32_ty], [IntrNoMem]>; 246 def int_x86_sse_ucomigt_ss : GCCBuiltin<"__builtin_ia32_ucomigt">, 247 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 248 llvm_v4f32_ty], [IntrNoMem]>; 249 def int_x86_sse_ucomige_ss : GCCBuiltin<"__builtin_ia32_ucomige">, 250 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 251 llvm_v4f32_ty], [IntrNoMem]>; 252 def int_x86_sse_ucomineq_ss : GCCBuiltin<"__builtin_ia32_ucomineq">, 253 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 254 llvm_v4f32_ty], [IntrNoMem]>; 255} 256 257 258// Conversion ops 259let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 260 def int_x86_sse_cvtss2si : GCCBuiltin<"__builtin_ia32_cvtss2si">, 261 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 262 def int_x86_sse_cvtss2si64 : GCCBuiltin<"__builtin_ia32_cvtss2si64">, 263 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>; 264 def int_x86_sse_cvttss2si : GCCBuiltin<"__builtin_ia32_cvttss2si">, 265 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 266 def int_x86_sse_cvttss2si64 : GCCBuiltin<"__builtin_ia32_cvttss2si64">, 267 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>; 268 269 def int_x86_sse_cvtps2pi : GCCBuiltin<"__builtin_ia32_cvtps2pi">, 270 Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>; 271 def int_x86_sse_cvttps2pi: GCCBuiltin<"__builtin_ia32_cvttps2pi">, 272 Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>; 273 def int_x86_sse_cvtpi2ps : GCCBuiltin<"__builtin_ia32_cvtpi2ps">, 274 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 275 llvm_x86mmx_ty], [IntrNoMem]>; 276} 277 278// Cacheability support ops 279let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 280 def int_x86_sse_sfence : GCCBuiltin<"__builtin_ia32_sfence">, 281 Intrinsic<[], [], []>; 282} 283 284// Control register. 285let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 286 def int_x86_sse_stmxcsr : 287 Intrinsic<[], [llvm_ptr_ty], []>; 288 def int_x86_sse_ldmxcsr : 289 Intrinsic<[], [llvm_ptr_ty], []>; 290} 291 292// Misc. 293let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 294 def int_x86_sse_movmsk_ps : GCCBuiltin<"__builtin_ia32_movmskps">, 295 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 296} 297 298//===----------------------------------------------------------------------===// 299// SSE2 300 301// FP arithmetic ops 302let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 303 def int_x86_sse2_min_sd : GCCBuiltin<"__builtin_ia32_minsd">, 304 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 305 llvm_v2f64_ty], [IntrNoMem]>; 306 def int_x86_sse2_min_pd : GCCBuiltin<"__builtin_ia32_minpd">, 307 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 308 llvm_v2f64_ty], [IntrNoMem]>; 309 def int_x86_sse2_max_sd : GCCBuiltin<"__builtin_ia32_maxsd">, 310 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 311 llvm_v2f64_ty], [IntrNoMem]>; 312 def int_x86_sse2_max_pd : GCCBuiltin<"__builtin_ia32_maxpd">, 313 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 314 llvm_v2f64_ty], [IntrNoMem]>; 315} 316 317// FP comparison ops 318let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 319 def int_x86_sse2_cmp_sd : GCCBuiltin<"__builtin_ia32_cmpsd">, 320 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 321 llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>; 322 // NOTE: This comparison intrinsic is not used by clang as long as the 323 // distinction in signaling behaviour is not implemented. 324 def int_x86_sse2_cmp_pd : 325 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 326 llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>; 327 def int_x86_sse2_comieq_sd : GCCBuiltin<"__builtin_ia32_comisdeq">, 328 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 329 llvm_v2f64_ty], [IntrNoMem]>; 330 def int_x86_sse2_comilt_sd : GCCBuiltin<"__builtin_ia32_comisdlt">, 331 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 332 llvm_v2f64_ty], [IntrNoMem]>; 333 def int_x86_sse2_comile_sd : GCCBuiltin<"__builtin_ia32_comisdle">, 334 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 335 llvm_v2f64_ty], [IntrNoMem]>; 336 def int_x86_sse2_comigt_sd : GCCBuiltin<"__builtin_ia32_comisdgt">, 337 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 338 llvm_v2f64_ty], [IntrNoMem]>; 339 def int_x86_sse2_comige_sd : GCCBuiltin<"__builtin_ia32_comisdge">, 340 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 341 llvm_v2f64_ty], [IntrNoMem]>; 342 def int_x86_sse2_comineq_sd : GCCBuiltin<"__builtin_ia32_comisdneq">, 343 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 344 llvm_v2f64_ty], [IntrNoMem]>; 345 def int_x86_sse2_ucomieq_sd : GCCBuiltin<"__builtin_ia32_ucomisdeq">, 346 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 347 llvm_v2f64_ty], [IntrNoMem]>; 348 def int_x86_sse2_ucomilt_sd : GCCBuiltin<"__builtin_ia32_ucomisdlt">, 349 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 350 llvm_v2f64_ty], [IntrNoMem]>; 351 def int_x86_sse2_ucomile_sd : GCCBuiltin<"__builtin_ia32_ucomisdle">, 352 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 353 llvm_v2f64_ty], [IntrNoMem]>; 354 def int_x86_sse2_ucomigt_sd : GCCBuiltin<"__builtin_ia32_ucomisdgt">, 355 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 356 llvm_v2f64_ty], [IntrNoMem]>; 357 def int_x86_sse2_ucomige_sd : GCCBuiltin<"__builtin_ia32_ucomisdge">, 358 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 359 llvm_v2f64_ty], [IntrNoMem]>; 360 def int_x86_sse2_ucomineq_sd : GCCBuiltin<"__builtin_ia32_ucomisdneq">, 361 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 362 llvm_v2f64_ty], [IntrNoMem]>; 363} 364 365// Integer arithmetic ops. 366let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 367 def int_x86_sse2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb128">, 368 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 369 llvm_v16i8_ty], [IntrNoMem, Commutative]>; 370 def int_x86_sse2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw128">, 371 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 372 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 373 def int_x86_sse2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb128">, 374 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 375 llvm_v16i8_ty], [IntrNoMem, Commutative]>; 376 def int_x86_sse2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw128">, 377 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 378 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 379 def int_x86_sse2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb128">, 380 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 381 llvm_v16i8_ty], [IntrNoMem]>; 382 def int_x86_sse2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw128">, 383 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 384 llvm_v8i16_ty], [IntrNoMem]>; 385 def int_x86_sse2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb128">, 386 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 387 llvm_v16i8_ty], [IntrNoMem]>; 388 def int_x86_sse2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw128">, 389 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 390 llvm_v8i16_ty], [IntrNoMem]>; 391 def int_x86_sse2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw128">, 392 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 393 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 394 def int_x86_sse2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw128">, 395 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 396 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 397 def int_x86_sse2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd128">, 398 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, 399 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 400 def int_x86_sse2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw128">, 401 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty, 402 llvm_v16i8_ty], [IntrNoMem, Commutative]>; 403} 404 405// Integer shift ops. 406let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 407 def int_x86_sse2_psll_w : GCCBuiltin<"__builtin_ia32_psllw128">, 408 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 409 llvm_v8i16_ty], [IntrNoMem]>; 410 def int_x86_sse2_psll_d : GCCBuiltin<"__builtin_ia32_pslld128">, 411 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 412 llvm_v4i32_ty], [IntrNoMem]>; 413 def int_x86_sse2_psll_q : GCCBuiltin<"__builtin_ia32_psllq128">, 414 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 415 llvm_v2i64_ty], [IntrNoMem]>; 416 def int_x86_sse2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw128">, 417 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 418 llvm_v8i16_ty], [IntrNoMem]>; 419 def int_x86_sse2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld128">, 420 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 421 llvm_v4i32_ty], [IntrNoMem]>; 422 def int_x86_sse2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq128">, 423 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 424 llvm_v2i64_ty], [IntrNoMem]>; 425 def int_x86_sse2_psra_w : GCCBuiltin<"__builtin_ia32_psraw128">, 426 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 427 llvm_v8i16_ty], [IntrNoMem]>; 428 def int_x86_sse2_psra_d : GCCBuiltin<"__builtin_ia32_psrad128">, 429 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 430 llvm_v4i32_ty], [IntrNoMem]>; 431 432 def int_x86_sse2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi128">, 433 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 434 llvm_i32_ty], [IntrNoMem]>; 435 def int_x86_sse2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi128">, 436 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 437 llvm_i32_ty], [IntrNoMem]>; 438 def int_x86_sse2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi128">, 439 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 440 llvm_i32_ty], [IntrNoMem]>; 441 def int_x86_sse2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi128">, 442 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 443 llvm_i32_ty], [IntrNoMem]>; 444 def int_x86_sse2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi128">, 445 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 446 llvm_i32_ty], [IntrNoMem]>; 447 def int_x86_sse2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi128">, 448 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 449 llvm_i32_ty], [IntrNoMem]>; 450 def int_x86_sse2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi128">, 451 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 452 llvm_i32_ty], [IntrNoMem]>; 453 def int_x86_sse2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi128">, 454 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 455 llvm_i32_ty], [IntrNoMem]>; 456} 457 458// Conversion ops 459let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 460 def int_x86_sse2_cvtpd2dq : GCCBuiltin<"__builtin_ia32_cvtpd2dq">, 461 Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 462 def int_x86_sse2_cvttpd2dq : GCCBuiltin<"__builtin_ia32_cvttpd2dq">, 463 Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 464 def int_x86_sse2_cvtpd2ps : GCCBuiltin<"__builtin_ia32_cvtpd2ps">, 465 Intrinsic<[llvm_v4f32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 466 def int_x86_sse2_cvtps2dq : GCCBuiltin<"__builtin_ia32_cvtps2dq">, 467 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 468 def int_x86_sse2_cvttps2dq : GCCBuiltin<"__builtin_ia32_cvttps2dq">, 469 Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 470 def int_x86_sse2_cvtsd2si : GCCBuiltin<"__builtin_ia32_cvtsd2si">, 471 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 472 def int_x86_sse2_cvtsd2si64 : GCCBuiltin<"__builtin_ia32_cvtsd2si64">, 473 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 474 def int_x86_sse2_cvttsd2si : GCCBuiltin<"__builtin_ia32_cvttsd2si">, 475 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 476 def int_x86_sse2_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_cvttsd2si64">, 477 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 478 def int_x86_sse2_cvtsd2ss : GCCBuiltin<"__builtin_ia32_cvtsd2ss">, 479 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 480 llvm_v2f64_ty], [IntrNoMem]>; 481 def int_x86_sse_cvtpd2pi : GCCBuiltin<"__builtin_ia32_cvtpd2pi">, 482 Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>; 483 def int_x86_sse_cvttpd2pi: GCCBuiltin<"__builtin_ia32_cvttpd2pi">, 484 Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>; 485 def int_x86_sse_cvtpi2pd : GCCBuiltin<"__builtin_ia32_cvtpi2pd">, 486 Intrinsic<[llvm_v2f64_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 487} 488 489// Misc. 490let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 491 def int_x86_sse2_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128">, 492 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, 493 llvm_v8i16_ty], [IntrNoMem]>; 494 def int_x86_sse2_packssdw_128 : GCCBuiltin<"__builtin_ia32_packssdw128">, 495 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, 496 llvm_v4i32_ty], [IntrNoMem]>; 497 def int_x86_sse2_packuswb_128 : GCCBuiltin<"__builtin_ia32_packuswb128">, 498 Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, 499 llvm_v8i16_ty], [IntrNoMem]>; 500 def int_x86_sse2_movmsk_pd : GCCBuiltin<"__builtin_ia32_movmskpd">, 501 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>; 502 def int_x86_sse2_pmovmskb_128 : GCCBuiltin<"__builtin_ia32_pmovmskb128">, 503 Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>; 504 def int_x86_sse2_maskmov_dqu : GCCBuiltin<"__builtin_ia32_maskmovdqu">, 505 Intrinsic<[], [llvm_v16i8_ty, 506 llvm_v16i8_ty, llvm_ptr_ty], []>; 507 def int_x86_sse2_clflush : GCCBuiltin<"__builtin_ia32_clflush">, 508 Intrinsic<[], [llvm_ptr_ty], []>; 509 def int_x86_sse2_lfence : GCCBuiltin<"__builtin_ia32_lfence">, 510 Intrinsic<[], [], []>; 511 def int_x86_sse2_mfence : GCCBuiltin<"__builtin_ia32_mfence">, 512 Intrinsic<[], [], []>; 513 def int_x86_sse2_pause : GCCBuiltin<"__builtin_ia32_pause">, 514 Intrinsic<[], [], []>; 515} 516 517//===----------------------------------------------------------------------===// 518// SSE3 519 520// Addition / subtraction ops. 521let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 522 def int_x86_sse3_addsub_ps : GCCBuiltin<"__builtin_ia32_addsubps">, 523 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 524 llvm_v4f32_ty], [IntrNoMem]>; 525 def int_x86_sse3_addsub_pd : GCCBuiltin<"__builtin_ia32_addsubpd">, 526 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 527 llvm_v2f64_ty], [IntrNoMem]>; 528} 529 530// Horizontal ops. 531let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 532 def int_x86_sse3_hadd_ps : GCCBuiltin<"__builtin_ia32_haddps">, 533 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 534 llvm_v4f32_ty], [IntrNoMem]>; 535 def int_x86_sse3_hadd_pd : GCCBuiltin<"__builtin_ia32_haddpd">, 536 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 537 llvm_v2f64_ty], [IntrNoMem]>; 538 def int_x86_sse3_hsub_ps : GCCBuiltin<"__builtin_ia32_hsubps">, 539 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 540 llvm_v4f32_ty], [IntrNoMem]>; 541 def int_x86_sse3_hsub_pd : GCCBuiltin<"__builtin_ia32_hsubpd">, 542 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 543 llvm_v2f64_ty], [IntrNoMem]>; 544} 545 546// Specialized unaligned load. 547let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 548 def int_x86_sse3_ldu_dq : GCCBuiltin<"__builtin_ia32_lddqu">, 549 Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem]>; 550} 551 552// Thread synchronization ops. 553let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 554 def int_x86_sse3_monitor : GCCBuiltin<"__builtin_ia32_monitor">, 555 Intrinsic<[], [llvm_ptr_ty, 556 llvm_i32_ty, llvm_i32_ty], []>; 557 def int_x86_sse3_mwait : GCCBuiltin<"__builtin_ia32_mwait">, 558 Intrinsic<[], [llvm_i32_ty, 559 llvm_i32_ty], []>; 560} 561 562//===----------------------------------------------------------------------===// 563// SSSE3 564 565// Horizontal arithmetic ops 566let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 567 def int_x86_ssse3_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw">, 568 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 569 llvm_x86mmx_ty], [IntrNoMem]>; 570 def int_x86_ssse3_phadd_w_128 : GCCBuiltin<"__builtin_ia32_phaddw128">, 571 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 572 llvm_v8i16_ty], [IntrNoMem]>; 573 574 def int_x86_ssse3_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd">, 575 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 576 llvm_x86mmx_ty], [IntrNoMem]>; 577 def int_x86_ssse3_phadd_d_128 : GCCBuiltin<"__builtin_ia32_phaddd128">, 578 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 579 llvm_v4i32_ty], [IntrNoMem]>; 580 581 def int_x86_ssse3_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw">, 582 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 583 llvm_x86mmx_ty], [IntrNoMem]>; 584 def int_x86_ssse3_phadd_sw_128 : GCCBuiltin<"__builtin_ia32_phaddsw128">, 585 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 586 llvm_v8i16_ty], [IntrNoMem]>; 587 588 def int_x86_ssse3_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw">, 589 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 590 llvm_x86mmx_ty], [IntrNoMem]>; 591 def int_x86_ssse3_phsub_w_128 : GCCBuiltin<"__builtin_ia32_phsubw128">, 592 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 593 llvm_v8i16_ty], [IntrNoMem]>; 594 595 def int_x86_ssse3_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd">, 596 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 597 llvm_x86mmx_ty], [IntrNoMem]>; 598 def int_x86_ssse3_phsub_d_128 : GCCBuiltin<"__builtin_ia32_phsubd128">, 599 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 600 llvm_v4i32_ty], [IntrNoMem]>; 601 602 def int_x86_ssse3_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw">, 603 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 604 llvm_x86mmx_ty], [IntrNoMem]>; 605 def int_x86_ssse3_phsub_sw_128 : GCCBuiltin<"__builtin_ia32_phsubsw128">, 606 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 607 llvm_v8i16_ty], [IntrNoMem]>; 608 609 def int_x86_ssse3_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw">, 610 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 611 llvm_x86mmx_ty], [IntrNoMem]>; 612 def int_x86_ssse3_pmadd_ub_sw_128 : GCCBuiltin<"__builtin_ia32_pmaddubsw128">, 613 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, 614 llvm_v16i8_ty], [IntrNoMem]>; 615} 616 617// Packed multiply high with round and scale 618let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 619 def int_x86_ssse3_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw">, 620 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 621 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 622 def int_x86_ssse3_pmul_hr_sw_128 : GCCBuiltin<"__builtin_ia32_pmulhrsw128">, 623 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 624 llvm_v8i16_ty], [IntrNoMem, Commutative]>; 625} 626 627// Shuffle ops 628let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 629 def int_x86_ssse3_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb">, 630 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 631 llvm_x86mmx_ty], [IntrNoMem]>; 632 def int_x86_ssse3_pshuf_b_128 : GCCBuiltin<"__builtin_ia32_pshufb128">, 633 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 634 llvm_v16i8_ty], [IntrNoMem]>; 635 def int_x86_sse_pshuf_w : GCCBuiltin<"__builtin_ia32_pshufw">, 636 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty], 637 [IntrNoMem]>; 638} 639 640// Sign ops 641let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 642 def int_x86_ssse3_psign_b : GCCBuiltin<"__builtin_ia32_psignb">, 643 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 644 llvm_x86mmx_ty], [IntrNoMem]>; 645 def int_x86_ssse3_psign_b_128 : GCCBuiltin<"__builtin_ia32_psignb128">, 646 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 647 llvm_v16i8_ty], [IntrNoMem]>; 648 649 def int_x86_ssse3_psign_w : GCCBuiltin<"__builtin_ia32_psignw">, 650 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 651 llvm_x86mmx_ty], [IntrNoMem]>; 652 def int_x86_ssse3_psign_w_128 : GCCBuiltin<"__builtin_ia32_psignw128">, 653 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 654 llvm_v8i16_ty], [IntrNoMem]>; 655 656 def int_x86_ssse3_psign_d : GCCBuiltin<"__builtin_ia32_psignd">, 657 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 658 llvm_x86mmx_ty], [IntrNoMem]>; 659 def int_x86_ssse3_psign_d_128 : GCCBuiltin<"__builtin_ia32_psignd128">, 660 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 661 llvm_v4i32_ty], [IntrNoMem]>; 662} 663 664// Absolute value ops 665let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 666 def int_x86_ssse3_pabs_b : GCCBuiltin<"__builtin_ia32_pabsb">, 667 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 668 669 def int_x86_ssse3_pabs_w : GCCBuiltin<"__builtin_ia32_pabsw">, 670 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 671 672 def int_x86_ssse3_pabs_d : GCCBuiltin<"__builtin_ia32_pabsd">, 673 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 674} 675 676//===----------------------------------------------------------------------===// 677// SSE4.1 678 679// FP rounding ops 680let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 681 def int_x86_sse41_round_ss : GCCBuiltin<"__builtin_ia32_roundss">, 682 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 683 llvm_i32_ty], [IntrNoMem]>; 684 def int_x86_sse41_round_ps : GCCBuiltin<"__builtin_ia32_roundps">, 685 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 686 llvm_i32_ty], [IntrNoMem]>; 687 def int_x86_sse41_round_sd : GCCBuiltin<"__builtin_ia32_roundsd">, 688 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 689 llvm_i32_ty], [IntrNoMem]>; 690 def int_x86_sse41_round_pd : GCCBuiltin<"__builtin_ia32_roundpd">, 691 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 692 llvm_i32_ty], [IntrNoMem]>; 693} 694 695// Vector min element 696let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 697 def int_x86_sse41_phminposuw : GCCBuiltin<"__builtin_ia32_phminposuw128">, 698 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], 699 [IntrNoMem]>; 700} 701 702// Advanced Encryption Standard (AES) Instructions 703let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 704 def int_x86_aesni_aesimc : GCCBuiltin<"__builtin_ia32_aesimc128">, 705 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], 706 [IntrNoMem]>; 707 708 def int_x86_aesni_aesenc : GCCBuiltin<"__builtin_ia32_aesenc128">, 709 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 710 [IntrNoMem]>; 711 def int_x86_aesni_aesenc_256 : GCCBuiltin<"__builtin_ia32_aesenc256">, 712 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty], 713 [IntrNoMem]>; 714 def int_x86_aesni_aesenc_512 : GCCBuiltin<"__builtin_ia32_aesenc512">, 715 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty], 716 [IntrNoMem]>; 717 718 def int_x86_aesni_aesenclast : GCCBuiltin<"__builtin_ia32_aesenclast128">, 719 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 720 [IntrNoMem]>; 721 def int_x86_aesni_aesenclast_256 : 722 GCCBuiltin<"__builtin_ia32_aesenclast256">, 723 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty], 724 [IntrNoMem]>; 725 def int_x86_aesni_aesenclast_512 : 726 GCCBuiltin<"__builtin_ia32_aesenclast512">, 727 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty], 728 [IntrNoMem]>; 729 730 def int_x86_aesni_aesdec : GCCBuiltin<"__builtin_ia32_aesdec128">, 731 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 732 [IntrNoMem]>; 733 def int_x86_aesni_aesdec_256 : GCCBuiltin<"__builtin_ia32_aesdec256">, 734 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty], 735 [IntrNoMem]>; 736 def int_x86_aesni_aesdec_512 : GCCBuiltin<"__builtin_ia32_aesdec512">, 737 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty], 738 [IntrNoMem]>; 739 740 def int_x86_aesni_aesdeclast : GCCBuiltin<"__builtin_ia32_aesdeclast128">, 741 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 742 [IntrNoMem]>; 743 def int_x86_aesni_aesdeclast_256 : 744 GCCBuiltin<"__builtin_ia32_aesdeclast256">, 745 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty], 746 [IntrNoMem]>; 747 def int_x86_aesni_aesdeclast_512 : 748 GCCBuiltin<"__builtin_ia32_aesdeclast512">, 749 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty], 750 [IntrNoMem]>; 751 752 def int_x86_aesni_aeskeygenassist : 753 GCCBuiltin<"__builtin_ia32_aeskeygenassist128">, 754 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty], 755 [IntrNoMem]>; 756} 757 758// PCLMUL instructions 759let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 760 def int_x86_pclmulqdq : GCCBuiltin<"__builtin_ia32_pclmulqdq128">, 761 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], 762 [IntrNoMem]>; 763 def int_x86_pclmulqdq_256 : GCCBuiltin<"__builtin_ia32_pclmulqdq256">, 764 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty], 765 [IntrNoMem]>; 766 def int_x86_pclmulqdq_512 : GCCBuiltin<"__builtin_ia32_pclmulqdq512">, 767 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], 768 [IntrNoMem]>; 769} 770 771// Vector pack 772let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 773 def int_x86_sse41_packusdw : GCCBuiltin<"__builtin_ia32_packusdw128">, 774 Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 775 [IntrNoMem]>; 776} 777 778// Vector insert 779let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 780 def int_x86_sse41_insertps : GCCBuiltin<"__builtin_ia32_insertps128">, 781 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty], 782 [IntrNoMem]>; 783} 784 785// Vector blend 786let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 787 def int_x86_sse41_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb128">, 788 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_v16i8_ty], 789 [IntrNoMem]>; 790 def int_x86_sse41_blendvpd : GCCBuiltin<"__builtin_ia32_blendvpd">, 791 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,llvm_v2f64_ty], 792 [IntrNoMem]>; 793 def int_x86_sse41_blendvps : GCCBuiltin<"__builtin_ia32_blendvps">, 794 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_v4f32_ty], 795 [IntrNoMem]>; 796} 797 798// Vector dot product 799let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 800 def int_x86_sse41_dppd : GCCBuiltin<"__builtin_ia32_dppd">, 801 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty], 802 [IntrNoMem, Commutative]>; 803 def int_x86_sse41_dpps : GCCBuiltin<"__builtin_ia32_dpps">, 804 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty], 805 [IntrNoMem, Commutative]>; 806} 807 808// Vector sum of absolute differences 809let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 810 def int_x86_sse41_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw128">, 811 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_i8_ty], 812 [IntrNoMem, Commutative]>; 813} 814 815// Test instruction with bitwise comparison. 816let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 817 def int_x86_sse41_ptestz : GCCBuiltin<"__builtin_ia32_ptestz128">, 818 Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 819 [IntrNoMem]>; 820 def int_x86_sse41_ptestc : GCCBuiltin<"__builtin_ia32_ptestc128">, 821 Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 822 [IntrNoMem]>; 823 def int_x86_sse41_ptestnzc : GCCBuiltin<"__builtin_ia32_ptestnzc128">, 824 Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 825 [IntrNoMem]>; 826} 827 828//===----------------------------------------------------------------------===// 829// SSE4.2 830 831// Miscellaneous 832// CRC Instruction 833let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 834 def int_x86_sse42_crc32_32_8 : GCCBuiltin<"__builtin_ia32_crc32qi">, 835 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i8_ty], 836 [IntrNoMem]>; 837 def int_x86_sse42_crc32_32_16 : GCCBuiltin<"__builtin_ia32_crc32hi">, 838 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i16_ty], 839 [IntrNoMem]>; 840 def int_x86_sse42_crc32_32_32 : GCCBuiltin<"__builtin_ia32_crc32si">, 841 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], 842 [IntrNoMem]>; 843 def int_x86_sse42_crc32_64_64 : GCCBuiltin<"__builtin_ia32_crc32di">, 844 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], 845 [IntrNoMem]>; 846} 847 848// String/text processing ops. 849let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 850 def int_x86_sse42_pcmpistrm128 : GCCBuiltin<"__builtin_ia32_pcmpistrm128">, 851 Intrinsic<[llvm_v16i8_ty], 852 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 853 [IntrNoMem]>; 854 def int_x86_sse42_pcmpistri128 : GCCBuiltin<"__builtin_ia32_pcmpistri128">, 855 Intrinsic<[llvm_i32_ty], 856 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 857 [IntrNoMem]>; 858 def int_x86_sse42_pcmpistria128 : GCCBuiltin<"__builtin_ia32_pcmpistria128">, 859 Intrinsic<[llvm_i32_ty], 860 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 861 [IntrNoMem]>; 862 def int_x86_sse42_pcmpistric128 : GCCBuiltin<"__builtin_ia32_pcmpistric128">, 863 Intrinsic<[llvm_i32_ty], 864 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 865 [IntrNoMem]>; 866 def int_x86_sse42_pcmpistrio128 : GCCBuiltin<"__builtin_ia32_pcmpistrio128">, 867 Intrinsic<[llvm_i32_ty], 868 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 869 [IntrNoMem]>; 870 def int_x86_sse42_pcmpistris128 : GCCBuiltin<"__builtin_ia32_pcmpistris128">, 871 Intrinsic<[llvm_i32_ty], 872 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 873 [IntrNoMem]>; 874 def int_x86_sse42_pcmpistriz128 : GCCBuiltin<"__builtin_ia32_pcmpistriz128">, 875 Intrinsic<[llvm_i32_ty], 876 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 877 [IntrNoMem]>; 878 def int_x86_sse42_pcmpestrm128 : GCCBuiltin<"__builtin_ia32_pcmpestrm128">, 879 Intrinsic<[llvm_v16i8_ty], 880 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 881 llvm_i8_ty], 882 [IntrNoMem]>; 883 def int_x86_sse42_pcmpestri128 : GCCBuiltin<"__builtin_ia32_pcmpestri128">, 884 Intrinsic<[llvm_i32_ty], 885 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 886 llvm_i8_ty], 887 [IntrNoMem]>; 888 def int_x86_sse42_pcmpestria128 : GCCBuiltin<"__builtin_ia32_pcmpestria128">, 889 Intrinsic<[llvm_i32_ty], 890 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 891 llvm_i8_ty], 892 [IntrNoMem]>; 893 def int_x86_sse42_pcmpestric128 : GCCBuiltin<"__builtin_ia32_pcmpestric128">, 894 Intrinsic<[llvm_i32_ty], 895 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 896 llvm_i8_ty], 897 [IntrNoMem]>; 898 def int_x86_sse42_pcmpestrio128 : GCCBuiltin<"__builtin_ia32_pcmpestrio128">, 899 Intrinsic<[llvm_i32_ty], 900 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 901 llvm_i8_ty], 902 [IntrNoMem]>; 903 def int_x86_sse42_pcmpestris128 : GCCBuiltin<"__builtin_ia32_pcmpestris128">, 904 Intrinsic<[llvm_i32_ty], 905 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 906 llvm_i8_ty], 907 [IntrNoMem]>; 908 def int_x86_sse42_pcmpestriz128 : GCCBuiltin<"__builtin_ia32_pcmpestriz128">, 909 Intrinsic<[llvm_i32_ty], 910 [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty, 911 llvm_i8_ty], 912 [IntrNoMem]>; 913} 914 915//===----------------------------------------------------------------------===// 916// SSE4A 917 918let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 919 def int_x86_sse4a_extrqi : GCCBuiltin<"__builtin_ia32_extrqi">, 920 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty, llvm_i8_ty], 921 [IntrNoMem]>; 922 def int_x86_sse4a_extrq : GCCBuiltin<"__builtin_ia32_extrq">, 923 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty], [IntrNoMem]>; 924 925 def int_x86_sse4a_insertqi : GCCBuiltin<"__builtin_ia32_insertqi">, 926 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 927 llvm_i8_ty, llvm_i8_ty], [IntrNoMem]>; 928 def int_x86_sse4a_insertq : GCCBuiltin<"__builtin_ia32_insertq">, 929 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>; 930} 931 932//===----------------------------------------------------------------------===// 933// AVX 934 935// Arithmetic ops 936let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 937 def int_x86_avx_addsub_pd_256 : GCCBuiltin<"__builtin_ia32_addsubpd256">, 938 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 939 llvm_v4f64_ty], [IntrNoMem]>; 940 def int_x86_avx_addsub_ps_256 : GCCBuiltin<"__builtin_ia32_addsubps256">, 941 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 942 llvm_v8f32_ty], [IntrNoMem]>; 943 def int_x86_avx_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256">, 944 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 945 llvm_v4f64_ty], [IntrNoMem]>; 946 def int_x86_avx_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256">, 947 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 948 llvm_v8f32_ty], [IntrNoMem]>; 949 def int_x86_avx_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256">, 950 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 951 llvm_v4f64_ty], [IntrNoMem]>; 952 def int_x86_avx_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256">, 953 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 954 llvm_v8f32_ty], [IntrNoMem]>; 955 956 def int_x86_avx_rsqrt_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrtps256">, 957 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 958 959 def int_x86_avx_rcp_ps_256 : GCCBuiltin<"__builtin_ia32_rcpps256">, 960 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 961 962 def int_x86_avx_round_pd_256 : GCCBuiltin<"__builtin_ia32_roundpd256">, 963 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 964 llvm_i32_ty], [IntrNoMem]>; 965 def int_x86_avx_round_ps_256 : GCCBuiltin<"__builtin_ia32_roundps256">, 966 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 967 llvm_i32_ty], [IntrNoMem]>; 968} 969 970// Horizontal ops 971let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 972 def int_x86_avx_hadd_pd_256 : GCCBuiltin<"__builtin_ia32_haddpd256">, 973 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 974 llvm_v4f64_ty], [IntrNoMem]>; 975 def int_x86_avx_hsub_ps_256 : GCCBuiltin<"__builtin_ia32_hsubps256">, 976 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 977 llvm_v8f32_ty], [IntrNoMem]>; 978 def int_x86_avx_hsub_pd_256 : GCCBuiltin<"__builtin_ia32_hsubpd256">, 979 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 980 llvm_v4f64_ty], [IntrNoMem]>; 981 def int_x86_avx_hadd_ps_256 : GCCBuiltin<"__builtin_ia32_haddps256">, 982 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 983 llvm_v8f32_ty], [IntrNoMem]>; 984} 985 986// Vector permutation 987let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 988 def int_x86_avx_vpermilvar_pd : GCCBuiltin<"__builtin_ia32_vpermilvarpd">, 989 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 990 llvm_v2i64_ty], [IntrNoMem]>; 991 def int_x86_avx_vpermilvar_ps : GCCBuiltin<"__builtin_ia32_vpermilvarps">, 992 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 993 llvm_v4i32_ty], [IntrNoMem]>; 994 995 def int_x86_avx_vpermilvar_pd_256 : 996 GCCBuiltin<"__builtin_ia32_vpermilvarpd256">, 997 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4i64_ty], [IntrNoMem]>; 998 def int_x86_avx_vpermilvar_ps_256 : 999 GCCBuiltin<"__builtin_ia32_vpermilvarps256">, 1000 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty], [IntrNoMem]>; 1001 1002 def int_x86_avx512_vpermi2var_d_128 : 1003 GCCBuiltin<"__builtin_ia32_vpermi2vard128">, 1004 Intrinsic<[llvm_v4i32_ty], 1005 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 1006 1007 def int_x86_avx512_vpermi2var_d_256 : 1008 GCCBuiltin<"__builtin_ia32_vpermi2vard256">, 1009 Intrinsic<[llvm_v8i32_ty], 1010 [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty], [IntrNoMem]>; 1011 1012 def int_x86_avx512_vpermi2var_d_512 : 1013 GCCBuiltin<"__builtin_ia32_vpermi2vard512">, 1014 Intrinsic<[llvm_v16i32_ty], 1015 [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty], 1016 [IntrNoMem]>; 1017 1018 def int_x86_avx512_vpermi2var_hi_128 : 1019 GCCBuiltin<"__builtin_ia32_vpermi2varhi128">, 1020 Intrinsic<[llvm_v8i16_ty], 1021 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty], [IntrNoMem]>; 1022 1023 def int_x86_avx512_vpermi2var_hi_256 : 1024 GCCBuiltin<"__builtin_ia32_vpermi2varhi256">, 1025 Intrinsic<[llvm_v16i16_ty], 1026 [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty], 1027 [IntrNoMem]>; 1028 1029 def int_x86_avx512_vpermi2var_hi_512 : 1030 GCCBuiltin<"__builtin_ia32_vpermi2varhi512">, 1031 Intrinsic<[llvm_v32i16_ty], 1032 [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty], 1033 [IntrNoMem]>; 1034 1035 def int_x86_avx512_vpermi2var_pd_128 : 1036 GCCBuiltin<"__builtin_ia32_vpermi2varpd128">, 1037 Intrinsic<[llvm_v2f64_ty], 1038 [llvm_v2f64_ty, llvm_v2i64_ty, llvm_v2f64_ty], [IntrNoMem]>; 1039 1040 def int_x86_avx512_vpermi2var_pd_256 : 1041 GCCBuiltin<"__builtin_ia32_vpermi2varpd256">, 1042 Intrinsic<[llvm_v4f64_ty], 1043 [llvm_v4f64_ty, llvm_v4i64_ty, llvm_v4f64_ty], [IntrNoMem]>; 1044 1045 def int_x86_avx512_vpermi2var_pd_512 : 1046 GCCBuiltin<"__builtin_ia32_vpermi2varpd512">, 1047 Intrinsic<[llvm_v8f64_ty], 1048 [llvm_v8f64_ty, llvm_v8i64_ty, llvm_v8f64_ty], [IntrNoMem]>; 1049 1050 def int_x86_avx512_vpermi2var_ps_128 : 1051 GCCBuiltin<"__builtin_ia32_vpermi2varps128">, 1052 Intrinsic<[llvm_v4f32_ty], 1053 [llvm_v4f32_ty, llvm_v4i32_ty, llvm_v4f32_ty], [IntrNoMem]>; 1054 1055 def int_x86_avx512_vpermi2var_ps_256 : 1056 GCCBuiltin<"__builtin_ia32_vpermi2varps256">, 1057 Intrinsic<[llvm_v8f32_ty], 1058 [llvm_v8f32_ty, llvm_v8i32_ty, llvm_v8f32_ty], [IntrNoMem]>; 1059 1060 def int_x86_avx512_vpermi2var_ps_512 : 1061 GCCBuiltin<"__builtin_ia32_vpermi2varps512">, 1062 Intrinsic<[llvm_v16f32_ty], 1063 [llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16f32_ty], 1064 [IntrNoMem]>; 1065 1066 def int_x86_avx512_vpermi2var_q_128 : 1067 GCCBuiltin<"__builtin_ia32_vpermi2varq128">, 1068 Intrinsic<[llvm_v2i64_ty], 1069 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>; 1070 1071 def int_x86_avx512_vpermi2var_q_256 : 1072 GCCBuiltin<"__builtin_ia32_vpermi2varq256">, 1073 Intrinsic<[llvm_v4i64_ty], 1074 [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty], [IntrNoMem]>; 1075 1076 def int_x86_avx512_vpermi2var_q_512 : 1077 GCCBuiltin<"__builtin_ia32_vpermi2varq512">, 1078 Intrinsic<[llvm_v8i64_ty], 1079 [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty], [IntrNoMem]>; 1080 1081 def int_x86_avx512_vpermi2var_qi_128 : 1082 GCCBuiltin<"__builtin_ia32_vpermi2varqi128">, 1083 Intrinsic<[llvm_v16i8_ty], 1084 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>; 1085 1086 def int_x86_avx512_vpermi2var_qi_256 : 1087 GCCBuiltin<"__builtin_ia32_vpermi2varqi256">, 1088 Intrinsic<[llvm_v32i8_ty], 1089 [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v32i8_ty], [IntrNoMem]>; 1090 1091 def int_x86_avx512_vpermi2var_qi_512 : 1092 GCCBuiltin<"__builtin_ia32_vpermi2varqi512">, 1093 Intrinsic<[llvm_v64i8_ty], 1094 [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v64i8_ty], [IntrNoMem]>; 1095 1096 def int_x86_avx512_vpermilvar_pd_512 : 1097 GCCBuiltin<"__builtin_ia32_vpermilvarpd512">, 1098 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8i64_ty], 1099 [IntrNoMem]>; 1100 1101 def int_x86_avx512_vpermilvar_ps_512 : 1102 GCCBuiltin<"__builtin_ia32_vpermilvarps512">, 1103 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16i32_ty], 1104 [IntrNoMem]>; 1105 1106 def int_x86_avx512_pshuf_b_512 : 1107 GCCBuiltin<"__builtin_ia32_pshufb512">, 1108 Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty], 1109 [IntrNoMem]>; 1110 1111} 1112 1113// GFNI Instructions 1114let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1115 def int_x86_vgf2p8affineinvqb_128 : 1116 GCCBuiltin<"__builtin_ia32_vgf2p8affineinvqb_v16qi">, 1117 Intrinsic<[llvm_v16i8_ty], 1118 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 1119 [IntrNoMem]>; 1120 def int_x86_vgf2p8affineinvqb_256 : 1121 GCCBuiltin<"__builtin_ia32_vgf2p8affineinvqb_v32qi">, 1122 Intrinsic<[llvm_v32i8_ty], 1123 [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i8_ty], 1124 [IntrNoMem]>; 1125 def int_x86_vgf2p8affineinvqb_512 : 1126 GCCBuiltin<"__builtin_ia32_vgf2p8affineinvqb_v64qi">, 1127 Intrinsic<[llvm_v64i8_ty], 1128 [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i8_ty], 1129 [IntrNoMem]>; 1130 1131 def int_x86_vgf2p8affineqb_128 : 1132 GCCBuiltin<"__builtin_ia32_vgf2p8affineqb_v16qi">, 1133 Intrinsic<[llvm_v16i8_ty], 1134 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty], 1135 [IntrNoMem]>; 1136 def int_x86_vgf2p8affineqb_256 : 1137 GCCBuiltin<"__builtin_ia32_vgf2p8affineqb_v32qi">, 1138 Intrinsic<[llvm_v32i8_ty], 1139 [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i8_ty], 1140 [IntrNoMem]>; 1141 def int_x86_vgf2p8affineqb_512 : 1142 GCCBuiltin<"__builtin_ia32_vgf2p8affineqb_v64qi">, 1143 Intrinsic<[llvm_v64i8_ty], 1144 [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i8_ty], 1145 [IntrNoMem]>; 1146 1147 def int_x86_vgf2p8mulb_128 : 1148 GCCBuiltin<"__builtin_ia32_vgf2p8mulb_v16qi">, 1149 Intrinsic<[llvm_v16i8_ty], 1150 [llvm_v16i8_ty, llvm_v16i8_ty], 1151 [IntrNoMem]>; 1152 def int_x86_vgf2p8mulb_256 : 1153 GCCBuiltin<"__builtin_ia32_vgf2p8mulb_v32qi">, 1154 Intrinsic<[llvm_v32i8_ty], 1155 [llvm_v32i8_ty, llvm_v32i8_ty], 1156 [IntrNoMem]>; 1157 def int_x86_vgf2p8mulb_512 : 1158 GCCBuiltin<"__builtin_ia32_vgf2p8mulb_v64qi">, 1159 Intrinsic<[llvm_v64i8_ty], 1160 [llvm_v64i8_ty, llvm_v64i8_ty], 1161 [IntrNoMem]>; 1162} 1163 1164// Vector blend 1165let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1166 def int_x86_avx_blendv_pd_256 : GCCBuiltin<"__builtin_ia32_blendvpd256">, 1167 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1168 llvm_v4f64_ty, llvm_v4f64_ty], [IntrNoMem]>; 1169 def int_x86_avx_blendv_ps_256 : GCCBuiltin<"__builtin_ia32_blendvps256">, 1170 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1171 llvm_v8f32_ty, llvm_v8f32_ty], [IntrNoMem]>; 1172} 1173 1174// Vector dot product 1175let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1176 def int_x86_avx_dp_ps_256 : GCCBuiltin<"__builtin_ia32_dpps256">, 1177 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1178 llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem, Commutative]>; 1179} 1180 1181// Vector compare 1182let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1183 def int_x86_avx_cmp_pd_256 : 1184 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 1185 llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>; 1186 def int_x86_avx_cmp_ps_256 : 1187 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, 1188 llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>; 1189} 1190 1191// Vector convert 1192let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1193 def int_x86_avx_cvt_pd2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtpd2ps256">, 1194 Intrinsic<[llvm_v4f32_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1195 def int_x86_avx_cvt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvtps2dq256">, 1196 Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 1197 def int_x86_avx_cvtt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvttpd2dq256">, 1198 Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1199 def int_x86_avx_cvt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvtpd2dq256">, 1200 Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1201 def int_x86_avx_cvtt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvttps2dq256">, 1202 Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 1203} 1204 1205// Vector bit test 1206let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1207 def int_x86_avx_vtestz_pd : GCCBuiltin<"__builtin_ia32_vtestzpd">, 1208 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 1209 llvm_v2f64_ty], [IntrNoMem]>; 1210 def int_x86_avx_vtestc_pd : GCCBuiltin<"__builtin_ia32_vtestcpd">, 1211 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 1212 llvm_v2f64_ty], [IntrNoMem]>; 1213 def int_x86_avx_vtestnzc_pd : GCCBuiltin<"__builtin_ia32_vtestnzcpd">, 1214 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 1215 llvm_v2f64_ty], [IntrNoMem]>; 1216 def int_x86_avx_vtestz_ps : GCCBuiltin<"__builtin_ia32_vtestzps">, 1217 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 1218 llvm_v4f32_ty], [IntrNoMem]>; 1219 def int_x86_avx_vtestc_ps : GCCBuiltin<"__builtin_ia32_vtestcps">, 1220 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 1221 llvm_v4f32_ty], [IntrNoMem]>; 1222 def int_x86_avx_vtestnzc_ps : GCCBuiltin<"__builtin_ia32_vtestnzcps">, 1223 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 1224 llvm_v4f32_ty], [IntrNoMem]>; 1225 def int_x86_avx_vtestz_pd_256 : GCCBuiltin<"__builtin_ia32_vtestzpd256">, 1226 Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty, 1227 llvm_v4f64_ty], [IntrNoMem]>; 1228 def int_x86_avx_vtestc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestcpd256">, 1229 Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty, 1230 llvm_v4f64_ty], [IntrNoMem]>; 1231 def int_x86_avx_vtestnzc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestnzcpd256">, 1232 Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty, 1233 llvm_v4f64_ty], [IntrNoMem]>; 1234 def int_x86_avx_vtestz_ps_256 : GCCBuiltin<"__builtin_ia32_vtestzps256">, 1235 Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty, 1236 llvm_v8f32_ty], [IntrNoMem]>; 1237 def int_x86_avx_vtestc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestcps256">, 1238 Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty, 1239 llvm_v8f32_ty], [IntrNoMem]>; 1240 def int_x86_avx_vtestnzc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestnzcps256">, 1241 Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty, 1242 llvm_v8f32_ty], [IntrNoMem]>; 1243 def int_x86_avx_ptestz_256 : GCCBuiltin<"__builtin_ia32_ptestz256">, 1244 Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty, 1245 llvm_v4i64_ty], [IntrNoMem]>; 1246 def int_x86_avx_ptestc_256 : GCCBuiltin<"__builtin_ia32_ptestc256">, 1247 Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty, 1248 llvm_v4i64_ty], [IntrNoMem]>; 1249 def int_x86_avx_ptestnzc_256 : GCCBuiltin<"__builtin_ia32_ptestnzc256">, 1250 Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty, 1251 llvm_v4i64_ty], [IntrNoMem]>; 1252 1253 def int_x86_avx512_fpclass_pd_128 : 1254 Intrinsic<[llvm_v2i1_ty], [llvm_v2f64_ty, llvm_i32_ty], 1255 [IntrNoMem]>; 1256 def int_x86_avx512_fpclass_pd_256 : 1257 Intrinsic<[llvm_v4i1_ty], [llvm_v4f64_ty, llvm_i32_ty], 1258 [IntrNoMem]>; 1259 def int_x86_avx512_fpclass_pd_512 : 1260 Intrinsic<[llvm_v8i1_ty], [llvm_v8f64_ty, llvm_i32_ty], 1261 [IntrNoMem]>; 1262 def int_x86_avx512_fpclass_ps_128 : 1263 Intrinsic<[llvm_v4i1_ty], [llvm_v4f32_ty, llvm_i32_ty], 1264 [IntrNoMem]>; 1265 def int_x86_avx512_fpclass_ps_256 : 1266 Intrinsic<[llvm_v8i1_ty], [llvm_v8f32_ty, llvm_i32_ty], 1267 [IntrNoMem]>; 1268 def int_x86_avx512_fpclass_ps_512 : 1269 Intrinsic<[llvm_v16i1_ty], [llvm_v16f32_ty, llvm_i32_ty], 1270 [IntrNoMem]>; 1271 def int_x86_avx512_mask_fpclass_sd : 1272 GCCBuiltin<"__builtin_ia32_fpclasssd_mask">, 1273 Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_i32_ty, llvm_i8_ty], 1274 [IntrNoMem]>; 1275 def int_x86_avx512_mask_fpclass_ss : 1276 GCCBuiltin<"__builtin_ia32_fpclassss_mask">, 1277 Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i8_ty], 1278 [IntrNoMem]>; 1279} 1280 1281// Vector extract sign mask 1282let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1283 def int_x86_avx_movmsk_pd_256 : GCCBuiltin<"__builtin_ia32_movmskpd256">, 1284 Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty], [IntrNoMem]>; 1285 def int_x86_avx_movmsk_ps_256 : GCCBuiltin<"__builtin_ia32_movmskps256">, 1286 Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 1287} 1288 1289// Vector zero 1290let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1291 def int_x86_avx_vzeroall : GCCBuiltin<"__builtin_ia32_vzeroall">, 1292 Intrinsic<[], [], []>; 1293 def int_x86_avx_vzeroupper : GCCBuiltin<"__builtin_ia32_vzeroupper">, 1294 Intrinsic<[], [], []>; 1295} 1296 1297// SIMD load ops 1298let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1299 def int_x86_avx_ldu_dq_256 : GCCBuiltin<"__builtin_ia32_lddqu256">, 1300 Intrinsic<[llvm_v32i8_ty], [llvm_ptr_ty], [IntrReadMem]>; 1301} 1302 1303// Conditional load ops 1304let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1305 def int_x86_avx_maskload_pd : GCCBuiltin<"__builtin_ia32_maskloadpd">, 1306 Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2i64_ty], 1307 [IntrReadMem, IntrArgMemOnly]>; 1308 def int_x86_avx_maskload_ps : GCCBuiltin<"__builtin_ia32_maskloadps">, 1309 Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4i32_ty], 1310 [IntrReadMem, IntrArgMemOnly]>; 1311 def int_x86_avx_maskload_pd_256 : GCCBuiltin<"__builtin_ia32_maskloadpd256">, 1312 Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4i64_ty], 1313 [IntrReadMem, IntrArgMemOnly]>; 1314 def int_x86_avx_maskload_ps_256 : GCCBuiltin<"__builtin_ia32_maskloadps256">, 1315 Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8i32_ty], 1316 [IntrReadMem, IntrArgMemOnly]>; 1317} 1318 1319// Conditional store ops 1320let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1321 def int_x86_avx_maskstore_pd : GCCBuiltin<"__builtin_ia32_maskstorepd">, 1322 Intrinsic<[], [llvm_ptr_ty, 1323 llvm_v2i64_ty, llvm_v2f64_ty], [IntrArgMemOnly]>; 1324 def int_x86_avx_maskstore_ps : GCCBuiltin<"__builtin_ia32_maskstoreps">, 1325 Intrinsic<[], [llvm_ptr_ty, 1326 llvm_v4i32_ty, llvm_v4f32_ty], [IntrArgMemOnly]>; 1327 def int_x86_avx_maskstore_pd_256 : 1328 GCCBuiltin<"__builtin_ia32_maskstorepd256">, 1329 Intrinsic<[], [llvm_ptr_ty, 1330 llvm_v4i64_ty, llvm_v4f64_ty], [IntrArgMemOnly]>; 1331 def int_x86_avx_maskstore_ps_256 : 1332 GCCBuiltin<"__builtin_ia32_maskstoreps256">, 1333 Intrinsic<[], [llvm_ptr_ty, 1334 llvm_v8i32_ty, llvm_v8f32_ty], [IntrArgMemOnly]>; 1335} 1336 1337// BITALG bits shuffle 1338let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1339 def int_x86_avx512_mask_vpshufbitqmb_128 : 1340 GCCBuiltin<"__builtin_ia32_vpshufbitqmb128_mask">, 1341 Intrinsic<[llvm_i16_ty], 1342 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty], 1343 [IntrNoMem]>; 1344 def int_x86_avx512_mask_vpshufbitqmb_256 : 1345 GCCBuiltin<"__builtin_ia32_vpshufbitqmb256_mask">, 1346 Intrinsic<[llvm_i32_ty], 1347 [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty], 1348 [IntrNoMem]>; 1349 def int_x86_avx512_mask_vpshufbitqmb_512 : 1350 GCCBuiltin<"__builtin_ia32_vpshufbitqmb512_mask">, 1351 Intrinsic<[llvm_i64_ty], 1352 [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty], 1353 [IntrNoMem]>; 1354} 1355 1356//===----------------------------------------------------------------------===// 1357// AVX2 1358 1359// Integer arithmetic ops. 1360let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1361 def int_x86_avx2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb256">, 1362 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1363 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1364 def int_x86_avx2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw256">, 1365 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1366 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1367 def int_x86_avx2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb256">, 1368 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1369 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1370 def int_x86_avx2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw256">, 1371 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1372 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1373 def int_x86_avx2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb256">, 1374 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1375 llvm_v32i8_ty], [IntrNoMem]>; 1376 def int_x86_avx2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw256">, 1377 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1378 llvm_v16i16_ty], [IntrNoMem]>; 1379 def int_x86_avx2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb256">, 1380 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1381 llvm_v32i8_ty], [IntrNoMem]>; 1382 def int_x86_avx2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw256">, 1383 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1384 llvm_v16i16_ty], [IntrNoMem]>; 1385 def int_x86_avx2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw256">, 1386 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1387 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1388 def int_x86_avx2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw256">, 1389 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1390 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1391 def int_x86_avx2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd256">, 1392 Intrinsic<[llvm_v8i32_ty], [llvm_v16i16_ty, 1393 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1394 def int_x86_avx2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw256">, 1395 Intrinsic<[llvm_v4i64_ty], [llvm_v32i8_ty, 1396 llvm_v32i8_ty], [IntrNoMem, Commutative]>; 1397} 1398 1399// Integer shift ops. 1400let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1401 def int_x86_avx2_psll_w : GCCBuiltin<"__builtin_ia32_psllw256">, 1402 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1403 llvm_v8i16_ty], [IntrNoMem]>; 1404 def int_x86_avx2_psll_d : GCCBuiltin<"__builtin_ia32_pslld256">, 1405 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1406 llvm_v4i32_ty], [IntrNoMem]>; 1407 def int_x86_avx2_psll_q : GCCBuiltin<"__builtin_ia32_psllq256">, 1408 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1409 llvm_v2i64_ty], [IntrNoMem]>; 1410 def int_x86_avx2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw256">, 1411 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1412 llvm_v8i16_ty], [IntrNoMem]>; 1413 def int_x86_avx2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld256">, 1414 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1415 llvm_v4i32_ty], [IntrNoMem]>; 1416 def int_x86_avx2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq256">, 1417 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1418 llvm_v2i64_ty], [IntrNoMem]>; 1419 def int_x86_avx2_psra_w : GCCBuiltin<"__builtin_ia32_psraw256">, 1420 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1421 llvm_v8i16_ty], [IntrNoMem]>; 1422 def int_x86_avx2_psra_d : GCCBuiltin<"__builtin_ia32_psrad256">, 1423 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1424 llvm_v4i32_ty], [IntrNoMem]>; 1425 1426 def int_x86_avx2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi256">, 1427 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1428 llvm_i32_ty], [IntrNoMem]>; 1429 def int_x86_avx2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi256">, 1430 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1431 llvm_i32_ty], [IntrNoMem]>; 1432 def int_x86_avx2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi256">, 1433 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1434 llvm_i32_ty], [IntrNoMem]>; 1435 def int_x86_avx2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi256">, 1436 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1437 llvm_i32_ty], [IntrNoMem]>; 1438 def int_x86_avx2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi256">, 1439 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1440 llvm_i32_ty], [IntrNoMem]>; 1441 def int_x86_avx2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi256">, 1442 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1443 llvm_i32_ty], [IntrNoMem]>; 1444 def int_x86_avx2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi256">, 1445 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1446 llvm_i32_ty], [IntrNoMem]>; 1447 def int_x86_avx2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi256">, 1448 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1449 llvm_i32_ty], [IntrNoMem]>; 1450 1451 def int_x86_avx512_psra_q_128 : GCCBuiltin<"__builtin_ia32_psraq128">, 1452 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 1453 llvm_v2i64_ty], [IntrNoMem]>; 1454 def int_x86_avx512_psra_q_256 : GCCBuiltin<"__builtin_ia32_psraq256">, 1455 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1456 llvm_v2i64_ty], [IntrNoMem]>; 1457 1458 def int_x86_avx512_psrai_q_128 : GCCBuiltin<"__builtin_ia32_psraqi128">, 1459 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 1460 llvm_i32_ty], [IntrNoMem]>; 1461 def int_x86_avx512_psrai_q_256 : GCCBuiltin<"__builtin_ia32_psraqi256">, 1462 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1463 llvm_i32_ty], [IntrNoMem]>; 1464 1465 def int_x86_avx512_psll_w_512 : GCCBuiltin<"__builtin_ia32_psllw512">, 1466 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 1467 llvm_v8i16_ty], [IntrNoMem]>; 1468 def int_x86_avx512_psll_d_512 : GCCBuiltin<"__builtin_ia32_pslld512">, 1469 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1470 llvm_v4i32_ty], [IntrNoMem]>; 1471 def int_x86_avx512_psll_q_512 : GCCBuiltin<"__builtin_ia32_psllq512">, 1472 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1473 llvm_v2i64_ty], [IntrNoMem]>; 1474 def int_x86_avx512_psrl_w_512 : GCCBuiltin<"__builtin_ia32_psrlw512">, 1475 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 1476 llvm_v8i16_ty], [IntrNoMem]>; 1477 def int_x86_avx512_psrl_d_512 : GCCBuiltin<"__builtin_ia32_psrld512">, 1478 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1479 llvm_v4i32_ty], [IntrNoMem]>; 1480 def int_x86_avx512_psrl_q_512 : GCCBuiltin<"__builtin_ia32_psrlq512">, 1481 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1482 llvm_v2i64_ty], [IntrNoMem]>; 1483 def int_x86_avx512_psra_w_512 : GCCBuiltin<"__builtin_ia32_psraw512">, 1484 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 1485 llvm_v8i16_ty], [IntrNoMem]>; 1486 def int_x86_avx512_psra_d_512 : GCCBuiltin<"__builtin_ia32_psrad512">, 1487 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1488 llvm_v4i32_ty], [IntrNoMem]>; 1489 def int_x86_avx512_psra_q_512 : GCCBuiltin<"__builtin_ia32_psraq512">, 1490 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1491 llvm_v2i64_ty], [IntrNoMem]>; 1492 1493 def int_x86_avx512_pslli_w_512 : GCCBuiltin<"__builtin_ia32_psllwi512">, 1494 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 1495 llvm_i32_ty], [IntrNoMem]>; 1496 def int_x86_avx512_pslli_d_512 : GCCBuiltin<"__builtin_ia32_pslldi512">, 1497 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1498 llvm_i32_ty], [IntrNoMem]>; 1499 def int_x86_avx512_pslli_q_512 : GCCBuiltin<"__builtin_ia32_psllqi512">, 1500 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1501 llvm_i32_ty], [IntrNoMem]>; 1502 def int_x86_avx512_psrli_w_512 : GCCBuiltin<"__builtin_ia32_psrlwi512">, 1503 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 1504 llvm_i32_ty], [IntrNoMem]>; 1505 def int_x86_avx512_psrli_d_512 : GCCBuiltin<"__builtin_ia32_psrldi512">, 1506 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1507 llvm_i32_ty], [IntrNoMem]>; 1508 def int_x86_avx512_psrli_q_512 : GCCBuiltin<"__builtin_ia32_psrlqi512">, 1509 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1510 llvm_i32_ty], [IntrNoMem]>; 1511 def int_x86_avx512_psrai_w_512 : GCCBuiltin<"__builtin_ia32_psrawi512">, 1512 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 1513 llvm_i32_ty], [IntrNoMem]>; 1514 def int_x86_avx512_psrai_d_512 : GCCBuiltin<"__builtin_ia32_psradi512">, 1515 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1516 llvm_i32_ty], [IntrNoMem]>; 1517 def int_x86_avx512_psrai_q_512 : GCCBuiltin<"__builtin_ia32_psraqi512">, 1518 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1519 llvm_i32_ty], [IntrNoMem]>; 1520 1521 def int_x86_avx512_mask_pmultishift_qb_128: 1522 GCCBuiltin<"__builtin_ia32_vpmultishiftqb128_mask">, 1523 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 1524 llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; 1525 def int_x86_avx512_mask_pmultishift_qb_256: 1526 GCCBuiltin<"__builtin_ia32_vpmultishiftqb256_mask">, 1527 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1528 llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; 1529 def int_x86_avx512_mask_pmultishift_qb_512: 1530 GCCBuiltin<"__builtin_ia32_vpmultishiftqb512_mask">, 1531 Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, 1532 llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; 1533} 1534 1535// Pack ops. 1536let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1537 def int_x86_avx2_packsswb : GCCBuiltin<"__builtin_ia32_packsswb256">, 1538 Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty, 1539 llvm_v16i16_ty], [IntrNoMem]>; 1540 def int_x86_avx2_packssdw : GCCBuiltin<"__builtin_ia32_packssdw256">, 1541 Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, 1542 llvm_v8i32_ty], [IntrNoMem]>; 1543 def int_x86_avx2_packuswb : GCCBuiltin<"__builtin_ia32_packuswb256">, 1544 Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty, 1545 llvm_v16i16_ty], [IntrNoMem]>; 1546 def int_x86_avx2_packusdw : GCCBuiltin<"__builtin_ia32_packusdw256">, 1547 Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, 1548 llvm_v8i32_ty], [IntrNoMem]>; 1549} 1550 1551// Horizontal arithmetic ops 1552let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1553 def int_x86_avx2_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw256">, 1554 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1555 llvm_v16i16_ty], [IntrNoMem]>; 1556 def int_x86_avx2_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd256">, 1557 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1558 llvm_v8i32_ty], [IntrNoMem]>; 1559 def int_x86_avx2_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw256">, 1560 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1561 llvm_v16i16_ty], [IntrNoMem]>; 1562 def int_x86_avx2_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw256">, 1563 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1564 llvm_v16i16_ty], [IntrNoMem]>; 1565 def int_x86_avx2_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd256">, 1566 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1567 llvm_v8i32_ty], [IntrNoMem]>; 1568 def int_x86_avx2_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw256">, 1569 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1570 llvm_v16i16_ty], [IntrNoMem]>; 1571 def int_x86_avx2_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw256">, 1572 Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, 1573 llvm_v32i8_ty], [IntrNoMem]>; 1574} 1575 1576// Sign ops 1577let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1578 def int_x86_avx2_psign_b : GCCBuiltin<"__builtin_ia32_psignb256">, 1579 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1580 llvm_v32i8_ty], [IntrNoMem]>; 1581 def int_x86_avx2_psign_w : GCCBuiltin<"__builtin_ia32_psignw256">, 1582 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1583 llvm_v16i16_ty], [IntrNoMem]>; 1584 def int_x86_avx2_psign_d : GCCBuiltin<"__builtin_ia32_psignd256">, 1585 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1586 llvm_v8i32_ty], [IntrNoMem]>; 1587} 1588 1589// Packed multiply high with round and scale 1590let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1591 def int_x86_avx2_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw256">, 1592 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 1593 llvm_v16i16_ty], [IntrNoMem, Commutative]>; 1594 def int_x86_avx512_pmul_hr_sw_512 : GCCBuiltin<"__builtin_ia32_pmulhrsw512">, 1595 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 1596 llvm_v32i16_ty], [IntrNoMem, Commutative]>; 1597} 1598 1599// Vector blend 1600let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1601 def int_x86_avx2_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb256">, 1602 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 1603 llvm_v32i8_ty], [IntrNoMem]>; 1604} 1605 1606 1607// Vector permutation 1608let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1609 def int_x86_avx2_permd : GCCBuiltin<"__builtin_ia32_permvarsi256">, 1610 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty], 1611 [IntrNoMem]>; 1612 def int_x86_avx2_permps : GCCBuiltin<"__builtin_ia32_permvarsf256">, 1613 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty], 1614 [IntrNoMem]>; 1615} 1616 1617// Conditional load ops 1618let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1619 def int_x86_avx2_maskload_d : GCCBuiltin<"__builtin_ia32_maskloadd">, 1620 Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty], 1621 [IntrReadMem, IntrArgMemOnly]>; 1622 def int_x86_avx2_maskload_q : GCCBuiltin<"__builtin_ia32_maskloadq">, 1623 Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty], 1624 [IntrReadMem, IntrArgMemOnly]>; 1625 def int_x86_avx2_maskload_d_256 : GCCBuiltin<"__builtin_ia32_maskloadd256">, 1626 Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty], 1627 [IntrReadMem, IntrArgMemOnly]>; 1628 def int_x86_avx2_maskload_q_256 : GCCBuiltin<"__builtin_ia32_maskloadq256">, 1629 Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty], 1630 [IntrReadMem, IntrArgMemOnly]>; 1631} 1632 1633// Conditional store ops 1634let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1635 def int_x86_avx2_maskstore_d : GCCBuiltin<"__builtin_ia32_maskstored">, 1636 Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty], 1637 [IntrArgMemOnly]>; 1638 def int_x86_avx2_maskstore_q : GCCBuiltin<"__builtin_ia32_maskstoreq">, 1639 Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty], 1640 [IntrArgMemOnly]>; 1641 def int_x86_avx2_maskstore_d_256 : 1642 GCCBuiltin<"__builtin_ia32_maskstored256">, 1643 Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty], 1644 [IntrArgMemOnly]>; 1645 def int_x86_avx2_maskstore_q_256 : 1646 GCCBuiltin<"__builtin_ia32_maskstoreq256">, 1647 Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty], 1648 [IntrArgMemOnly]>; 1649} 1650 1651// Variable bit shift ops 1652let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1653 def int_x86_avx2_psllv_d : GCCBuiltin<"__builtin_ia32_psllv4si">, 1654 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1655 [IntrNoMem]>; 1656 def int_x86_avx2_psllv_d_256 : GCCBuiltin<"__builtin_ia32_psllv8si">, 1657 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty], 1658 [IntrNoMem]>; 1659 def int_x86_avx2_psllv_q : GCCBuiltin<"__builtin_ia32_psllv2di">, 1660 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1661 [IntrNoMem]>; 1662 def int_x86_avx2_psllv_q_256 : GCCBuiltin<"__builtin_ia32_psllv4di">, 1663 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty], 1664 [IntrNoMem]>; 1665 1666 def int_x86_avx512_psllv_d_512 : GCCBuiltin<"__builtin_ia32_psllv16si">, 1667 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty], 1668 [IntrNoMem]>; 1669 def int_x86_avx512_psllv_q_512 : GCCBuiltin<"__builtin_ia32_psllv8di">, 1670 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty], 1671 [IntrNoMem]>; 1672 1673 def int_x86_avx2_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv4si">, 1674 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1675 [IntrNoMem]>; 1676 def int_x86_avx2_psrlv_d_256 : GCCBuiltin<"__builtin_ia32_psrlv8si">, 1677 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty], 1678 [IntrNoMem]>; 1679 def int_x86_avx2_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv2di">, 1680 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1681 [IntrNoMem]>; 1682 def int_x86_avx2_psrlv_q_256 : GCCBuiltin<"__builtin_ia32_psrlv4di">, 1683 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty], 1684 [IntrNoMem]>; 1685 1686 def int_x86_avx512_psrlv_d_512 : GCCBuiltin<"__builtin_ia32_psrlv16si">, 1687 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty], 1688 [IntrNoMem]>; 1689 def int_x86_avx512_psrlv_q_512 : GCCBuiltin<"__builtin_ia32_psrlv8di">, 1690 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty], 1691 [IntrNoMem]>; 1692 1693 def int_x86_avx2_psrav_d : GCCBuiltin<"__builtin_ia32_psrav4si">, 1694 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 1695 [IntrNoMem]>; 1696 def int_x86_avx2_psrav_d_256 : GCCBuiltin<"__builtin_ia32_psrav8si">, 1697 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty], 1698 [IntrNoMem]>; 1699 1700 def int_x86_avx512_psrav_d_512 : GCCBuiltin<"__builtin_ia32_psrav16si">, 1701 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty], 1702 [IntrNoMem]>; 1703 def int_x86_avx512_psrav_q_128 : GCCBuiltin<"__builtin_ia32_psravq128">, 1704 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 1705 [IntrNoMem]>; 1706 def int_x86_avx512_psrav_q_256 : GCCBuiltin<"__builtin_ia32_psravq256">, 1707 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty], 1708 [IntrNoMem]>; 1709 def int_x86_avx512_psrav_q_512 : GCCBuiltin<"__builtin_ia32_psrav8di">, 1710 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty], 1711 [IntrNoMem]>; 1712 1713 def int_x86_avx512_psllv_w_128 : GCCBuiltin<"__builtin_ia32_psllv8hi">, 1714 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1715 [IntrNoMem]>; 1716 def int_x86_avx512_psllv_w_256 : GCCBuiltin<"__builtin_ia32_psllv16hi">, 1717 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty], 1718 [IntrNoMem]>; 1719 def int_x86_avx512_psllv_w_512 : GCCBuiltin<"__builtin_ia32_psllv32hi">, 1720 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty], 1721 [IntrNoMem]>; 1722 1723 def int_x86_avx512_psrlv_w_128 : GCCBuiltin<"__builtin_ia32_psrlv8hi">, 1724 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1725 [IntrNoMem]>; 1726 def int_x86_avx512_psrlv_w_256 : GCCBuiltin<"__builtin_ia32_psrlv16hi">, 1727 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty], 1728 [IntrNoMem]>; 1729 def int_x86_avx512_psrlv_w_512 : GCCBuiltin<"__builtin_ia32_psrlv32hi">, 1730 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty], 1731 [IntrNoMem]>; 1732 1733 def int_x86_avx512_psrav_w_128 : GCCBuiltin<"__builtin_ia32_psrav8hi">, 1734 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 1735 [IntrNoMem]>; 1736 def int_x86_avx512_psrav_w_256 : GCCBuiltin<"__builtin_ia32_psrav16hi">, 1737 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty], 1738 [IntrNoMem]>; 1739 def int_x86_avx512_psrav_w_512 : GCCBuiltin<"__builtin_ia32_psrav32hi">, 1740 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty], 1741 [IntrNoMem]>; 1742 1743 def int_x86_avx512_prorv_d_128 : GCCBuiltin<"__builtin_ia32_prorvd128">, 1744 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 1745 llvm_v4i32_ty], [IntrNoMem]>; 1746 def int_x86_avx512_prorv_d_256 : GCCBuiltin<"__builtin_ia32_prorvd256">, 1747 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1748 llvm_v8i32_ty], [IntrNoMem]>; 1749 def int_x86_avx512_prorv_d_512 : GCCBuiltin<"__builtin_ia32_prorvd512">, 1750 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1751 llvm_v16i32_ty], [IntrNoMem]>; 1752 def int_x86_avx512_prorv_q_128 : GCCBuiltin<"__builtin_ia32_prorvq128">, 1753 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 1754 llvm_v2i64_ty], [IntrNoMem]>; 1755 def int_x86_avx512_prorv_q_256 : GCCBuiltin<"__builtin_ia32_prorvq256">, 1756 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1757 llvm_v4i64_ty], [IntrNoMem]>; 1758 def int_x86_avx512_prorv_q_512 : GCCBuiltin<"__builtin_ia32_prorvq512">, 1759 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1760 llvm_v8i64_ty], [IntrNoMem]>; 1761 1762 def int_x86_avx512_prol_d_128 : GCCBuiltin<"__builtin_ia32_prold128">, 1763 Intrinsic<[llvm_v4i32_ty] , [llvm_v4i32_ty, 1764 llvm_i32_ty], [IntrNoMem]>; 1765 def int_x86_avx512_prol_d_256 : GCCBuiltin<"__builtin_ia32_prold256">, 1766 Intrinsic<[llvm_v8i32_ty] , [llvm_v8i32_ty, 1767 llvm_i32_ty], [IntrNoMem]>; 1768 def int_x86_avx512_prol_d_512 : GCCBuiltin<"__builtin_ia32_prold512">, 1769 Intrinsic<[llvm_v16i32_ty] , [llvm_v16i32_ty, 1770 llvm_i32_ty], [IntrNoMem]>; 1771 def int_x86_avx512_prol_q_128 : GCCBuiltin<"__builtin_ia32_prolq128">, 1772 Intrinsic<[llvm_v2i64_ty] , [llvm_v2i64_ty, 1773 llvm_i32_ty], [IntrNoMem]>; 1774 def int_x86_avx512_prol_q_256 : GCCBuiltin<"__builtin_ia32_prolq256">, 1775 Intrinsic<[llvm_v4i64_ty] , [llvm_v4i64_ty, 1776 llvm_i32_ty], [IntrNoMem]>; 1777 def int_x86_avx512_prol_q_512 : GCCBuiltin<"__builtin_ia32_prolq512">, 1778 Intrinsic<[llvm_v8i64_ty] , [llvm_v8i64_ty, 1779 llvm_i32_ty], [IntrNoMem]>; 1780 1781 1782 def int_x86_avx512_prolv_d_128 : GCCBuiltin<"__builtin_ia32_prolvd128">, 1783 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 1784 llvm_v4i32_ty], [IntrNoMem]>; 1785 def int_x86_avx512_prolv_d_256 : GCCBuiltin<"__builtin_ia32_prolvd256">, 1786 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1787 llvm_v8i32_ty], [IntrNoMem]>; 1788 def int_x86_avx512_prolv_d_512 : GCCBuiltin<"__builtin_ia32_prolvd512">, 1789 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1790 llvm_v16i32_ty], [IntrNoMem]>; 1791 def int_x86_avx512_prolv_q_128 : GCCBuiltin<"__builtin_ia32_prolvq128">, 1792 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 1793 llvm_v2i64_ty], [IntrNoMem]>; 1794 def int_x86_avx512_prolv_q_256 : GCCBuiltin<"__builtin_ia32_prolvq256">, 1795 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1796 llvm_v4i64_ty], [IntrNoMem]>; 1797 def int_x86_avx512_prolv_q_512 : GCCBuiltin<"__builtin_ia32_prolvq512">, 1798 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1799 llvm_v8i64_ty], [IntrNoMem]>; 1800 def int_x86_avx512_pror_d_128 : GCCBuiltin<"__builtin_ia32_prord128">, 1801 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 1802 llvm_i32_ty], [IntrNoMem]>; 1803 def int_x86_avx512_pror_d_256 : GCCBuiltin<"__builtin_ia32_prord256">, 1804 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, 1805 llvm_i32_ty], [IntrNoMem]>; 1806 def int_x86_avx512_pror_d_512 : GCCBuiltin<"__builtin_ia32_prord512">, 1807 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 1808 llvm_i32_ty], [IntrNoMem]>; 1809 def int_x86_avx512_pror_q_128 : GCCBuiltin<"__builtin_ia32_prorq128">, 1810 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, 1811 llvm_i32_ty], [IntrNoMem]>; 1812 def int_x86_avx512_pror_q_256 : GCCBuiltin<"__builtin_ia32_prorq256">, 1813 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 1814 llvm_i32_ty], [IntrNoMem]>; 1815 def int_x86_avx512_pror_q_512 : GCCBuiltin<"__builtin_ia32_prorq512">, 1816 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 1817 llvm_i32_ty], [IntrNoMem]>; 1818 1819} 1820 1821// Gather ops 1822let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1823 def int_x86_avx2_gather_d_pd : GCCBuiltin<"__builtin_ia32_gatherd_pd">, 1824 Intrinsic<[llvm_v2f64_ty], 1825 [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i8_ty], 1826 [IntrReadMem, IntrArgMemOnly]>; 1827 def int_x86_avx2_gather_d_pd_256 : GCCBuiltin<"__builtin_ia32_gatherd_pd256">, 1828 Intrinsic<[llvm_v4f64_ty], 1829 [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i8_ty], 1830 [IntrReadMem, IntrArgMemOnly]>; 1831 def int_x86_avx2_gather_q_pd : GCCBuiltin<"__builtin_ia32_gatherq_pd">, 1832 Intrinsic<[llvm_v2f64_ty], 1833 [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty], 1834 [IntrReadMem, IntrArgMemOnly]>; 1835 def int_x86_avx2_gather_q_pd_256 : GCCBuiltin<"__builtin_ia32_gatherq_pd256">, 1836 Intrinsic<[llvm_v4f64_ty], 1837 [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty], 1838 [IntrReadMem, IntrArgMemOnly]>; 1839 def int_x86_avx2_gather_d_ps : GCCBuiltin<"__builtin_ia32_gatherd_ps">, 1840 Intrinsic<[llvm_v4f32_ty], 1841 [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty], 1842 [IntrReadMem, IntrArgMemOnly]>; 1843 def int_x86_avx2_gather_d_ps_256 : GCCBuiltin<"__builtin_ia32_gatherd_ps256">, 1844 Intrinsic<[llvm_v8f32_ty], 1845 [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty], 1846 [IntrReadMem, IntrArgMemOnly]>; 1847 def int_x86_avx2_gather_q_ps : GCCBuiltin<"__builtin_ia32_gatherq_ps">, 1848 Intrinsic<[llvm_v4f32_ty], 1849 [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty], 1850 [IntrReadMem, IntrArgMemOnly]>; 1851 def int_x86_avx2_gather_q_ps_256 : GCCBuiltin<"__builtin_ia32_gatherq_ps256">, 1852 Intrinsic<[llvm_v4f32_ty], 1853 [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty], 1854 [IntrReadMem, IntrArgMemOnly]>; 1855 1856 def int_x86_avx2_gather_d_q : GCCBuiltin<"__builtin_ia32_gatherd_q">, 1857 Intrinsic<[llvm_v2i64_ty], 1858 [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i8_ty], 1859 [IntrReadMem, IntrArgMemOnly]>; 1860 def int_x86_avx2_gather_d_q_256 : GCCBuiltin<"__builtin_ia32_gatherd_q256">, 1861 Intrinsic<[llvm_v4i64_ty], 1862 [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i8_ty], 1863 [IntrReadMem, IntrArgMemOnly]>; 1864 def int_x86_avx2_gather_q_q : GCCBuiltin<"__builtin_ia32_gatherq_q">, 1865 Intrinsic<[llvm_v2i64_ty], 1866 [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], 1867 [IntrReadMem, IntrArgMemOnly]>; 1868 def int_x86_avx2_gather_q_q_256 : GCCBuiltin<"__builtin_ia32_gatherq_q256">, 1869 Intrinsic<[llvm_v4i64_ty], 1870 [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty], 1871 [IntrReadMem, IntrArgMemOnly]>; 1872 def int_x86_avx2_gather_d_d : GCCBuiltin<"__builtin_ia32_gatherd_d">, 1873 Intrinsic<[llvm_v4i32_ty], 1874 [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], 1875 [IntrReadMem, IntrArgMemOnly]>; 1876 def int_x86_avx2_gather_d_d_256 : GCCBuiltin<"__builtin_ia32_gatherd_d256">, 1877 Intrinsic<[llvm_v8i32_ty], 1878 [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty], 1879 [IntrReadMem, IntrArgMemOnly]>; 1880 def int_x86_avx2_gather_q_d : GCCBuiltin<"__builtin_ia32_gatherq_d">, 1881 Intrinsic<[llvm_v4i32_ty], 1882 [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty], 1883 [IntrReadMem, IntrArgMemOnly]>; 1884 def int_x86_avx2_gather_q_d_256 : GCCBuiltin<"__builtin_ia32_gatherq_d256">, 1885 Intrinsic<[llvm_v4i32_ty], 1886 [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty], 1887 [IntrReadMem, IntrArgMemOnly]>; 1888} 1889 1890// Misc. 1891let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1892 def int_x86_avx2_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb256">, 1893 Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty], [IntrNoMem]>; 1894 def int_x86_avx2_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb256">, 1895 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 1896 llvm_v32i8_ty], [IntrNoMem]>; 1897 def int_x86_avx2_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw256">, 1898 Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 1899 llvm_i8_ty], [IntrNoMem, Commutative]>; 1900} 1901 1902//===----------------------------------------------------------------------===// 1903// FMA3 and FMA4 1904 1905let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1906 def int_x86_avx512_vfmadd_pd_512 : 1907 Intrinsic<[llvm_v8f64_ty], 1908 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty], 1909 [IntrNoMem]>; 1910 1911 def int_x86_avx512_vfmadd_ps_512 : 1912 Intrinsic<[llvm_v16f32_ty], 1913 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty], 1914 [IntrNoMem]>; 1915 1916 // TODO: Can we use 2 vfmadds+shufflevector? 1917 def int_x86_avx512_vfmaddsub_pd_512 : 1918 Intrinsic<[llvm_v8f64_ty], 1919 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty], 1920 [IntrNoMem]>; 1921 1922 def int_x86_avx512_vfmaddsub_ps_512 : 1923 Intrinsic<[llvm_v16f32_ty], 1924 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty], 1925 [IntrNoMem]>; 1926 1927 def int_x86_avx512_vfmadd_f64 : 1928 Intrinsic<[llvm_double_ty], 1929 [llvm_double_ty, llvm_double_ty, llvm_double_ty, llvm_i32_ty], 1930 [IntrNoMem]>; 1931 def int_x86_avx512_vfmadd_f32 : 1932 Intrinsic<[llvm_float_ty], 1933 [llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_i32_ty], 1934 [IntrNoMem]>; 1935 1936 def int_x86_avx512_vpmadd52h_uq_128 : 1937 GCCBuiltin<"__builtin_ia32_vpmadd52huq128">, 1938 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 1939 llvm_v2i64_ty], [IntrNoMem]>; 1940 def int_x86_avx512_vpmadd52l_uq_128 : 1941 GCCBuiltin<"__builtin_ia32_vpmadd52luq128">, 1942 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 1943 llvm_v2i64_ty], [IntrNoMem]>; 1944 def int_x86_avx512_vpmadd52h_uq_256 : 1945 GCCBuiltin<"__builtin_ia32_vpmadd52huq256">, 1946 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, 1947 llvm_v4i64_ty], [IntrNoMem]>; 1948 def int_x86_avx512_vpmadd52l_uq_256 : 1949 GCCBuiltin<"__builtin_ia32_vpmadd52luq256">, 1950 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, 1951 llvm_v4i64_ty], [IntrNoMem]>; 1952 def int_x86_avx512_vpmadd52h_uq_512 : 1953 GCCBuiltin<"__builtin_ia32_vpmadd52huq512">, 1954 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 1955 llvm_v8i64_ty], [IntrNoMem]>; 1956 def int_x86_avx512_vpmadd52l_uq_512 : 1957 GCCBuiltin<"__builtin_ia32_vpmadd52luq512">, 1958 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 1959 llvm_v8i64_ty], [IntrNoMem]>; 1960} 1961 1962// VNNI 1963let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 1964 def int_x86_avx512_vpdpbusd_128 : 1965 GCCBuiltin<"__builtin_ia32_vpdpbusd128">, 1966 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 1967 llvm_v4i32_ty], [IntrNoMem]>; 1968 def int_x86_avx512_vpdpbusd_256 : 1969 GCCBuiltin<"__builtin_ia32_vpdpbusd256">, 1970 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 1971 llvm_v8i32_ty], [IntrNoMem]>; 1972 def int_x86_avx512_vpdpbusd_512 : 1973 GCCBuiltin<"__builtin_ia32_vpdpbusd512">, 1974 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1975 llvm_v16i32_ty], [IntrNoMem]>; 1976 1977 def int_x86_avx512_vpdpbusds_128 : 1978 GCCBuiltin<"__builtin_ia32_vpdpbusds128">, 1979 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 1980 llvm_v4i32_ty], [IntrNoMem]>; 1981 def int_x86_avx512_vpdpbusds_256 : 1982 GCCBuiltin<"__builtin_ia32_vpdpbusds256">, 1983 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 1984 llvm_v8i32_ty], [IntrNoMem]>; 1985 def int_x86_avx512_vpdpbusds_512 : 1986 GCCBuiltin<"__builtin_ia32_vpdpbusds512">, 1987 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 1988 llvm_v16i32_ty], [IntrNoMem]>; 1989 1990 def int_x86_avx512_vpdpwssd_128 : 1991 GCCBuiltin<"__builtin_ia32_vpdpwssd128">, 1992 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 1993 llvm_v4i32_ty], [IntrNoMem]>; 1994 def int_x86_avx512_vpdpwssd_256 : 1995 GCCBuiltin<"__builtin_ia32_vpdpwssd256">, 1996 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 1997 llvm_v8i32_ty], [IntrNoMem]>; 1998 def int_x86_avx512_vpdpwssd_512 : 1999 GCCBuiltin<"__builtin_ia32_vpdpwssd512">, 2000 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 2001 llvm_v16i32_ty], [IntrNoMem]>; 2002 2003 def int_x86_avx512_vpdpwssds_128 : 2004 GCCBuiltin<"__builtin_ia32_vpdpwssds128">, 2005 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 2006 llvm_v4i32_ty], [IntrNoMem]>; 2007 def int_x86_avx512_vpdpwssds_256 : 2008 GCCBuiltin<"__builtin_ia32_vpdpwssds256">, 2009 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 2010 llvm_v8i32_ty], [IntrNoMem]>; 2011 def int_x86_avx512_vpdpwssds_512 : 2012 GCCBuiltin<"__builtin_ia32_vpdpwssds512">, 2013 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 2014 llvm_v16i32_ty], [IntrNoMem]>; 2015} 2016 2017//===----------------------------------------------------------------------===// 2018// XOP 2019 2020let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2021 def int_x86_xop_vpermil2pd : GCCBuiltin<"__builtin_ia32_vpermil2pd">, 2022 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 2023 llvm_v2i64_ty, llvm_i8_ty], 2024 [IntrNoMem]>; 2025 2026 def int_x86_xop_vpermil2pd_256 : 2027 GCCBuiltin<"__builtin_ia32_vpermil2pd256">, 2028 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 2029 llvm_v4i64_ty, llvm_i8_ty], 2030 [IntrNoMem]>; 2031 2032 def int_x86_xop_vpermil2ps : GCCBuiltin<"__builtin_ia32_vpermil2ps">, 2033 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 2034 llvm_v4i32_ty, llvm_i8_ty], 2035 [IntrNoMem]>; 2036 def int_x86_xop_vpermil2ps_256 : 2037 GCCBuiltin<"__builtin_ia32_vpermil2ps256">, 2038 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 2039 llvm_v8i32_ty, llvm_i8_ty], 2040 [IntrNoMem]>; 2041 2042 def int_x86_xop_vfrcz_pd : GCCBuiltin<"__builtin_ia32_vfrczpd">, 2043 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 2044 def int_x86_xop_vfrcz_ps : GCCBuiltin<"__builtin_ia32_vfrczps">, 2045 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 2046 def int_x86_xop_vfrcz_sd : GCCBuiltin<"__builtin_ia32_vfrczsd">, 2047 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>; 2048 def int_x86_xop_vfrcz_ss : GCCBuiltin<"__builtin_ia32_vfrczss">, 2049 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>; 2050 def int_x86_xop_vfrcz_pd_256 : GCCBuiltin<"__builtin_ia32_vfrczpd256">, 2051 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>; 2052 def int_x86_xop_vfrcz_ps_256 : GCCBuiltin<"__builtin_ia32_vfrczps256">, 2053 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>; 2054 2055 def int_x86_xop_vpcomb : GCCBuiltin<"__builtin_ia32_vpcomb">, 2056 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 2057 llvm_i8_ty], [IntrNoMem]>; 2058 def int_x86_xop_vpcomw : GCCBuiltin<"__builtin_ia32_vpcomw">, 2059 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 2060 llvm_i8_ty], [IntrNoMem]>; 2061 def int_x86_xop_vpcomd : GCCBuiltin<"__builtin_ia32_vpcomd">, 2062 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 2063 llvm_i8_ty], [IntrNoMem]>; 2064 def int_x86_xop_vpcomq : GCCBuiltin<"__builtin_ia32_vpcomq">, 2065 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 2066 llvm_i8_ty], [IntrNoMem]>; 2067 def int_x86_xop_vpcomub : GCCBuiltin<"__builtin_ia32_vpcomub">, 2068 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 2069 llvm_i8_ty], [IntrNoMem]>; 2070 def int_x86_xop_vpcomuw : GCCBuiltin<"__builtin_ia32_vpcomuw">, 2071 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 2072 llvm_i8_ty], [IntrNoMem]>; 2073 def int_x86_xop_vpcomud : GCCBuiltin<"__builtin_ia32_vpcomud">, 2074 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 2075 llvm_i8_ty], [IntrNoMem]>; 2076 def int_x86_xop_vpcomuq : GCCBuiltin<"__builtin_ia32_vpcomuq">, 2077 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 2078 llvm_i8_ty], [IntrNoMem]>; 2079 2080 def int_x86_xop_vphaddbd : 2081 GCCBuiltin<"__builtin_ia32_vphaddbd">, 2082 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2083 def int_x86_xop_vphaddbq : 2084 GCCBuiltin<"__builtin_ia32_vphaddbq">, 2085 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2086 def int_x86_xop_vphaddbw : 2087 GCCBuiltin<"__builtin_ia32_vphaddbw">, 2088 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2089 def int_x86_xop_vphadddq : 2090 GCCBuiltin<"__builtin_ia32_vphadddq">, 2091 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 2092 def int_x86_xop_vphaddubd : 2093 GCCBuiltin<"__builtin_ia32_vphaddubd">, 2094 Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2095 def int_x86_xop_vphaddubq : 2096 GCCBuiltin<"__builtin_ia32_vphaddubq">, 2097 Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2098 def int_x86_xop_vphaddubw : 2099 GCCBuiltin<"__builtin_ia32_vphaddubw">, 2100 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2101 def int_x86_xop_vphaddudq : 2102 GCCBuiltin<"__builtin_ia32_vphaddudq">, 2103 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 2104 def int_x86_xop_vphadduwd : 2105 GCCBuiltin<"__builtin_ia32_vphadduwd">, 2106 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2107 def int_x86_xop_vphadduwq : 2108 GCCBuiltin<"__builtin_ia32_vphadduwq">, 2109 Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2110 def int_x86_xop_vphaddwd : 2111 GCCBuiltin<"__builtin_ia32_vphaddwd">, 2112 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2113 def int_x86_xop_vphaddwq : 2114 GCCBuiltin<"__builtin_ia32_vphaddwq">, 2115 Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2116 def int_x86_xop_vphsubbw : 2117 GCCBuiltin<"__builtin_ia32_vphsubbw">, 2118 Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>; 2119 def int_x86_xop_vphsubdq : 2120 GCCBuiltin<"__builtin_ia32_vphsubdq">, 2121 Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>; 2122 def int_x86_xop_vphsubwd : 2123 GCCBuiltin<"__builtin_ia32_vphsubwd">, 2124 Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2125 def int_x86_xop_vpmacsdd : 2126 GCCBuiltin<"__builtin_ia32_vpmacsdd">, 2127 Intrinsic<[llvm_v4i32_ty], 2128 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 2129 [IntrNoMem, Commutative]>; 2130 def int_x86_xop_vpmacsdqh : 2131 GCCBuiltin<"__builtin_ia32_vpmacsdqh">, 2132 Intrinsic<[llvm_v2i64_ty], 2133 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty], 2134 [IntrNoMem, Commutative]>; 2135 def int_x86_xop_vpmacsdql : 2136 GCCBuiltin<"__builtin_ia32_vpmacsdql">, 2137 Intrinsic<[llvm_v2i64_ty], 2138 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty], 2139 [IntrNoMem, Commutative]>; 2140 def int_x86_xop_vpmacssdd : 2141 GCCBuiltin<"__builtin_ia32_vpmacssdd">, 2142 Intrinsic<[llvm_v4i32_ty], 2143 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 2144 [IntrNoMem, Commutative]>; 2145 def int_x86_xop_vpmacssdqh : 2146 GCCBuiltin<"__builtin_ia32_vpmacssdqh">, 2147 Intrinsic<[llvm_v2i64_ty], 2148 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty], 2149 [IntrNoMem, Commutative]>; 2150 def int_x86_xop_vpmacssdql : 2151 GCCBuiltin<"__builtin_ia32_vpmacssdql">, 2152 Intrinsic<[llvm_v2i64_ty], 2153 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty], 2154 [IntrNoMem, Commutative]>; 2155 def int_x86_xop_vpmacsswd : 2156 GCCBuiltin<"__builtin_ia32_vpmacsswd">, 2157 Intrinsic<[llvm_v4i32_ty], 2158 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty], 2159 [IntrNoMem, Commutative]>; 2160 def int_x86_xop_vpmacssww : 2161 GCCBuiltin<"__builtin_ia32_vpmacssww">, 2162 Intrinsic<[llvm_v8i16_ty], 2163 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty], 2164 [IntrNoMem, Commutative]>; 2165 def int_x86_xop_vpmacswd : 2166 GCCBuiltin<"__builtin_ia32_vpmacswd">, 2167 Intrinsic<[llvm_v4i32_ty], 2168 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty], 2169 [IntrNoMem, Commutative]>; 2170 def int_x86_xop_vpmacsww : 2171 GCCBuiltin<"__builtin_ia32_vpmacsww">, 2172 Intrinsic<[llvm_v8i16_ty], 2173 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty], 2174 [IntrNoMem, Commutative]>; 2175 def int_x86_xop_vpmadcsswd : 2176 GCCBuiltin<"__builtin_ia32_vpmadcsswd">, 2177 Intrinsic<[llvm_v4i32_ty], 2178 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty], 2179 [IntrNoMem, Commutative]>; 2180 def int_x86_xop_vpmadcswd : 2181 GCCBuiltin<"__builtin_ia32_vpmadcswd">, 2182 Intrinsic<[llvm_v4i32_ty], 2183 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty], 2184 [IntrNoMem, Commutative]>; 2185 def int_x86_xop_vpperm : 2186 GCCBuiltin<"__builtin_ia32_vpperm">, 2187 Intrinsic<[llvm_v16i8_ty], 2188 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty], 2189 [IntrNoMem]>; 2190 2191 def int_x86_xop_vprotb : GCCBuiltin<"__builtin_ia32_vprotb">, 2192 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 2193 [IntrNoMem]>; 2194 def int_x86_xop_vprotd : GCCBuiltin<"__builtin_ia32_vprotd">, 2195 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 2196 [IntrNoMem]>; 2197 def int_x86_xop_vprotq : GCCBuiltin<"__builtin_ia32_vprotq">, 2198 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 2199 [IntrNoMem]>; 2200 def int_x86_xop_vprotw : GCCBuiltin<"__builtin_ia32_vprotw">, 2201 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 2202 [IntrNoMem]>; 2203 def int_x86_xop_vprotbi : GCCBuiltin<"__builtin_ia32_vprotbi">, 2204 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i8_ty], 2205 [IntrNoMem]>; 2206 def int_x86_xop_vprotdi : GCCBuiltin<"__builtin_ia32_vprotdi">, 2207 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty], 2208 [IntrNoMem]>; 2209 def int_x86_xop_vprotqi : GCCBuiltin<"__builtin_ia32_vprotqi">, 2210 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty], 2211 [IntrNoMem]>; 2212 def int_x86_xop_vprotwi : GCCBuiltin<"__builtin_ia32_vprotwi">, 2213 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty], 2214 [IntrNoMem]>; 2215 2216 def int_x86_xop_vpshab : 2217 GCCBuiltin<"__builtin_ia32_vpshab">, 2218 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 2219 [IntrNoMem]>; 2220 def int_x86_xop_vpshad : 2221 GCCBuiltin<"__builtin_ia32_vpshad">, 2222 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 2223 [IntrNoMem]>; 2224 def int_x86_xop_vpshaq : 2225 GCCBuiltin<"__builtin_ia32_vpshaq">, 2226 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 2227 [IntrNoMem]>; 2228 def int_x86_xop_vpshaw : 2229 GCCBuiltin<"__builtin_ia32_vpshaw">, 2230 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 2231 [IntrNoMem]>; 2232 def int_x86_xop_vpshlb : 2233 GCCBuiltin<"__builtin_ia32_vpshlb">, 2234 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], 2235 [IntrNoMem]>; 2236 def int_x86_xop_vpshld : 2237 GCCBuiltin<"__builtin_ia32_vpshld">, 2238 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], 2239 [IntrNoMem]>; 2240 def int_x86_xop_vpshlq : 2241 GCCBuiltin<"__builtin_ia32_vpshlq">, 2242 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], 2243 [IntrNoMem]>; 2244 def int_x86_xop_vpshlw : 2245 GCCBuiltin<"__builtin_ia32_vpshlw">, 2246 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty], 2247 [IntrNoMem]>; 2248} 2249 2250//===----------------------------------------------------------------------===// 2251// LWP 2252let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2253 def int_x86_llwpcb : 2254 GCCBuiltin<"__builtin_ia32_llwpcb">, 2255 Intrinsic<[], [llvm_ptr_ty], []>; 2256 def int_x86_slwpcb : 2257 GCCBuiltin<"__builtin_ia32_slwpcb">, 2258 Intrinsic<[llvm_ptr_ty], [], []>; 2259 def int_x86_lwpins32 : 2260 GCCBuiltin<"__builtin_ia32_lwpins32">, 2261 Intrinsic<[llvm_i8_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 2262 def int_x86_lwpins64 : 2263 GCCBuiltin<"__builtin_ia32_lwpins64">, 2264 Intrinsic<[llvm_i8_ty], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], []>; 2265 def int_x86_lwpval32 : 2266 GCCBuiltin<"__builtin_ia32_lwpval32">, 2267 Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 2268 def int_x86_lwpval64 : 2269 GCCBuiltin<"__builtin_ia32_lwpval64">, 2270 Intrinsic<[], [llvm_i64_ty, llvm_i32_ty, llvm_i32_ty], []>; 2271} 2272 2273//===----------------------------------------------------------------------===// 2274// MMX 2275 2276// Empty MMX state op. 2277let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2278 def int_x86_mmx_emms : GCCBuiltin<"__builtin_ia32_emms">, 2279 Intrinsic<[], [], []>; 2280 def int_x86_mmx_femms : GCCBuiltin<"__builtin_ia32_femms">, 2281 Intrinsic<[], [], []>; 2282} 2283 2284// Integer arithmetic ops. 2285let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2286 // Addition 2287 def int_x86_mmx_padd_b : GCCBuiltin<"__builtin_ia32_paddb">, 2288 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2289 [IntrNoMem, Commutative]>; 2290 def int_x86_mmx_padd_w : GCCBuiltin<"__builtin_ia32_paddw">, 2291 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2292 [IntrNoMem, Commutative]>; 2293 def int_x86_mmx_padd_d : GCCBuiltin<"__builtin_ia32_paddd">, 2294 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2295 [IntrNoMem, Commutative]>; 2296 def int_x86_mmx_padd_q : GCCBuiltin<"__builtin_ia32_paddq">, 2297 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2298 [IntrNoMem, Commutative]>; 2299 2300 def int_x86_mmx_padds_b : GCCBuiltin<"__builtin_ia32_paddsb">, 2301 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2302 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2303 def int_x86_mmx_padds_w : GCCBuiltin<"__builtin_ia32_paddsw">, 2304 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2305 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2306 2307 def int_x86_mmx_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb">, 2308 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2309 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2310 def int_x86_mmx_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw">, 2311 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2312 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2313 2314 // Subtraction 2315 def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">, 2316 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2317 [IntrNoMem]>; 2318 def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">, 2319 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2320 [IntrNoMem]>; 2321 def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">, 2322 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2323 [IntrNoMem]>; 2324 def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">, 2325 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2326 [IntrNoMem]>; 2327 2328 def int_x86_mmx_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb">, 2329 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2330 llvm_x86mmx_ty], [IntrNoMem]>; 2331 def int_x86_mmx_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw">, 2332 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2333 llvm_x86mmx_ty], [IntrNoMem]>; 2334 2335 def int_x86_mmx_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb">, 2336 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2337 llvm_x86mmx_ty], [IntrNoMem]>; 2338 def int_x86_mmx_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw">, 2339 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2340 llvm_x86mmx_ty], [IntrNoMem]>; 2341 2342 // Multiplication 2343 def int_x86_mmx_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw">, 2344 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2345 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2346 def int_x86_mmx_pmull_w : GCCBuiltin<"__builtin_ia32_pmullw">, 2347 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2348 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2349 def int_x86_mmx_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw">, 2350 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2351 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2352 def int_x86_mmx_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq">, 2353 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2354 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2355 def int_x86_mmx_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd">, 2356 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2357 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2358 2359 // Bitwise operations 2360 def int_x86_mmx_pand : GCCBuiltin<"__builtin_ia32_pand">, 2361 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2362 [IntrNoMem, Commutative]>; 2363 def int_x86_mmx_pandn : GCCBuiltin<"__builtin_ia32_pandn">, 2364 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2365 [IntrNoMem]>; 2366 def int_x86_mmx_por : GCCBuiltin<"__builtin_ia32_por">, 2367 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2368 [IntrNoMem, Commutative]>; 2369 def int_x86_mmx_pxor : GCCBuiltin<"__builtin_ia32_pxor">, 2370 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2371 [IntrNoMem, Commutative]>; 2372 2373 // Averages 2374 def int_x86_mmx_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb">, 2375 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2376 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2377 def int_x86_mmx_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw">, 2378 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2379 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2380 2381 // Maximum 2382 def int_x86_mmx_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub">, 2383 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2384 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2385 def int_x86_mmx_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw">, 2386 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2387 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2388 2389 // Minimum 2390 def int_x86_mmx_pminu_b : GCCBuiltin<"__builtin_ia32_pminub">, 2391 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2392 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2393 def int_x86_mmx_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw">, 2394 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2395 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2396 2397 // Packed sum of absolute differences 2398 def int_x86_mmx_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw">, 2399 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2400 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2401} 2402 2403// Integer shift ops. 2404let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2405 // Shift left logical 2406 def int_x86_mmx_psll_w : GCCBuiltin<"__builtin_ia32_psllw">, 2407 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2408 llvm_x86mmx_ty], [IntrNoMem]>; 2409 def int_x86_mmx_psll_d : GCCBuiltin<"__builtin_ia32_pslld">, 2410 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2411 llvm_x86mmx_ty], [IntrNoMem]>; 2412 def int_x86_mmx_psll_q : GCCBuiltin<"__builtin_ia32_psllq">, 2413 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2414 llvm_x86mmx_ty], [IntrNoMem]>; 2415 2416 def int_x86_mmx_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw">, 2417 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2418 llvm_x86mmx_ty], [IntrNoMem]>; 2419 def int_x86_mmx_psrl_d : GCCBuiltin<"__builtin_ia32_psrld">, 2420 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2421 llvm_x86mmx_ty], [IntrNoMem]>; 2422 def int_x86_mmx_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq">, 2423 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2424 llvm_x86mmx_ty], [IntrNoMem]>; 2425 2426 def int_x86_mmx_psra_w : GCCBuiltin<"__builtin_ia32_psraw">, 2427 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2428 llvm_x86mmx_ty], [IntrNoMem]>; 2429 def int_x86_mmx_psra_d : GCCBuiltin<"__builtin_ia32_psrad">, 2430 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2431 llvm_x86mmx_ty], [IntrNoMem]>; 2432 2433 def int_x86_mmx_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi">, 2434 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2435 llvm_i32_ty], [IntrNoMem]>; 2436 def int_x86_mmx_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi">, 2437 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2438 llvm_i32_ty], [IntrNoMem]>; 2439 def int_x86_mmx_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi">, 2440 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2441 llvm_i32_ty], [IntrNoMem]>; 2442 2443 def int_x86_mmx_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi">, 2444 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2445 llvm_i32_ty], [IntrNoMem]>; 2446 def int_x86_mmx_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi">, 2447 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2448 llvm_i32_ty], [IntrNoMem]>; 2449 def int_x86_mmx_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi">, 2450 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2451 llvm_i32_ty], [IntrNoMem]>; 2452 2453 def int_x86_mmx_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi">, 2454 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2455 llvm_i32_ty], [IntrNoMem]>; 2456 def int_x86_mmx_psrai_d : GCCBuiltin<"__builtin_ia32_psradi">, 2457 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2458 llvm_i32_ty], [IntrNoMem]>; 2459} 2460// Permute 2461let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2462 def int_x86_avx512_permvar_df_256 : GCCBuiltin<"__builtin_ia32_permvardf256">, 2463 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, 2464 llvm_v4i64_ty], [IntrNoMem]>; 2465 def int_x86_avx512_permvar_df_512 : GCCBuiltin<"__builtin_ia32_permvardf512">, 2466 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, 2467 llvm_v8i64_ty], [IntrNoMem]>; 2468 def int_x86_avx512_permvar_di_256 : GCCBuiltin<"__builtin_ia32_permvardi256">, 2469 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, 2470 llvm_v4i64_ty], [IntrNoMem]>; 2471 def int_x86_avx512_permvar_di_512 : GCCBuiltin<"__builtin_ia32_permvardi512">, 2472 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, 2473 llvm_v8i64_ty], [IntrNoMem]>; 2474 def int_x86_avx512_permvar_hi_128 : GCCBuiltin<"__builtin_ia32_permvarhi128">, 2475 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, 2476 llvm_v8i16_ty], [IntrNoMem]>; 2477 def int_x86_avx512_permvar_hi_256 : GCCBuiltin<"__builtin_ia32_permvarhi256">, 2478 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, 2479 llvm_v16i16_ty], [IntrNoMem]>; 2480 def int_x86_avx512_permvar_hi_512 : GCCBuiltin<"__builtin_ia32_permvarhi512">, 2481 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 2482 llvm_v32i16_ty], [IntrNoMem]>; 2483 def int_x86_avx512_permvar_qi_128 : GCCBuiltin<"__builtin_ia32_permvarqi128">, 2484 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, 2485 llvm_v16i8_ty], [IntrNoMem]>; 2486 def int_x86_avx512_permvar_qi_256 : GCCBuiltin<"__builtin_ia32_permvarqi256">, 2487 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, 2488 llvm_v32i8_ty], [IntrNoMem]>; 2489 def int_x86_avx512_permvar_qi_512 : GCCBuiltin<"__builtin_ia32_permvarqi512">, 2490 Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, 2491 llvm_v64i8_ty], [IntrNoMem]>; 2492 def int_x86_avx512_permvar_sf_512 : GCCBuiltin<"__builtin_ia32_permvarsf512">, 2493 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, 2494 llvm_v16i32_ty], [IntrNoMem]>; 2495 def int_x86_avx512_permvar_si_512 : GCCBuiltin<"__builtin_ia32_permvarsi512">, 2496 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, 2497 llvm_v16i32_ty], [IntrNoMem]>; 2498} 2499// Pack ops. 2500let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2501 def int_x86_mmx_packsswb : GCCBuiltin<"__builtin_ia32_packsswb">, 2502 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2503 llvm_x86mmx_ty], [IntrNoMem]>; 2504 def int_x86_mmx_packssdw : GCCBuiltin<"__builtin_ia32_packssdw">, 2505 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2506 llvm_x86mmx_ty], [IntrNoMem]>; 2507 def int_x86_mmx_packuswb : GCCBuiltin<"__builtin_ia32_packuswb">, 2508 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2509 llvm_x86mmx_ty], [IntrNoMem]>; 2510} 2511 2512// Unpacking ops. 2513let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2514 def int_x86_mmx_punpckhbw : GCCBuiltin<"__builtin_ia32_punpckhbw">, 2515 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2516 [IntrNoMem]>; 2517 def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">, 2518 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2519 [IntrNoMem]>; 2520 def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">, 2521 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2522 [IntrNoMem]>; 2523 def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">, 2524 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2525 [IntrNoMem]>; 2526 def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">, 2527 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2528 [IntrNoMem]>; 2529 def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">, 2530 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty], 2531 [IntrNoMem]>; 2532} 2533 2534// Integer comparison ops 2535let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2536 def int_x86_mmx_pcmpeq_b : GCCBuiltin<"__builtin_ia32_pcmpeqb">, 2537 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2538 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2539 def int_x86_mmx_pcmpeq_w : GCCBuiltin<"__builtin_ia32_pcmpeqw">, 2540 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2541 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2542 def int_x86_mmx_pcmpeq_d : GCCBuiltin<"__builtin_ia32_pcmpeqd">, 2543 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2544 llvm_x86mmx_ty], [IntrNoMem, Commutative]>; 2545 2546 def int_x86_mmx_pcmpgt_b : GCCBuiltin<"__builtin_ia32_pcmpgtb">, 2547 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2548 llvm_x86mmx_ty], [IntrNoMem]>; 2549 def int_x86_mmx_pcmpgt_w : GCCBuiltin<"__builtin_ia32_pcmpgtw">, 2550 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2551 llvm_x86mmx_ty], [IntrNoMem]>; 2552 def int_x86_mmx_pcmpgt_d : GCCBuiltin<"__builtin_ia32_pcmpgtd">, 2553 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2554 llvm_x86mmx_ty], [IntrNoMem]>; 2555} 2556 2557// Misc. 2558let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2559 def int_x86_mmx_maskmovq : GCCBuiltin<"__builtin_ia32_maskmovq">, 2560 Intrinsic<[], [llvm_x86mmx_ty, llvm_x86mmx_ty, llvm_ptr_ty], []>; 2561 2562 def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">, 2563 Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty], [IntrNoMem]>; 2564 2565 def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">, 2566 Intrinsic<[], [llvm_ptrx86mmx_ty, llvm_x86mmx_ty], []>; 2567 2568 def int_x86_mmx_palignr_b : GCCBuiltin<"__builtin_ia32_palignr">, 2569 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2570 llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem]>; 2571 2572 def int_x86_mmx_pextr_w : GCCBuiltin<"__builtin_ia32_vec_ext_v4hi">, 2573 Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty], 2574 [IntrNoMem]>; 2575 2576 def int_x86_mmx_pinsr_w : GCCBuiltin<"__builtin_ia32_vec_set_v4hi">, 2577 Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, 2578 llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2579} 2580 2581//===----------------------------------------------------------------------===// 2582// BMI 2583 2584let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2585 def int_x86_bmi_bextr_32 : GCCBuiltin<"__builtin_ia32_bextr_u32">, 2586 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2587 def int_x86_bmi_bextr_64 : GCCBuiltin<"__builtin_ia32_bextr_u64">, 2588 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2589 def int_x86_bmi_bzhi_32 : GCCBuiltin<"__builtin_ia32_bzhi_si">, 2590 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2591 def int_x86_bmi_bzhi_64 : GCCBuiltin<"__builtin_ia32_bzhi_di">, 2592 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2593 def int_x86_bmi_pdep_32 : GCCBuiltin<"__builtin_ia32_pdep_si">, 2594 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2595 def int_x86_bmi_pdep_64 : GCCBuiltin<"__builtin_ia32_pdep_di">, 2596 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2597 def int_x86_bmi_pext_32 : GCCBuiltin<"__builtin_ia32_pext_si">, 2598 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2599 def int_x86_bmi_pext_64 : GCCBuiltin<"__builtin_ia32_pext_di">, 2600 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2601} 2602 2603//===----------------------------------------------------------------------===// 2604// FS/GS Base 2605 2606let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2607 def int_x86_rdfsbase_32 : GCCBuiltin<"__builtin_ia32_rdfsbase32">, 2608 Intrinsic<[llvm_i32_ty], []>; 2609 def int_x86_rdgsbase_32 : GCCBuiltin<"__builtin_ia32_rdgsbase32">, 2610 Intrinsic<[llvm_i32_ty], []>; 2611 def int_x86_rdfsbase_64 : GCCBuiltin<"__builtin_ia32_rdfsbase64">, 2612 Intrinsic<[llvm_i64_ty], []>; 2613 def int_x86_rdgsbase_64 : GCCBuiltin<"__builtin_ia32_rdgsbase64">, 2614 Intrinsic<[llvm_i64_ty], []>; 2615 def int_x86_wrfsbase_32 : GCCBuiltin<"__builtin_ia32_wrfsbase32">, 2616 Intrinsic<[], [llvm_i32_ty]>; 2617 def int_x86_wrgsbase_32 : GCCBuiltin<"__builtin_ia32_wrgsbase32">, 2618 Intrinsic<[], [llvm_i32_ty]>; 2619 def int_x86_wrfsbase_64 : GCCBuiltin<"__builtin_ia32_wrfsbase64">, 2620 Intrinsic<[], [llvm_i64_ty]>; 2621 def int_x86_wrgsbase_64 : GCCBuiltin<"__builtin_ia32_wrgsbase64">, 2622 Intrinsic<[], [llvm_i64_ty]>; 2623} 2624 2625//===----------------------------------------------------------------------===// 2626// FXSR 2627let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2628 def int_x86_fxrstor : GCCBuiltin<"__builtin_ia32_fxrstor">, 2629 Intrinsic<[], [llvm_ptr_ty], []>; 2630 def int_x86_fxrstor64 : GCCBuiltin<"__builtin_ia32_fxrstor64">, 2631 Intrinsic<[], [llvm_ptr_ty], []>; 2632 def int_x86_fxsave : GCCBuiltin<"__builtin_ia32_fxsave">, 2633 Intrinsic<[], [llvm_ptr_ty], []>; 2634 def int_x86_fxsave64 : GCCBuiltin<"__builtin_ia32_fxsave64">, 2635 Intrinsic<[], [llvm_ptr_ty], []>; 2636} 2637 2638//===----------------------------------------------------------------------===// 2639// XSAVE 2640let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2641 def int_x86_xsave : 2642 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2643 def int_x86_xsave64 : 2644 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2645 def int_x86_xrstor : 2646 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2647 def int_x86_xrstor64 : 2648 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2649 def int_x86_xsaveopt : 2650 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2651 def int_x86_xsaveopt64 : 2652 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2653 def int_x86_xrstors : 2654 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2655 def int_x86_xrstors64 : 2656 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2657 def int_x86_xsavec : 2658 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2659 def int_x86_xsavec64 : 2660 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2661 def int_x86_xsaves : 2662 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2663 def int_x86_xsaves64 : 2664 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>; 2665 def int_x86_xgetbv : 2666 Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>; 2667 def int_x86_xsetbv : 2668 Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 2669} 2670 2671//===----------------------------------------------------------------------===// 2672// CLFLUSHOPT and CLWB 2673let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2674 def int_x86_clflushopt : GCCBuiltin<"__builtin_ia32_clflushopt">, 2675 Intrinsic<[], [llvm_ptr_ty], []>; 2676 2677 def int_x86_clwb : GCCBuiltin<"__builtin_ia32_clwb">, 2678 Intrinsic<[], [llvm_ptr_ty], []>; 2679} 2680 2681//===----------------------------------------------------------------------===// 2682// Support protection key 2683let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2684 def int_x86_rdpkru : GCCBuiltin <"__builtin_ia32_rdpkru">, 2685 Intrinsic<[llvm_i32_ty], [], []>; 2686 def int_x86_wrpkru : GCCBuiltin<"__builtin_ia32_wrpkru">, 2687 Intrinsic<[], [llvm_i32_ty], []>; 2688} 2689//===----------------------------------------------------------------------===// 2690// Half float conversion 2691 2692let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2693 def int_x86_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps">, 2694 Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2695 def int_x86_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256">, 2696 Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty], [IntrNoMem]>; 2697 def int_x86_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph">, 2698 Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty], 2699 [IntrNoMem]>; 2700 def int_x86_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256">, 2701 Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty], 2702 [IntrNoMem]>; 2703 def int_x86_avx512_mask_vcvtph2ps_512 : GCCBuiltin<"__builtin_ia32_vcvtph2ps512_mask">, 2704 Intrinsic<[llvm_v16f32_ty], [llvm_v16i16_ty, llvm_v16f32_ty, 2705 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 2706 def int_x86_avx512_mask_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256_mask">, 2707 Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty, llvm_v8f32_ty, 2708 llvm_i8_ty], [IntrNoMem]>; 2709 def int_x86_avx512_mask_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps_mask">, 2710 Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty, llvm_v4f32_ty, 2711 llvm_i8_ty], [IntrNoMem]>; 2712 def int_x86_avx512_mask_vcvtps2ph_512 : GCCBuiltin<"__builtin_ia32_vcvtps2ph512_mask">, 2713 Intrinsic<[llvm_v16i16_ty], [llvm_v16f32_ty, llvm_i32_ty, 2714 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 2715 def int_x86_avx512_mask_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256_mask">, 2716 Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty, 2717 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 2718 def int_x86_avx512_mask_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph_mask">, 2719 Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty, 2720 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 2721} 2722 2723//===----------------------------------------------------------------------===// 2724// TBM 2725 2726let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2727 def int_x86_tbm_bextri_u32 : GCCBuiltin<"__builtin_ia32_bextri_u32">, 2728 Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2729 def int_x86_tbm_bextri_u64 : GCCBuiltin<"__builtin_ia32_bextri_u64">, 2730 Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>; 2731} 2732 2733//===----------------------------------------------------------------------===// 2734// RDRAND intrinsics - Return a random value and whether it is valid. 2735// RDSEED intrinsics - Return a NIST SP800-90B & C compliant random value and 2736// whether it is valid. 2737 2738let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2739 // These are declared side-effecting so they don't get eliminated by CSE or 2740 // LICM. 2741 def int_x86_rdrand_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>; 2742 def int_x86_rdrand_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>; 2743 def int_x86_rdrand_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>; 2744 def int_x86_rdseed_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>; 2745 def int_x86_rdseed_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>; 2746 def int_x86_rdseed_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>; 2747} 2748 2749//===----------------------------------------------------------------------===// 2750// ADX 2751 2752let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2753 def int_x86_addcarryx_u32: GCCBuiltin<"__builtin_ia32_addcarryx_u32">, 2754 Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty, 2755 llvm_ptr_ty], [IntrArgMemOnly]>; 2756 def int_x86_addcarryx_u64: GCCBuiltin<"__builtin_ia32_addcarryx_u64">, 2757 Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty, 2758 llvm_ptr_ty], [IntrArgMemOnly]>; 2759 def int_x86_addcarry_u32: GCCBuiltin<"__builtin_ia32_addcarry_u32">, 2760 Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty, 2761 llvm_ptr_ty], [IntrArgMemOnly]>; 2762 def int_x86_addcarry_u64: GCCBuiltin<"__builtin_ia32_addcarry_u64">, 2763 Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty, 2764 llvm_ptr_ty], [IntrArgMemOnly]>; 2765 def int_x86_subborrow_u32: GCCBuiltin<"__builtin_ia32_subborrow_u32">, 2766 Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty, 2767 llvm_ptr_ty], [IntrArgMemOnly]>; 2768 def int_x86_subborrow_u64: GCCBuiltin<"__builtin_ia32_subborrow_u64">, 2769 Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty, 2770 llvm_ptr_ty], [IntrArgMemOnly]>; 2771} 2772 2773//===----------------------------------------------------------------------===// 2774// RTM intrinsics. Transactional Memory support. 2775 2776let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2777 def int_x86_xbegin : GCCBuiltin<"__builtin_ia32_xbegin">, 2778 Intrinsic<[llvm_i32_ty], [], []>; 2779 def int_x86_xend : GCCBuiltin<"__builtin_ia32_xend">, 2780 Intrinsic<[], [], []>; 2781 def int_x86_xabort : GCCBuiltin<"__builtin_ia32_xabort">, 2782 Intrinsic<[], [llvm_i8_ty], []>; 2783 def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">, 2784 Intrinsic<[llvm_i32_ty], [], []>; 2785} 2786 2787//===----------------------------------------------------------------------===// 2788// AVX512 2789 2790// Conversion ops 2791let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2792 def int_x86_avx512_cvttss2si : GCCBuiltin<"__builtin_ia32_vcvttss2si32">, 2793 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>; 2794 def int_x86_avx512_cvttss2si64 : GCCBuiltin<"__builtin_ia32_vcvttss2si64">, 2795 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>; 2796 def int_x86_avx512_cvttss2usi : GCCBuiltin<"__builtin_ia32_vcvttss2usi32">, 2797 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>; 2798 def int_x86_avx512_cvttss2usi64 : GCCBuiltin<"__builtin_ia32_vcvttss2usi64">, 2799 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>; 2800 def int_x86_avx512_cvtusi2ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss32">, 2801 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 2802 llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2803 def int_x86_avx512_cvtusi642ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss64">, 2804 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 2805 llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>; 2806 def int_x86_avx512_cvttsd2si : GCCBuiltin<"__builtin_ia32_vcvttsd2si32">, 2807 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>; 2808 def int_x86_avx512_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_vcvttsd2si64">, 2809 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>; 2810 def int_x86_avx512_cvttsd2usi : GCCBuiltin<"__builtin_ia32_vcvttsd2usi32">, 2811 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>; 2812 def int_x86_avx512_cvttsd2usi64 : GCCBuiltin<"__builtin_ia32_vcvttsd2usi64">, 2813 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>; 2814 def int_x86_avx512_cvtusi642sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd64">, 2815 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 2816 llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>; 2817 def int_x86_avx512_vcvtss2usi32 : GCCBuiltin<"__builtin_ia32_vcvtss2usi32">, 2818 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>; 2819 def int_x86_avx512_vcvtss2usi64 : GCCBuiltin<"__builtin_ia32_vcvtss2usi64">, 2820 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>; 2821 def int_x86_avx512_vcvtss2si32 : GCCBuiltin<"__builtin_ia32_vcvtss2si32">, 2822 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>; 2823 def int_x86_avx512_vcvtss2si64 : GCCBuiltin<"__builtin_ia32_vcvtss2si64">, 2824 Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>; 2825 def int_x86_avx512_vcvtsd2usi32 : GCCBuiltin<"__builtin_ia32_vcvtsd2usi32">, 2826 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>; 2827 def int_x86_avx512_vcvtsd2usi64 : GCCBuiltin<"__builtin_ia32_vcvtsd2usi64">, 2828 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>; 2829 def int_x86_avx512_vcvtsd2si32 : GCCBuiltin<"__builtin_ia32_vcvtsd2si32">, 2830 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>; 2831 def int_x86_avx512_vcvtsd2si64 : GCCBuiltin<"__builtin_ia32_vcvtsd2si64">, 2832 Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>; 2833 def int_x86_avx512_cvtsi2ss32 : GCCBuiltin<"__builtin_ia32_cvtsi2ss32">, 2834 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 2835 llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 2836 def int_x86_avx512_cvtsi2ss64 : GCCBuiltin<"__builtin_ia32_cvtsi2ss64">, 2837 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, 2838 llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>; 2839 def int_x86_avx512_cvtsi2sd64 : GCCBuiltin<"__builtin_ia32_cvtsi2sd64">, 2840 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, 2841 llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>; 2842} 2843 2844// Pack ops. 2845let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2846 def int_x86_avx512_packsswb_512 : GCCBuiltin<"__builtin_ia32_packsswb512">, 2847 Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty], 2848 [IntrNoMem]>; 2849 def int_x86_avx512_packssdw_512 : GCCBuiltin<"__builtin_ia32_packssdw512">, 2850 Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty], 2851 [IntrNoMem]>; 2852 def int_x86_avx512_packuswb_512 : GCCBuiltin<"__builtin_ia32_packuswb512">, 2853 Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty], 2854 [IntrNoMem]>; 2855 def int_x86_avx512_packusdw_512 : GCCBuiltin<"__builtin_ia32_packusdw512">, 2856 Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty], 2857 [IntrNoMem]>; 2858} 2859 2860// Vector convert 2861let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 2862 def int_x86_avx512_mask_cvtdq2ps_512 : 2863 GCCBuiltin<"__builtin_ia32_cvtdq2ps512_mask">, 2864 Intrinsic<[llvm_v16f32_ty], 2865 [llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], 2866 [IntrNoMem]>; 2867 2868 def int_x86_avx512_mask_cvtpd2dq_128 : 2869 GCCBuiltin<"__builtin_ia32_cvtpd2dq128_mask">, 2870 Intrinsic<[llvm_v4i32_ty], 2871 [llvm_v2f64_ty, llvm_v4i32_ty, llvm_i8_ty], 2872 [IntrNoMem]>; 2873 2874 def int_x86_avx512_mask_cvtpd2dq_512 : 2875 GCCBuiltin<"__builtin_ia32_cvtpd2dq512_mask">, 2876 Intrinsic<[llvm_v8i32_ty], 2877 [llvm_v8f64_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 2878 [IntrNoMem]>; 2879 2880 def int_x86_avx512_mask_cvtpd2ps_512 : 2881 GCCBuiltin<"__builtin_ia32_cvtpd2ps512_mask">, 2882 Intrinsic<[llvm_v8f32_ty], 2883 [llvm_v8f64_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty], 2884 [IntrNoMem]>; 2885 2886 def int_x86_avx512_mask_cvtsd2ss_round : 2887 GCCBuiltin<"__builtin_ia32_cvtsd2ss_round_mask">, 2888 Intrinsic<[llvm_v4f32_ty], 2889 [llvm_v4f32_ty, llvm_v2f64_ty, llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], 2890 [IntrNoMem]>; 2891 2892 def int_x86_avx512_mask_cvtss2sd_round : 2893 GCCBuiltin<"__builtin_ia32_cvtss2sd_round_mask">, 2894 Intrinsic<[llvm_v2f64_ty], 2895 [llvm_v2f64_ty, llvm_v4f32_ty, llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], 2896 [IntrNoMem]>; 2897 2898 def int_x86_avx512_mask_cvtpd2ps : 2899 GCCBuiltin<"__builtin_ia32_cvtpd2ps_mask">, 2900 Intrinsic<[llvm_v4f32_ty], 2901 [llvm_v2f64_ty, llvm_v4f32_ty, llvm_i8_ty], 2902 [IntrNoMem]>; 2903 2904 def int_x86_avx512_mask_cvtpd2qq_128 : 2905 GCCBuiltin<"__builtin_ia32_cvtpd2qq128_mask">, 2906 Intrinsic<[llvm_v2i64_ty], 2907 [llvm_v2f64_ty, llvm_v2i64_ty, llvm_i8_ty], 2908 [IntrNoMem]>; 2909 2910 def int_x86_avx512_mask_cvtpd2qq_256 : 2911 GCCBuiltin<"__builtin_ia32_cvtpd2qq256_mask">, 2912 Intrinsic<[llvm_v4i64_ty], 2913 [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty], 2914 [IntrNoMem]>; 2915 2916 def int_x86_avx512_mask_cvtpd2qq_512 : 2917 GCCBuiltin<"__builtin_ia32_cvtpd2qq512_mask">, 2918 Intrinsic<[llvm_v8i64_ty], 2919 [llvm_v8f64_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 2920 [IntrNoMem]>; 2921 2922 def int_x86_avx512_mask_cvtpd2udq_128 : 2923 GCCBuiltin<"__builtin_ia32_cvtpd2udq128_mask">, 2924 Intrinsic<[llvm_v4i32_ty], 2925 [llvm_v2f64_ty, llvm_v4i32_ty, llvm_i8_ty], 2926 [IntrNoMem]>; 2927 2928 def int_x86_avx512_mask_cvtpd2udq_256 : 2929 GCCBuiltin<"__builtin_ia32_cvtpd2udq256_mask">, 2930 Intrinsic<[llvm_v4i32_ty], 2931 [llvm_v4f64_ty, llvm_v4i32_ty, llvm_i8_ty], 2932 [IntrNoMem]>; 2933 2934 def int_x86_avx512_mask_cvtpd2udq_512 : 2935 GCCBuiltin<"__builtin_ia32_cvtpd2udq512_mask">, 2936 Intrinsic<[llvm_v8i32_ty], 2937 [llvm_v8f64_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 2938 [IntrNoMem]>; 2939 2940 def int_x86_avx512_mask_cvtpd2uqq_128 : 2941 GCCBuiltin<"__builtin_ia32_cvtpd2uqq128_mask">, 2942 Intrinsic<[llvm_v2i64_ty], 2943 [llvm_v2f64_ty, llvm_v2i64_ty, llvm_i8_ty], 2944 [IntrNoMem]>; 2945 2946 def int_x86_avx512_mask_cvtpd2uqq_256 : 2947 GCCBuiltin<"__builtin_ia32_cvtpd2uqq256_mask">, 2948 Intrinsic<[llvm_v4i64_ty], 2949 [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty], 2950 [IntrNoMem]>; 2951 2952 def int_x86_avx512_mask_cvtpd2uqq_512 : 2953 GCCBuiltin<"__builtin_ia32_cvtpd2uqq512_mask">, 2954 Intrinsic<[llvm_v8i64_ty], 2955 [llvm_v8f64_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 2956 [IntrNoMem]>; 2957 2958 def int_x86_avx512_mask_cvtps2dq_128 : 2959 GCCBuiltin<"__builtin_ia32_cvtps2dq128_mask">, 2960 Intrinsic<[llvm_v4i32_ty], 2961 [llvm_v4f32_ty, llvm_v4i32_ty, llvm_i8_ty], 2962 [IntrNoMem]>; 2963 2964 def int_x86_avx512_mask_cvtps2dq_256 : 2965 GCCBuiltin<"__builtin_ia32_cvtps2dq256_mask">, 2966 Intrinsic<[llvm_v8i32_ty], 2967 [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty], 2968 [IntrNoMem]>; 2969 2970 def int_x86_avx512_mask_cvtps2dq_512 : 2971 GCCBuiltin<"__builtin_ia32_cvtps2dq512_mask">, 2972 Intrinsic<[llvm_v16i32_ty], 2973 [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], 2974 [IntrNoMem]>; 2975 2976 def int_x86_avx512_mask_cvtps2pd_512 : 2977 GCCBuiltin<"__builtin_ia32_cvtps2pd512_mask">, 2978 Intrinsic<[llvm_v8f64_ty], 2979 [llvm_v8f32_ty, llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], 2980 [IntrNoMem]>; 2981 2982 def int_x86_avx512_mask_cvtps2qq_128 : 2983 GCCBuiltin<"__builtin_ia32_cvtps2qq128_mask">, 2984 Intrinsic<[llvm_v2i64_ty], 2985 [llvm_v4f32_ty, llvm_v2i64_ty, llvm_i8_ty], 2986 [IntrNoMem]>; 2987 2988 def int_x86_avx512_mask_cvtps2qq_256 : 2989 GCCBuiltin<"__builtin_ia32_cvtps2qq256_mask">, 2990 Intrinsic<[llvm_v4i64_ty], 2991 [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty], 2992 [IntrNoMem]>; 2993 2994 def int_x86_avx512_mask_cvtps2qq_512 : 2995 GCCBuiltin<"__builtin_ia32_cvtps2qq512_mask">, 2996 Intrinsic<[llvm_v8i64_ty], 2997 [llvm_v8f32_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 2998 [IntrNoMem]>; 2999 3000 def int_x86_avx512_mask_cvtps2udq_128 : 3001 GCCBuiltin<"__builtin_ia32_cvtps2udq128_mask">, 3002 Intrinsic<[llvm_v4i32_ty], 3003 [llvm_v4f32_ty, llvm_v4i32_ty, llvm_i8_ty], 3004 [IntrNoMem]>; 3005 3006 def int_x86_avx512_mask_cvtps2udq_256 : 3007 GCCBuiltin<"__builtin_ia32_cvtps2udq256_mask">, 3008 Intrinsic<[llvm_v8i32_ty], 3009 [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty], 3010 [IntrNoMem]>; 3011 3012 def int_x86_avx512_mask_cvtps2udq_512 : 3013 GCCBuiltin<"__builtin_ia32_cvtps2udq512_mask">, 3014 Intrinsic<[llvm_v16i32_ty], 3015 [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], 3016 [IntrNoMem]>; 3017 3018 def int_x86_avx512_mask_cvtps2uqq_128 : 3019 GCCBuiltin<"__builtin_ia32_cvtps2uqq128_mask">, 3020 Intrinsic<[llvm_v2i64_ty], 3021 [llvm_v4f32_ty, llvm_v2i64_ty, llvm_i8_ty], 3022 [IntrNoMem]>; 3023 3024 def int_x86_avx512_mask_cvtps2uqq_256 : 3025 GCCBuiltin<"__builtin_ia32_cvtps2uqq256_mask">, 3026 Intrinsic<[llvm_v4i64_ty], 3027 [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty], 3028 [IntrNoMem]>; 3029 3030 def int_x86_avx512_mask_cvtps2uqq_512 : 3031 GCCBuiltin<"__builtin_ia32_cvtps2uqq512_mask">, 3032 Intrinsic<[llvm_v8i64_ty], 3033 [llvm_v8f32_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3034 [IntrNoMem]>; 3035 3036 def int_x86_avx512_mask_cvtqq2pd_512 : 3037 GCCBuiltin<"__builtin_ia32_cvtqq2pd512_mask">, 3038 Intrinsic<[llvm_v8f64_ty], 3039 [llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], 3040 [IntrNoMem]>; 3041 3042 def int_x86_avx512_mask_cvtqq2ps_128 : 3043 GCCBuiltin<"__builtin_ia32_cvtqq2ps128_mask">, 3044 Intrinsic<[llvm_v4f32_ty], 3045 [llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty], 3046 [IntrNoMem]>; 3047 3048 def int_x86_avx512_mask_cvtqq2ps_256 : 3049 GCCBuiltin<"__builtin_ia32_cvtqq2ps256_mask">, 3050 Intrinsic<[llvm_v4f32_ty], 3051 [llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty], 3052 [IntrNoMem]>; 3053 3054 def int_x86_avx512_mask_cvtqq2ps_512 : 3055 GCCBuiltin<"__builtin_ia32_cvtqq2ps512_mask">, 3056 Intrinsic<[llvm_v8f32_ty], 3057 [llvm_v8i64_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty], 3058 [IntrNoMem]>; 3059 3060 def int_x86_avx512_mask_cvttpd2dq_128 : 3061 GCCBuiltin<"__builtin_ia32_cvttpd2dq128_mask">, 3062 Intrinsic<[llvm_v4i32_ty], 3063 [llvm_v2f64_ty, llvm_v4i32_ty, llvm_i8_ty], 3064 [IntrNoMem]>; 3065 3066 def int_x86_avx512_mask_cvttpd2dq_512 : 3067 GCCBuiltin<"__builtin_ia32_cvttpd2dq512_mask">, 3068 Intrinsic<[llvm_v8i32_ty], 3069 [llvm_v8f64_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 3070 [IntrNoMem]>; 3071 3072 def int_x86_avx512_mask_cvttpd2qq_128 : 3073 GCCBuiltin<"__builtin_ia32_cvttpd2qq128_mask">, 3074 Intrinsic<[llvm_v2i64_ty], 3075 [llvm_v2f64_ty, llvm_v2i64_ty, llvm_i8_ty], 3076 [IntrNoMem]>; 3077 3078 def int_x86_avx512_mask_cvttpd2qq_256 : 3079 GCCBuiltin<"__builtin_ia32_cvttpd2qq256_mask">, 3080 Intrinsic<[llvm_v4i64_ty], 3081 [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty], 3082 [IntrNoMem]>; 3083 3084 def int_x86_avx512_mask_cvttpd2qq_512 : 3085 GCCBuiltin<"__builtin_ia32_cvttpd2qq512_mask">, 3086 Intrinsic<[llvm_v8i64_ty], 3087 [llvm_v8f64_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3088 [IntrNoMem]>; 3089 3090 def int_x86_avx512_mask_cvttpd2udq_128 : 3091 GCCBuiltin<"__builtin_ia32_cvttpd2udq128_mask">, 3092 Intrinsic<[llvm_v4i32_ty], 3093 [llvm_v2f64_ty, llvm_v4i32_ty, llvm_i8_ty], 3094 [IntrNoMem]>; 3095 3096 def int_x86_avx512_mask_cvttpd2udq_256 : 3097 GCCBuiltin<"__builtin_ia32_cvttpd2udq256_mask">, 3098 Intrinsic<[llvm_v4i32_ty], 3099 [llvm_v4f64_ty, llvm_v4i32_ty, llvm_i8_ty], 3100 [IntrNoMem]>; 3101 3102 def int_x86_avx512_mask_cvttpd2udq_512 : 3103 GCCBuiltin<"__builtin_ia32_cvttpd2udq512_mask">, 3104 Intrinsic<[llvm_v8i32_ty], 3105 [llvm_v8f64_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 3106 [IntrNoMem]>; 3107 3108 def int_x86_avx512_mask_cvttpd2uqq_128 : 3109 GCCBuiltin<"__builtin_ia32_cvttpd2uqq128_mask">, 3110 Intrinsic<[llvm_v2i64_ty], 3111 [llvm_v2f64_ty, llvm_v2i64_ty, llvm_i8_ty], 3112 [IntrNoMem]>; 3113 3114 def int_x86_avx512_mask_cvttpd2uqq_256 : 3115 GCCBuiltin<"__builtin_ia32_cvttpd2uqq256_mask">, 3116 Intrinsic<[llvm_v4i64_ty], 3117 [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty], 3118 [IntrNoMem]>; 3119 3120 def int_x86_avx512_mask_cvttpd2uqq_512 : 3121 GCCBuiltin<"__builtin_ia32_cvttpd2uqq512_mask">, 3122 Intrinsic<[llvm_v8i64_ty], 3123 [llvm_v8f64_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3124 [IntrNoMem]>; 3125 3126 def int_x86_avx512_mask_cvttps2dq_512 : 3127 GCCBuiltin<"__builtin_ia32_cvttps2dq512_mask">, 3128 Intrinsic<[llvm_v16i32_ty], 3129 [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], 3130 [IntrNoMem]>; 3131 3132 def int_x86_avx512_mask_cvttps2qq_128 : 3133 GCCBuiltin<"__builtin_ia32_cvttps2qq128_mask">, 3134 Intrinsic<[llvm_v2i64_ty], 3135 [llvm_v4f32_ty, llvm_v2i64_ty, llvm_i8_ty], 3136 [IntrNoMem]>; 3137 3138 def int_x86_avx512_mask_cvttps2qq_256 : 3139 GCCBuiltin<"__builtin_ia32_cvttps2qq256_mask">, 3140 Intrinsic<[llvm_v4i64_ty], 3141 [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty], 3142 [IntrNoMem]>; 3143 3144 def int_x86_avx512_mask_cvttps2qq_512 : 3145 GCCBuiltin<"__builtin_ia32_cvttps2qq512_mask">, 3146 Intrinsic<[llvm_v8i64_ty], 3147 [llvm_v8f32_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3148 [IntrNoMem]>; 3149 3150 def int_x86_avx512_mask_cvttps2udq_128 : 3151 GCCBuiltin<"__builtin_ia32_cvttps2udq128_mask">, 3152 Intrinsic<[llvm_v4i32_ty], 3153 [llvm_v4f32_ty, llvm_v4i32_ty, llvm_i8_ty], 3154 [IntrNoMem]>; 3155 3156 def int_x86_avx512_mask_cvttps2udq_256 : 3157 GCCBuiltin<"__builtin_ia32_cvttps2udq256_mask">, 3158 Intrinsic<[llvm_v8i32_ty], 3159 [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty], 3160 [IntrNoMem]>; 3161 3162 def int_x86_avx512_mask_cvttps2udq_512 : 3163 GCCBuiltin<"__builtin_ia32_cvttps2udq512_mask">, 3164 Intrinsic<[llvm_v16i32_ty], 3165 [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], 3166 [IntrNoMem]>; 3167 3168 def int_x86_avx512_mask_cvttps2uqq_128 : 3169 GCCBuiltin<"__builtin_ia32_cvttps2uqq128_mask">, 3170 Intrinsic<[llvm_v2i64_ty], 3171 [llvm_v4f32_ty, llvm_v2i64_ty, llvm_i8_ty], 3172 [IntrNoMem]>; 3173 3174 def int_x86_avx512_mask_cvttps2uqq_256 : 3175 GCCBuiltin<"__builtin_ia32_cvttps2uqq256_mask">, 3176 Intrinsic<[llvm_v4i64_ty], 3177 [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty], 3178 [IntrNoMem]>; 3179 3180 def int_x86_avx512_mask_cvttps2uqq_512 : 3181 GCCBuiltin<"__builtin_ia32_cvttps2uqq512_mask">, 3182 Intrinsic<[llvm_v8i64_ty], 3183 [llvm_v8f32_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3184 [IntrNoMem]>; 3185 3186 def int_x86_avx512_mask_cvtudq2ps_512 : 3187 GCCBuiltin<"__builtin_ia32_cvtudq2ps512_mask">, 3188 Intrinsic<[llvm_v16f32_ty], 3189 [llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], 3190 [IntrNoMem]>; 3191 3192 def int_x86_avx512_mask_cvtuqq2pd_512 : 3193 GCCBuiltin<"__builtin_ia32_cvtuqq2pd512_mask">, 3194 Intrinsic<[llvm_v8f64_ty], 3195 [llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], 3196 [IntrNoMem]>; 3197 3198 def int_x86_avx512_mask_cvtuqq2ps_128 : 3199 GCCBuiltin<"__builtin_ia32_cvtuqq2ps128_mask">, 3200 Intrinsic<[llvm_v4f32_ty], 3201 [llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty], 3202 [IntrNoMem]>; 3203 3204 def int_x86_avx512_mask_cvtuqq2ps_256 : 3205 GCCBuiltin<"__builtin_ia32_cvtuqq2ps256_mask">, 3206 Intrinsic<[llvm_v4f32_ty], 3207 [llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty], 3208 [IntrNoMem]>; 3209 3210 def int_x86_avx512_mask_cvtuqq2ps_512 : 3211 GCCBuiltin<"__builtin_ia32_cvtuqq2ps512_mask">, 3212 Intrinsic<[llvm_v8f32_ty], 3213 [llvm_v8i64_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty], 3214 [IntrNoMem]>; 3215 3216 def int_x86_avx512_mask_rndscale_pd_128 : GCCBuiltin<"__builtin_ia32_rndscalepd_128_mask">, 3217 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty, 3218 llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>; 3219 def int_x86_avx512_mask_rndscale_pd_256 : GCCBuiltin<"__builtin_ia32_rndscalepd_256_mask">, 3220 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty, 3221 llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>; 3222 def int_x86_avx512_mask_rndscale_pd_512 : GCCBuiltin<"__builtin_ia32_rndscalepd_mask">, 3223 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty, 3224 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3225 def int_x86_avx512_mask_rndscale_ps_128 : GCCBuiltin<"__builtin_ia32_rndscaleps_128_mask">, 3226 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, 3227 llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>; 3228 def int_x86_avx512_mask_rndscale_ps_256 : GCCBuiltin<"__builtin_ia32_rndscaleps_256_mask">, 3229 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty, 3230 llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>; 3231 def int_x86_avx512_mask_rndscale_ps_512 : GCCBuiltin<"__builtin_ia32_rndscaleps_mask">, 3232 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty, 3233 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3234 def int_x86_avx512_mask_reduce_pd_128 : GCCBuiltin<"__builtin_ia32_reducepd128_mask">, 3235 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty, 3236 llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>; 3237 def int_x86_avx512_mask_reduce_pd_256 : GCCBuiltin<"__builtin_ia32_reducepd256_mask">, 3238 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty, 3239 llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>; 3240 def int_x86_avx512_mask_reduce_pd_512 : GCCBuiltin<"__builtin_ia32_reducepd512_mask">, 3241 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty, 3242 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3243 def int_x86_avx512_mask_reduce_ps_128 : GCCBuiltin<"__builtin_ia32_reduceps128_mask">, 3244 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, 3245 llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>; 3246 def int_x86_avx512_mask_reduce_ps_256 : GCCBuiltin<"__builtin_ia32_reduceps256_mask">, 3247 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty, 3248 llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>; 3249 def int_x86_avx512_mask_reduce_ps_512 : GCCBuiltin<"__builtin_ia32_reduceps512_mask">, 3250 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty, 3251 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3252def int_x86_avx512_mask_range_pd_128 : GCCBuiltin<"__builtin_ia32_rangepd128_mask">, 3253 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, 3254 llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>; 3255def int_x86_avx512_mask_range_pd_256 : GCCBuiltin<"__builtin_ia32_rangepd256_mask">, 3256 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty, 3257 llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>; 3258def int_x86_avx512_mask_range_pd_512 : GCCBuiltin<"__builtin_ia32_rangepd512_mask">, 3259 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty, 3260 llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3261def int_x86_avx512_mask_range_ps_128 : GCCBuiltin<"__builtin_ia32_rangeps128_mask">, 3262 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty, 3263 llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>; 3264def int_x86_avx512_mask_range_ps_256 : GCCBuiltin<"__builtin_ia32_rangeps256_mask">, 3265 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty, 3266 llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>; 3267def int_x86_avx512_mask_range_ps_512 : GCCBuiltin<"__builtin_ia32_rangeps512_mask">, 3268 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty, 3269 llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3270} 3271 3272// Vector load with broadcast 3273let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 3274 def int_x86_avx512_broadcastmw_512 : 3275 GCCBuiltin<"__builtin_ia32_broadcastmw512">, 3276 Intrinsic<[llvm_v16i32_ty], [llvm_i16_ty], [IntrNoMem]>; 3277 def int_x86_avx512_broadcastmw_256 : 3278 GCCBuiltin<"__builtin_ia32_broadcastmw256">, 3279 Intrinsic<[llvm_v8i32_ty], [llvm_i16_ty], [IntrNoMem]>; 3280 def int_x86_avx512_broadcastmw_128 : 3281 GCCBuiltin<"__builtin_ia32_broadcastmw128">, 3282 Intrinsic<[llvm_v4i32_ty], [llvm_i16_ty], [IntrNoMem]>; 3283 def int_x86_avx512_broadcastmb_512 : 3284 GCCBuiltin<"__builtin_ia32_broadcastmb512">, 3285 Intrinsic<[llvm_v8i64_ty], [llvm_i8_ty], [IntrNoMem]>; 3286 def int_x86_avx512_broadcastmb_256 : 3287 GCCBuiltin<"__builtin_ia32_broadcastmb256">, 3288 Intrinsic<[llvm_v4i64_ty], [llvm_i8_ty], [IntrNoMem]>; 3289 def int_x86_avx512_broadcastmb_128 : 3290 GCCBuiltin<"__builtin_ia32_broadcastmb128">, 3291 Intrinsic<[llvm_v2i64_ty], [llvm_i8_ty], [IntrNoMem]>; 3292} 3293 3294// Arithmetic ops 3295let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 3296 3297 def int_x86_avx512_add_ps_512 : GCCBuiltin<"__builtin_ia32_addps512">, 3298 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3299 llvm_i32_ty], [IntrNoMem]>; 3300 def int_x86_avx512_add_pd_512 : GCCBuiltin<"__builtin_ia32_addpd512">, 3301 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3302 llvm_i32_ty], [IntrNoMem]>; 3303 def int_x86_avx512_sub_ps_512 : GCCBuiltin<"__builtin_ia32_subps512">, 3304 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3305 llvm_i32_ty], [IntrNoMem]>; 3306 def int_x86_avx512_sub_pd_512 : GCCBuiltin<"__builtin_ia32_subpd512">, 3307 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3308 llvm_i32_ty], [IntrNoMem]>; 3309 def int_x86_avx512_mul_ps_512 : GCCBuiltin<"__builtin_ia32_mulps512">, 3310 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3311 llvm_i32_ty], [IntrNoMem]>; 3312 def int_x86_avx512_mul_pd_512 : GCCBuiltin<"__builtin_ia32_mulpd512">, 3313 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3314 llvm_i32_ty], [IntrNoMem]>; 3315 def int_x86_avx512_div_ps_512 : GCCBuiltin<"__builtin_ia32_divps512">, 3316 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3317 llvm_i32_ty], [IntrNoMem]>; 3318 def int_x86_avx512_div_pd_512 : GCCBuiltin<"__builtin_ia32_divpd512">, 3319 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3320 llvm_i32_ty], [IntrNoMem]>; 3321 3322 def int_x86_avx512_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512">, 3323 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3324 llvm_i32_ty], [IntrNoMem]>; 3325 def int_x86_avx512_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512">, 3326 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3327 llvm_i32_ty], [IntrNoMem]>; 3328 def int_x86_avx512_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512">, 3329 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3330 llvm_i32_ty], [IntrNoMem]>; 3331 def int_x86_avx512_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512">, 3332 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3333 llvm_i32_ty], [IntrNoMem]>; 3334 3335 def int_x86_avx512_mask_add_ss_round : GCCBuiltin<"__builtin_ia32_addss_round_mask">, 3336 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3337 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3338 def int_x86_avx512_mask_div_ss_round : GCCBuiltin<"__builtin_ia32_divss_round_mask">, 3339 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3340 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3341 def int_x86_avx512_mask_mul_ss_round : GCCBuiltin<"__builtin_ia32_mulss_round_mask">, 3342 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3343 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3344 def int_x86_avx512_mask_sub_ss_round : GCCBuiltin<"__builtin_ia32_subss_round_mask">, 3345 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3346 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3347 def int_x86_avx512_mask_max_ss_round : GCCBuiltin<"__builtin_ia32_maxss_round_mask">, 3348 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3349 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3350 def int_x86_avx512_mask_min_ss_round : GCCBuiltin<"__builtin_ia32_minss_round_mask">, 3351 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3352 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3353 def int_x86_avx512_mask_add_sd_round : GCCBuiltin<"__builtin_ia32_addsd_round_mask">, 3354 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3355 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3356 def int_x86_avx512_mask_div_sd_round : GCCBuiltin<"__builtin_ia32_divsd_round_mask">, 3357 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3358 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3359 def int_x86_avx512_mask_mul_sd_round : GCCBuiltin<"__builtin_ia32_mulsd_round_mask">, 3360 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3361 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3362 def int_x86_avx512_mask_sub_sd_round : GCCBuiltin<"__builtin_ia32_subsd_round_mask">, 3363 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3364 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3365 def int_x86_avx512_mask_max_sd_round : GCCBuiltin<"__builtin_ia32_maxsd_round_mask">, 3366 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3367 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3368 def int_x86_avx512_mask_min_sd_round : GCCBuiltin<"__builtin_ia32_minsd_round_mask">, 3369 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3370 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3371 3372 def int_x86_avx512_mask_rndscale_ss : GCCBuiltin<"__builtin_ia32_rndscaless_round_mask">, 3373 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, 3374 llvm_i8_ty, llvm_i32_ty, llvm_i32_ty], 3375 [IntrNoMem]>; 3376 def int_x86_avx512_mask_rndscale_sd : GCCBuiltin<"__builtin_ia32_rndscalesd_round_mask">, 3377 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, 3378 llvm_i8_ty, llvm_i32_ty, llvm_i32_ty], 3379 [IntrNoMem]>; 3380 def int_x86_avx512_mask_range_ss : GCCBuiltin<"__builtin_ia32_rangess128_round_mask">, 3381 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, 3382 llvm_i8_ty, llvm_i32_ty, llvm_i32_ty], 3383 [IntrNoMem]>; 3384 def int_x86_avx512_mask_range_sd : GCCBuiltin<"__builtin_ia32_rangesd128_round_mask">, 3385 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, 3386 llvm_i8_ty, llvm_i32_ty, llvm_i32_ty], 3387 [IntrNoMem]>; 3388 def int_x86_avx512_mask_reduce_ss : GCCBuiltin<"__builtin_ia32_reducess_mask">, 3389 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, 3390 llvm_i8_ty, llvm_i32_ty, llvm_i32_ty], 3391 [IntrNoMem]>; 3392 def int_x86_avx512_mask_reduce_sd : GCCBuiltin<"__builtin_ia32_reducesd_mask">, 3393 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, 3394 llvm_i8_ty, llvm_i32_ty, llvm_i32_ty], 3395 [IntrNoMem]>; 3396 def int_x86_avx512_mask_scalef_sd : GCCBuiltin<"__builtin_ia32_scalefsd_round_mask">, 3397 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3398 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3399 def int_x86_avx512_mask_scalef_ss : GCCBuiltin<"__builtin_ia32_scalefss_round_mask">, 3400 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3401 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3402 def int_x86_avx512_mask_scalef_pd_128 : GCCBuiltin<"__builtin_ia32_scalefpd128_mask">, 3403 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3404 llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>; 3405 def int_x86_avx512_mask_scalef_pd_256 : GCCBuiltin<"__builtin_ia32_scalefpd256_mask">, 3406 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 3407 llvm_v4f64_ty, llvm_i8_ty],[IntrNoMem]>; 3408 def int_x86_avx512_mask_scalef_pd_512 : GCCBuiltin<"__builtin_ia32_scalefpd512_mask">, 3409 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3410 llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3411 def int_x86_avx512_mask_scalef_ps_128 : GCCBuiltin<"__builtin_ia32_scalefps128_mask">, 3412 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3413 llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>; 3414 def int_x86_avx512_mask_scalef_ps_256 : GCCBuiltin<"__builtin_ia32_scalefps256_mask">, 3415 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 3416 llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>; 3417 def int_x86_avx512_mask_scalef_ps_512 : GCCBuiltin<"__builtin_ia32_scalefps512_mask">, 3418 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3419 llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3420 3421 def int_x86_avx512_mask_sqrt_ss : 3422 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, 3423 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3424 def int_x86_avx512_mask_sqrt_sd : 3425 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, 3426 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3427 3428 def int_x86_avx512_sqrt_pd_512 : 3429 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty], [IntrNoMem]>; 3430 def int_x86_avx512_sqrt_ps_512 : 3431 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty], [IntrNoMem]>; 3432 def int_x86_avx512_mask_fixupimm_pd_128 : 3433 GCCBuiltin<"__builtin_ia32_fixupimmpd128_mask">, 3434 Intrinsic<[llvm_v2f64_ty], 3435 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty], 3436 [IntrNoMem]>; 3437 def int_x86_avx512_maskz_fixupimm_pd_128 : 3438 GCCBuiltin<"__builtin_ia32_fixupimmpd128_maskz">, 3439 Intrinsic<[llvm_v2f64_ty], 3440 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty], 3441 [IntrNoMem]>; 3442 def int_x86_avx512_mask_fixupimm_pd_256 : 3443 GCCBuiltin<"__builtin_ia32_fixupimmpd256_mask">, 3444 Intrinsic<[llvm_v4f64_ty], 3445 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_i8_ty], 3446 [IntrNoMem]>; 3447 def int_x86_avx512_maskz_fixupimm_pd_256 : 3448 GCCBuiltin<"__builtin_ia32_fixupimmpd256_maskz">, 3449 Intrinsic<[llvm_v4f64_ty], 3450 [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_i8_ty], 3451 [IntrNoMem]>; 3452 def int_x86_avx512_mask_fixupimm_pd_512 : 3453 GCCBuiltin<"__builtin_ia32_fixupimmpd512_mask">, 3454 Intrinsic<[llvm_v8f64_ty], 3455 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_i8_ty, 3456 llvm_i32_ty], [IntrNoMem]>; 3457 def int_x86_avx512_maskz_fixupimm_pd_512 : 3458 GCCBuiltin<"__builtin_ia32_fixupimmpd512_maskz">, 3459 Intrinsic<[llvm_v8f64_ty], 3460 [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_i8_ty, 3461 llvm_i32_ty], [IntrNoMem]>; 3462 def int_x86_avx512_mask_fixupimm_ps_128 : 3463 GCCBuiltin<"__builtin_ia32_fixupimmps128_mask">, 3464 Intrinsic<[llvm_v4f32_ty], 3465 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty], 3466 [IntrNoMem]>; 3467 def int_x86_avx512_maskz_fixupimm_ps_128 : 3468 GCCBuiltin<"__builtin_ia32_fixupimmps128_maskz">, 3469 Intrinsic<[llvm_v4f32_ty], 3470 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty], 3471 [IntrNoMem]>; 3472 def int_x86_avx512_mask_fixupimm_ps_256 : 3473 GCCBuiltin<"__builtin_ia32_fixupimmps256_mask">, 3474 Intrinsic<[llvm_v8f32_ty], 3475 [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_i8_ty], 3476 [IntrNoMem]>; 3477 def int_x86_avx512_maskz_fixupimm_ps_256 : 3478 GCCBuiltin<"__builtin_ia32_fixupimmps256_maskz">, 3479 Intrinsic<[llvm_v8f32_ty], 3480 [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_i8_ty], 3481 [IntrNoMem]>; 3482 def int_x86_avx512_mask_fixupimm_ps_512 : 3483 GCCBuiltin<"__builtin_ia32_fixupimmps512_mask">, 3484 Intrinsic<[llvm_v16f32_ty], 3485 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16i32_ty, llvm_i32_ty, 3486 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3487 def int_x86_avx512_maskz_fixupimm_ps_512 : 3488 GCCBuiltin<"__builtin_ia32_fixupimmps512_maskz">, 3489 Intrinsic<[llvm_v16f32_ty], 3490 [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16i32_ty, llvm_i32_ty, 3491 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3492 def int_x86_avx512_mask_fixupimm_sd : 3493 GCCBuiltin<"__builtin_ia32_fixupimmsd_mask">, 3494 Intrinsic<[llvm_v2f64_ty], 3495 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty, 3496 llvm_i32_ty], [IntrNoMem]>; 3497 def int_x86_avx512_maskz_fixupimm_sd : 3498 GCCBuiltin<"__builtin_ia32_fixupimmsd_maskz">, 3499 Intrinsic<[llvm_v2f64_ty], 3500 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty, 3501 llvm_i32_ty], [IntrNoMem]>; 3502 def int_x86_avx512_mask_fixupimm_ss : 3503 GCCBuiltin<"__builtin_ia32_fixupimmss_mask">, 3504 Intrinsic<[llvm_v4f32_ty], 3505 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty, 3506 llvm_i32_ty], [IntrNoMem]>; 3507 def int_x86_avx512_maskz_fixupimm_ss : 3508 GCCBuiltin<"__builtin_ia32_fixupimmss_maskz">, 3509 Intrinsic<[llvm_v4f32_ty], 3510 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty, 3511 llvm_i32_ty], [IntrNoMem]>; 3512 def int_x86_avx512_mask_getexp_pd_128 : GCCBuiltin<"__builtin_ia32_getexppd128_mask">, 3513 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3514 llvm_i8_ty], [IntrNoMem]>; 3515 def int_x86_avx512_mask_getexp_pd_256 : GCCBuiltin<"__builtin_ia32_getexppd256_mask">, 3516 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 3517 llvm_i8_ty], [IntrNoMem]>; 3518 def int_x86_avx512_mask_getexp_pd_512 : GCCBuiltin<"__builtin_ia32_getexppd512_mask">, 3519 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3520 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3521 def int_x86_avx512_mask_getexp_ps_128 : GCCBuiltin<"__builtin_ia32_getexpps128_mask">, 3522 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3523 llvm_i8_ty], [IntrNoMem]>; 3524 def int_x86_avx512_mask_getexp_ps_256 : GCCBuiltin<"__builtin_ia32_getexpps256_mask">, 3525 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 3526 llvm_i8_ty], [IntrNoMem]>; 3527 def int_x86_avx512_mask_getexp_ps_512 : GCCBuiltin<"__builtin_ia32_getexpps512_mask">, 3528 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3529 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3530 3531 def int_x86_avx512_mask_getexp_ss : GCCBuiltin<"__builtin_ia32_getexpss128_round_mask">, 3532 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, 3533 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3534 def int_x86_avx512_mask_getexp_sd : GCCBuiltin<"__builtin_ia32_getexpsd128_round_mask">, 3535 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, 3536 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3537 3538 def int_x86_avx512_mask_getmant_pd_128 : 3539 GCCBuiltin<"__builtin_ia32_getmantpd128_mask">, 3540 Intrinsic<[llvm_v2f64_ty], 3541 [llvm_v2f64_ty,llvm_i32_ty, llvm_v2f64_ty, llvm_i8_ty], 3542 [IntrNoMem]>; 3543 3544 def int_x86_avx512_mask_getmant_pd_256 : 3545 GCCBuiltin<"__builtin_ia32_getmantpd256_mask">, 3546 Intrinsic<[llvm_v4f64_ty], 3547 [llvm_v4f64_ty,llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty], 3548 [IntrNoMem]>; 3549 3550 def int_x86_avx512_mask_getmant_pd_512 : 3551 GCCBuiltin<"__builtin_ia32_getmantpd512_mask">, 3552 Intrinsic<[llvm_v8f64_ty], 3553 [llvm_v8f64_ty,llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty,llvm_i32_ty ], 3554 [IntrNoMem]>; 3555 3556 def int_x86_avx512_mask_getmant_ps_128 : 3557 GCCBuiltin<"__builtin_ia32_getmantps128_mask">, 3558 Intrinsic<[llvm_v4f32_ty], 3559 [llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty, llvm_i8_ty], 3560 [IntrNoMem]>; 3561 3562 def int_x86_avx512_mask_getmant_ps_256 : 3563 GCCBuiltin<"__builtin_ia32_getmantps256_mask">, 3564 Intrinsic<[llvm_v8f32_ty], 3565 [llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty], 3566 [IntrNoMem]>; 3567 3568 def int_x86_avx512_mask_getmant_ps_512 : 3569 GCCBuiltin<"__builtin_ia32_getmantps512_mask">, 3570 Intrinsic<[llvm_v16f32_ty], 3571 [llvm_v16f32_ty,llvm_i32_ty, llvm_v16f32_ty,llvm_i16_ty,llvm_i32_ty], 3572 [IntrNoMem]>; 3573 3574 def int_x86_avx512_mask_getmant_ss : 3575 GCCBuiltin<"__builtin_ia32_getmantss_round_mask">, 3576 Intrinsic<[llvm_v4f32_ty], 3577 [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty, 3578 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3579 3580 def int_x86_avx512_mask_getmant_sd : 3581 GCCBuiltin<"__builtin_ia32_getmantsd_round_mask">, 3582 Intrinsic<[llvm_v2f64_ty], 3583 [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v2f64_ty, 3584 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3585 3586 def int_x86_avx512_rsqrt14_ss : GCCBuiltin<"__builtin_ia32_rsqrt14ss_mask">, 3587 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, 3588 llvm_i8_ty], [IntrNoMem]>; 3589 def int_x86_avx512_rsqrt14_sd : GCCBuiltin<"__builtin_ia32_rsqrt14sd_mask">, 3590 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, 3591 llvm_i8_ty], [IntrNoMem]>; 3592 3593 def int_x86_avx512_rsqrt14_pd_128 : GCCBuiltin<"__builtin_ia32_rsqrt14pd128_mask">, 3594 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3595 llvm_i8_ty], [IntrNoMem]>; 3596 def int_x86_avx512_rsqrt14_pd_256 : GCCBuiltin<"__builtin_ia32_rsqrt14pd256_mask">, 3597 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 3598 llvm_i8_ty], [IntrNoMem]>; 3599 def int_x86_avx512_rsqrt14_pd_512 : GCCBuiltin<"__builtin_ia32_rsqrt14pd512_mask">, 3600 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3601 llvm_i8_ty], [IntrNoMem]>; 3602 def int_x86_avx512_rsqrt14_ps_128 : GCCBuiltin<"__builtin_ia32_rsqrt14ps128_mask">, 3603 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3604 llvm_i8_ty], [IntrNoMem]>; 3605 def int_x86_avx512_rsqrt14_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrt14ps256_mask">, 3606 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 3607 llvm_i8_ty], [IntrNoMem]>; 3608 def int_x86_avx512_rsqrt14_ps_512 : GCCBuiltin<"__builtin_ia32_rsqrt14ps512_mask">, 3609 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3610 llvm_i16_ty], [IntrNoMem]>; 3611 def int_x86_avx512_rcp14_ss : GCCBuiltin<"__builtin_ia32_rcp14ss_mask">, 3612 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, 3613 llvm_i8_ty], [IntrNoMem]>; 3614 def int_x86_avx512_rcp14_sd : GCCBuiltin<"__builtin_ia32_rcp14sd_mask">, 3615 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, 3616 llvm_i8_ty], [IntrNoMem]>; 3617 3618 def int_x86_avx512_rcp14_pd_128 : GCCBuiltin<"__builtin_ia32_rcp14pd128_mask">, 3619 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3620 llvm_i8_ty], [IntrNoMem]>; 3621 def int_x86_avx512_rcp14_pd_256 : GCCBuiltin<"__builtin_ia32_rcp14pd256_mask">, 3622 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 3623 llvm_i8_ty], [IntrNoMem]>; 3624 def int_x86_avx512_rcp14_pd_512 : GCCBuiltin<"__builtin_ia32_rcp14pd512_mask">, 3625 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3626 llvm_i8_ty], [IntrNoMem]>; 3627 def int_x86_avx512_rcp14_ps_128 : GCCBuiltin<"__builtin_ia32_rcp14ps128_mask">, 3628 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3629 llvm_i8_ty], [IntrNoMem]>; 3630 def int_x86_avx512_rcp14_ps_256 : GCCBuiltin<"__builtin_ia32_rcp14ps256_mask">, 3631 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 3632 llvm_i8_ty], [IntrNoMem]>; 3633 def int_x86_avx512_rcp14_ps_512 : GCCBuiltin<"__builtin_ia32_rcp14ps512_mask">, 3634 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3635 llvm_i16_ty], [IntrNoMem]>; 3636 3637 def int_x86_avx512_rcp28_ps : GCCBuiltin<"__builtin_ia32_rcp28ps_mask">, 3638 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3639 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3640 def int_x86_avx512_rcp28_pd : GCCBuiltin<"__builtin_ia32_rcp28pd_mask">, 3641 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3642 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3643 def int_x86_avx512_exp2_ps : GCCBuiltin<"__builtin_ia32_exp2ps_mask">, 3644 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3645 llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>; 3646 def int_x86_avx512_exp2_pd : GCCBuiltin<"__builtin_ia32_exp2pd_mask">, 3647 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3648 llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 3649 3650 def int_x86_avx512_rcp28_ss : GCCBuiltin<"__builtin_ia32_rcp28ss_round_mask">, 3651 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3652 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], 3653 [IntrNoMem]>; 3654 def int_x86_avx512_rcp28_sd : GCCBuiltin<"__builtin_ia32_rcp28sd_round_mask">, 3655 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3656 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], 3657 [IntrNoMem]>; 3658 def int_x86_avx512_rsqrt28_ps : GCCBuiltin<"__builtin_ia32_rsqrt28ps_mask">, 3659 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 3660 llvm_i16_ty, llvm_i32_ty], 3661 [IntrNoMem]>; 3662 def int_x86_avx512_rsqrt28_pd : GCCBuiltin<"__builtin_ia32_rsqrt28pd_mask">, 3663 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 3664 llvm_i8_ty, llvm_i32_ty], 3665 [IntrNoMem]>; 3666 def int_x86_avx512_rsqrt28_ss : GCCBuiltin<"__builtin_ia32_rsqrt28ss_round_mask">, 3667 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 3668 llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], 3669 [IntrNoMem]>; 3670 def int_x86_avx512_rsqrt28_sd : GCCBuiltin<"__builtin_ia32_rsqrt28sd_round_mask">, 3671 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 3672 llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], 3673 [IntrNoMem]>; 3674 def int_x86_avx512_psad_bw_512 : GCCBuiltin<"__builtin_ia32_psadbw512">, 3675 Intrinsic<[llvm_v8i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty], 3676 [IntrNoMem, Commutative]>; 3677} 3678// Integer arithmetic ops 3679let TargetPrefix = "x86" in { 3680 def int_x86_avx512_mask_padds_b_128 : // FIXME: remove this intrinsic 3681 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 3682 llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; 3683 def int_x86_avx512_mask_padds_b_256 : // FIXME: remove this intrinsic 3684 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 3685 llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; 3686 def int_x86_avx512_mask_padds_b_512 : GCCBuiltin<"__builtin_ia32_paddsb512_mask">, 3687 Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, 3688 llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; 3689 def int_x86_avx512_mask_padds_w_128 : // FIXME: remove this intrinsic 3690 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 3691 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 3692 def int_x86_avx512_mask_padds_w_256 : // FIXME: remove this intrinsic 3693 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 3694 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 3695 def int_x86_avx512_mask_padds_w_512 : GCCBuiltin<"__builtin_ia32_paddsw512_mask">, 3696 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 3697 llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 3698 def int_x86_avx512_mask_paddus_b_128 : // FIXME: remove this intrinsic 3699 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 3700 llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; 3701 def int_x86_avx512_mask_paddus_b_256 : // FIXME: remove this intrinsic 3702 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 3703 llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; 3704 def int_x86_avx512_mask_paddus_b_512 : GCCBuiltin<"__builtin_ia32_paddusb512_mask">, 3705 Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, 3706 llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; 3707 def int_x86_avx512_mask_paddus_w_128 : // FIXME: remove this intrinsic 3708 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 3709 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 3710 def int_x86_avx512_mask_paddus_w_256 : // FIXME: remove this intrinsic 3711 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 3712 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 3713 def int_x86_avx512_mask_paddus_w_512 : GCCBuiltin<"__builtin_ia32_paddusw512_mask">, 3714 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 3715 llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 3716 def int_x86_avx512_mask_psubs_b_128 : // FIXME: remove this intrinsic 3717 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 3718 llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; 3719 def int_x86_avx512_mask_psubs_b_256 : // FIXME: remove this intrinsic 3720 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 3721 llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; 3722 def int_x86_avx512_mask_psubs_b_512 : GCCBuiltin<"__builtin_ia32_psubsb512_mask">, 3723 Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, 3724 llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; 3725 def int_x86_avx512_mask_psubs_w_128 : // FIXME: remove this intrinsic 3726 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 3727 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 3728 def int_x86_avx512_mask_psubs_w_256 : // FIXME: remove this intrinsic 3729 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 3730 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 3731 def int_x86_avx512_mask_psubs_w_512 : GCCBuiltin<"__builtin_ia32_psubsw512_mask">, 3732 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 3733 llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 3734 def int_x86_avx512_mask_psubus_b_128 : // FIXME: remove this intrinsic 3735 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 3736 llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>; 3737 def int_x86_avx512_mask_psubus_b_256 : // FIXME: remove this intrinsic 3738 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 3739 llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; 3740 def int_x86_avx512_mask_psubus_b_512 : GCCBuiltin<"__builtin_ia32_psubusb512_mask">, 3741 Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, 3742 llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>; 3743 def int_x86_avx512_mask_psubus_w_128 : // FIXME: remove this intrinsic 3744 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 3745 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 3746 def int_x86_avx512_mask_psubus_w_256 : // FIXME: remove this intrinsic 3747 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 3748 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 3749 def int_x86_avx512_mask_psubus_w_512 : GCCBuiltin<"__builtin_ia32_psubusw512_mask">, 3750 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 3751 llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 3752 def int_x86_avx512_pmulhu_w_512 : GCCBuiltin<"__builtin_ia32_pmulhuw512">, 3753 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 3754 llvm_v32i16_ty], [IntrNoMem, Commutative]>; 3755 def int_x86_avx512_pmulh_w_512 : GCCBuiltin<"__builtin_ia32_pmulhw512">, 3756 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, 3757 llvm_v32i16_ty], [IntrNoMem, Commutative]>; 3758 def int_x86_avx512_pmaddw_d_512 : GCCBuiltin<"__builtin_ia32_pmaddwd512">, 3759 Intrinsic<[llvm_v16i32_ty], [llvm_v32i16_ty, 3760 llvm_v32i16_ty], [IntrNoMem, Commutative]>; 3761 def int_x86_avx512_pmaddubs_w_512 : GCCBuiltin<"__builtin_ia32_pmaddubsw512">, 3762 Intrinsic<[llvm_v32i16_ty], [llvm_v64i8_ty, 3763 llvm_v64i8_ty], [IntrNoMem]>; 3764 3765 def int_x86_avx512_dbpsadbw_128 : 3766 GCCBuiltin<"__builtin_ia32_dbpsadbw128">, 3767 Intrinsic<[llvm_v8i16_ty], 3768 [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>; 3769 3770 def int_x86_avx512_dbpsadbw_256 : 3771 GCCBuiltin<"__builtin_ia32_dbpsadbw256">, 3772 Intrinsic<[llvm_v16i16_ty], 3773 [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>; 3774 3775 def int_x86_avx512_dbpsadbw_512 : 3776 GCCBuiltin<"__builtin_ia32_dbpsadbw512">, 3777 Intrinsic<[llvm_v32i16_ty], 3778 [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty], [IntrNoMem]>; 3779} 3780 3781// Gather and Scatter ops 3782let TargetPrefix = "x86" in { 3783 def int_x86_avx512_gather_dpd_512 : GCCBuiltin<"__builtin_ia32_gathersiv8df">, 3784 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty, 3785 llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 3786 [IntrReadMem, IntrArgMemOnly]>; 3787 def int_x86_avx512_gather_dps_512 : GCCBuiltin<"__builtin_ia32_gathersiv16sf">, 3788 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty, 3789 llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], 3790 [IntrReadMem, IntrArgMemOnly]>; 3791 def int_x86_avx512_gather_qpd_512 : GCCBuiltin<"__builtin_ia32_gatherdiv8df">, 3792 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty, 3793 llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3794 [IntrReadMem, IntrArgMemOnly]>; 3795 def int_x86_avx512_gather_qps_512 : GCCBuiltin<"__builtin_ia32_gatherdiv16sf">, 3796 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty, 3797 llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3798 [IntrReadMem, IntrArgMemOnly]>; 3799 3800 3801 def int_x86_avx512_gather_dpq_512 : GCCBuiltin<"__builtin_ia32_gathersiv8di">, 3802 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty, 3803 llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 3804 [IntrReadMem, IntrArgMemOnly]>; 3805 def int_x86_avx512_gather_dpi_512 : GCCBuiltin<"__builtin_ia32_gathersiv16si">, 3806 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty, 3807 llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty], 3808 [IntrReadMem, IntrArgMemOnly]>; 3809 def int_x86_avx512_gather_qpq_512 : GCCBuiltin<"__builtin_ia32_gatherdiv8di">, 3810 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty, 3811 llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3812 [IntrReadMem, IntrArgMemOnly]>; 3813 def int_x86_avx512_gather_qpi_512 : GCCBuiltin<"__builtin_ia32_gatherdiv16si">, 3814 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty, 3815 llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty], 3816 [IntrReadMem, IntrArgMemOnly]>; 3817 3818 def int_x86_avx512_gather3div2_df : 3819 GCCBuiltin<"__builtin_ia32_gather3div2df">, 3820 Intrinsic<[llvm_v2f64_ty], 3821 [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty], 3822 [IntrReadMem, IntrArgMemOnly]>; 3823 3824 def int_x86_avx512_gather3div2_di : 3825 GCCBuiltin<"__builtin_ia32_gather3div2di">, 3826 Intrinsic<[llvm_v2i64_ty], 3827 [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty], 3828 [IntrReadMem, IntrArgMemOnly]>; 3829 3830 def int_x86_avx512_gather3div4_df : 3831 GCCBuiltin<"__builtin_ia32_gather3div4df">, 3832 Intrinsic<[llvm_v4f64_ty], 3833 [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty], 3834 [IntrReadMem, IntrArgMemOnly]>; 3835 3836 def int_x86_avx512_gather3div4_di : 3837 GCCBuiltin<"__builtin_ia32_gather3div4di">, 3838 Intrinsic<[llvm_v4i64_ty], 3839 [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty], 3840 [IntrReadMem, IntrArgMemOnly]>; 3841 3842 def int_x86_avx512_gather3div4_sf : 3843 GCCBuiltin<"__builtin_ia32_gather3div4sf">, 3844 Intrinsic<[llvm_v4f32_ty], 3845 [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty], 3846 [IntrReadMem, IntrArgMemOnly]>; 3847 3848 def int_x86_avx512_gather3div4_si : 3849 GCCBuiltin<"__builtin_ia32_gather3div4si">, 3850 Intrinsic<[llvm_v4i32_ty], 3851 [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty], 3852 [IntrReadMem, IntrArgMemOnly]>; 3853 3854 def int_x86_avx512_gather3div8_sf : 3855 GCCBuiltin<"__builtin_ia32_gather3div8sf">, 3856 Intrinsic<[llvm_v4f32_ty], 3857 [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty], 3858 [IntrReadMem, IntrArgMemOnly]>; 3859 3860 def int_x86_avx512_gather3div8_si : 3861 GCCBuiltin<"__builtin_ia32_gather3div8si">, 3862 Intrinsic<[llvm_v4i32_ty], 3863 [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty], 3864 [IntrReadMem, IntrArgMemOnly]>; 3865 3866 def int_x86_avx512_gather3siv2_df : 3867 GCCBuiltin<"__builtin_ia32_gather3siv2df">, 3868 Intrinsic<[llvm_v2f64_ty], 3869 [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], 3870 [IntrReadMem, IntrArgMemOnly]>; 3871 3872 def int_x86_avx512_gather3siv2_di : 3873 GCCBuiltin<"__builtin_ia32_gather3siv2di">, 3874 Intrinsic<[llvm_v2i64_ty], 3875 [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], 3876 [IntrReadMem, IntrArgMemOnly]>; 3877 3878 def int_x86_avx512_gather3siv4_df : 3879 GCCBuiltin<"__builtin_ia32_gather3siv4df">, 3880 Intrinsic<[llvm_v4f64_ty], 3881 [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], 3882 [IntrReadMem, IntrArgMemOnly]>; 3883 3884 def int_x86_avx512_gather3siv4_di : 3885 GCCBuiltin<"__builtin_ia32_gather3siv4di">, 3886 Intrinsic<[llvm_v4i64_ty], 3887 [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], 3888 [IntrReadMem, IntrArgMemOnly]>; 3889 3890 def int_x86_avx512_gather3siv4_sf : 3891 GCCBuiltin<"__builtin_ia32_gather3siv4sf">, 3892 Intrinsic<[llvm_v4f32_ty], 3893 [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], 3894 [IntrReadMem, IntrArgMemOnly]>; 3895 3896 def int_x86_avx512_gather3siv4_si : 3897 GCCBuiltin<"__builtin_ia32_gather3siv4si">, 3898 Intrinsic<[llvm_v4i32_ty], 3899 [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty], 3900 [IntrReadMem, IntrArgMemOnly]>; 3901 3902 def int_x86_avx512_gather3siv8_sf : 3903 GCCBuiltin<"__builtin_ia32_gather3siv8sf">, 3904 Intrinsic<[llvm_v8f32_ty], 3905 [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 3906 [IntrReadMem, IntrArgMemOnly]>; 3907 3908 def int_x86_avx512_gather3siv8_si : 3909 GCCBuiltin<"__builtin_ia32_gather3siv8si">, 3910 Intrinsic<[llvm_v8i32_ty], 3911 [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty], 3912 [IntrReadMem, IntrArgMemOnly]>; 3913 3914// scatter 3915 def int_x86_avx512_scatter_dpd_512 : GCCBuiltin<"__builtin_ia32_scattersiv8df">, 3916 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, 3917 llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty], 3918 [IntrArgMemOnly]>; 3919 def int_x86_avx512_scatter_dps_512 : GCCBuiltin<"__builtin_ia32_scattersiv16sf">, 3920 Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty, 3921 llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty], 3922 [IntrArgMemOnly]>; 3923 def int_x86_avx512_scatter_qpd_512 : GCCBuiltin<"__builtin_ia32_scatterdiv8df">, 3924 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, 3925 llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty], 3926 [IntrArgMemOnly]>; 3927 def int_x86_avx512_scatter_qps_512 : GCCBuiltin<"__builtin_ia32_scatterdiv16sf">, 3928 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, 3929 llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty], 3930 [IntrArgMemOnly]>; 3931 3932 3933 def int_x86_avx512_scatter_dpq_512 : GCCBuiltin<"__builtin_ia32_scattersiv8di">, 3934 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, 3935 llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty], 3936 [IntrArgMemOnly]>; 3937 def int_x86_avx512_scatter_dpi_512 : GCCBuiltin<"__builtin_ia32_scattersiv16si">, 3938 Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty, 3939 llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty], 3940 [IntrArgMemOnly]>; 3941 def int_x86_avx512_scatter_qpq_512 : GCCBuiltin<"__builtin_ia32_scatterdiv8di">, 3942 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,llvm_v8i64_ty, llvm_v8i64_ty, 3943 llvm_i32_ty], 3944 [IntrArgMemOnly]>; 3945 def int_x86_avx512_scatter_qpi_512 : GCCBuiltin<"__builtin_ia32_scatterdiv16si">, 3946 Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8i32_ty, 3947 llvm_i32_ty], 3948 [IntrArgMemOnly]>; 3949 3950 def int_x86_avx512_scatterdiv2_df : 3951 GCCBuiltin<"__builtin_ia32_scatterdiv2df">, 3952 Intrinsic<[], 3953 [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty], 3954 [IntrArgMemOnly]>; 3955 3956 def int_x86_avx512_scatterdiv2_di : 3957 GCCBuiltin<"__builtin_ia32_scatterdiv2di">, 3958 Intrinsic<[], 3959 [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], 3960 [IntrArgMemOnly]>; 3961 3962 def int_x86_avx512_scatterdiv4_df : 3963 GCCBuiltin<"__builtin_ia32_scatterdiv4df">, 3964 Intrinsic<[], 3965 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty], 3966 [IntrArgMemOnly]>; 3967 3968 def int_x86_avx512_scatterdiv4_di : 3969 GCCBuiltin<"__builtin_ia32_scatterdiv4di">, 3970 Intrinsic<[], 3971 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty], 3972 [IntrArgMemOnly]>; 3973 3974 def int_x86_avx512_scatterdiv4_sf : 3975 GCCBuiltin<"__builtin_ia32_scatterdiv4sf">, 3976 Intrinsic<[], 3977 [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty], 3978 [IntrArgMemOnly]>; 3979 3980 def int_x86_avx512_scatterdiv4_si : 3981 GCCBuiltin<"__builtin_ia32_scatterdiv4si">, 3982 Intrinsic<[], 3983 [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty], 3984 [IntrArgMemOnly]>; 3985 3986 def int_x86_avx512_scatterdiv8_sf : 3987 GCCBuiltin<"__builtin_ia32_scatterdiv8sf">, 3988 Intrinsic<[], 3989 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty], 3990 [IntrArgMemOnly]>; 3991 3992 def int_x86_avx512_scatterdiv8_si : 3993 GCCBuiltin<"__builtin_ia32_scatterdiv8si">, 3994 Intrinsic<[], 3995 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty], 3996 [IntrArgMemOnly]>; 3997 3998 def int_x86_avx512_scattersiv2_df : 3999 GCCBuiltin<"__builtin_ia32_scattersiv2df">, 4000 Intrinsic<[], 4001 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty], 4002 [IntrArgMemOnly]>; 4003 4004 def int_x86_avx512_scattersiv2_di : 4005 GCCBuiltin<"__builtin_ia32_scattersiv2di">, 4006 Intrinsic<[], 4007 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty], 4008 [IntrArgMemOnly]>; 4009 4010 def int_x86_avx512_scattersiv4_df : 4011 GCCBuiltin<"__builtin_ia32_scattersiv4df">, 4012 Intrinsic<[], 4013 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty], 4014 [IntrArgMemOnly]>; 4015 4016 def int_x86_avx512_scattersiv4_di : 4017 GCCBuiltin<"__builtin_ia32_scattersiv4di">, 4018 Intrinsic<[], 4019 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty], 4020 [IntrArgMemOnly]>; 4021 4022 def int_x86_avx512_scattersiv4_sf : 4023 GCCBuiltin<"__builtin_ia32_scattersiv4sf">, 4024 Intrinsic<[], 4025 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty], 4026 [IntrArgMemOnly]>; 4027 4028 def int_x86_avx512_scattersiv4_si : 4029 GCCBuiltin<"__builtin_ia32_scattersiv4si">, 4030 Intrinsic<[], 4031 [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], 4032 [IntrArgMemOnly]>; 4033 4034 def int_x86_avx512_scattersiv8_sf : 4035 GCCBuiltin<"__builtin_ia32_scattersiv8sf">, 4036 Intrinsic<[], 4037 [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty], 4038 [IntrArgMemOnly]>; 4039 4040 def int_x86_avx512_scattersiv8_si : 4041 GCCBuiltin<"__builtin_ia32_scattersiv8si">, 4042 Intrinsic<[], 4043 [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty], 4044 [IntrArgMemOnly]>; 4045 4046 // gather prefetch 4047 def int_x86_avx512_gatherpf_dpd_512 : GCCBuiltin<"__builtin_ia32_gatherpfdpd">, 4048 Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty, 4049 llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; 4050 def int_x86_avx512_gatherpf_dps_512 : GCCBuiltin<"__builtin_ia32_gatherpfdps">, 4051 Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty, 4052 llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; 4053 def int_x86_avx512_gatherpf_qpd_512 : GCCBuiltin<"__builtin_ia32_gatherpfqpd">, 4054 Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, 4055 llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; 4056 def int_x86_avx512_gatherpf_qps_512 : GCCBuiltin<"__builtin_ia32_gatherpfqps">, 4057 Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, 4058 llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; 4059 4060 // scatter prefetch 4061 def int_x86_avx512_scatterpf_dpd_512 : GCCBuiltin<"__builtin_ia32_scatterpfdpd">, 4062 Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty, 4063 llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; 4064 def int_x86_avx512_scatterpf_dps_512 : GCCBuiltin<"__builtin_ia32_scatterpfdps">, 4065 Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty, 4066 llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; 4067 def int_x86_avx512_scatterpf_qpd_512 : GCCBuiltin<"__builtin_ia32_scatterpfqpd">, 4068 Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, 4069 llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; 4070 def int_x86_avx512_scatterpf_qps_512 : GCCBuiltin<"__builtin_ia32_scatterpfqps">, 4071 Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty, 4072 llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>; 4073} 4074 4075// AVX-512 conflict detection instruction 4076// Instructions that count the number of leading zero bits 4077let TargetPrefix = "x86" in { 4078 def int_x86_avx512_mask_conflict_d_128 : 4079 GCCBuiltin<"__builtin_ia32_vpconflictsi_128_mask">, 4080 Intrinsic<[llvm_v4i32_ty], 4081 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], 4082 [IntrNoMem]>; 4083 def int_x86_avx512_mask_conflict_d_256 : 4084 GCCBuiltin<"__builtin_ia32_vpconflictsi_256_mask">, 4085 Intrinsic<[llvm_v8i32_ty], 4086 [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty], 4087 [IntrNoMem]>; 4088 def int_x86_avx512_mask_conflict_d_512 : 4089 GCCBuiltin<"__builtin_ia32_vpconflictsi_512_mask">, 4090 Intrinsic<[llvm_v16i32_ty], 4091 [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], 4092 [IntrNoMem]>; 4093 4094 def int_x86_avx512_mask_conflict_q_128 : 4095 GCCBuiltin<"__builtin_ia32_vpconflictdi_128_mask">, 4096 Intrinsic<[llvm_v2i64_ty], 4097 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], 4098 [IntrNoMem]>; 4099 def int_x86_avx512_mask_conflict_q_256 : 4100 GCCBuiltin<"__builtin_ia32_vpconflictdi_256_mask">, 4101 Intrinsic<[llvm_v4i64_ty], 4102 [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty], 4103 [IntrNoMem]>; 4104 def int_x86_avx512_mask_conflict_q_512 : 4105 GCCBuiltin<"__builtin_ia32_vpconflictdi_512_mask">, 4106 Intrinsic<[llvm_v8i64_ty], 4107 [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], 4108 [IntrNoMem]>; 4109} 4110 4111// Compares 4112let TargetPrefix = "x86" in { 4113 // 512-bit 4114 def int_x86_avx512_vcomi_sd : GCCBuiltin<"__builtin_ia32_vcomisd">, 4115 Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, 4116 llvm_v2f64_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 4117 def int_x86_avx512_vcomi_ss : GCCBuiltin<"__builtin_ia32_vcomiss">, 4118 Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, 4119 llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 4120} 4121 4122// Compress, Expand 4123let TargetPrefix = "x86" in { 4124 def int_x86_avx512_mask_compress_ps_512 : 4125 GCCBuiltin<"__builtin_ia32_compresssf512_mask">, 4126 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 4127 llvm_i16_ty], [IntrNoMem]>; 4128 def int_x86_avx512_mask_compress_pd_512 : 4129 GCCBuiltin<"__builtin_ia32_compressdf512_mask">, 4130 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 4131 llvm_i8_ty], [IntrNoMem]>; 4132 def int_x86_avx512_mask_compress_ps_256 : 4133 GCCBuiltin<"__builtin_ia32_compresssf256_mask">, 4134 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 4135 llvm_i8_ty], [IntrNoMem]>; 4136 def int_x86_avx512_mask_compress_pd_256 : 4137 GCCBuiltin<"__builtin_ia32_compressdf256_mask">, 4138 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 4139 llvm_i8_ty], [IntrNoMem]>; 4140 def int_x86_avx512_mask_compress_ps_128 : 4141 GCCBuiltin<"__builtin_ia32_compresssf128_mask">, 4142 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 4143 llvm_i8_ty], [IntrNoMem]>; 4144 def int_x86_avx512_mask_compress_pd_128 : 4145 GCCBuiltin<"__builtin_ia32_compressdf128_mask">, 4146 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 4147 llvm_i8_ty], [IntrNoMem]>; 4148 4149 def int_x86_avx512_mask_compress_d_512 : 4150 GCCBuiltin<"__builtin_ia32_compresssi512_mask">, 4151 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 4152 llvm_i16_ty], [IntrNoMem]>; 4153 def int_x86_avx512_mask_compress_q_512 : 4154 GCCBuiltin<"__builtin_ia32_compressdi512_mask">, 4155 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 4156 llvm_i8_ty], [IntrNoMem]>; 4157 def int_x86_avx512_mask_compress_d_256 : 4158 GCCBuiltin<"__builtin_ia32_compresssi256_mask">, 4159 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 4160 llvm_i8_ty], [IntrNoMem]>; 4161 def int_x86_avx512_mask_compress_q_256 : 4162 GCCBuiltin<"__builtin_ia32_compressdi256_mask">, 4163 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, 4164 llvm_i8_ty], [IntrNoMem]>; 4165 def int_x86_avx512_mask_compress_d_128 : 4166 GCCBuiltin<"__builtin_ia32_compresssi128_mask">, 4167 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 4168 llvm_i8_ty], [IntrNoMem]>; 4169 def int_x86_avx512_mask_compress_q_128 : 4170 GCCBuiltin<"__builtin_ia32_compressdi128_mask">, 4171 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 4172 llvm_i8_ty], [IntrNoMem]>; 4173 4174 def int_x86_avx512_mask_compress_b_512 : 4175 GCCBuiltin<"__builtin_ia32_compressqi512_mask">, 4176 Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, 4177 llvm_i64_ty], [IntrNoMem]>; 4178 def int_x86_avx512_mask_compress_w_512 : 4179 GCCBuiltin<"__builtin_ia32_compresshi512_mask">, 4180 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 4181 llvm_i32_ty], [IntrNoMem]>; 4182 def int_x86_avx512_mask_compress_b_256 : 4183 GCCBuiltin<"__builtin_ia32_compressqi256_mask">, 4184 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 4185 llvm_i32_ty], [IntrNoMem]>; 4186 def int_x86_avx512_mask_compress_w_256 : 4187 GCCBuiltin<"__builtin_ia32_compresshi256_mask">, 4188 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 4189 llvm_i16_ty], [IntrNoMem]>; 4190 def int_x86_avx512_mask_compress_b_128 : 4191 GCCBuiltin<"__builtin_ia32_compressqi128_mask">, 4192 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 4193 llvm_i16_ty], [IntrNoMem]>; 4194 def int_x86_avx512_mask_compress_w_128 : 4195 GCCBuiltin<"__builtin_ia32_compresshi128_mask">, 4196 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 4197 llvm_i8_ty], [IntrNoMem]>; 4198 4199// expand 4200 def int_x86_avx512_mask_expand_ps_512 : 4201 GCCBuiltin<"__builtin_ia32_expandsf512_mask">, 4202 Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 4203 llvm_i16_ty], [IntrNoMem]>; 4204 def int_x86_avx512_mask_expand_pd_512 : 4205 GCCBuiltin<"__builtin_ia32_expanddf512_mask">, 4206 Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 4207 llvm_i8_ty], [IntrNoMem]>; 4208 def int_x86_avx512_mask_expand_ps_256 : 4209 GCCBuiltin<"__builtin_ia32_expandsf256_mask">, 4210 Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 4211 llvm_i8_ty], [IntrNoMem]>; 4212 def int_x86_avx512_mask_expand_pd_256 : 4213 GCCBuiltin<"__builtin_ia32_expanddf256_mask">, 4214 Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 4215 llvm_i8_ty], [IntrNoMem]>; 4216 def int_x86_avx512_mask_expand_ps_128 : 4217 GCCBuiltin<"__builtin_ia32_expandsf128_mask">, 4218 Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 4219 llvm_i8_ty], [IntrNoMem]>; 4220 def int_x86_avx512_mask_expand_pd_128 : 4221 GCCBuiltin<"__builtin_ia32_expanddf128_mask">, 4222 Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 4223 llvm_i8_ty], [IntrNoMem]>; 4224 4225 def int_x86_avx512_mask_expand_d_512 : 4226 GCCBuiltin<"__builtin_ia32_expandsi512_mask">, 4227 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 4228 llvm_i16_ty], [IntrNoMem]>; 4229 def int_x86_avx512_mask_expand_q_512 : 4230 GCCBuiltin<"__builtin_ia32_expanddi512_mask">, 4231 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 4232 llvm_i8_ty], [IntrNoMem]>; 4233 def int_x86_avx512_mask_expand_d_256 : 4234 GCCBuiltin<"__builtin_ia32_expandsi256_mask">, 4235 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 4236 llvm_i8_ty], [IntrNoMem]>; 4237 def int_x86_avx512_mask_expand_q_256 : 4238 GCCBuiltin<"__builtin_ia32_expanddi256_mask">, 4239 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, 4240 llvm_i8_ty], [IntrNoMem]>; 4241 def int_x86_avx512_mask_expand_d_128 : 4242 GCCBuiltin<"__builtin_ia32_expandsi128_mask">, 4243 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 4244 llvm_i8_ty], [IntrNoMem]>; 4245 def int_x86_avx512_mask_expand_q_128 : 4246 GCCBuiltin<"__builtin_ia32_expanddi128_mask">, 4247 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 4248 llvm_i8_ty], [IntrNoMem]>; 4249 4250 def int_x86_avx512_mask_expand_b_512 : 4251 GCCBuiltin<"__builtin_ia32_expandqi512_mask">, 4252 Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, 4253 llvm_i64_ty], [IntrNoMem]>; 4254 def int_x86_avx512_mask_expand_w_512 : 4255 GCCBuiltin<"__builtin_ia32_expandhi512_mask">, 4256 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 4257 llvm_i32_ty], [IntrNoMem]>; 4258 def int_x86_avx512_mask_expand_b_256 : 4259 GCCBuiltin<"__builtin_ia32_expandqi256_mask">, 4260 Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty, 4261 llvm_i32_ty], [IntrNoMem]>; 4262 def int_x86_avx512_mask_expand_w_256 : 4263 GCCBuiltin<"__builtin_ia32_expandhi256_mask">, 4264 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 4265 llvm_i16_ty], [IntrNoMem]>; 4266 def int_x86_avx512_mask_expand_b_128 : 4267 GCCBuiltin<"__builtin_ia32_expandqi128_mask">, 4268 Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 4269 llvm_i16_ty], [IntrNoMem]>; 4270 def int_x86_avx512_mask_expand_w_128 : 4271 GCCBuiltin<"__builtin_ia32_expandhi128_mask">, 4272 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 4273 llvm_i8_ty], [IntrNoMem]>; 4274} 4275 4276// VBMI2 Concat & Shift 4277let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.". 4278 def int_x86_avx512_vpshld_q_512 : 4279 GCCBuiltin<"__builtin_ia32_vpshldq512">, 4280 Intrinsic<[llvm_v8i64_ty], 4281 [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty], [IntrNoMem]>; 4282 def int_x86_avx512_vpshld_q_256 : 4283 GCCBuiltin<"__builtin_ia32_vpshldq256">, 4284 Intrinsic<[llvm_v4i64_ty], 4285 [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty], [IntrNoMem]>; 4286 def int_x86_avx512_vpshld_q_128 : 4287 GCCBuiltin<"__builtin_ia32_vpshldq128">, 4288 Intrinsic<[llvm_v2i64_ty], 4289 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>; 4290 4291 def int_x86_avx512_vpshld_d_512 : 4292 GCCBuiltin<"__builtin_ia32_vpshldd512">, 4293 Intrinsic<[llvm_v16i32_ty], 4294 [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty], [IntrNoMem]>; 4295 def int_x86_avx512_vpshld_d_256 : 4296 GCCBuiltin<"__builtin_ia32_vpshldd256">, 4297 Intrinsic<[llvm_v8i32_ty], 4298 [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty], [IntrNoMem]>; 4299 def int_x86_avx512_vpshld_d_128 : 4300 GCCBuiltin<"__builtin_ia32_vpshldd128">, 4301 Intrinsic<[llvm_v4i32_ty], 4302 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>; 4303 4304 def int_x86_avx512_vpshld_w_512 : 4305 GCCBuiltin<"__builtin_ia32_vpshldw512">, 4306 Intrinsic<[llvm_v32i16_ty], 4307 [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 4308 def int_x86_avx512_vpshld_w_256 : 4309 GCCBuiltin<"__builtin_ia32_vpshldw256">, 4310 Intrinsic<[llvm_v16i16_ty], 4311 [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty], [IntrNoMem]>; 4312 def int_x86_avx512_vpshld_w_128 : 4313 GCCBuiltin<"__builtin_ia32_vpshldw128">, 4314 Intrinsic<[llvm_v8i16_ty], 4315 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>; 4316 4317 def int_x86_avx512_vpshrd_q_512 : 4318 GCCBuiltin<"__builtin_ia32_vpshrdq512">, 4319 Intrinsic<[llvm_v8i64_ty], 4320 [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty], [IntrNoMem]>; 4321 def int_x86_avx512_vpshrd_q_256 : 4322 GCCBuiltin<"__builtin_ia32_vpshrdq256">, 4323 Intrinsic<[llvm_v4i64_ty], 4324 [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty], [IntrNoMem]>; 4325 def int_x86_avx512_vpshrd_q_128 : 4326 GCCBuiltin<"__builtin_ia32_vpshrdq128">, 4327 Intrinsic<[llvm_v2i64_ty], 4328 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>; 4329 4330 def int_x86_avx512_vpshrd_d_512 : 4331 GCCBuiltin<"__builtin_ia32_vpshrdd512">, 4332 Intrinsic<[llvm_v16i32_ty], 4333 [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty], [IntrNoMem]>; 4334 def int_x86_avx512_vpshrd_d_256 : 4335 GCCBuiltin<"__builtin_ia32_vpshrdd256">, 4336 Intrinsic<[llvm_v8i32_ty], 4337 [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty], [IntrNoMem]>; 4338 def int_x86_avx512_vpshrd_d_128 : 4339 GCCBuiltin<"__builtin_ia32_vpshrdd128">, 4340 Intrinsic<[llvm_v4i32_ty], 4341 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>; 4342 4343 def int_x86_avx512_vpshrd_w_512 : 4344 GCCBuiltin<"__builtin_ia32_vpshrdw512">, 4345 Intrinsic<[llvm_v32i16_ty], 4346 [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 4347 def int_x86_avx512_vpshrd_w_256 : 4348 GCCBuiltin<"__builtin_ia32_vpshrdw256">, 4349 Intrinsic<[llvm_v16i16_ty], 4350 [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty], [IntrNoMem]>; 4351 def int_x86_avx512_vpshrd_w_128 : 4352 GCCBuiltin<"__builtin_ia32_vpshrdw128">, 4353 Intrinsic<[llvm_v8i16_ty], 4354 [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>; 4355 4356 def int_x86_avx512_mask_vpshldv_w_128 : 4357 GCCBuiltin<"__builtin_ia32_vpshldvw128_mask">, 4358 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 4359 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 4360 def int_x86_avx512_maskz_vpshldv_w_128 : 4361 GCCBuiltin<"__builtin_ia32_vpshldvw128_maskz">, 4362 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 4363 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 4364 def int_x86_avx512_mask_vpshldv_w_256 : 4365 GCCBuiltin<"__builtin_ia32_vpshldvw256_mask">, 4366 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 4367 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 4368 def int_x86_avx512_maskz_vpshldv_w_256 : 4369 GCCBuiltin<"__builtin_ia32_vpshldvw256_maskz">, 4370 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 4371 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 4372 def int_x86_avx512_mask_vpshldv_w_512 : 4373 GCCBuiltin<"__builtin_ia32_vpshldvw512_mask">, 4374 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 4375 llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 4376 def int_x86_avx512_maskz_vpshldv_w_512 : 4377 GCCBuiltin<"__builtin_ia32_vpshldvw512_maskz">, 4378 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 4379 llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 4380 4381 def int_x86_avx512_mask_vpshldv_q_128 : 4382 GCCBuiltin<"__builtin_ia32_vpshldvq128_mask">, 4383 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 4384 llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>; 4385 def int_x86_avx512_maskz_vpshldv_q_128 : 4386 GCCBuiltin<"__builtin_ia32_vpshldvq128_maskz">, 4387 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 4388 llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>; 4389 def int_x86_avx512_mask_vpshldv_q_256 : 4390 GCCBuiltin<"__builtin_ia32_vpshldvq256_mask">, 4391 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, 4392 llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>; 4393 def int_x86_avx512_maskz_vpshldv_q_256 : 4394 GCCBuiltin<"__builtin_ia32_vpshldvq256_maskz">, 4395 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, 4396 llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>; 4397 def int_x86_avx512_mask_vpshldv_q_512 : 4398 GCCBuiltin<"__builtin_ia32_vpshldvq512_mask">, 4399 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 4400 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 4401 def int_x86_avx512_maskz_vpshldv_q_512 : 4402 GCCBuiltin<"__builtin_ia32_vpshldvq512_maskz">, 4403 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 4404 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 4405 4406 def int_x86_avx512_mask_vpshldv_d_128 : 4407 GCCBuiltin<"__builtin_ia32_vpshldvd128_mask">, 4408 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 4409 llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>; 4410 def int_x86_avx512_maskz_vpshldv_d_128 : 4411 GCCBuiltin<"__builtin_ia32_vpshldvd128_maskz">, 4412 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 4413 llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>; 4414 def int_x86_avx512_mask_vpshldv_d_256 : 4415 GCCBuiltin<"__builtin_ia32_vpshldvd256_mask">, 4416 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 4417 llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>; 4418 def int_x86_avx512_maskz_vpshldv_d_256 : 4419 GCCBuiltin<"__builtin_ia32_vpshldvd256_maskz">, 4420 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 4421 llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>; 4422 def int_x86_avx512_mask_vpshldv_d_512 : 4423 GCCBuiltin<"__builtin_ia32_vpshldvd512_mask">, 4424 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 4425 llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>; 4426 def int_x86_avx512_maskz_vpshldv_d_512 : 4427 GCCBuiltin<"__builtin_ia32_vpshldvd512_maskz">, 4428 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 4429 llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>; 4430 4431 def int_x86_avx512_mask_vpshrdv_w_128 : 4432 GCCBuiltin<"__builtin_ia32_vpshrdvw128_mask">, 4433 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 4434 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 4435 def int_x86_avx512_maskz_vpshrdv_w_128 : 4436 GCCBuiltin<"__builtin_ia32_vpshrdvw128_maskz">, 4437 Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 4438 llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>; 4439 def int_x86_avx512_mask_vpshrdv_w_256 : 4440 GCCBuiltin<"__builtin_ia32_vpshrdvw256_mask">, 4441 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 4442 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 4443 def int_x86_avx512_maskz_vpshrdv_w_256 : 4444 GCCBuiltin<"__builtin_ia32_vpshrdvw256_maskz">, 4445 Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 4446 llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>; 4447 def int_x86_avx512_mask_vpshrdv_w_512 : 4448 GCCBuiltin<"__builtin_ia32_vpshrdvw512_mask">, 4449 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 4450 llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 4451 def int_x86_avx512_maskz_vpshrdv_w_512 : 4452 GCCBuiltin<"__builtin_ia32_vpshrdvw512_maskz">, 4453 Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 4454 llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>; 4455 4456 def int_x86_avx512_mask_vpshrdv_q_128 : 4457 GCCBuiltin<"__builtin_ia32_vpshrdvq128_mask">, 4458 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 4459 llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>; 4460 def int_x86_avx512_maskz_vpshrdv_q_128 : 4461 GCCBuiltin<"__builtin_ia32_vpshrdvq128_maskz">, 4462 Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, 4463 llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>; 4464 def int_x86_avx512_mask_vpshrdv_q_256 : 4465 GCCBuiltin<"__builtin_ia32_vpshrdvq256_mask">, 4466 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, 4467 llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>; 4468 def int_x86_avx512_maskz_vpshrdv_q_256 : 4469 GCCBuiltin<"__builtin_ia32_vpshrdvq256_maskz">, 4470 Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, 4471 llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>; 4472 def int_x86_avx512_mask_vpshrdv_q_512 : 4473 GCCBuiltin<"__builtin_ia32_vpshrdvq512_mask">, 4474 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 4475 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 4476 def int_x86_avx512_maskz_vpshrdv_q_512 : 4477 GCCBuiltin<"__builtin_ia32_vpshrdvq512_maskz">, 4478 Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, 4479 llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>; 4480 4481 def int_x86_avx512_mask_vpshrdv_d_128 : 4482 GCCBuiltin<"__builtin_ia32_vpshrdvd128_mask">, 4483 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 4484 llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>; 4485 def int_x86_avx512_maskz_vpshrdv_d_128 : 4486 GCCBuiltin<"__builtin_ia32_vpshrdvd128_maskz">, 4487 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, 4488 llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>; 4489 def int_x86_avx512_mask_vpshrdv_d_256 : 4490 GCCBuiltin<"__builtin_ia32_vpshrdvd256_mask">, 4491 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 4492 llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>; 4493 def int_x86_avx512_maskz_vpshrdv_d_256 : 4494 GCCBuiltin<"__builtin_ia32_vpshrdvd256_maskz">, 4495 Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty, 4496 llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>; 4497 def int_x86_avx512_mask_vpshrdv_d_512 : 4498 GCCBuiltin<"__builtin_ia32_vpshrdvd512_mask">, 4499 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 4500 llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>; 4501 def int_x86_avx512_maskz_vpshrdv_d_512 : 4502 GCCBuiltin<"__builtin_ia32_vpshrdvd512_maskz">, 4503 Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty, 4504 llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>; 4505} 4506 4507// truncate 4508let TargetPrefix = "x86" in { 4509 def int_x86_avx512_mask_pmov_qb_128 : 4510 GCCBuiltin<"__builtin_ia32_pmovqb128_mask">, 4511 Intrinsic<[llvm_v16i8_ty], 4512 [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty], 4513 [IntrNoMem]>; 4514 def int_x86_avx512_mask_pmov_qb_mem_128 : 4515 GCCBuiltin<"__builtin_ia32_pmovqb128mem_mask">, 4516 Intrinsic<[], 4517 [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty], 4518 [IntrArgMemOnly]>; 4519 def int_x86_avx512_mask_pmovs_qb_128 : 4520 GCCBuiltin<"__builtin_ia32_pmovsqb128_mask">, 4521 Intrinsic<[llvm_v16i8_ty], 4522 [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty], 4523 [IntrNoMem]>; 4524 def int_x86_avx512_mask_pmovs_qb_mem_128 : 4525 GCCBuiltin<"__builtin_ia32_pmovsqb128mem_mask">, 4526 Intrinsic<[], 4527 [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty], 4528 [IntrArgMemOnly]>; 4529 def int_x86_avx512_mask_pmovus_qb_128 : 4530 GCCBuiltin<"__builtin_ia32_pmovusqb128_mask">, 4531 Intrinsic<[llvm_v16i8_ty], 4532 [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty], 4533 [IntrNoMem]>; 4534 def int_x86_avx512_mask_pmovus_qb_mem_128 : 4535 GCCBuiltin<"__builtin_ia32_pmovusqb128mem_mask">, 4536 Intrinsic<[], 4537 [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty], 4538 [IntrArgMemOnly]>; 4539 def int_x86_avx512_mask_pmov_qb_256 : 4540 GCCBuiltin<"__builtin_ia32_pmovqb256_mask">, 4541 Intrinsic<[llvm_v16i8_ty], 4542 [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty], 4543 [IntrNoMem]>; 4544 def int_x86_avx512_mask_pmov_qb_mem_256 : 4545 GCCBuiltin<"__builtin_ia32_pmovqb256mem_mask">, 4546 Intrinsic<[], 4547 [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty], 4548 [IntrArgMemOnly]>; 4549 def int_x86_avx512_mask_pmovs_qb_256 : 4550 GCCBuiltin<"__builtin_ia32_pmovsqb256_mask">, 4551 Intrinsic<[llvm_v16i8_ty], 4552 [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty], 4553 [IntrNoMem]>; 4554 def int_x86_avx512_mask_pmovs_qb_mem_256 : 4555 GCCBuiltin<"__builtin_ia32_pmovsqb256mem_mask">, 4556 Intrinsic<[], 4557 [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty], 4558 [IntrArgMemOnly]>; 4559 def int_x86_avx512_mask_pmovus_qb_256 : 4560 GCCBuiltin<"__builtin_ia32_pmovusqb256_mask">, 4561 Intrinsic<[llvm_v16i8_ty], 4562 [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty], 4563 [IntrNoMem]>; 4564 def int_x86_avx512_mask_pmovus_qb_mem_256 : 4565 GCCBuiltin<"__builtin_ia32_pmovusqb256mem_mask">, 4566 Intrinsic<[], 4567 [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty], 4568 [IntrArgMemOnly]>; 4569 def int_x86_avx512_mask_pmov_qb_512 : 4570 GCCBuiltin<"__builtin_ia32_pmovqb512_mask">, 4571 Intrinsic<[llvm_v16i8_ty], 4572 [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty], 4573 [IntrNoMem]>; 4574 def int_x86_avx512_mask_pmov_qb_mem_512 : 4575 GCCBuiltin<"__builtin_ia32_pmovqb512mem_mask">, 4576 Intrinsic<[], 4577 [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 4578 [IntrArgMemOnly]>; 4579 def int_x86_avx512_mask_pmovs_qb_512 : 4580 GCCBuiltin<"__builtin_ia32_pmovsqb512_mask">, 4581 Intrinsic<[llvm_v16i8_ty], 4582 [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty], 4583 [IntrNoMem]>; 4584 def int_x86_avx512_mask_pmovs_qb_mem_512 : 4585 GCCBuiltin<"__builtin_ia32_pmovsqb512mem_mask">, 4586 Intrinsic<[], 4587 [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 4588 [IntrArgMemOnly]>; 4589 def int_x86_avx512_mask_pmovus_qb_512 : 4590 GCCBuiltin<"__builtin_ia32_pmovusqb512_mask">, 4591 Intrinsic<[llvm_v16i8_ty], 4592 [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty], 4593 [IntrNoMem]>; 4594 def int_x86_avx512_mask_pmovus_qb_mem_512 : 4595 GCCBuiltin<"__builtin_ia32_pmovusqb512mem_mask">, 4596 Intrinsic<[], 4597 [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 4598 [IntrArgMemOnly]>; 4599 def int_x86_avx512_mask_pmov_qw_128 : 4600 GCCBuiltin<"__builtin_ia32_pmovqw128_mask">, 4601 Intrinsic<[llvm_v8i16_ty], 4602 [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty], 4603 [IntrNoMem]>; 4604 def int_x86_avx512_mask_pmov_qw_mem_128 : 4605 GCCBuiltin<"__builtin_ia32_pmovqw128mem_mask">, 4606 Intrinsic<[], 4607 [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty], 4608 [IntrArgMemOnly]>; 4609 def int_x86_avx512_mask_pmovs_qw_128 : 4610 GCCBuiltin<"__builtin_ia32_pmovsqw128_mask">, 4611 Intrinsic<[llvm_v8i16_ty], 4612 [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty], 4613 [IntrNoMem]>; 4614 def int_x86_avx512_mask_pmovs_qw_mem_128 : 4615 GCCBuiltin<"__builtin_ia32_pmovsqw128mem_mask">, 4616 Intrinsic<[], 4617 [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty], 4618 [IntrArgMemOnly]>; 4619 def int_x86_avx512_mask_pmovus_qw_128 : 4620 GCCBuiltin<"__builtin_ia32_pmovusqw128_mask">, 4621 Intrinsic<[llvm_v8i16_ty], 4622 [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty], 4623 [IntrNoMem]>; 4624 def int_x86_avx512_mask_pmovus_qw_mem_128 : 4625 GCCBuiltin<"__builtin_ia32_pmovusqw128mem_mask">, 4626 Intrinsic<[], 4627 [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty], 4628 [IntrArgMemOnly]>; 4629 def int_x86_avx512_mask_pmov_qw_256 : 4630 GCCBuiltin<"__builtin_ia32_pmovqw256_mask">, 4631 Intrinsic<[llvm_v8i16_ty], 4632 [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty], 4633 [IntrNoMem]>; 4634 def int_x86_avx512_mask_pmov_qw_mem_256 : 4635 GCCBuiltin<"__builtin_ia32_pmovqw256mem_mask">, 4636 Intrinsic<[], 4637 [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty], 4638 [IntrArgMemOnly]>; 4639 def int_x86_avx512_mask_pmovs_qw_256 : 4640 GCCBuiltin<"__builtin_ia32_pmovsqw256_mask">, 4641 Intrinsic<[llvm_v8i16_ty], 4642 [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty], 4643 [IntrNoMem]>; 4644 def int_x86_avx512_mask_pmovs_qw_mem_256 : 4645 GCCBuiltin<"__builtin_ia32_pmovsqw256mem_mask">, 4646 Intrinsic<[], 4647 [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty], 4648 [IntrArgMemOnly]>; 4649 def int_x86_avx512_mask_pmovus_qw_256 : 4650 GCCBuiltin<"__builtin_ia32_pmovusqw256_mask">, 4651 Intrinsic<[llvm_v8i16_ty], 4652 [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty], 4653 [IntrNoMem]>; 4654 def int_x86_avx512_mask_pmovus_qw_mem_256 : 4655 GCCBuiltin<"__builtin_ia32_pmovusqw256mem_mask">, 4656 Intrinsic<[], 4657 [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty], 4658 [IntrArgMemOnly]>; 4659 def int_x86_avx512_mask_pmov_qw_512 : 4660 Intrinsic<[llvm_v8i16_ty], 4661 [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty], 4662 [IntrNoMem]>; 4663 def int_x86_avx512_mask_pmov_qw_mem_512 : 4664 GCCBuiltin<"__builtin_ia32_pmovqw512mem_mask">, 4665 Intrinsic<[], 4666 [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 4667 [IntrArgMemOnly]>; 4668 def int_x86_avx512_mask_pmovs_qw_512 : 4669 GCCBuiltin<"__builtin_ia32_pmovsqw512_mask">, 4670 Intrinsic<[llvm_v8i16_ty], 4671 [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty], 4672 [IntrNoMem]>; 4673 def int_x86_avx512_mask_pmovs_qw_mem_512 : 4674 GCCBuiltin<"__builtin_ia32_pmovsqw512mem_mask">, 4675 Intrinsic<[], 4676 [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 4677 [IntrArgMemOnly]>; 4678 def int_x86_avx512_mask_pmovus_qw_512 : 4679 GCCBuiltin<"__builtin_ia32_pmovusqw512_mask">, 4680 Intrinsic<[llvm_v8i16_ty], 4681 [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty], 4682 [IntrNoMem]>; 4683 def int_x86_avx512_mask_pmovus_qw_mem_512 : 4684 GCCBuiltin<"__builtin_ia32_pmovusqw512mem_mask">, 4685 Intrinsic<[], 4686 [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 4687 [IntrArgMemOnly]>; 4688 def int_x86_avx512_mask_pmov_qd_128 : 4689 GCCBuiltin<"__builtin_ia32_pmovqd128_mask">, 4690 Intrinsic<[llvm_v4i32_ty], 4691 [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty], 4692 [IntrNoMem]>; 4693 def int_x86_avx512_mask_pmov_qd_mem_128 : 4694 GCCBuiltin<"__builtin_ia32_pmovqd128mem_mask">, 4695 Intrinsic<[], 4696 [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty], 4697 [IntrArgMemOnly]>; 4698 def int_x86_avx512_mask_pmovs_qd_128 : 4699 GCCBuiltin<"__builtin_ia32_pmovsqd128_mask">, 4700 Intrinsic<[llvm_v4i32_ty], 4701 [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty], 4702 [IntrNoMem]>; 4703 def int_x86_avx512_mask_pmovs_qd_mem_128 : 4704 GCCBuiltin<"__builtin_ia32_pmovsqd128mem_mask">, 4705 Intrinsic<[], 4706 [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty], 4707 [IntrArgMemOnly]>; 4708 def int_x86_avx512_mask_pmovus_qd_128 : 4709 GCCBuiltin<"__builtin_ia32_pmovusqd128_mask">, 4710 Intrinsic<[llvm_v4i32_ty], 4711 [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty], 4712 [IntrNoMem]>; 4713 def int_x86_avx512_mask_pmovus_qd_mem_128 : 4714 GCCBuiltin<"__builtin_ia32_pmovusqd128mem_mask">, 4715 Intrinsic<[], 4716 [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty], 4717 [IntrArgMemOnly]>; 4718 def int_x86_avx512_mask_pmov_qd_256 : // FIXME: Replace with trunc+select. 4719 Intrinsic<[llvm_v4i32_ty], 4720 [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty], 4721 [IntrNoMem]>; 4722 def int_x86_avx512_mask_pmov_qd_mem_256 : 4723 GCCBuiltin<"__builtin_ia32_pmovqd256mem_mask">, 4724 Intrinsic<[], 4725 [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty], 4726 [IntrArgMemOnly]>; 4727 def int_x86_avx512_mask_pmovs_qd_256 : 4728 GCCBuiltin<"__builtin_ia32_pmovsqd256_mask">, 4729 Intrinsic<[llvm_v4i32_ty], 4730 [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty], 4731 [IntrNoMem]>; 4732 def int_x86_avx512_mask_pmovs_qd_mem_256 : 4733 GCCBuiltin<"__builtin_ia32_pmovsqd256mem_mask">, 4734 Intrinsic<[], 4735 [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty], 4736 [IntrArgMemOnly]>; 4737 def int_x86_avx512_mask_pmovus_qd_256 : 4738 GCCBuiltin<"__builtin_ia32_pmovusqd256_mask">, 4739 Intrinsic<[llvm_v4i32_ty], 4740 [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty], 4741 [IntrNoMem]>; 4742 def int_x86_avx512_mask_pmovus_qd_mem_256 : 4743 GCCBuiltin<"__builtin_ia32_pmovusqd256mem_mask">, 4744 Intrinsic<[], 4745 [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty], 4746 [IntrArgMemOnly]>; 4747 def int_x86_avx512_mask_pmov_qd_512 : // FIXME: Replace with trunc+select. 4748 Intrinsic<[llvm_v8i32_ty], 4749 [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty], 4750 [IntrNoMem]>; 4751 def int_x86_avx512_mask_pmov_qd_mem_512 : 4752 GCCBuiltin<"__builtin_ia32_pmovqd512mem_mask">, 4753 Intrinsic<[], 4754 [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 4755 [IntrArgMemOnly]>; 4756 def int_x86_avx512_mask_pmovs_qd_512 : 4757 GCCBuiltin<"__builtin_ia32_pmovsqd512_mask">, 4758 Intrinsic<[llvm_v8i32_ty], 4759 [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty], 4760 [IntrNoMem]>; 4761 def int_x86_avx512_mask_pmovs_qd_mem_512 : 4762 GCCBuiltin<"__builtin_ia32_pmovsqd512mem_mask">, 4763 Intrinsic<[], 4764 [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 4765 [IntrArgMemOnly]>; 4766 def int_x86_avx512_mask_pmovus_qd_512 : 4767 GCCBuiltin<"__builtin_ia32_pmovusqd512_mask">, 4768 Intrinsic<[llvm_v8i32_ty], 4769 [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty], 4770 [IntrNoMem]>; 4771 def int_x86_avx512_mask_pmovus_qd_mem_512 : 4772 GCCBuiltin<"__builtin_ia32_pmovusqd512mem_mask">, 4773 Intrinsic<[], 4774 [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty], 4775 [IntrArgMemOnly]>; 4776 def int_x86_avx512_mask_pmov_db_128 : 4777 GCCBuiltin<"__builtin_ia32_pmovdb128_mask">, 4778 Intrinsic<[llvm_v16i8_ty], 4779 [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty], 4780 [IntrNoMem]>; 4781 def int_x86_avx512_mask_pmov_db_mem_128 : 4782 GCCBuiltin<"__builtin_ia32_pmovdb128mem_mask">, 4783 Intrinsic<[], 4784 [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty], 4785 [IntrArgMemOnly]>; 4786 def int_x86_avx512_mask_pmovs_db_128 : 4787 GCCBuiltin<"__builtin_ia32_pmovsdb128_mask">, 4788 Intrinsic<[llvm_v16i8_ty], 4789 [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty], 4790 [IntrNoMem]>; 4791 def int_x86_avx512_mask_pmovs_db_mem_128 : 4792 GCCBuiltin<"__builtin_ia32_pmovsdb128mem_mask">, 4793 Intrinsic<[], 4794 [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty], 4795 [IntrArgMemOnly]>; 4796 def int_x86_avx512_mask_pmovus_db_128 : 4797 GCCBuiltin<"__builtin_ia32_pmovusdb128_mask">, 4798 Intrinsic<[llvm_v16i8_ty], 4799 [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty], 4800 [IntrNoMem]>; 4801 def int_x86_avx512_mask_pmovus_db_mem_128 : 4802 GCCBuiltin<"__builtin_ia32_pmovusdb128mem_mask">, 4803 Intrinsic<[], 4804 [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty], 4805 [IntrArgMemOnly]>; 4806 def int_x86_avx512_mask_pmov_db_256 : 4807 GCCBuiltin<"__builtin_ia32_pmovdb256_mask">, 4808 Intrinsic<[llvm_v16i8_ty], 4809 [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty], 4810 [IntrNoMem]>; 4811 def int_x86_avx512_mask_pmov_db_mem_256 : 4812 GCCBuiltin<"__builtin_ia32_pmovdb256mem_mask">, 4813 Intrinsic<[], 4814 [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty], 4815 [IntrArgMemOnly]>; 4816 def int_x86_avx512_mask_pmovs_db_256 : 4817 GCCBuiltin<"__builtin_ia32_pmovsdb256_mask">, 4818 Intrinsic<[llvm_v16i8_ty], 4819 [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty], 4820 [IntrNoMem]>; 4821 def int_x86_avx512_mask_pmovs_db_mem_256 : 4822 GCCBuiltin<"__builtin_ia32_pmovsdb256mem_mask">, 4823 Intrinsic<[], 4824 [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty], 4825 [IntrArgMemOnly]>; 4826 def int_x86_avx512_mask_pmovus_db_256 : 4827 GCCBuiltin<"__builtin_ia32_pmovusdb256_mask">, 4828 Intrinsic<[llvm_v16i8_ty], 4829 [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty], 4830 [IntrNoMem]>; 4831 def int_x86_avx512_mask_pmovus_db_mem_256 : 4832 GCCBuiltin<"__builtin_ia32_pmovusdb256mem_mask">, 4833 Intrinsic<[], 4834 [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty], 4835 [IntrArgMemOnly]>; 4836 def int_x86_avx512_mask_pmov_db_512 : 4837 Intrinsic<[llvm_v16i8_ty], 4838 [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty], 4839 [IntrNoMem]>; 4840 def int_x86_avx512_mask_pmov_db_mem_512 : 4841 GCCBuiltin<"__builtin_ia32_pmovdb512mem_mask">, 4842 Intrinsic<[], 4843 [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty], 4844 [IntrArgMemOnly]>; 4845 def int_x86_avx512_mask_pmovs_db_512 : 4846 GCCBuiltin<"__builtin_ia32_pmovsdb512_mask">, 4847 Intrinsic<[llvm_v16i8_ty], 4848 [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty], 4849 [IntrNoMem]>; 4850 def int_x86_avx512_mask_pmovs_db_mem_512 : 4851 GCCBuiltin<"__builtin_ia32_pmovsdb512mem_mask">, 4852 Intrinsic<[], 4853 [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty], 4854 [IntrArgMemOnly]>; 4855 def int_x86_avx512_mask_pmovus_db_512 : 4856 GCCBuiltin<"__builtin_ia32_pmovusdb512_mask">, 4857 Intrinsic<[llvm_v16i8_ty], 4858 [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty], 4859 [IntrNoMem]>; 4860 def int_x86_avx512_mask_pmovus_db_mem_512 : 4861 GCCBuiltin<"__builtin_ia32_pmovusdb512mem_mask">, 4862 Intrinsic<[], 4863 [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty], 4864 [IntrArgMemOnly]>; 4865 def int_x86_avx512_mask_pmov_dw_128 : 4866 GCCBuiltin<"__builtin_ia32_pmovdw128_mask">, 4867 Intrinsic<[llvm_v8i16_ty], 4868 [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty], 4869 [IntrNoMem]>; 4870 def int_x86_avx512_mask_pmov_dw_mem_128 : 4871 GCCBuiltin<"__builtin_ia32_pmovdw128mem_mask">, 4872 Intrinsic<[], 4873 [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty], 4874 [IntrArgMemOnly]>; 4875 def int_x86_avx512_mask_pmovs_dw_128 : 4876 GCCBuiltin<"__builtin_ia32_pmovsdw128_mask">, 4877 Intrinsic<[llvm_v8i16_ty], 4878 [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty], 4879 [IntrNoMem]>; 4880 def int_x86_avx512_mask_pmovs_dw_mem_128 : 4881 GCCBuiltin<"__builtin_ia32_pmovsdw128mem_mask">, 4882 Intrinsic<[], 4883 [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty], 4884 [IntrArgMemOnly]>; 4885 def int_x86_avx512_mask_pmovus_dw_128 : 4886 GCCBuiltin<"__builtin_ia32_pmovusdw128_mask">, 4887 Intrinsic<[llvm_v8i16_ty], 4888 [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty], 4889 [IntrNoMem]>; 4890 def int_x86_avx512_mask_pmovus_dw_mem_128 : 4891 GCCBuiltin<"__builtin_ia32_pmovusdw128mem_mask">, 4892 Intrinsic<[], 4893 [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty], 4894 [IntrArgMemOnly]>; 4895 def int_x86_avx512_mask_pmov_dw_256 : 4896 GCCBuiltin<"__builtin_ia32_pmovdw256_mask">, 4897 Intrinsic<[llvm_v8i16_ty], 4898 [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty], 4899 [IntrNoMem]>; 4900 def int_x86_avx512_mask_pmov_dw_mem_256 : 4901 GCCBuiltin<"__builtin_ia32_pmovdw256mem_mask">, 4902 Intrinsic<[], 4903 [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty], 4904 [IntrArgMemOnly]>; 4905 def int_x86_avx512_mask_pmovs_dw_256 : 4906 GCCBuiltin<"__builtin_ia32_pmovsdw256_mask">, 4907 Intrinsic<[llvm_v8i16_ty], 4908 [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty], 4909 [IntrNoMem]>; 4910 def int_x86_avx512_mask_pmovs_dw_mem_256 : 4911 GCCBuiltin<"__builtin_ia32_pmovsdw256mem_mask">, 4912 Intrinsic<[], 4913 [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty], 4914 [IntrArgMemOnly]>; 4915 def int_x86_avx512_mask_pmovus_dw_256 : 4916 GCCBuiltin<"__builtin_ia32_pmovusdw256_mask">, 4917 Intrinsic<[llvm_v8i16_ty], 4918 [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty], 4919 [IntrNoMem]>; 4920 def int_x86_avx512_mask_pmovus_dw_mem_256 : 4921 GCCBuiltin<"__builtin_ia32_pmovusdw256mem_mask">, 4922 Intrinsic<[], 4923 [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty], 4924 [IntrArgMemOnly]>; 4925 def int_x86_avx512_mask_pmov_dw_512 : 4926 Intrinsic<[llvm_v16i16_ty], 4927 [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty], 4928 [IntrNoMem]>; 4929 def int_x86_avx512_mask_pmov_dw_mem_512 : 4930 GCCBuiltin<"__builtin_ia32_pmovdw512mem_mask">, 4931 Intrinsic<[], 4932 [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty], 4933 [IntrArgMemOnly]>; 4934 def int_x86_avx512_mask_pmovs_dw_512 : 4935 GCCBuiltin<"__builtin_ia32_pmovsdw512_mask">, 4936 Intrinsic<[llvm_v16i16_ty], 4937 [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty], 4938 [IntrNoMem]>; 4939 def int_x86_avx512_mask_pmovs_dw_mem_512 : 4940 GCCBuiltin<"__builtin_ia32_pmovsdw512mem_mask">, 4941 Intrinsic<[], 4942 [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty], 4943 [IntrArgMemOnly]>; 4944 def int_x86_avx512_mask_pmovus_dw_512 : 4945 GCCBuiltin<"__builtin_ia32_pmovusdw512_mask">, 4946 Intrinsic<[llvm_v16i16_ty], 4947 [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty], 4948 [IntrNoMem]>; 4949 def int_x86_avx512_mask_pmovus_dw_mem_512 : 4950 GCCBuiltin<"__builtin_ia32_pmovusdw512mem_mask">, 4951 Intrinsic<[], 4952 [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty], 4953 [IntrArgMemOnly]>; 4954 def int_x86_avx512_mask_pmov_wb_128 : 4955 GCCBuiltin<"__builtin_ia32_pmovwb128_mask">, 4956 Intrinsic<[llvm_v16i8_ty], 4957 [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty], 4958 [IntrNoMem]>; 4959 def int_x86_avx512_mask_pmov_wb_mem_128 : 4960 GCCBuiltin<"__builtin_ia32_pmovwb128mem_mask">, 4961 Intrinsic<[], 4962 [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty], 4963 [IntrArgMemOnly]>; 4964 def int_x86_avx512_mask_pmovs_wb_128 : 4965 GCCBuiltin<"__builtin_ia32_pmovswb128_mask">, 4966 Intrinsic<[llvm_v16i8_ty], 4967 [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty], 4968 [IntrNoMem]>; 4969 def int_x86_avx512_mask_pmovs_wb_mem_128 : 4970 GCCBuiltin<"__builtin_ia32_pmovswb128mem_mask">, 4971 Intrinsic<[], 4972 [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty], 4973 [IntrArgMemOnly]>; 4974 def int_x86_avx512_mask_pmovus_wb_128 : 4975 GCCBuiltin<"__builtin_ia32_pmovuswb128_mask">, 4976 Intrinsic<[llvm_v16i8_ty], 4977 [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty], 4978 [IntrNoMem]>; 4979 def int_x86_avx512_mask_pmovus_wb_mem_128 : 4980 GCCBuiltin<"__builtin_ia32_pmovuswb128mem_mask">, 4981 Intrinsic<[], 4982 [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty], 4983 [IntrArgMemOnly]>; 4984 def int_x86_avx512_mask_pmov_wb_256 : // FIXME: Replace with trunc+select. 4985 Intrinsic<[llvm_v16i8_ty], 4986 [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty], 4987 [IntrNoMem]>; 4988 def int_x86_avx512_mask_pmov_wb_mem_256 : 4989 GCCBuiltin<"__builtin_ia32_pmovwb256mem_mask">, 4990 Intrinsic<[], 4991 [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty], 4992 [IntrArgMemOnly]>; 4993 def int_x86_avx512_mask_pmovs_wb_256 : 4994 GCCBuiltin<"__builtin_ia32_pmovswb256_mask">, 4995 Intrinsic<[llvm_v16i8_ty], 4996 [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty], 4997 [IntrNoMem]>; 4998 def int_x86_avx512_mask_pmovs_wb_mem_256 : 4999 GCCBuiltin<"__builtin_ia32_pmovswb256mem_mask">, 5000 Intrinsic<[], 5001 [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty], 5002 [IntrArgMemOnly]>; 5003 def int_x86_avx512_mask_pmovus_wb_256 : 5004 GCCBuiltin<"__builtin_ia32_pmovuswb256_mask">, 5005 Intrinsic<[llvm_v16i8_ty], 5006 [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty], 5007 [IntrNoMem]>; 5008 def int_x86_avx512_mask_pmovus_wb_mem_256 : 5009 GCCBuiltin<"__builtin_ia32_pmovuswb256mem_mask">, 5010 Intrinsic<[], 5011 [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty], 5012 [IntrArgMemOnly]>; 5013 def int_x86_avx512_mask_pmov_wb_512 : // FIXME: Replace with trunc+select. 5014 Intrinsic<[llvm_v32i8_ty], 5015 [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty], 5016 [IntrNoMem]>; 5017 def int_x86_avx512_mask_pmov_wb_mem_512 : 5018 GCCBuiltin<"__builtin_ia32_pmovwb512mem_mask">, 5019 Intrinsic<[], 5020 [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty], 5021 [IntrArgMemOnly]>; 5022 def int_x86_avx512_mask_pmovs_wb_512 : 5023 GCCBuiltin<"__builtin_ia32_pmovswb512_mask">, 5024 Intrinsic<[llvm_v32i8_ty], 5025 [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty], 5026 [IntrNoMem]>; 5027 def int_x86_avx512_mask_pmovs_wb_mem_512 : 5028 GCCBuiltin<"__builtin_ia32_pmovswb512mem_mask">, 5029 Intrinsic<[], 5030 [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty], 5031 [IntrArgMemOnly]>; 5032 def int_x86_avx512_mask_pmovus_wb_512 : 5033 GCCBuiltin<"__builtin_ia32_pmovuswb512_mask">, 5034 Intrinsic<[llvm_v32i8_ty], 5035 [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty], 5036 [IntrNoMem]>; 5037 def int_x86_avx512_mask_pmovus_wb_mem_512 : 5038 GCCBuiltin<"__builtin_ia32_pmovuswb512mem_mask">, 5039 Intrinsic<[], 5040 [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty], 5041 [IntrArgMemOnly]>; 5042} 5043 5044// Bitwise ternary logic 5045let TargetPrefix = "x86" in { 5046 def int_x86_avx512_pternlog_d_128 : 5047 GCCBuiltin<"__builtin_ia32_pternlogd128">, 5048 Intrinsic<[llvm_v4i32_ty], 5049 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], 5050 [IntrNoMem]>; 5051 5052 def int_x86_avx512_pternlog_d_256 : 5053 GCCBuiltin<"__builtin_ia32_pternlogd256">, 5054 Intrinsic<[llvm_v8i32_ty], 5055 [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty], 5056 [IntrNoMem]>; 5057 5058 def int_x86_avx512_pternlog_d_512 : 5059 GCCBuiltin<"__builtin_ia32_pternlogd512">, 5060 Intrinsic<[llvm_v16i32_ty], 5061 [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, 5062 llvm_i32_ty], [IntrNoMem]>; 5063 5064 def int_x86_avx512_pternlog_q_128 : 5065 GCCBuiltin<"__builtin_ia32_pternlogq128">, 5066 Intrinsic<[llvm_v2i64_ty], 5067 [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], 5068 [IntrNoMem]>; 5069 5070 def int_x86_avx512_pternlog_q_256 : 5071 GCCBuiltin<"__builtin_ia32_pternlogq256">, 5072 Intrinsic<[llvm_v4i64_ty], 5073 [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty], 5074 [IntrNoMem]>; 5075 5076 def int_x86_avx512_pternlog_q_512 : 5077 GCCBuiltin<"__builtin_ia32_pternlogq512">, 5078 Intrinsic<[llvm_v8i64_ty], 5079 [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty], 5080 [IntrNoMem]>; 5081} 5082 5083// Misc. 5084let TargetPrefix = "x86" in { 5085 // NOTE: These comparison intrinsics are not used by clang as long as the 5086 // distinction in signaling behaviour is not implemented. 5087 def int_x86_avx512_cmp_ps_512 : 5088 Intrinsic<[llvm_v16i1_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 5089 llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 5090 def int_x86_avx512_cmp_pd_512 : 5091 Intrinsic<[llvm_v8i1_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 5092 llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>; 5093 def int_x86_avx512_cmp_ps_256 : 5094 Intrinsic<[llvm_v8i1_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 5095 llvm_i32_ty], [IntrNoMem]>; 5096 def int_x86_avx512_cmp_pd_256 : 5097 Intrinsic<[llvm_v4i1_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 5098 llvm_i32_ty], [IntrNoMem]>; 5099 def int_x86_avx512_cmp_ps_128 : 5100 Intrinsic<[llvm_v4i1_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 5101 llvm_i32_ty], [IntrNoMem]>; 5102 def int_x86_avx512_cmp_pd_128 : 5103 Intrinsic<[llvm_v2i1_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 5104 llvm_i32_ty], [IntrNoMem]>; 5105 5106 def int_x86_avx512_mask_cmp_ss : 5107 GCCBuiltin<"__builtin_ia32_cmpss_mask">, 5108 Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 5109 llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 5110 def int_x86_avx512_mask_cmp_sd : 5111 GCCBuiltin<"__builtin_ia32_cmpsd_mask">, 5112 Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 5113 llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>; 5114} 5115 5116//===----------------------------------------------------------------------===// 5117// SHA intrinsics 5118let TargetPrefix = "x86" in { 5119 def int_x86_sha1rnds4 : GCCBuiltin<"__builtin_ia32_sha1rnds4">, 5120 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], 5121 [IntrNoMem]>; 5122 def int_x86_sha1nexte : GCCBuiltin<"__builtin_ia32_sha1nexte">, 5123 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 5124 def int_x86_sha1msg1 : GCCBuiltin<"__builtin_ia32_sha1msg1">, 5125 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 5126 def int_x86_sha1msg2 : GCCBuiltin<"__builtin_ia32_sha1msg2">, 5127 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 5128 def int_x86_sha256rnds2 : GCCBuiltin<"__builtin_ia32_sha256rnds2">, 5129 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], 5130 [IntrNoMem]>; 5131 def int_x86_sha256msg1 : GCCBuiltin<"__builtin_ia32_sha256msg1">, 5132 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 5133 def int_x86_sha256msg2 : GCCBuiltin<"__builtin_ia32_sha256msg2">, 5134 Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>; 5135} 5136 5137//===----------------------------------------------------------------------===// 5138// Thread synchronization ops with timer. 5139let TargetPrefix = "x86" in { 5140 def int_x86_monitorx 5141 : GCCBuiltin<"__builtin_ia32_monitorx">, 5142 Intrinsic<[], [ llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty ], []>; 5143 def int_x86_mwaitx 5144 : GCCBuiltin<"__builtin_ia32_mwaitx">, 5145 Intrinsic<[], [ llvm_i32_ty, llvm_i32_ty, llvm_i32_ty ], []>; 5146} 5147 5148//===----------------------------------------------------------------------===// 5149// Cache-line zero 5150let TargetPrefix = "x86" in { 5151 def int_x86_clzero : GCCBuiltin<"__builtin_ia32_clzero">, 5152 Intrinsic<[], [llvm_ptr_ty], []>; 5153} 5154 5155//===----------------------------------------------------------------------===// 5156// Cache write back intrinsics 5157 5158let TargetPrefix = "x86" in { 5159 // Write back and invalidate 5160 def int_x86_wbinvd : GCCBuiltin<"__builtin_ia32_wbinvd">, 5161 Intrinsic<[], [], []>; 5162 5163 // Write back no-invalidate 5164 def int_x86_wbnoinvd : GCCBuiltin<"__builtin_ia32_wbnoinvd">, 5165 Intrinsic<[], [], []>; 5166} 5167 5168//===----------------------------------------------------------------------===// 5169// Cache-line demote 5170 5171let TargetPrefix = "x86" in { 5172 def int_x86_cldemote : GCCBuiltin<"__builtin_ia32_cldemote">, 5173 Intrinsic<[], [llvm_ptr_ty], []>; 5174} 5175 5176//===----------------------------------------------------------------------===// 5177// Wait and pause enhancements 5178let TargetPrefix = "x86" in { 5179 def int_x86_umonitor : GCCBuiltin<"__builtin_ia32_umonitor">, 5180 Intrinsic<[], [llvm_ptr_ty], []>; 5181 def int_x86_umwait : GCCBuiltin<"__builtin_ia32_umwait">, 5182 Intrinsic<[llvm_i8_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 5183 def int_x86_tpause : GCCBuiltin<"__builtin_ia32_tpause">, 5184 Intrinsic<[llvm_i8_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>; 5185} 5186 5187//===----------------------------------------------------------------------===// 5188// Direct Move Instructions 5189 5190let TargetPrefix = "x86" in { 5191 def int_x86_directstore32 : GCCBuiltin<"__builtin_ia32_directstore_u32">, 5192 Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], []>; 5193 def int_x86_directstore64 : GCCBuiltin<"__builtin_ia32_directstore_u64">, 5194 Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>; 5195 def int_x86_movdir64b : GCCBuiltin<"__builtin_ia32_movdir64b">, 5196 Intrinsic<[], [llvm_ptr_ty, llvm_ptr_ty], []>; 5197} 5198 5199//===----------------------------------------------------------------------===// 5200// PTWrite - Write data to processor trace pocket 5201 5202let TargetPrefix = "x86" in { 5203 def int_x86_ptwrite32 : GCCBuiltin<"__builtin_ia32_ptwrite32">, 5204 Intrinsic<[], [llvm_i32_ty], []>; 5205 def int_x86_ptwrite64 : GCCBuiltin<"__builtin_ia32_ptwrite64">, 5206 Intrinsic<[], [llvm_i64_ty], []>; 5207} 5208 5209//===----------------------------------------------------------------------===// 5210// INVPCID - Invalidate Process-Context Identifier 5211 5212let TargetPrefix = "x86" in { 5213 def int_x86_invpcid : GCCBuiltin<"__builtin_ia32_invpcid">, 5214 Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], []>; 5215} 5216