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