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