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