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