[llvm-exegesis] Fix missing std::move.
[llvm-complete.git] / include / llvm / IR / IntrinsicsX86.td
blob53a1e214ae9625bccfe684ff4a0bb6ea84d4c2fb
1 //===- IntrinsicsX86.td - Defines X86 intrinsics -----------*- tablegen -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines all of the X86-specific intrinsics.
12 //===----------------------------------------------------------------------===//
14 //===----------------------------------------------------------------------===//
15 // Interrupt traps
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],
35                                         [IntrNoMem]>;
38 //===----------------------------------------------------------------------===//
39 // FLAGS.
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], [], []>;
56   def int_x86_rdtscp :
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], []>;
66 // Read processor ID.
67 let TargetPrefix = "x86" in {
68   def int_x86_rdpid : GCCBuiltin<"__builtin_ia32_rdpid">,
69               Intrinsic<[llvm_i32_ty], [], []>;
72 //===----------------------------------------------------------------------===//
73 // CET SS
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 //===----------------------------------------------------------------------===//
102 // 3DNow!
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],
107                         [IntrNoMem]>;
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],
112                         [IntrNoMem]>;
113   def int_x86_3dnow_pfadd : GCCBuiltin<"__builtin_ia32_pfadd">,
114               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
115                         [IntrNoMem]>;
116   def int_x86_3dnow_pfcmpeq : GCCBuiltin<"__builtin_ia32_pfcmpeq">,
117               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
118                         [IntrNoMem]>;
119   def int_x86_3dnow_pfcmpge : GCCBuiltin<"__builtin_ia32_pfcmpge">,
120               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
121                         [IntrNoMem]>;
122   def int_x86_3dnow_pfcmpgt : GCCBuiltin<"__builtin_ia32_pfcmpgt">,
123               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
124                         [IntrNoMem]>;
125   def int_x86_3dnow_pfmax : GCCBuiltin<"__builtin_ia32_pfmax">,
126               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
127                         [IntrNoMem]>;
128   def int_x86_3dnow_pfmin : GCCBuiltin<"__builtin_ia32_pfmin">,
129               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
130                         [IntrNoMem]>;
131   def int_x86_3dnow_pfmul : GCCBuiltin<"__builtin_ia32_pfmul">,
132               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
133                         [IntrNoMem]>;
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],
138                         [IntrNoMem]>;
139   def int_x86_3dnow_pfrcpit2 : GCCBuiltin<"__builtin_ia32_pfrcpit2">,
140               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
141                         [IntrNoMem]>;
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],
146                         [IntrNoMem]>;
147   def int_x86_3dnow_pfsub : GCCBuiltin<"__builtin_ia32_pfsub">,
148               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
149                         [IntrNoMem]>;
150   def int_x86_3dnow_pfsubr : GCCBuiltin<"__builtin_ia32_pfsubr">,
151               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
152                         [IntrNoMem]>;
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],
157                         [IntrNoMem]>;
160 //===----------------------------------------------------------------------===//
161 // 3DNow! extensions
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],
168                         [IntrNoMem]>;
169   def int_x86_3dnowa_pfpnacc : GCCBuiltin<"__builtin_ia32_pfpnacc">,
170               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
171                         [IntrNoMem]>;
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 //===----------------------------------------------------------------------===//
179 // SSE1
181 // Arithmetic ops
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],
185                         [IntrNoMem]>;
186   def int_x86_sse_rcp_ps : GCCBuiltin<"__builtin_ia32_rcpps">,
187               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
188                         [IntrNoMem]>;
189   def int_x86_sse_rsqrt_ss : GCCBuiltin<"__builtin_ia32_rsqrtss">,
190               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
191                         [IntrNoMem]>;
192   def int_x86_sse_rsqrt_ps : GCCBuiltin<"__builtin_ia32_rsqrtps">,
193               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
194                         [IntrNoMem]>;
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]>;
209 // Comparison ops
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]>;
258 // Conversion ops
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<[], [], []>;
284 // Control register.
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], []>;
292 // Misc.
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 //===----------------------------------------------------------------------===//
299 // SSE2
301 // FP arithmetic ops
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]>;
317 // FP comparison ops
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]>;
446 // Conversion ops
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]>;
477 // Misc.
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 //===----------------------------------------------------------------------===//
506 // SSE3
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]>;
518 // Horizontal ops.
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,
547                          llvm_i32_ty], []>;
550 //===----------------------------------------------------------------------===//
551 // SSSE3
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]>;
615 // Shuffle ops
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],
625                          [IntrNoMem]>;
628 // Sign ops
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 //===----------------------------------------------------------------------===//
665 // SSE4.1
667 // FP rounding ops
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],
687                         [IntrNoMem]>;
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],
694                         [IntrNoMem]>;
696   def int_x86_aesni_aesenc          : GCCBuiltin<"__builtin_ia32_aesenc128">,
697               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
698                         [IntrNoMem]>;
699   def int_x86_aesni_aesenc_256      : GCCBuiltin<"__builtin_ia32_aesenc256">,
700               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
701                         [IntrNoMem]>;
702   def int_x86_aesni_aesenc_512      : GCCBuiltin<"__builtin_ia32_aesenc512">,
703               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
704                         [IntrNoMem]>;
706   def int_x86_aesni_aesenclast : GCCBuiltin<"__builtin_ia32_aesenclast128">,
707               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
708                         [IntrNoMem]>;
709   def int_x86_aesni_aesenclast_256 :
710     GCCBuiltin<"__builtin_ia32_aesenclast256">,
711     Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
712               [IntrNoMem]>;
713   def int_x86_aesni_aesenclast_512 :
714     GCCBuiltin<"__builtin_ia32_aesenclast512">,
715     Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
716               [IntrNoMem]>;
718   def int_x86_aesni_aesdec          : GCCBuiltin<"__builtin_ia32_aesdec128">,
719               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
720                         [IntrNoMem]>;
721   def int_x86_aesni_aesdec_256      : GCCBuiltin<"__builtin_ia32_aesdec256">,
722               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
723                         [IntrNoMem]>;
724   def int_x86_aesni_aesdec_512      : GCCBuiltin<"__builtin_ia32_aesdec512">,
725               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
726                         [IntrNoMem]>;
728   def int_x86_aesni_aesdeclast : GCCBuiltin<"__builtin_ia32_aesdeclast128">,
729               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
730                         [IntrNoMem]>;
731   def int_x86_aesni_aesdeclast_256 :
732     GCCBuiltin<"__builtin_ia32_aesdeclast256">,
733     Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
734               [IntrNoMem]>;
735   def int_x86_aesni_aesdeclast_512 :
736     GCCBuiltin<"__builtin_ia32_aesdeclast512">,
737     Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
738               [IntrNoMem]>;
740   def int_x86_aesni_aeskeygenassist :
741               GCCBuiltin<"__builtin_ia32_aeskeygenassist128">,
742               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
743                         [IntrNoMem]>;
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],
750                     [IntrNoMem]>;
751   def int_x86_pclmulqdq_256 : GCCBuiltin<"__builtin_ia32_pclmulqdq256">,
752           Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
753                     [IntrNoMem]>;
754   def int_x86_pclmulqdq_512 : GCCBuiltin<"__builtin_ia32_pclmulqdq512">,
755           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
756                     [IntrNoMem]>;
759 // Vector pack
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],
763                         [IntrNoMem]>;
766 // Vector insert
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],
770                     [IntrNoMem]>;
773 // Vector blend
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],
777                   [IntrNoMem]>;
778   def int_x86_sse41_blendvpd         : GCCBuiltin<"__builtin_ia32_blendvpd">,
779         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,llvm_v2f64_ty],
780                   [IntrNoMem]>;
781   def int_x86_sse41_blendvps         : GCCBuiltin<"__builtin_ia32_blendvps">,
782         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_v4f32_ty],
783                   [IntrNoMem]>;
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],
807                     [IntrNoMem]>;
808   def int_x86_sse41_ptestc          : GCCBuiltin<"__builtin_ia32_ptestc128">,
809           Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
810                     [IntrNoMem]>;
811   def int_x86_sse41_ptestnzc        : GCCBuiltin<"__builtin_ia32_ptestnzc128">,
812           Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
813                     [IntrNoMem]>;
816 //===----------------------------------------------------------------------===//
817 // SSE4.2
819 // Miscellaneous
820 // CRC Instruction
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],
824                     [IntrNoMem]>;
825   def int_x86_sse42_crc32_32_16      : GCCBuiltin<"__builtin_ia32_crc32hi">,
826           Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i16_ty],
827                     [IntrNoMem]>;
828   def int_x86_sse42_crc32_32_32      : GCCBuiltin<"__builtin_ia32_crc32si">,
829           Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
830                     [IntrNoMem]>;
831   def int_x86_sse42_crc32_64_64      : GCCBuiltin<"__builtin_ia32_crc32di">,
832           Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
833                     [IntrNoMem]>;
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],
841         [IntrNoMem]>;
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],
845         [IntrNoMem]>;
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],
849         [IntrNoMem]>;
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],
853         [IntrNoMem]>;
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],
857         [IntrNoMem]>;
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],
861         [IntrNoMem]>;
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],
865         [IntrNoMem]>;
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,
869          llvm_i8_ty],
870         [IntrNoMem]>;
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,
874          llvm_i8_ty],
875         [IntrNoMem]>;
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,
879          llvm_i8_ty],
880         [IntrNoMem]>;
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,
884          llvm_i8_ty],
885         [IntrNoMem]>;
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,
889          llvm_i8_ty],
890         [IntrNoMem]>;
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,
894          llvm_i8_ty],
895         [IntrNoMem]>;
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,
899          llvm_i8_ty],
900         [IntrNoMem]>;
903 //===----------------------------------------------------------------------===//
904 // SSE4A
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],
909               [IntrNoMem]>;
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 //===----------------------------------------------------------------------===//
921 // AVX
923 // Arithmetic ops
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]>;
958 // Horizontal ops
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],
1004                   [IntrNoMem]>;
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],
1015                   [IntrNoMem]>;
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],
1021                   [IntrNoMem]>;
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],
1052                   [IntrNoMem]>;
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],
1087           [IntrNoMem]>;
1089   def int_x86_avx512_vpermilvar_ps_512 :
1090         GCCBuiltin<"__builtin_ia32_vpermilvarps512">,
1091           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16i32_ty],
1092           [IntrNoMem]>;
1094   def int_x86_avx512_pshuf_b_512 :
1095         GCCBuiltin<"__builtin_ia32_pshufb512">,
1096           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty],
1097           [IntrNoMem]>;
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],
1107           [IntrNoMem]>;
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],
1112           [IntrNoMem]>;
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],
1117           [IntrNoMem]>;
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],
1123           [IntrNoMem]>;
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],
1128           [IntrNoMem]>;
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],
1133           [IntrNoMem]>;
1135   def int_x86_vgf2p8mulb_128     :
1136          GCCBuiltin<"__builtin_ia32_vgf2p8mulb_v16qi">,
1137           Intrinsic<[llvm_v16i8_ty],
1138           [llvm_v16i8_ty, llvm_v16i8_ty],
1139           [IntrNoMem]>;
1140   def int_x86_vgf2p8mulb_256     :
1141          GCCBuiltin<"__builtin_ia32_vgf2p8mulb_v32qi">,
1142           Intrinsic<[llvm_v32i8_ty],
1143           [llvm_v32i8_ty, llvm_v32i8_ty],
1144           [IntrNoMem]>;
1145   def int_x86_vgf2p8mulb_512     :
1146          GCCBuiltin<"__builtin_ia32_vgf2p8mulb_v64qi">,
1147           Intrinsic<[llvm_v64i8_ty],
1148           [llvm_v64i8_ty, llvm_v64i8_ty],
1149           [IntrNoMem]>;
1152 // Vector blend
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]>;
1169 // Vector compare
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]>;
1179 // Vector convert
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]>;
1193 // Vector bit test
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],
1243           [IntrNoMem]>;
1244   def int_x86_avx512_fpclass_pd_256 :
1245           Intrinsic<[llvm_v4i1_ty], [llvm_v4f64_ty, llvm_i32_ty],
1246           [IntrNoMem]>;
1247   def int_x86_avx512_fpclass_pd_512 :
1248           Intrinsic<[llvm_v8i1_ty], [llvm_v8f64_ty, llvm_i32_ty],
1249           [IntrNoMem]>;
1250   def int_x86_avx512_fpclass_ps_128 :
1251           Intrinsic<[llvm_v4i1_ty], [llvm_v4f32_ty, llvm_i32_ty],
1252           [IntrNoMem]>;
1253   def int_x86_avx512_fpclass_ps_256 :
1254           Intrinsic<[llvm_v8i1_ty], [llvm_v8f32_ty, llvm_i32_ty],
1255           [IntrNoMem]>;
1256   def int_x86_avx512_fpclass_ps_512 :
1257           Intrinsic<[llvm_v16i1_ty], [llvm_v16f32_ty, llvm_i32_ty],
1258           [IntrNoMem]>;
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],
1262           [IntrNoMem]>;
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],
1266           [IntrNoMem]>;
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]>;
1277 // Vector zero
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<[], [], []>;
1285 // SIMD load ops
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],
1331               [IntrNoMem]>;
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],
1336               [IntrNoMem]>;
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],
1341               [IntrNoMem]>;
1344 //===----------------------------------------------------------------------===//
1345 // AVX2
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]>;
1511 // Pack ops.
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]>;
1552 // Sign ops
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]>;
1575 // Vector blend
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],
1587                         [IntrNoMem]>;
1588   def int_x86_avx2_permps : GCCBuiltin<"__builtin_ia32_permvarsf256">,
1589               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty],
1590                         [IntrNoMem]>;
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],
1613                   [IntrArgMemOnly]>;
1614   def int_x86_avx2_maskstore_q : GCCBuiltin<"__builtin_ia32_maskstoreq">,
1615         Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty],
1616                   [IntrArgMemOnly]>;
1617   def int_x86_avx2_maskstore_d_256 :
1618         GCCBuiltin<"__builtin_ia32_maskstored256">,
1619         Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty],
1620                   [IntrArgMemOnly]>;
1621   def int_x86_avx2_maskstore_q_256 :
1622         GCCBuiltin<"__builtin_ia32_maskstoreq256">,
1623         Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty],
1624                   [IntrArgMemOnly]>;
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],
1631                         [IntrNoMem]>;
1632   def int_x86_avx2_psllv_d_256 : GCCBuiltin<"__builtin_ia32_psllv8si">,
1633               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
1634                         [IntrNoMem]>;
1635   def int_x86_avx2_psllv_q : GCCBuiltin<"__builtin_ia32_psllv2di">,
1636               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
1637                         [IntrNoMem]>;
1638   def int_x86_avx2_psllv_q_256 : GCCBuiltin<"__builtin_ia32_psllv4di">,
1639               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
1640                         [IntrNoMem]>;
1642   def int_x86_avx512_psllv_d_512 : GCCBuiltin<"__builtin_ia32_psllv16si">,
1643               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
1644                         [IntrNoMem]>;
1645   def int_x86_avx512_psllv_q_512 : GCCBuiltin<"__builtin_ia32_psllv8di">,
1646               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
1647                         [IntrNoMem]>;
1649   def int_x86_avx2_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv4si">,
1650               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
1651                         [IntrNoMem]>;
1652   def int_x86_avx2_psrlv_d_256 : GCCBuiltin<"__builtin_ia32_psrlv8si">,
1653               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
1654                         [IntrNoMem]>;
1655   def int_x86_avx2_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv2di">,
1656               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
1657                         [IntrNoMem]>;
1658   def int_x86_avx2_psrlv_q_256 : GCCBuiltin<"__builtin_ia32_psrlv4di">,
1659               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
1660                         [IntrNoMem]>;
1662   def int_x86_avx512_psrlv_d_512 : GCCBuiltin<"__builtin_ia32_psrlv16si">,
1663               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
1664                         [IntrNoMem]>;
1665   def int_x86_avx512_psrlv_q_512 : GCCBuiltin<"__builtin_ia32_psrlv8di">,
1666               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
1667                         [IntrNoMem]>;
1669   def int_x86_avx2_psrav_d : GCCBuiltin<"__builtin_ia32_psrav4si">,
1670               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
1671                         [IntrNoMem]>;
1672   def int_x86_avx2_psrav_d_256 : GCCBuiltin<"__builtin_ia32_psrav8si">,
1673               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
1674                         [IntrNoMem]>;
1676   def int_x86_avx512_psrav_d_512 : GCCBuiltin<"__builtin_ia32_psrav16si">,
1677               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
1678                         [IntrNoMem]>;
1679   def int_x86_avx512_psrav_q_128 : GCCBuiltin<"__builtin_ia32_psravq128">,
1680               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
1681                         [IntrNoMem]>;
1682   def int_x86_avx512_psrav_q_256 : GCCBuiltin<"__builtin_ia32_psravq256">,
1683               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
1684                         [IntrNoMem]>;
1685   def int_x86_avx512_psrav_q_512 : GCCBuiltin<"__builtin_ia32_psrav8di">,
1686               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
1687                         [IntrNoMem]>;
1689   def int_x86_avx512_psllv_w_128 : GCCBuiltin<"__builtin_ia32_psllv8hi">,
1690               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
1691                         [IntrNoMem]>;
1692   def int_x86_avx512_psllv_w_256 : GCCBuiltin<"__builtin_ia32_psllv16hi">,
1693               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty],
1694                         [IntrNoMem]>;
1695   def int_x86_avx512_psllv_w_512 : GCCBuiltin<"__builtin_ia32_psllv32hi">,
1696               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
1697                         [IntrNoMem]>;
1699   def int_x86_avx512_psrlv_w_128 : GCCBuiltin<"__builtin_ia32_psrlv8hi">,
1700               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
1701                         [IntrNoMem]>;
1702   def int_x86_avx512_psrlv_w_256 : GCCBuiltin<"__builtin_ia32_psrlv16hi">,
1703               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty],
1704                         [IntrNoMem]>;
1705   def int_x86_avx512_psrlv_w_512 : GCCBuiltin<"__builtin_ia32_psrlv32hi">,
1706               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
1707                         [IntrNoMem]>;
1709   def int_x86_avx512_psrav_w_128 : GCCBuiltin<"__builtin_ia32_psrav8hi">,
1710               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
1711                         [IntrNoMem]>;
1712   def int_x86_avx512_psrav_w_256 : GCCBuiltin<"__builtin_ia32_psrav16hi">,
1713               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty],
1714                         [IntrNoMem]>;
1715   def int_x86_avx512_psrav_w_512 : GCCBuiltin<"__builtin_ia32_psrav32hi">,
1716               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
1717                         [IntrNoMem]>;
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]>;
1797 // Gather ops
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]>;
1866 // Misc.
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 //===----------------------------------------------------------------------===//
1879 // FMA3 and FMA4
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],
1885           [IntrNoMem]>;
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],
1890           [IntrNoMem]>;
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],
1896           [IntrNoMem]>;
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],
1901           [IntrNoMem]>;
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],
1906                     [IntrNoMem]>;
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],
1910                     [IntrNoMem]>;
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]>;
1938 // VNNI
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 //===----------------------------------------------------------------------===//
1994 // XOP
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],
2000                         [IntrNoMem]>;
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],
2006                         [IntrNoMem]>;
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],
2011                         [IntrNoMem]>;
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],
2016                         [IntrNoMem]>;
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],
2165                         [IntrNoMem]>;
2167   def int_x86_xop_vprotb : GCCBuiltin<"__builtin_ia32_vprotb">,
2168               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
2169                         [IntrNoMem]>;
2170   def int_x86_xop_vprotd : GCCBuiltin<"__builtin_ia32_vprotd">,
2171               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
2172                         [IntrNoMem]>;
2173   def int_x86_xop_vprotq : GCCBuiltin<"__builtin_ia32_vprotq">,
2174               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
2175                         [IntrNoMem]>;
2176   def int_x86_xop_vprotw : GCCBuiltin<"__builtin_ia32_vprotw">,
2177               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
2178                         [IntrNoMem]>;
2179   def int_x86_xop_vprotbi : GCCBuiltin<"__builtin_ia32_vprotbi">,
2180               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i8_ty],
2181                         [IntrNoMem]>;
2182   def int_x86_xop_vprotdi : GCCBuiltin<"__builtin_ia32_vprotdi">,
2183               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
2184                         [IntrNoMem]>;
2185   def int_x86_xop_vprotqi : GCCBuiltin<"__builtin_ia32_vprotqi">,
2186               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
2187                         [IntrNoMem]>;
2188   def int_x86_xop_vprotwi : GCCBuiltin<"__builtin_ia32_vprotwi">,
2189               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
2190                         [IntrNoMem]>;
2192   def int_x86_xop_vpshab :
2193               GCCBuiltin<"__builtin_ia32_vpshab">,
2194               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
2195                         [IntrNoMem]>;
2196   def int_x86_xop_vpshad :
2197               GCCBuiltin<"__builtin_ia32_vpshad">,
2198               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
2199                         [IntrNoMem]>;
2200   def int_x86_xop_vpshaq :
2201               GCCBuiltin<"__builtin_ia32_vpshaq">,
2202               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
2203                         [IntrNoMem]>;
2204   def int_x86_xop_vpshaw :
2205               GCCBuiltin<"__builtin_ia32_vpshaw">,
2206               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
2207                         [IntrNoMem]>;
2208   def int_x86_xop_vpshlb :
2209               GCCBuiltin<"__builtin_ia32_vpshlb">,
2210               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
2211                         [IntrNoMem]>;
2212   def int_x86_xop_vpshld :
2213               GCCBuiltin<"__builtin_ia32_vpshld">,
2214               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
2215                         [IntrNoMem]>;
2216   def int_x86_xop_vpshlq :
2217               GCCBuiltin<"__builtin_ia32_vpshlq">,
2218               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
2219                         [IntrNoMem]>;
2220   def int_x86_xop_vpshlw :
2221               GCCBuiltin<"__builtin_ia32_vpshlw">,
2222               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
2223                         [IntrNoMem]>;
2226 //===----------------------------------------------------------------------===//
2227 // LWP
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 //===----------------------------------------------------------------------===//
2250 // MMX
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.".
2262   // Addition
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]>;
2290   // Subtraction
2291   def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">,
2292               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2293                         [IntrNoMem]>;
2294   def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">,
2295               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2296                         [IntrNoMem]>;
2297   def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">,
2298               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2299                         [IntrNoMem]>;
2300   def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">,
2301               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2302                         [IntrNoMem]>;
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]>;
2318   // Multiplication
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],
2341                         [IntrNoMem]>;
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]>;
2349   // Averages
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]>;
2357   // Maximum
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]>;
2365   // Minimum
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]>;
2436 // Permute
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]>;
2475 // Pack ops.
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]>;
2488 // Unpacking ops.
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],
2492                         [IntrNoMem]>;
2493   def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">,
2494               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2495                         [IntrNoMem]>;
2496   def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">,
2497               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2498                         [IntrNoMem]>;
2499   def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">,
2500               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2501                         [IntrNoMem]>;
2502   def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">,
2503               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2504                         [IntrNoMem]>;
2505   def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">,
2506               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2507                         [IntrNoMem]>;
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]>;
2533 // Misc.
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],
2550                         [IntrNoMem]>;
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 //===----------------------------------------------------------------------===//
2558 // BMI
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 //===----------------------------------------------------------------------===//
2580 // FS/GS Base
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 //===----------------------------------------------------------------------===//
2602 // FXSR
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 //===----------------------------------------------------------------------===//
2615 // XSAVE
2616 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2617   def int_x86_xsave :
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],
2675                         [IntrNoMem]>;
2676   def int_x86_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256">,
2677               Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty],
2678                         [IntrNoMem]>;
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 //===----------------------------------------------------------------------===//
2700 // TBM
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
2716   // LICM.
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 //===----------------------------------------------------------------------===//
2726 // ADX
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 //===----------------------------------------------------------------------===//
2764 // AVX512
2766 // Mask ops
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]>;
2796 // Conversion ops
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]>;
2850 // Pack ops.
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],
2854                         [IntrNoMem]>;
2855   def int_x86_avx512_packssdw_512 : GCCBuiltin<"__builtin_ia32_packssdw512">,
2856               Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
2857                          [IntrNoMem]>;
2858   def int_x86_avx512_packuswb_512 : GCCBuiltin<"__builtin_ia32_packuswb512">,
2859               Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty],
2860                          [IntrNoMem]>;
2861   def int_x86_avx512_packusdw_512 : GCCBuiltin<"__builtin_ia32_packusdw512">,
2862               Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
2863                          [IntrNoMem]>;
2866 // Vector convert
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],
2872           [IntrNoMem]>;
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],
2878           [IntrNoMem]>;
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],
2884           [IntrNoMem]>;
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],
2890           [IntrNoMem]>;
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],
2896           [IntrNoMem]>;
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],
2902           [IntrNoMem]>;
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],
2908           [IntrNoMem]>;
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],
2914           [IntrNoMem]>;
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],
2920           [IntrNoMem]>;
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],
2926           [IntrNoMem]>;
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],
2932           [IntrNoMem]>;
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],
2938           [IntrNoMem]>;
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],
2944           [IntrNoMem]>;
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],
2950           [IntrNoMem]>;
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],
2956           [IntrNoMem]>;
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],
2962           [IntrNoMem]>;
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],
2968           [IntrNoMem]>;
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],
2974           [IntrNoMem]>;
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],
2980           [IntrNoMem]>;
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],
2986           [IntrNoMem]>;
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],
2992           [IntrNoMem]>;
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],
2998           [IntrNoMem]>;
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],
3004           [IntrNoMem]>;
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],
3010           [IntrNoMem]>;
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],
3016           [IntrNoMem]>;
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],
3022           [IntrNoMem]>;
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],
3028           [IntrNoMem]>;
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],
3034           [IntrNoMem]>;
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],
3040           [IntrNoMem]>;
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],
3046           [IntrNoMem]>;
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],
3052           [IntrNoMem]>;
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],
3058           [IntrNoMem]>;
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],
3064           [IntrNoMem]>;
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],
3070           [IntrNoMem]>;
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],
3076           [IntrNoMem]>;
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],
3082           [IntrNoMem]>;
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],
3088           [IntrNoMem]>;
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],
3094           [IntrNoMem]>;
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],
3100           [IntrNoMem]>;
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],
3106           [IntrNoMem]>;
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],
3112           [IntrNoMem]>;
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],
3118           [IntrNoMem]>;
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],
3124           [IntrNoMem]>;
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],
3130           [IntrNoMem]>;
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],
3136           [IntrNoMem]>;
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],
3142           [IntrNoMem]>;
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],
3148           [IntrNoMem]>;
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],
3154           [IntrNoMem]>;
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],
3160           [IntrNoMem]>;
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],
3166           [IntrNoMem]>;
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],
3172           [IntrNoMem]>;
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],
3178           [IntrNoMem]>;
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],
3184           [IntrNoMem]>;
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],
3190           [IntrNoMem]>;
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],
3196           [IntrNoMem]>;
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],
3202           [IntrNoMem]>;
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],
3208           [IntrNoMem]>;
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],
3214           [IntrNoMem]>;
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],
3220           [IntrNoMem]>;
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]>;
3300 // Arithmetic ops
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],
3381                                      [IntrNoMem]>;
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],
3385                                      [IntrNoMem]>;
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],
3389                                      [IntrNoMem]>;
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],
3393                                      [IntrNoMem]>;
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],
3397                                      [IntrNoMem]>;
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],
3401                                      [IntrNoMem]>;
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],
3442           [IntrNoMem]>;
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],
3447           [IntrNoMem]>;
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],
3452           [IntrNoMem]>;
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],
3457           [IntrNoMem]>;
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],
3472           [IntrNoMem]>;
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],
3477           [IntrNoMem]>;
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],
3482           [IntrNoMem]>;
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],
3487           [IntrNoMem]>;
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],
3548           [IntrNoMem]>;
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],
3554           [IntrNoMem]>;
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 ],
3560           [IntrNoMem]>;
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],
3566           [IntrNoMem]>;
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],
3572           [IntrNoMem]>;
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],
3578           [IntrNoMem]>;
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],
3659                       [IntrNoMem]>;
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],
3663                       [IntrNoMem]>;
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],
3667                       [IntrNoMem]>;
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],
3671                       [IntrNoMem]>;
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],
3675                       [IntrNoMem]>;
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],
3679                       [IntrNoMem]>;
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],
3688                     [IntrNoMem]>;
3689   def int_x86_avx512_padds_w_512 : GCCBuiltin<"__builtin_ia32_paddsw512">,
3690           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
3691                      [IntrNoMem]>;
3692   def int_x86_avx512_psubs_b_512 : GCCBuiltin<"__builtin_ia32_psubsb512">,
3693           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty],
3694                      [IntrNoMem]>;
3695   def int_x86_avx512_psubs_w_512 : GCCBuiltin<"__builtin_ia32_psubsw512">,
3696           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
3697                      [IntrNoMem]>;
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]>;
3860 // scatter
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],
3864                     [IntrArgMemOnly]>;
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],
3868                     [IntrArgMemOnly]>;
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],
3872                     [IntrArgMemOnly]>;
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],
3876                     [IntrArgMemOnly]>;
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],
3882                     [IntrArgMemOnly]>;
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],
3886                     [IntrArgMemOnly]>;
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,
3889                          llvm_i32_ty],
3890                     [IntrArgMemOnly]>;
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,
3893                          llvm_i32_ty],
3894                     [IntrArgMemOnly]>;
3896   def int_x86_avx512_scatterdiv2_df :
3897        GCCBuiltin<"__builtin_ia32_scatterdiv2df">,
3898         Intrinsic<[],
3899         [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty],
3900         [IntrArgMemOnly]>;
3902   def int_x86_avx512_scatterdiv2_di :
3903         GCCBuiltin<"__builtin_ia32_scatterdiv2di">,
3904           Intrinsic<[],
3905           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
3906           [IntrArgMemOnly]>;
3908   def int_x86_avx512_scatterdiv4_df :
3909         GCCBuiltin<"__builtin_ia32_scatterdiv4df">,
3910           Intrinsic<[],
3911           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty],
3912           [IntrArgMemOnly]>;
3914   def int_x86_avx512_scatterdiv4_di :
3915         GCCBuiltin<"__builtin_ia32_scatterdiv4di">,
3916           Intrinsic<[],
3917           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty],
3918           [IntrArgMemOnly]>;
3920   def int_x86_avx512_scatterdiv4_sf :
3921         GCCBuiltin<"__builtin_ia32_scatterdiv4sf">,
3922           Intrinsic<[],
3923           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty],
3924           [IntrArgMemOnly]>;
3926   def int_x86_avx512_scatterdiv4_si :
3927         GCCBuiltin<"__builtin_ia32_scatterdiv4si">,
3928           Intrinsic<[],
3929           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty],
3930           [IntrArgMemOnly]>;
3932   def int_x86_avx512_scatterdiv8_sf :
3933         GCCBuiltin<"__builtin_ia32_scatterdiv8sf">,
3934           Intrinsic<[],
3935           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty],
3936           [IntrArgMemOnly]>;
3938   def int_x86_avx512_scatterdiv8_si :
3939         GCCBuiltin<"__builtin_ia32_scatterdiv8si">,
3940           Intrinsic<[],
3941           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty],
3942           [IntrArgMemOnly]>;
3944   def int_x86_avx512_scattersiv2_df :
3945         GCCBuiltin<"__builtin_ia32_scattersiv2df">,
3946           Intrinsic<[],
3947           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty],
3948           [IntrArgMemOnly]>;
3950   def int_x86_avx512_scattersiv2_di :
3951         GCCBuiltin<"__builtin_ia32_scattersiv2di">,
3952           Intrinsic<[],
3953           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty],
3954           [IntrArgMemOnly]>;
3956   def int_x86_avx512_scattersiv4_df :
3957         GCCBuiltin<"__builtin_ia32_scattersiv4df">,
3958           Intrinsic<[],
3959           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty],
3960           [IntrArgMemOnly]>;
3962   def int_x86_avx512_scattersiv4_di :
3963         GCCBuiltin<"__builtin_ia32_scattersiv4di">,
3964           Intrinsic<[],
3965           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty],
3966           [IntrArgMemOnly]>;
3968   def int_x86_avx512_scattersiv4_sf :
3969         GCCBuiltin<"__builtin_ia32_scattersiv4sf">,
3970           Intrinsic<[],
3971           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty],
3972           [IntrArgMemOnly]>;
3974   def int_x86_avx512_scattersiv4_si :
3975         GCCBuiltin<"__builtin_ia32_scattersiv4si">,
3976           Intrinsic<[],
3977           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
3978           [IntrArgMemOnly]>;
3980   def int_x86_avx512_scattersiv8_sf :
3981         GCCBuiltin<"__builtin_ia32_scattersiv8sf">,
3982           Intrinsic<[],
3983           [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty],
3984           [IntrArgMemOnly]>;
3986   def int_x86_avx512_scattersiv8_si :
3987         GCCBuiltin<"__builtin_ia32_scattersiv8si">,
3988           Intrinsic<[],
3989           [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty],
3990           [IntrArgMemOnly]>;
3992   // gather prefetch
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]>;
4006   // scatter prefetch
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],
4028                     [IntrNoMem]>;
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],
4033                     [IntrNoMem]>;
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],
4038                     [IntrNoMem]>;
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],
4044                     [IntrNoMem]>;
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],
4049                     [IntrNoMem]>;
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],
4054                     [IntrNoMem]>;
4057 // Compares
4058 let TargetPrefix = "x86" in {
4059   // 512-bit
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]>;
4068 // Compress, Expand
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]>;
4145 // expand
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]>;
4453 // truncate
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],
4459                     [IntrNoMem]>;
4460   def int_x86_avx512_mask_pmov_qb_mem_128 :
4461           GCCBuiltin<"__builtin_ia32_pmovqb128mem_mask">,
4462           Intrinsic<[],
4463                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
4464                     [IntrArgMemOnly]>;
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],
4469                     [IntrNoMem]>;
4470   def int_x86_avx512_mask_pmovs_qb_mem_128 :
4471           GCCBuiltin<"__builtin_ia32_pmovsqb128mem_mask">,
4472           Intrinsic<[],
4473                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
4474                     [IntrArgMemOnly]>;
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],
4479                     [IntrNoMem]>;
4480   def int_x86_avx512_mask_pmovus_qb_mem_128 :
4481           GCCBuiltin<"__builtin_ia32_pmovusqb128mem_mask">,
4482           Intrinsic<[],
4483                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
4484                     [IntrArgMemOnly]>;
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],
4489                     [IntrNoMem]>;
4490   def int_x86_avx512_mask_pmov_qb_mem_256 :
4491           GCCBuiltin<"__builtin_ia32_pmovqb256mem_mask">,
4492           Intrinsic<[],
4493                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
4494                     [IntrArgMemOnly]>;
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],
4499                     [IntrNoMem]>;
4500   def int_x86_avx512_mask_pmovs_qb_mem_256 :
4501           GCCBuiltin<"__builtin_ia32_pmovsqb256mem_mask">,
4502           Intrinsic<[],
4503                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
4504                     [IntrArgMemOnly]>;
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],
4509                     [IntrNoMem]>;
4510   def int_x86_avx512_mask_pmovus_qb_mem_256 :
4511           GCCBuiltin<"__builtin_ia32_pmovusqb256mem_mask">,
4512           Intrinsic<[],
4513                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
4514                     [IntrArgMemOnly]>;
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],
4519                     [IntrNoMem]>;
4520   def int_x86_avx512_mask_pmov_qb_mem_512 :
4521           GCCBuiltin<"__builtin_ia32_pmovqb512mem_mask">,
4522           Intrinsic<[],
4523                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
4524                     [IntrArgMemOnly]>;
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],
4529                     [IntrNoMem]>;
4530   def int_x86_avx512_mask_pmovs_qb_mem_512 :
4531           GCCBuiltin<"__builtin_ia32_pmovsqb512mem_mask">,
4532           Intrinsic<[],
4533                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
4534                     [IntrArgMemOnly]>;
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],
4539                     [IntrNoMem]>;
4540   def int_x86_avx512_mask_pmovus_qb_mem_512 :
4541           GCCBuiltin<"__builtin_ia32_pmovusqb512mem_mask">,
4542           Intrinsic<[],
4543                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
4544                     [IntrArgMemOnly]>;
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],
4549                     [IntrNoMem]>;
4550   def int_x86_avx512_mask_pmov_qw_mem_128 :
4551           GCCBuiltin<"__builtin_ia32_pmovqw128mem_mask">,
4552           Intrinsic<[],
4553                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
4554                     [IntrArgMemOnly]>;
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],
4559                     [IntrNoMem]>;
4560   def int_x86_avx512_mask_pmovs_qw_mem_128 :
4561           GCCBuiltin<"__builtin_ia32_pmovsqw128mem_mask">,
4562           Intrinsic<[],
4563                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
4564                     [IntrArgMemOnly]>;
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],
4569                     [IntrNoMem]>;
4570   def int_x86_avx512_mask_pmovus_qw_mem_128 :
4571           GCCBuiltin<"__builtin_ia32_pmovusqw128mem_mask">,
4572           Intrinsic<[],
4573                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
4574                     [IntrArgMemOnly]>;
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],
4579                     [IntrNoMem]>;
4580   def int_x86_avx512_mask_pmov_qw_mem_256 :
4581           GCCBuiltin<"__builtin_ia32_pmovqw256mem_mask">,
4582           Intrinsic<[],
4583                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
4584                     [IntrArgMemOnly]>;
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],
4589                     [IntrNoMem]>;
4590   def int_x86_avx512_mask_pmovs_qw_mem_256 :
4591           GCCBuiltin<"__builtin_ia32_pmovsqw256mem_mask">,
4592           Intrinsic<[],
4593                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
4594                     [IntrArgMemOnly]>;
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],
4599                     [IntrNoMem]>;
4600   def int_x86_avx512_mask_pmovus_qw_mem_256 :
4601           GCCBuiltin<"__builtin_ia32_pmovusqw256mem_mask">,
4602           Intrinsic<[],
4603                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
4604                     [IntrArgMemOnly]>;
4605   def int_x86_avx512_mask_pmov_qw_512 :
4606           Intrinsic<[llvm_v8i16_ty],
4607                     [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
4608                     [IntrNoMem]>;
4609   def int_x86_avx512_mask_pmov_qw_mem_512 :
4610           GCCBuiltin<"__builtin_ia32_pmovqw512mem_mask">,
4611           Intrinsic<[],
4612                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
4613                     [IntrArgMemOnly]>;
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],
4618                     [IntrNoMem]>;
4619   def int_x86_avx512_mask_pmovs_qw_mem_512 :
4620           GCCBuiltin<"__builtin_ia32_pmovsqw512mem_mask">,
4621           Intrinsic<[],
4622                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
4623                     [IntrArgMemOnly]>;
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],
4628                     [IntrNoMem]>;
4629   def int_x86_avx512_mask_pmovus_qw_mem_512 :
4630           GCCBuiltin<"__builtin_ia32_pmovusqw512mem_mask">,
4631           Intrinsic<[],
4632                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
4633                     [IntrArgMemOnly]>;
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],
4638                     [IntrNoMem]>;
4639   def int_x86_avx512_mask_pmov_qd_mem_128 :
4640           GCCBuiltin<"__builtin_ia32_pmovqd128mem_mask">,
4641           Intrinsic<[],
4642                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
4643                     [IntrArgMemOnly]>;
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],
4648                     [IntrNoMem]>;
4649   def int_x86_avx512_mask_pmovs_qd_mem_128 :
4650           GCCBuiltin<"__builtin_ia32_pmovsqd128mem_mask">,
4651           Intrinsic<[],
4652                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
4653                     [IntrArgMemOnly]>;
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],
4658                     [IntrNoMem]>;
4659   def int_x86_avx512_mask_pmovus_qd_mem_128 :
4660           GCCBuiltin<"__builtin_ia32_pmovusqd128mem_mask">,
4661           Intrinsic<[],
4662                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
4663                     [IntrArgMemOnly]>;
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],
4667                     [IntrNoMem]>;
4668   def int_x86_avx512_mask_pmov_qd_mem_256 :
4669           GCCBuiltin<"__builtin_ia32_pmovqd256mem_mask">,
4670           Intrinsic<[],
4671                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
4672                     [IntrArgMemOnly]>;
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],
4677                     [IntrNoMem]>;
4678   def int_x86_avx512_mask_pmovs_qd_mem_256 :
4679           GCCBuiltin<"__builtin_ia32_pmovsqd256mem_mask">,
4680           Intrinsic<[],
4681                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
4682                     [IntrArgMemOnly]>;
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],
4687                     [IntrNoMem]>;
4688   def int_x86_avx512_mask_pmovus_qd_mem_256 :
4689           GCCBuiltin<"__builtin_ia32_pmovusqd256mem_mask">,
4690           Intrinsic<[],
4691                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
4692                     [IntrArgMemOnly]>;
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],
4696                     [IntrNoMem]>;
4697   def int_x86_avx512_mask_pmov_qd_mem_512 :
4698           GCCBuiltin<"__builtin_ia32_pmovqd512mem_mask">,
4699           Intrinsic<[],
4700                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
4701                     [IntrArgMemOnly]>;
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],
4706                     [IntrNoMem]>;
4707   def int_x86_avx512_mask_pmovs_qd_mem_512 :
4708           GCCBuiltin<"__builtin_ia32_pmovsqd512mem_mask">,
4709           Intrinsic<[],
4710                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
4711                     [IntrArgMemOnly]>;
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],
4716                     [IntrNoMem]>;
4717   def int_x86_avx512_mask_pmovus_qd_mem_512 :
4718           GCCBuiltin<"__builtin_ia32_pmovusqd512mem_mask">,
4719           Intrinsic<[],
4720                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
4721                     [IntrArgMemOnly]>;
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],
4726                     [IntrNoMem]>;
4727   def int_x86_avx512_mask_pmov_db_mem_128 :
4728           GCCBuiltin<"__builtin_ia32_pmovdb128mem_mask">,
4729           Intrinsic<[],
4730                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
4731                     [IntrArgMemOnly]>;
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],
4736                     [IntrNoMem]>;
4737   def int_x86_avx512_mask_pmovs_db_mem_128 :
4738           GCCBuiltin<"__builtin_ia32_pmovsdb128mem_mask">,
4739           Intrinsic<[],
4740                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
4741                     [IntrArgMemOnly]>;
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],
4746                     [IntrNoMem]>;
4747   def int_x86_avx512_mask_pmovus_db_mem_128 :
4748           GCCBuiltin<"__builtin_ia32_pmovusdb128mem_mask">,
4749           Intrinsic<[],
4750                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
4751                     [IntrArgMemOnly]>;
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],
4756                     [IntrNoMem]>;
4757   def int_x86_avx512_mask_pmov_db_mem_256 :
4758           GCCBuiltin<"__builtin_ia32_pmovdb256mem_mask">,
4759           Intrinsic<[],
4760                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
4761                     [IntrArgMemOnly]>;
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],
4766                     [IntrNoMem]>;
4767   def int_x86_avx512_mask_pmovs_db_mem_256 :
4768           GCCBuiltin<"__builtin_ia32_pmovsdb256mem_mask">,
4769           Intrinsic<[],
4770                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
4771                     [IntrArgMemOnly]>;
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],
4776                     [IntrNoMem]>;
4777   def int_x86_avx512_mask_pmovus_db_mem_256 :
4778           GCCBuiltin<"__builtin_ia32_pmovusdb256mem_mask">,
4779           Intrinsic<[],
4780                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
4781                     [IntrArgMemOnly]>;
4782   def int_x86_avx512_mask_pmov_db_512 :
4783           Intrinsic<[llvm_v16i8_ty],
4784                     [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
4785                     [IntrNoMem]>;
4786   def int_x86_avx512_mask_pmov_db_mem_512 :
4787           GCCBuiltin<"__builtin_ia32_pmovdb512mem_mask">,
4788           Intrinsic<[],
4789                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
4790                     [IntrArgMemOnly]>;
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],
4795                     [IntrNoMem]>;
4796   def int_x86_avx512_mask_pmovs_db_mem_512 :
4797           GCCBuiltin<"__builtin_ia32_pmovsdb512mem_mask">,
4798           Intrinsic<[],
4799                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
4800                     [IntrArgMemOnly]>;
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],
4805                     [IntrNoMem]>;
4806   def int_x86_avx512_mask_pmovus_db_mem_512 :
4807           GCCBuiltin<"__builtin_ia32_pmovusdb512mem_mask">,
4808           Intrinsic<[],
4809                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
4810                     [IntrArgMemOnly]>;
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],
4815                     [IntrNoMem]>;
4816   def int_x86_avx512_mask_pmov_dw_mem_128 :
4817           GCCBuiltin<"__builtin_ia32_pmovdw128mem_mask">,
4818           Intrinsic<[],
4819                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
4820                     [IntrArgMemOnly]>;
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],
4825                     [IntrNoMem]>;
4826   def int_x86_avx512_mask_pmovs_dw_mem_128 :
4827           GCCBuiltin<"__builtin_ia32_pmovsdw128mem_mask">,
4828           Intrinsic<[],
4829                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
4830                     [IntrArgMemOnly]>;
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],
4835                     [IntrNoMem]>;
4836   def int_x86_avx512_mask_pmovus_dw_mem_128 :
4837           GCCBuiltin<"__builtin_ia32_pmovusdw128mem_mask">,
4838           Intrinsic<[],
4839                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
4840                     [IntrArgMemOnly]>;
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],
4845                     [IntrNoMem]>;
4846   def int_x86_avx512_mask_pmov_dw_mem_256 :
4847           GCCBuiltin<"__builtin_ia32_pmovdw256mem_mask">,
4848           Intrinsic<[],
4849                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
4850                     [IntrArgMemOnly]>;
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],
4855                     [IntrNoMem]>;
4856   def int_x86_avx512_mask_pmovs_dw_mem_256 :
4857           GCCBuiltin<"__builtin_ia32_pmovsdw256mem_mask">,
4858           Intrinsic<[],
4859                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
4860                     [IntrArgMemOnly]>;
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],
4865                     [IntrNoMem]>;
4866   def int_x86_avx512_mask_pmovus_dw_mem_256 :
4867           GCCBuiltin<"__builtin_ia32_pmovusdw256mem_mask">,
4868           Intrinsic<[],
4869                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
4870                     [IntrArgMemOnly]>;
4871   def int_x86_avx512_mask_pmov_dw_512 :
4872           Intrinsic<[llvm_v16i16_ty],
4873                     [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
4874                     [IntrNoMem]>;
4875   def int_x86_avx512_mask_pmov_dw_mem_512 :
4876           GCCBuiltin<"__builtin_ia32_pmovdw512mem_mask">,
4877           Intrinsic<[],
4878                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
4879                     [IntrArgMemOnly]>;
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],
4884                     [IntrNoMem]>;
4885   def int_x86_avx512_mask_pmovs_dw_mem_512 :
4886           GCCBuiltin<"__builtin_ia32_pmovsdw512mem_mask">,
4887           Intrinsic<[],
4888                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
4889                     [IntrArgMemOnly]>;
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],
4894                     [IntrNoMem]>;
4895   def int_x86_avx512_mask_pmovus_dw_mem_512 :
4896           GCCBuiltin<"__builtin_ia32_pmovusdw512mem_mask">,
4897           Intrinsic<[],
4898                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
4899                     [IntrArgMemOnly]>;
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],
4904                     [IntrNoMem]>;
4905   def int_x86_avx512_mask_pmov_wb_mem_128 :
4906           GCCBuiltin<"__builtin_ia32_pmovwb128mem_mask">,
4907           Intrinsic<[],
4908                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
4909                     [IntrArgMemOnly]>;
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],
4914                     [IntrNoMem]>;
4915   def int_x86_avx512_mask_pmovs_wb_mem_128 :
4916           GCCBuiltin<"__builtin_ia32_pmovswb128mem_mask">,
4917           Intrinsic<[],
4918                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
4919                     [IntrArgMemOnly]>;
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],
4924                     [IntrNoMem]>;
4925   def int_x86_avx512_mask_pmovus_wb_mem_128 :
4926           GCCBuiltin<"__builtin_ia32_pmovuswb128mem_mask">,
4927           Intrinsic<[],
4928                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
4929                     [IntrArgMemOnly]>;
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],
4933                     [IntrNoMem]>;
4934   def int_x86_avx512_mask_pmov_wb_mem_256 :
4935           GCCBuiltin<"__builtin_ia32_pmovwb256mem_mask">,
4936           Intrinsic<[],
4937                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
4938                     [IntrArgMemOnly]>;
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],
4943                     [IntrNoMem]>;
4944   def int_x86_avx512_mask_pmovs_wb_mem_256 :
4945           GCCBuiltin<"__builtin_ia32_pmovswb256mem_mask">,
4946           Intrinsic<[],
4947                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
4948                     [IntrArgMemOnly]>;
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],
4953                     [IntrNoMem]>;
4954   def int_x86_avx512_mask_pmovus_wb_mem_256 :
4955           GCCBuiltin<"__builtin_ia32_pmovuswb256mem_mask">,
4956           Intrinsic<[],
4957                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
4958                     [IntrArgMemOnly]>;
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],
4962                     [IntrNoMem]>;
4963   def int_x86_avx512_mask_pmov_wb_mem_512 :
4964           GCCBuiltin<"__builtin_ia32_pmovwb512mem_mask">,
4965           Intrinsic<[],
4966                     [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
4967                     [IntrArgMemOnly]>;
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],
4972                     [IntrNoMem]>;
4973   def int_x86_avx512_mask_pmovs_wb_mem_512 :
4974           GCCBuiltin<"__builtin_ia32_pmovswb512mem_mask">,
4975           Intrinsic<[],
4976                     [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
4977                     [IntrArgMemOnly]>;
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],
4982                     [IntrNoMem]>;
4983   def int_x86_avx512_mask_pmovus_wb_mem_512 :
4984           GCCBuiltin<"__builtin_ia32_pmovuswb512mem_mask">,
4985           Intrinsic<[],
4986                     [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
4987                     [IntrArgMemOnly]>;
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],
4996                     [IntrNoMem]>;
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],
5002                     [IntrNoMem]>;
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],
5014                     [IntrNoMem]>;
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],
5020                     [IntrNoMem]>;
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],
5026                     [IntrNoMem]>;
5029 // Misc.
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 //===----------------------------------------------------------------------===//
5063 // SHA intrinsics
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],
5067                   [IntrNoMem]>;
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],
5076                 [IntrNoMem]>;
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 ], []>;
5089   def int_x86_mwaitx
5090       : GCCBuiltin<"__builtin_ia32_mwaitx">,
5091         Intrinsic<[], [ llvm_i32_ty, llvm_i32_ty, llvm_i32_ty ], []>;
5094 //===----------------------------------------------------------------------===//
5095 // Cache-line zero
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], []>;