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