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.
11//
12//===----------------------------------------------------------------------===//
13
14//===----------------------------------------------------------------------===//
15// Interrupt traps
16let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
17  def int_x86_int : Intrinsic<[], [llvm_i8_ty]>;
18}
19
20//===----------------------------------------------------------------------===//
21// SEH intrinsics for Windows
22let TargetPrefix = "x86" in {
23  def int_x86_seh_lsda : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], [IntrNoMem]>;
24
25  // Marks the EH registration node created in LLVM IR prior to code generation.
26  def int_x86_seh_ehregnode : Intrinsic<[], [llvm_ptr_ty], []>;
27
28  // Given a pointer to the end of an EH registration object, returns the true
29  // parent frame address that can be used with llvm.localrecover.
30  def int_x86_seh_recoverfp : Intrinsic<[llvm_ptr_ty],
31                                        [llvm_ptr_ty, llvm_ptr_ty],
32                                        [IntrNoMem]>;
33}
34
35//===----------------------------------------------------------------------===//
36// Read Time Stamp Counter.
37let TargetPrefix = "x86" in {
38  def int_x86_rdtsc : GCCBuiltin<"__builtin_ia32_rdtsc">,
39              Intrinsic<[llvm_i64_ty], [], []>;
40  def int_x86_rdtscp : GCCBuiltin<"__builtin_ia32_rdtscp">,
41              Intrinsic<[llvm_i64_ty], [llvm_ptr_ty], [IntrReadWriteArgMem]>;
42}
43
44// Read Performance-Monitoring Counter.
45let TargetPrefix = "x86" in {
46  def int_x86_rdpmc : GCCBuiltin<"__builtin_ia32_rdpmc">,
47              Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>;
48}
49
50//===----------------------------------------------------------------------===//
51// 3DNow!
52
53let TargetPrefix = "x86" in {
54  def int_x86_3dnow_pavgusb : GCCBuiltin<"__builtin_ia32_pavgusb">,
55              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
56                        [IntrNoMem]>;
57  def int_x86_3dnow_pf2id : GCCBuiltin<"__builtin_ia32_pf2id">,
58              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
59  def int_x86_3dnow_pfacc : GCCBuiltin<"__builtin_ia32_pfacc">,
60              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
61                        [IntrNoMem]>;
62  def int_x86_3dnow_pfadd : GCCBuiltin<"__builtin_ia32_pfadd">,
63              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
64                        [IntrNoMem]>;
65  def int_x86_3dnow_pfcmpeq : GCCBuiltin<"__builtin_ia32_pfcmpeq">,
66              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
67                        [IntrNoMem]>;
68  def int_x86_3dnow_pfcmpge : GCCBuiltin<"__builtin_ia32_pfcmpge">,
69              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
70                        [IntrNoMem]>;
71  def int_x86_3dnow_pfcmpgt : GCCBuiltin<"__builtin_ia32_pfcmpgt">,
72              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
73                        [IntrNoMem]>;
74  def int_x86_3dnow_pfmax : GCCBuiltin<"__builtin_ia32_pfmax">,
75              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
76                        [IntrNoMem]>;
77  def int_x86_3dnow_pfmin : GCCBuiltin<"__builtin_ia32_pfmin">,
78              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
79                        [IntrNoMem]>;
80  def int_x86_3dnow_pfmul : GCCBuiltin<"__builtin_ia32_pfmul">,
81              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
82                        [IntrNoMem]>;
83  def int_x86_3dnow_pfrcp : GCCBuiltin<"__builtin_ia32_pfrcp">,
84              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
85  def int_x86_3dnow_pfrcpit1 : GCCBuiltin<"__builtin_ia32_pfrcpit1">,
86              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
87                        [IntrNoMem]>;
88  def int_x86_3dnow_pfrcpit2 : GCCBuiltin<"__builtin_ia32_pfrcpit2">,
89              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
90                        [IntrNoMem]>;
91  def int_x86_3dnow_pfrsqrt : GCCBuiltin<"__builtin_ia32_pfrsqrt">,
92              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
93  def int_x86_3dnow_pfrsqit1 : GCCBuiltin<"__builtin_ia32_pfrsqit1">,
94              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
95                        [IntrNoMem]>;
96  def int_x86_3dnow_pfsub : GCCBuiltin<"__builtin_ia32_pfsub">,
97              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
98                        [IntrNoMem]>;
99  def int_x86_3dnow_pfsubr : GCCBuiltin<"__builtin_ia32_pfsubr">,
100              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
101                        [IntrNoMem]>;
102  def int_x86_3dnow_pi2fd : GCCBuiltin<"__builtin_ia32_pi2fd">,
103              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
104  def int_x86_3dnow_pmulhrw : GCCBuiltin<"__builtin_ia32_pmulhrw">,
105              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
106                        [IntrNoMem]>;
107}
108
109//===----------------------------------------------------------------------===//
110// 3DNow! extensions
111
112let TargetPrefix = "x86" in {
113  def int_x86_3dnowa_pf2iw : GCCBuiltin<"__builtin_ia32_pf2iw">,
114              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
115  def int_x86_3dnowa_pfnacc : GCCBuiltin<"__builtin_ia32_pfnacc">,
116              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
117                        [IntrNoMem]>;
118  def int_x86_3dnowa_pfpnacc : GCCBuiltin<"__builtin_ia32_pfpnacc">,
119              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
120                        [IntrNoMem]>;
121  def int_x86_3dnowa_pi2fw : GCCBuiltin<"__builtin_ia32_pi2fw">,
122              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
123  def int_x86_3dnowa_pswapd :
124              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
125}
126
127//===----------------------------------------------------------------------===//
128// SSE1
129
130// Arithmetic ops
131let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
132  def int_x86_sse_add_ss : GCCBuiltin<"__builtin_ia32_addss">,
133              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
134                         llvm_v4f32_ty], [IntrNoMem]>;
135  def int_x86_sse_sub_ss : GCCBuiltin<"__builtin_ia32_subss">,
136              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
137                         llvm_v4f32_ty], [IntrNoMem]>;
138  def int_x86_sse_mul_ss : GCCBuiltin<"__builtin_ia32_mulss">,
139              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
140                         llvm_v4f32_ty], [IntrNoMem]>;
141  def int_x86_sse_div_ss : GCCBuiltin<"__builtin_ia32_divss">,
142              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
143                         llvm_v4f32_ty], [IntrNoMem]>;
144  def int_x86_sse_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss">,
145              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
146                        [IntrNoMem]>;
147  def int_x86_sse_sqrt_ps : GCCBuiltin<"__builtin_ia32_sqrtps">,
148              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
149                        [IntrNoMem]>;
150  def int_x86_sse_rcp_ss : GCCBuiltin<"__builtin_ia32_rcpss">,
151              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
152                        [IntrNoMem]>;
153  def int_x86_sse_rcp_ps : GCCBuiltin<"__builtin_ia32_rcpps">,
154              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
155                        [IntrNoMem]>;
156  def int_x86_sse_rsqrt_ss : GCCBuiltin<"__builtin_ia32_rsqrtss">,
157              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
158                        [IntrNoMem]>;
159  def int_x86_sse_rsqrt_ps : GCCBuiltin<"__builtin_ia32_rsqrtps">,
160              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
161                        [IntrNoMem]>;
162  def int_x86_sse_min_ss : GCCBuiltin<"__builtin_ia32_minss">,
163              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
164                         llvm_v4f32_ty], [IntrNoMem]>;
165  def int_x86_sse_min_ps : GCCBuiltin<"__builtin_ia32_minps">,
166              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
167                         llvm_v4f32_ty], [IntrNoMem]>;
168  def int_x86_sse_max_ss : GCCBuiltin<"__builtin_ia32_maxss">,
169              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
170                         llvm_v4f32_ty], [IntrNoMem]>;
171  def int_x86_sse_max_ps : GCCBuiltin<"__builtin_ia32_maxps">,
172              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
173                         llvm_v4f32_ty], [IntrNoMem]>;
174}
175
176// Comparison ops
177let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
178  def int_x86_sse_cmp_ss : GCCBuiltin<"__builtin_ia32_cmpss">,
179              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
180                         llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
181  def int_x86_sse_cmp_ps : GCCBuiltin<"__builtin_ia32_cmpps">,
182              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
183                         llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
184  def int_x86_sse_comieq_ss : GCCBuiltin<"__builtin_ia32_comieq">,
185              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
186                         llvm_v4f32_ty], [IntrNoMem]>;
187  def int_x86_sse_comilt_ss : GCCBuiltin<"__builtin_ia32_comilt">,
188              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
189                         llvm_v4f32_ty], [IntrNoMem]>;
190  def int_x86_sse_comile_ss : GCCBuiltin<"__builtin_ia32_comile">,
191              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
192                         llvm_v4f32_ty], [IntrNoMem]>;
193  def int_x86_sse_comigt_ss : GCCBuiltin<"__builtin_ia32_comigt">,
194              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
195                         llvm_v4f32_ty], [IntrNoMem]>;
196  def int_x86_sse_comige_ss : GCCBuiltin<"__builtin_ia32_comige">,
197              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
198                         llvm_v4f32_ty], [IntrNoMem]>;
199  def int_x86_sse_comineq_ss : GCCBuiltin<"__builtin_ia32_comineq">,
200              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
201                         llvm_v4f32_ty], [IntrNoMem]>;
202  def int_x86_sse_ucomieq_ss : GCCBuiltin<"__builtin_ia32_ucomieq">,
203              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
204                         llvm_v4f32_ty], [IntrNoMem]>;
205  def int_x86_sse_ucomilt_ss : GCCBuiltin<"__builtin_ia32_ucomilt">,
206              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
207                         llvm_v4f32_ty], [IntrNoMem]>;
208  def int_x86_sse_ucomile_ss : GCCBuiltin<"__builtin_ia32_ucomile">,
209              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
210                         llvm_v4f32_ty], [IntrNoMem]>;
211  def int_x86_sse_ucomigt_ss : GCCBuiltin<"__builtin_ia32_ucomigt">,
212              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
213                         llvm_v4f32_ty], [IntrNoMem]>;
214  def int_x86_sse_ucomige_ss : GCCBuiltin<"__builtin_ia32_ucomige">,
215              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
216                         llvm_v4f32_ty], [IntrNoMem]>;
217  def int_x86_sse_ucomineq_ss : GCCBuiltin<"__builtin_ia32_ucomineq">,
218              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
219                         llvm_v4f32_ty], [IntrNoMem]>;
220}
221
222
223// Conversion ops
224let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
225  def int_x86_sse_cvtss2si : GCCBuiltin<"__builtin_ia32_cvtss2si">,
226              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
227  def int_x86_sse_cvtss2si64 : GCCBuiltin<"__builtin_ia32_cvtss2si64">,
228              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
229  def int_x86_sse_cvttss2si : GCCBuiltin<"__builtin_ia32_cvttss2si">,
230              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
231  def int_x86_sse_cvttss2si64 : GCCBuiltin<"__builtin_ia32_cvttss2si64">,
232              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
233  def int_x86_sse_cvtsi2ss : GCCBuiltin<"__builtin_ia32_cvtsi2ss">,
234              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
235                         llvm_i32_ty], [IntrNoMem]>;
236  def int_x86_sse_cvtsi642ss : GCCBuiltin<"__builtin_ia32_cvtsi642ss">,
237              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
238                         llvm_i64_ty], [IntrNoMem]>;
239
240  def int_x86_sse_cvtps2pi : GCCBuiltin<"__builtin_ia32_cvtps2pi">,
241              Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
242  def int_x86_sse_cvttps2pi: GCCBuiltin<"__builtin_ia32_cvttps2pi">,
243              Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
244  def int_x86_sse_cvtpi2ps : GCCBuiltin<"__builtin_ia32_cvtpi2ps">,
245              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
246                         llvm_x86mmx_ty], [IntrNoMem]>;
247}
248
249// SIMD store ops
250let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
251  def int_x86_sse_storeu_ps : GCCBuiltin<"__builtin_ia32_storeups">,
252              Intrinsic<[], [llvm_ptr_ty,
253                         llvm_v4f32_ty], [IntrReadWriteArgMem]>;
254}
255
256// Cacheability support ops
257let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
258  def int_x86_sse_sfence : GCCBuiltin<"__builtin_ia32_sfence">,
259              Intrinsic<[], [], []>;
260}
261
262// Control register.
263let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
264  def int_x86_sse_stmxcsr :
265              Intrinsic<[], [llvm_ptr_ty], []>;
266  def int_x86_sse_ldmxcsr :
267              Intrinsic<[], [llvm_ptr_ty], []>;
268}
269
270// Misc.
271let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
272  def int_x86_sse_movmsk_ps : GCCBuiltin<"__builtin_ia32_movmskps">,
273              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
274}
275
276//===----------------------------------------------------------------------===//
277// SSE2
278
279// FP arithmetic ops
280let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
281  def int_x86_sse2_add_sd : GCCBuiltin<"__builtin_ia32_addsd">,
282              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
283                         llvm_v2f64_ty], [IntrNoMem]>;
284  def int_x86_sse2_sub_sd : GCCBuiltin<"__builtin_ia32_subsd">,
285              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
286                         llvm_v2f64_ty], [IntrNoMem]>;
287  def int_x86_sse2_mul_sd : GCCBuiltin<"__builtin_ia32_mulsd">,
288              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
289                         llvm_v2f64_ty], [IntrNoMem]>;
290  def int_x86_sse2_div_sd : GCCBuiltin<"__builtin_ia32_divsd">,
291              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
292                         llvm_v2f64_ty], [IntrNoMem]>;
293  def int_x86_sse2_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtsd">,
294              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty],
295                        [IntrNoMem]>;
296  def int_x86_sse2_sqrt_pd : GCCBuiltin<"__builtin_ia32_sqrtpd">,
297              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty],
298                        [IntrNoMem]>;
299  def int_x86_sse2_min_sd : GCCBuiltin<"__builtin_ia32_minsd">,
300              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
301                         llvm_v2f64_ty], [IntrNoMem]>;
302  def int_x86_sse2_min_pd : GCCBuiltin<"__builtin_ia32_minpd">,
303              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
304                         llvm_v2f64_ty], [IntrNoMem]>;
305  def int_x86_sse2_max_sd : GCCBuiltin<"__builtin_ia32_maxsd">,
306              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
307                         llvm_v2f64_ty], [IntrNoMem]>;
308  def int_x86_sse2_max_pd : GCCBuiltin<"__builtin_ia32_maxpd">,
309              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
310                         llvm_v2f64_ty], [IntrNoMem]>;
311}
312
313// FP comparison ops
314let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
315  def int_x86_sse2_cmp_sd : GCCBuiltin<"__builtin_ia32_cmpsd">,
316              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
317                         llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
318  def int_x86_sse2_cmp_pd : GCCBuiltin<"__builtin_ia32_cmppd">,
319              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
320                         llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
321  def int_x86_sse2_comieq_sd : GCCBuiltin<"__builtin_ia32_comisdeq">,
322              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
323                         llvm_v2f64_ty], [IntrNoMem]>;
324  def int_x86_sse2_comilt_sd : GCCBuiltin<"__builtin_ia32_comisdlt">,
325              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
326                         llvm_v2f64_ty], [IntrNoMem]>;
327  def int_x86_sse2_comile_sd : GCCBuiltin<"__builtin_ia32_comisdle">,
328              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
329                         llvm_v2f64_ty], [IntrNoMem]>;
330  def int_x86_sse2_comigt_sd : GCCBuiltin<"__builtin_ia32_comisdgt">,
331              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
332                         llvm_v2f64_ty], [IntrNoMem]>;
333  def int_x86_sse2_comige_sd : GCCBuiltin<"__builtin_ia32_comisdge">,
334              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
335                         llvm_v2f64_ty], [IntrNoMem]>;
336  def int_x86_sse2_comineq_sd : GCCBuiltin<"__builtin_ia32_comisdneq">,
337              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
338                         llvm_v2f64_ty], [IntrNoMem]>;
339  def int_x86_sse2_ucomieq_sd : GCCBuiltin<"__builtin_ia32_ucomisdeq">,
340              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
341                         llvm_v2f64_ty], [IntrNoMem]>;
342  def int_x86_sse2_ucomilt_sd : GCCBuiltin<"__builtin_ia32_ucomisdlt">,
343              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
344                         llvm_v2f64_ty], [IntrNoMem]>;
345  def int_x86_sse2_ucomile_sd : GCCBuiltin<"__builtin_ia32_ucomisdle">,
346              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
347                         llvm_v2f64_ty], [IntrNoMem]>;
348  def int_x86_sse2_ucomigt_sd : GCCBuiltin<"__builtin_ia32_ucomisdgt">,
349              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
350                         llvm_v2f64_ty], [IntrNoMem]>;
351  def int_x86_sse2_ucomige_sd : GCCBuiltin<"__builtin_ia32_ucomisdge">,
352              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
353                         llvm_v2f64_ty], [IntrNoMem]>;
354  def int_x86_sse2_ucomineq_sd : GCCBuiltin<"__builtin_ia32_ucomisdneq">,
355              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
356                         llvm_v2f64_ty], [IntrNoMem]>;
357}
358
359// Integer arithmetic ops.
360let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
361  def int_x86_sse2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb128">,
362              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
363                         llvm_v16i8_ty], [IntrNoMem, Commutative]>;
364  def int_x86_sse2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw128">,
365              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
366                         llvm_v8i16_ty], [IntrNoMem, Commutative]>;
367  def int_x86_sse2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb128">,
368              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
369                         llvm_v16i8_ty], [IntrNoMem, Commutative]>;
370  def int_x86_sse2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw128">,
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_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb128">,
380              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
381                         llvm_v16i8_ty], [IntrNoMem]>;
382  def int_x86_sse2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw128">,
383              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
384                         llvm_v8i16_ty], [IntrNoMem]>;
385  def int_x86_sse2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw128">,
386              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
387                         llvm_v8i16_ty], [IntrNoMem, Commutative]>;
388  def int_x86_sse2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw128">,
389              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
390                         llvm_v8i16_ty], [IntrNoMem, Commutative]>;
391  def int_x86_sse2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq128">,
392              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty,
393                         llvm_v4i32_ty], [IntrNoMem, Commutative]>;
394  def int_x86_sse2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd128">,
395              Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty,
396                         llvm_v8i16_ty], [IntrNoMem, Commutative]>;
397  def int_x86_sse2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb128">,
398              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
399                         llvm_v16i8_ty], [IntrNoMem, Commutative]>;
400  def int_x86_sse2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw128">,
401              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
402                         llvm_v8i16_ty], [IntrNoMem, Commutative]>;
403  def int_x86_sse2_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub128">,
404              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
405                         llvm_v16i8_ty], [IntrNoMem, Commutative]>;
406  def int_x86_sse2_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw128">,
407              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
408                         llvm_v8i16_ty], [IntrNoMem, Commutative]>;
409  def int_x86_sse2_pminu_b : GCCBuiltin<"__builtin_ia32_pminub128">,
410              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
411                         llvm_v16i8_ty], [IntrNoMem, Commutative]>;
412  def int_x86_sse2_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw128">,
413              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
414                         llvm_v8i16_ty], [IntrNoMem, Commutative]>;
415  def int_x86_sse2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw128">,
416              Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty,
417                         llvm_v16i8_ty], [IntrNoMem, Commutative]>;
418}
419
420// Integer shift ops.
421let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
422  def int_x86_sse2_psll_w : GCCBuiltin<"__builtin_ia32_psllw128">,
423              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
424                         llvm_v8i16_ty], [IntrNoMem]>;
425  def int_x86_sse2_psll_d : GCCBuiltin<"__builtin_ia32_pslld128">,
426              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
427                         llvm_v4i32_ty], [IntrNoMem]>;
428  def int_x86_sse2_psll_q : GCCBuiltin<"__builtin_ia32_psllq128">,
429              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
430                         llvm_v2i64_ty], [IntrNoMem]>;
431  def int_x86_sse2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw128">,
432              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
433                         llvm_v8i16_ty], [IntrNoMem]>;
434  def int_x86_sse2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld128">,
435              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
436                         llvm_v4i32_ty], [IntrNoMem]>;
437  def int_x86_sse2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq128">,
438              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
439                         llvm_v2i64_ty], [IntrNoMem]>;
440  def int_x86_sse2_psra_w : GCCBuiltin<"__builtin_ia32_psraw128">,
441              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
442                         llvm_v8i16_ty], [IntrNoMem]>;
443  def int_x86_sse2_psra_d : GCCBuiltin<"__builtin_ia32_psrad128">,
444              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
445                         llvm_v4i32_ty], [IntrNoMem]>;
446
447  def int_x86_sse2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi128">,
448              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
449                         llvm_i32_ty], [IntrNoMem]>;
450  def int_x86_sse2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi128">,
451              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
452                         llvm_i32_ty], [IntrNoMem]>;
453  def int_x86_sse2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi128">,
454              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
455                         llvm_i32_ty], [IntrNoMem]>;
456  def int_x86_sse2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi128">,
457              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
458                         llvm_i32_ty], [IntrNoMem]>;
459  def int_x86_sse2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi128">,
460              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
461                         llvm_i32_ty], [IntrNoMem]>;
462  def int_x86_sse2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi128">,
463              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
464                         llvm_i32_ty], [IntrNoMem]>;
465  def int_x86_sse2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi128">,
466              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
467                         llvm_i32_ty], [IntrNoMem]>;
468  def int_x86_sse2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi128">,
469              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
470                         llvm_i32_ty], [IntrNoMem]>;
471}
472
473// Conversion ops
474let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
475  def int_x86_sse2_cvtdq2pd : GCCBuiltin<"__builtin_ia32_cvtdq2pd">,
476              Intrinsic<[llvm_v2f64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
477  def int_x86_sse2_cvtdq2ps : GCCBuiltin<"__builtin_ia32_cvtdq2ps">,
478              Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
479  def int_x86_sse2_cvtpd2dq : GCCBuiltin<"__builtin_ia32_cvtpd2dq">,
480              Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
481  def int_x86_sse2_cvttpd2dq : GCCBuiltin<"__builtin_ia32_cvttpd2dq">,
482              Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
483  def int_x86_sse2_cvtpd2ps : GCCBuiltin<"__builtin_ia32_cvtpd2ps">,
484              Intrinsic<[llvm_v4f32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
485  def int_x86_sse2_cvtps2dq : GCCBuiltin<"__builtin_ia32_cvtps2dq">,
486              Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
487  def int_x86_sse2_cvttps2dq : GCCBuiltin<"__builtin_ia32_cvttps2dq">,
488              Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
489  def int_x86_sse2_cvtps2pd : GCCBuiltin<"__builtin_ia32_cvtps2pd">,
490              Intrinsic<[llvm_v2f64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
491  def int_x86_sse2_cvtsd2si : GCCBuiltin<"__builtin_ia32_cvtsd2si">,
492              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
493  def int_x86_sse2_cvtsd2si64 : GCCBuiltin<"__builtin_ia32_cvtsd2si64">,
494              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
495  def int_x86_sse2_cvttsd2si : GCCBuiltin<"__builtin_ia32_cvttsd2si">,
496              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
497  def int_x86_sse2_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_cvttsd2si64">,
498              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
499  def int_x86_sse2_cvtsi2sd : GCCBuiltin<"__builtin_ia32_cvtsi2sd">,
500              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
501                         llvm_i32_ty], [IntrNoMem]>;
502  def int_x86_sse2_cvtsi642sd : GCCBuiltin<"__builtin_ia32_cvtsi642sd">,
503              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
504                         llvm_i64_ty], [IntrNoMem]>;
505  def int_x86_sse2_cvtsd2ss : GCCBuiltin<"__builtin_ia32_cvtsd2ss">,
506              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
507                         llvm_v2f64_ty], [IntrNoMem]>;
508  def int_x86_sse2_cvtss2sd : GCCBuiltin<"__builtin_ia32_cvtss2sd">,
509              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
510                         llvm_v4f32_ty], [IntrNoMem]>;
511  def int_x86_sse_cvtpd2pi : GCCBuiltin<"__builtin_ia32_cvtpd2pi">,
512              Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
513  def int_x86_sse_cvttpd2pi: GCCBuiltin<"__builtin_ia32_cvttpd2pi">,
514              Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
515  def int_x86_sse_cvtpi2pd : GCCBuiltin<"__builtin_ia32_cvtpi2pd">,
516              Intrinsic<[llvm_v2f64_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
517}
518
519// SIMD store ops
520let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
521  def int_x86_sse2_storeu_pd : GCCBuiltin<"__builtin_ia32_storeupd">,
522              Intrinsic<[], [llvm_ptr_ty,
523                         llvm_v2f64_ty], [IntrReadWriteArgMem]>;
524  def int_x86_sse2_storeu_dq : GCCBuiltin<"__builtin_ia32_storedqu">,
525              Intrinsic<[], [llvm_ptr_ty,
526                         llvm_v16i8_ty], [IntrReadWriteArgMem]>;
527  def int_x86_sse2_storel_dq : GCCBuiltin<"__builtin_ia32_storelv4si">,
528              Intrinsic<[], [llvm_ptr_ty,
529                         llvm_v4i32_ty], [IntrReadWriteArgMem]>;
530}
531
532// Misc.
533let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
534  def int_x86_sse2_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128">,
535              Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
536                         llvm_v8i16_ty], [IntrNoMem]>;
537  def int_x86_sse2_packssdw_128 : GCCBuiltin<"__builtin_ia32_packssdw128">,
538              Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty,
539                         llvm_v4i32_ty], [IntrNoMem]>;
540  def int_x86_sse2_packuswb_128 : GCCBuiltin<"__builtin_ia32_packuswb128">,
541              Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
542                         llvm_v8i16_ty], [IntrNoMem]>;
543  def int_x86_sse2_movmsk_pd : GCCBuiltin<"__builtin_ia32_movmskpd">,
544              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
545  def int_x86_sse2_pmovmskb_128 : GCCBuiltin<"__builtin_ia32_pmovmskb128">,
546              Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
547  def int_x86_sse2_maskmov_dqu : GCCBuiltin<"__builtin_ia32_maskmovdqu">,
548              Intrinsic<[], [llvm_v16i8_ty,
549                         llvm_v16i8_ty, llvm_ptr_ty], []>;
550  def int_x86_sse2_clflush : GCCBuiltin<"__builtin_ia32_clflush">,
551              Intrinsic<[], [llvm_ptr_ty], []>;
552  def int_x86_sse2_lfence : GCCBuiltin<"__builtin_ia32_lfence">,
553              Intrinsic<[], [], []>;
554  def int_x86_sse2_mfence : GCCBuiltin<"__builtin_ia32_mfence">,
555              Intrinsic<[], [], []>;
556  def int_x86_sse2_pause : GCCBuiltin<"__builtin_ia32_pause">,
557              Intrinsic<[], [], []>;
558}
559
560//===----------------------------------------------------------------------===//
561// SSE3
562
563// Addition / subtraction ops.
564let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
565  def int_x86_sse3_addsub_ps : GCCBuiltin<"__builtin_ia32_addsubps">,
566              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
567                         llvm_v4f32_ty], [IntrNoMem]>;
568  def int_x86_sse3_addsub_pd : GCCBuiltin<"__builtin_ia32_addsubpd">,
569              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
570                         llvm_v2f64_ty], [IntrNoMem]>;
571}
572
573// Horizontal ops.
574let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
575  def int_x86_sse3_hadd_ps : GCCBuiltin<"__builtin_ia32_haddps">,
576              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
577                         llvm_v4f32_ty], [IntrNoMem]>;
578  def int_x86_sse3_hadd_pd : GCCBuiltin<"__builtin_ia32_haddpd">,
579              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
580                         llvm_v2f64_ty], [IntrNoMem]>;
581  def int_x86_sse3_hsub_ps : GCCBuiltin<"__builtin_ia32_hsubps">,
582              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
583                         llvm_v4f32_ty], [IntrNoMem]>;
584  def int_x86_sse3_hsub_pd : GCCBuiltin<"__builtin_ia32_hsubpd">,
585              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
586                         llvm_v2f64_ty], [IntrNoMem]>;
587}
588
589// Specialized unaligned load.
590let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
591  def int_x86_sse3_ldu_dq : GCCBuiltin<"__builtin_ia32_lddqu">,
592              Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
593}
594
595// Thread synchronization ops.
596let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
597  def int_x86_sse3_monitor : GCCBuiltin<"__builtin_ia32_monitor">,
598              Intrinsic<[], [llvm_ptr_ty,
599                         llvm_i32_ty, llvm_i32_ty], []>;
600  def int_x86_sse3_mwait : GCCBuiltin<"__builtin_ia32_mwait">,
601              Intrinsic<[], [llvm_i32_ty,
602                         llvm_i32_ty], []>;
603}
604
605//===----------------------------------------------------------------------===//
606// SSSE3
607
608// Horizontal arithmetic ops
609let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
610  def int_x86_ssse3_phadd_w         : GCCBuiltin<"__builtin_ia32_phaddw">,
611              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
612                         llvm_x86mmx_ty], [IntrNoMem]>;
613  def int_x86_ssse3_phadd_w_128     : GCCBuiltin<"__builtin_ia32_phaddw128">,
614              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
615                         llvm_v8i16_ty], [IntrNoMem]>;
616
617  def int_x86_ssse3_phadd_d         : GCCBuiltin<"__builtin_ia32_phaddd">,
618              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
619                         llvm_x86mmx_ty], [IntrNoMem]>;
620  def int_x86_ssse3_phadd_d_128     : GCCBuiltin<"__builtin_ia32_phaddd128">,
621              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
622                         llvm_v4i32_ty], [IntrNoMem]>;
623
624  def int_x86_ssse3_phadd_sw        : GCCBuiltin<"__builtin_ia32_phaddsw">,
625              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
626                         llvm_x86mmx_ty], [IntrNoMem]>;
627  def int_x86_ssse3_phadd_sw_128    : GCCBuiltin<"__builtin_ia32_phaddsw128">,
628              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
629                         llvm_v8i16_ty], [IntrNoMem]>;
630
631  def int_x86_ssse3_phsub_w         : GCCBuiltin<"__builtin_ia32_phsubw">,
632              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
633                         llvm_x86mmx_ty], [IntrNoMem]>;
634  def int_x86_ssse3_phsub_w_128     : GCCBuiltin<"__builtin_ia32_phsubw128">,
635              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
636                         llvm_v8i16_ty], [IntrNoMem]>;
637
638  def int_x86_ssse3_phsub_d         : GCCBuiltin<"__builtin_ia32_phsubd">,
639              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
640                         llvm_x86mmx_ty], [IntrNoMem]>;
641  def int_x86_ssse3_phsub_d_128     : GCCBuiltin<"__builtin_ia32_phsubd128">,
642              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
643                         llvm_v4i32_ty], [IntrNoMem]>;
644
645  def int_x86_ssse3_phsub_sw        : GCCBuiltin<"__builtin_ia32_phsubsw">,
646              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
647                         llvm_x86mmx_ty], [IntrNoMem]>;
648  def int_x86_ssse3_phsub_sw_128    : GCCBuiltin<"__builtin_ia32_phsubsw128">,
649              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
650                         llvm_v8i16_ty], [IntrNoMem]>;
651
652  def int_x86_ssse3_pmadd_ub_sw     : GCCBuiltin<"__builtin_ia32_pmaddubsw">,
653              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
654                         llvm_x86mmx_ty], [IntrNoMem]>;
655  def int_x86_ssse3_pmadd_ub_sw_128 : GCCBuiltin<"__builtin_ia32_pmaddubsw128">,
656              Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty,
657                         llvm_v16i8_ty], [IntrNoMem]>;
658}
659
660// Packed multiply high with round and scale
661let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
662  def int_x86_ssse3_pmul_hr_sw      : GCCBuiltin<"__builtin_ia32_pmulhrsw">,
663              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
664                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
665  def int_x86_ssse3_pmul_hr_sw_128  : GCCBuiltin<"__builtin_ia32_pmulhrsw128">,
666              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
667                         llvm_v8i16_ty], [IntrNoMem, Commutative]>;
668}
669
670// Shuffle ops
671let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
672  def int_x86_ssse3_pshuf_b         : GCCBuiltin<"__builtin_ia32_pshufb">,
673              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
674                         llvm_x86mmx_ty], [IntrNoMem]>;
675  def int_x86_ssse3_pshuf_b_128     : GCCBuiltin<"__builtin_ia32_pshufb128">,
676              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
677                         llvm_v16i8_ty], [IntrNoMem]>;
678  def int_x86_sse2_pshuf_d          : GCCBuiltin<"__builtin_ia32_pshufd">,
679              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
680                         [IntrNoMem]>;
681  def int_x86_sse2_pshufl_w         : GCCBuiltin<"__builtin_ia32_pshuflw">,
682              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
683                         [IntrNoMem]>;
684  def int_x86_sse2_pshufh_w         : GCCBuiltin<"__builtin_ia32_pshufhw">,
685              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
686                         [IntrNoMem]>;
687  def int_x86_sse_pshuf_w           : GCCBuiltin<"__builtin_ia32_pshufw">,
688              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty],
689                         [IntrNoMem]>;
690}
691
692// Sign ops
693let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
694  def int_x86_ssse3_psign_b         : GCCBuiltin<"__builtin_ia32_psignb">,
695              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
696                         llvm_x86mmx_ty], [IntrNoMem]>;
697  def int_x86_ssse3_psign_b_128     : GCCBuiltin<"__builtin_ia32_psignb128">,
698              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
699                         llvm_v16i8_ty], [IntrNoMem]>;
700
701  def int_x86_ssse3_psign_w         : GCCBuiltin<"__builtin_ia32_psignw">,
702              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
703                         llvm_x86mmx_ty], [IntrNoMem]>;
704  def int_x86_ssse3_psign_w_128     : GCCBuiltin<"__builtin_ia32_psignw128">,
705              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
706                         llvm_v8i16_ty], [IntrNoMem]>;
707
708  def int_x86_ssse3_psign_d         : GCCBuiltin<"__builtin_ia32_psignd">,
709              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
710                         llvm_x86mmx_ty], [IntrNoMem]>;
711  def int_x86_ssse3_psign_d_128     : GCCBuiltin<"__builtin_ia32_psignd128">,
712              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
713                         llvm_v4i32_ty], [IntrNoMem]>;
714}
715
716// Absolute value ops
717let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
718  def int_x86_ssse3_pabs_b     : GCCBuiltin<"__builtin_ia32_pabsb">,
719              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
720  def int_x86_ssse3_pabs_b_128 : GCCBuiltin<"__builtin_ia32_pabsb128">,
721              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
722
723  def int_x86_ssse3_pabs_w     : GCCBuiltin<"__builtin_ia32_pabsw">,
724              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
725  def int_x86_ssse3_pabs_w_128 : GCCBuiltin<"__builtin_ia32_pabsw128">,
726              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
727
728  def int_x86_ssse3_pabs_d     : GCCBuiltin<"__builtin_ia32_pabsd">,
729              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
730  def int_x86_ssse3_pabs_d_128 : GCCBuiltin<"__builtin_ia32_pabsd128">,
731              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
732}
733
734//===----------------------------------------------------------------------===//
735// SSE4.1
736
737// FP rounding ops
738let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
739  def int_x86_sse41_round_ss        : GCCBuiltin<"__builtin_ia32_roundss">,
740              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
741                         llvm_i32_ty], [IntrNoMem]>;
742  def int_x86_sse41_round_ps        : GCCBuiltin<"__builtin_ia32_roundps">,
743              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
744                         llvm_i32_ty], [IntrNoMem]>;
745  def int_x86_sse41_round_sd        : GCCBuiltin<"__builtin_ia32_roundsd">,
746              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
747                         llvm_i32_ty], [IntrNoMem]>;
748  def int_x86_sse41_round_pd        : GCCBuiltin<"__builtin_ia32_roundpd">,
749              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
750                         llvm_i32_ty], [IntrNoMem]>;
751}
752
753// Vector sign and zero extend
754let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
755  def int_x86_sse41_pmovsxbd        : GCCBuiltin<"__builtin_ia32_pmovsxbd128">,
756              Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty],
757                        [IntrNoMem]>;
758  def int_x86_sse41_pmovsxbq        : GCCBuiltin<"__builtin_ia32_pmovsxbq128">,
759              Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty],
760                        [IntrNoMem]>;
761  def int_x86_sse41_pmovsxbw        : GCCBuiltin<"__builtin_ia32_pmovsxbw128">,
762              Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty],
763                        [IntrNoMem]>;
764  def int_x86_sse41_pmovsxdq        : GCCBuiltin<"__builtin_ia32_pmovsxdq128">,
765              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty],
766                        [IntrNoMem]>;
767  def int_x86_sse41_pmovsxwd        : GCCBuiltin<"__builtin_ia32_pmovsxwd128">,
768              Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty],
769                        [IntrNoMem]>;
770  def int_x86_sse41_pmovsxwq        : GCCBuiltin<"__builtin_ia32_pmovsxwq128">,
771              Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty],
772                        [IntrNoMem]>;
773  def int_x86_sse41_pmovzxbd        : GCCBuiltin<"__builtin_ia32_pmovzxbd128">,
774              Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty],
775                        [IntrNoMem]>;
776  def int_x86_sse41_pmovzxbq        : GCCBuiltin<"__builtin_ia32_pmovzxbq128">,
777              Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty],
778                        [IntrNoMem]>;
779  def int_x86_sse41_pmovzxbw        : GCCBuiltin<"__builtin_ia32_pmovzxbw128">,
780              Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty],
781                        [IntrNoMem]>;
782  def int_x86_sse41_pmovzxdq        : GCCBuiltin<"__builtin_ia32_pmovzxdq128">,
783              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty],
784                        [IntrNoMem]>;
785  def int_x86_sse41_pmovzxwd        : GCCBuiltin<"__builtin_ia32_pmovzxwd128">,
786              Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty],
787                        [IntrNoMem]>;
788  def int_x86_sse41_pmovzxwq        : GCCBuiltin<"__builtin_ia32_pmovzxwq128">,
789              Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty],
790                        [IntrNoMem]>;
791}
792
793// Vector min element
794let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
795  def int_x86_sse41_phminposuw     : GCCBuiltin<"__builtin_ia32_phminposuw128">,
796              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty],
797                        [IntrNoMem]>;
798}
799
800// Vector compare, min, max
801let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
802  def int_x86_sse41_pmaxsb          : GCCBuiltin<"__builtin_ia32_pmaxsb128">,
803              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
804                        [IntrNoMem, Commutative]>;
805  def int_x86_sse41_pmaxsd          : GCCBuiltin<"__builtin_ia32_pmaxsd128">,
806              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
807                        [IntrNoMem, Commutative]>;
808  def int_x86_sse41_pmaxud          : GCCBuiltin<"__builtin_ia32_pmaxud128">,
809              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
810                        [IntrNoMem, Commutative]>;
811  def int_x86_sse41_pmaxuw          : GCCBuiltin<"__builtin_ia32_pmaxuw128">,
812              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
813                        [IntrNoMem, Commutative]>;
814  def int_x86_sse41_pminsb          : GCCBuiltin<"__builtin_ia32_pminsb128">,
815              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
816                        [IntrNoMem, Commutative]>;
817  def int_x86_sse41_pminsd          : GCCBuiltin<"__builtin_ia32_pminsd128">,
818              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
819                        [IntrNoMem, Commutative]>;
820  def int_x86_sse41_pminud          : GCCBuiltin<"__builtin_ia32_pminud128">,
821              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
822                        [IntrNoMem, Commutative]>;
823  def int_x86_sse41_pminuw          : GCCBuiltin<"__builtin_ia32_pminuw128">,
824              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
825                        [IntrNoMem, Commutative]>;
826}
827
828// Advanced Encryption Standard (AES) Instructions
829let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
830  def int_x86_aesni_aesimc          : GCCBuiltin<"__builtin_ia32_aesimc128">,
831              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty],
832                        [IntrNoMem]>;
833  def int_x86_aesni_aesenc          : GCCBuiltin<"__builtin_ia32_aesenc128">,
834              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
835                        [IntrNoMem]>;
836  def int_x86_aesni_aesenclast : GCCBuiltin<"__builtin_ia32_aesenclast128">,
837              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
838                        [IntrNoMem]>;
839  def int_x86_aesni_aesdec          : GCCBuiltin<"__builtin_ia32_aesdec128">,
840              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
841                        [IntrNoMem]>;
842  def int_x86_aesni_aesdeclast : GCCBuiltin<"__builtin_ia32_aesdeclast128">,
843              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
844                        [IntrNoMem]>;
845  def int_x86_aesni_aeskeygenassist :
846              GCCBuiltin<"__builtin_ia32_aeskeygenassist128">,
847              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
848                        [IntrNoMem]>;
849}
850
851// PCLMUL instruction
852let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
853  def int_x86_pclmulqdq : GCCBuiltin<"__builtin_ia32_pclmulqdq128">,
854          Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
855                    [IntrNoMem]>;
856}
857
858// Vector pack
859let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
860  def int_x86_sse41_packusdw        : GCCBuiltin<"__builtin_ia32_packusdw128">,
861              Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
862                        [IntrNoMem]>;
863}
864
865// Vector multiply
866let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
867  def int_x86_sse41_pmuldq          : GCCBuiltin<"__builtin_ia32_pmuldq128">,
868              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
869                        [IntrNoMem, Commutative]>;
870}
871
872// Vector extract
873let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
874  def int_x86_sse41_pextrb         :
875              Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty],
876                        [IntrNoMem]>;
877  def int_x86_sse41_pextrd         :
878              Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty],
879                        [IntrNoMem]>;
880  def int_x86_sse41_pextrq         :
881              Intrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty],
882                        [IntrNoMem]>;
883  def int_x86_sse41_extractps      : GCCBuiltin<"__builtin_ia32_extractps128">,
884              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
885                        [IntrNoMem]>;
886}
887
888// Vector insert
889let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
890  def int_x86_sse41_insertps       : GCCBuiltin<"__builtin_ia32_insertps128">,
891          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
892                    [IntrNoMem]>;
893}
894
895// Vector blend
896let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
897  def int_x86_sse41_pblendvb         : GCCBuiltin<"__builtin_ia32_pblendvb128">,
898        Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_v16i8_ty],
899                  [IntrNoMem]>;
900  def int_x86_sse41_blendvpd         : GCCBuiltin<"__builtin_ia32_blendvpd">,
901        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,llvm_v2f64_ty],
902                  [IntrNoMem]>;
903  def int_x86_sse41_blendvps         : GCCBuiltin<"__builtin_ia32_blendvps">,
904        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_v4f32_ty],
905                  [IntrNoMem]>;
906}
907
908// Vector dot product
909let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
910  def int_x86_sse41_dppd            : GCCBuiltin<"__builtin_ia32_dppd">,
911          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
912                    [IntrNoMem, Commutative]>;
913  def int_x86_sse41_dpps            : GCCBuiltin<"__builtin_ia32_dpps">,
914          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
915                    [IntrNoMem, Commutative]>;
916}
917
918// Vector sum of absolute differences
919let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
920  def int_x86_sse41_mpsadbw         : GCCBuiltin<"__builtin_ia32_mpsadbw128">,
921          Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_i8_ty],
922                    [IntrNoMem, Commutative]>;
923}
924
925// Cacheability support ops
926let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
927  def int_x86_sse41_movntdqa        : GCCBuiltin<"__builtin_ia32_movntdqa">,
928          Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
929}
930
931// Test instruction with bitwise comparison.
932let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
933  def int_x86_sse41_ptestz          : GCCBuiltin<"__builtin_ia32_ptestz128">,
934          Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
935                    [IntrNoMem]>;
936  def int_x86_sse41_ptestc          : GCCBuiltin<"__builtin_ia32_ptestc128">,
937          Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
938                    [IntrNoMem]>;
939  def int_x86_sse41_ptestnzc        : GCCBuiltin<"__builtin_ia32_ptestnzc128">,
940          Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
941                    [IntrNoMem]>;
942}
943
944//===----------------------------------------------------------------------===//
945// SSE4.2
946
947// Miscellaneous
948// CRC Instruction
949let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
950  def int_x86_sse42_crc32_32_8       : GCCBuiltin<"__builtin_ia32_crc32qi">,
951          Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i8_ty],
952                    [IntrNoMem]>;
953  def int_x86_sse42_crc32_32_16      : GCCBuiltin<"__builtin_ia32_crc32hi">,
954          Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i16_ty],
955                    [IntrNoMem]>;
956  def int_x86_sse42_crc32_32_32      : GCCBuiltin<"__builtin_ia32_crc32si">,
957          Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
958                    [IntrNoMem]>;
959  def int_x86_sse42_crc32_64_64      : GCCBuiltin<"__builtin_ia32_crc32di">,
960          Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
961                    [IntrNoMem]>;
962}
963
964// String/text processing ops.
965let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
966  def int_x86_sse42_pcmpistrm128  : GCCBuiltin<"__builtin_ia32_pcmpistrm128">,
967    Intrinsic<[llvm_v16i8_ty],
968        [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
969        [IntrNoMem]>;
970  def int_x86_sse42_pcmpistri128  : GCCBuiltin<"__builtin_ia32_pcmpistri128">,
971    Intrinsic<[llvm_i32_ty],
972        [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
973        [IntrNoMem]>;
974  def int_x86_sse42_pcmpistria128 : GCCBuiltin<"__builtin_ia32_pcmpistria128">,
975    Intrinsic<[llvm_i32_ty],
976        [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
977        [IntrNoMem]>;
978  def int_x86_sse42_pcmpistric128 : GCCBuiltin<"__builtin_ia32_pcmpistric128">,
979    Intrinsic<[llvm_i32_ty],
980        [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
981        [IntrNoMem]>;
982  def int_x86_sse42_pcmpistrio128 : GCCBuiltin<"__builtin_ia32_pcmpistrio128">,
983    Intrinsic<[llvm_i32_ty],
984        [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
985        [IntrNoMem]>;
986  def int_x86_sse42_pcmpistris128 : GCCBuiltin<"__builtin_ia32_pcmpistris128">,
987    Intrinsic<[llvm_i32_ty],
988        [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
989        [IntrNoMem]>;
990  def int_x86_sse42_pcmpistriz128 : GCCBuiltin<"__builtin_ia32_pcmpistriz128">,
991    Intrinsic<[llvm_i32_ty],
992        [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
993        [IntrNoMem]>;
994  def int_x86_sse42_pcmpestrm128  : GCCBuiltin<"__builtin_ia32_pcmpestrm128">,
995    Intrinsic<[llvm_v16i8_ty],
996        [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
997         llvm_i8_ty],
998        [IntrNoMem]>;
999  def int_x86_sse42_pcmpestri128  : GCCBuiltin<"__builtin_ia32_pcmpestri128">,
1000    Intrinsic<[llvm_i32_ty],
1001        [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
1002         llvm_i8_ty],
1003        [IntrNoMem]>;
1004  def int_x86_sse42_pcmpestria128 : GCCBuiltin<"__builtin_ia32_pcmpestria128">,
1005    Intrinsic<[llvm_i32_ty],
1006        [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
1007         llvm_i8_ty],
1008        [IntrNoMem]>;
1009  def int_x86_sse42_pcmpestric128 : GCCBuiltin<"__builtin_ia32_pcmpestric128">,
1010    Intrinsic<[llvm_i32_ty],
1011        [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
1012         llvm_i8_ty],
1013        [IntrNoMem]>;
1014  def int_x86_sse42_pcmpestrio128 : GCCBuiltin<"__builtin_ia32_pcmpestrio128">,
1015    Intrinsic<[llvm_i32_ty],
1016        [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
1017         llvm_i8_ty],
1018        [IntrNoMem]>;
1019  def int_x86_sse42_pcmpestris128 : GCCBuiltin<"__builtin_ia32_pcmpestris128">,
1020    Intrinsic<[llvm_i32_ty],
1021        [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
1022         llvm_i8_ty],
1023        [IntrNoMem]>;
1024  def int_x86_sse42_pcmpestriz128 : GCCBuiltin<"__builtin_ia32_pcmpestriz128">,
1025    Intrinsic<[llvm_i32_ty],
1026        [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
1027         llvm_i8_ty],
1028        [IntrNoMem]>;
1029}
1030
1031//===----------------------------------------------------------------------===//
1032// SSE4A
1033
1034let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1035  def int_x86_sse4a_extrqi : GCCBuiltin<"__builtin_ia32_extrqi">,
1036    Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty, llvm_i8_ty],
1037              [IntrNoMem]>;
1038  def int_x86_sse4a_extrq  : GCCBuiltin<"__builtin_ia32_extrq">,
1039    Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty], [IntrNoMem]>;
1040
1041  def int_x86_sse4a_insertqi : GCCBuiltin<"__builtin_ia32_insertqi">,
1042    Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
1043                                llvm_i8_ty, llvm_i8_ty], [IntrNoMem]>;
1044  def int_x86_sse4a_insertq  : GCCBuiltin<"__builtin_ia32_insertq">,
1045    Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
1046
1047  def int_x86_sse4a_movnt_ss : GCCBuiltin<"__builtin_ia32_movntss">,
1048    Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty], []>;
1049  def int_x86_sse4a_movnt_sd : GCCBuiltin<"__builtin_ia32_movntsd">,
1050    Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty], []>;
1051}
1052
1053//===----------------------------------------------------------------------===//
1054// AVX
1055
1056// Arithmetic ops
1057let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1058  def int_x86_avx_addsub_pd_256 : GCCBuiltin<"__builtin_ia32_addsubpd256">,
1059        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
1060                  llvm_v4f64_ty], [IntrNoMem]>;
1061  def int_x86_avx_addsub_ps_256 : GCCBuiltin<"__builtin_ia32_addsubps256">,
1062        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1063                  llvm_v8f32_ty], [IntrNoMem]>;
1064  def int_x86_avx_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256">,
1065        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
1066                  llvm_v4f64_ty], [IntrNoMem]>;
1067  def int_x86_avx_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256">,
1068        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1069                  llvm_v8f32_ty], [IntrNoMem]>;
1070  def int_x86_avx_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256">,
1071        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
1072                  llvm_v4f64_ty], [IntrNoMem]>;
1073  def int_x86_avx_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256">,
1074        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1075                  llvm_v8f32_ty], [IntrNoMem]>;
1076
1077  def int_x86_avx_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256">,
1078        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
1079  def int_x86_avx_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256">,
1080        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
1081
1082  def int_x86_avx_rsqrt_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrtps256">,
1083        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
1084
1085  def int_x86_avx_rcp_ps_256 : GCCBuiltin<"__builtin_ia32_rcpps256">,
1086        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
1087
1088  def int_x86_avx_round_pd_256 : GCCBuiltin<"__builtin_ia32_roundpd256">,
1089        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
1090                  llvm_i32_ty], [IntrNoMem]>;
1091  def int_x86_avx_round_ps_256 : GCCBuiltin<"__builtin_ia32_roundps256">,
1092        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1093                  llvm_i32_ty], [IntrNoMem]>;
1094}
1095
1096// Horizontal ops
1097let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1098  def int_x86_avx_hadd_pd_256 : GCCBuiltin<"__builtin_ia32_haddpd256">,
1099        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
1100                  llvm_v4f64_ty], [IntrNoMem]>;
1101  def int_x86_avx_hsub_ps_256 : GCCBuiltin<"__builtin_ia32_hsubps256">,
1102        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1103                  llvm_v8f32_ty], [IntrNoMem]>;
1104  def int_x86_avx_hsub_pd_256 : GCCBuiltin<"__builtin_ia32_hsubpd256">,
1105        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
1106                  llvm_v4f64_ty], [IntrNoMem]>;
1107  def int_x86_avx_hadd_ps_256 : GCCBuiltin<"__builtin_ia32_haddps256">,
1108        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1109                  llvm_v8f32_ty], [IntrNoMem]>;
1110}
1111
1112// Vector permutation
1113let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1114  def int_x86_avx_vpermilvar_pd : GCCBuiltin<"__builtin_ia32_vpermilvarpd">,
1115        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
1116                  llvm_v2i64_ty], [IntrNoMem]>;
1117  def int_x86_avx_vpermilvar_ps : GCCBuiltin<"__builtin_ia32_vpermilvarps">,
1118        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
1119                  llvm_v4i32_ty], [IntrNoMem]>;
1120
1121  def int_x86_avx_vpermilvar_pd_256 :
1122        GCCBuiltin<"__builtin_ia32_vpermilvarpd256">,
1123        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4i64_ty], [IntrNoMem]>;
1124  def int_x86_avx_vpermilvar_ps_256 :
1125        GCCBuiltin<"__builtin_ia32_vpermilvarps256">,
1126        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty], [IntrNoMem]>;
1127
1128  def int_x86_avx_vperm2f128_pd_256 :
1129        GCCBuiltin<"__builtin_ia32_vperm2f128_pd256">,
1130        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
1131                  llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
1132  def int_x86_avx_vperm2f128_ps_256 :
1133        GCCBuiltin<"__builtin_ia32_vperm2f128_ps256">,
1134        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1135                  llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
1136  def int_x86_avx_vperm2f128_si_256 :
1137        GCCBuiltin<"__builtin_ia32_vperm2f128_si256">,
1138        Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
1139                  llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
1140
1141  def int_x86_avx512_mask_vpermi2var_d_128 :
1142       GCCBuiltin<"__builtin_ia32_vpermi2vard128_mask">,
1143        Intrinsic<[llvm_v4i32_ty],
1144        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
1145        [IntrNoMem]>;
1146
1147  def int_x86_avx512_mask_vpermi2var_d_256 :
1148        GCCBuiltin<"__builtin_ia32_vpermi2vard256_mask">,
1149          Intrinsic<[llvm_v8i32_ty],
1150          [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
1151          [IntrNoMem]>;
1152
1153  def int_x86_avx512_mask_vpermi2var_d_512 :
1154        GCCBuiltin<"__builtin_ia32_vpermi2vard512_mask">,
1155          Intrinsic<[llvm_v16i32_ty],
1156          [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
1157          [IntrNoMem]>;
1158
1159  def int_x86_avx512_mask_vpermi2var_hi_128 :
1160        GCCBuiltin<"__builtin_ia32_vpermi2varhi128_mask">,
1161          Intrinsic<[llvm_v8i16_ty],
1162          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
1163          [IntrNoMem]>;
1164
1165  def int_x86_avx512_mask_vpermi2var_hi_256 :
1166        GCCBuiltin<"__builtin_ia32_vpermi2varhi256_mask">,
1167          Intrinsic<[llvm_v16i16_ty],
1168          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
1169          [IntrNoMem]>;
1170
1171  def int_x86_avx512_mask_vpermi2var_hi_512 :
1172        GCCBuiltin<"__builtin_ia32_vpermi2varhi512_mask">,
1173          Intrinsic<[llvm_v32i16_ty],
1174          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
1175          [IntrNoMem]>;
1176
1177  def int_x86_avx512_mask_vpermi2var_pd_128 :
1178        GCCBuiltin<"__builtin_ia32_vpermi2varpd128_mask">,
1179          Intrinsic<[llvm_v2f64_ty],
1180          [llvm_v2f64_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
1181          [IntrNoMem]>;
1182
1183  def int_x86_avx512_mask_vpermi2var_pd_256 :
1184        GCCBuiltin<"__builtin_ia32_vpermi2varpd256_mask">,
1185          Intrinsic<[llvm_v4f64_ty],
1186          [llvm_v4f64_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
1187          [IntrNoMem]>;
1188
1189  def int_x86_avx512_mask_vpermi2var_pd_512 :
1190        GCCBuiltin<"__builtin_ia32_vpermi2varpd512_mask">,
1191          Intrinsic<[llvm_v8f64_ty],
1192          [llvm_v8f64_ty, llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty],
1193          [IntrNoMem]>;
1194
1195  def int_x86_avx512_mask_vpermi2var_ps_128 :
1196        GCCBuiltin<"__builtin_ia32_vpermi2varps128_mask">,
1197          Intrinsic<[llvm_v4f32_ty],
1198          [llvm_v4f32_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
1199          [IntrNoMem]>;
1200
1201  def int_x86_avx512_mask_vpermi2var_ps_256 :
1202        GCCBuiltin<"__builtin_ia32_vpermi2varps256_mask">,
1203          Intrinsic<[llvm_v8f32_ty],
1204          [llvm_v8f32_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
1205          [IntrNoMem]>;
1206
1207  def int_x86_avx512_mask_vpermi2var_ps_512 :
1208        GCCBuiltin<"__builtin_ia32_vpermi2varps512_mask">,
1209          Intrinsic<[llvm_v16f32_ty],
1210          [llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty],
1211          [IntrNoMem]>;
1212
1213  def int_x86_avx512_mask_vpermi2var_q_128 :
1214        GCCBuiltin<"__builtin_ia32_vpermi2varq128_mask">,
1215          Intrinsic<[llvm_v2i64_ty],
1216          [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
1217          [IntrNoMem]>;
1218
1219  def int_x86_avx512_mask_vpermi2var_q_256 :
1220        GCCBuiltin<"__builtin_ia32_vpermi2varq256_mask">,
1221          Intrinsic<[llvm_v4i64_ty],
1222          [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
1223          [IntrNoMem]>;
1224
1225  def int_x86_avx512_mask_vpermi2var_q_512 :
1226        GCCBuiltin<"__builtin_ia32_vpermi2varq512_mask">,
1227          Intrinsic<[llvm_v8i64_ty],
1228          [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
1229          [IntrNoMem]>;
1230
1231  def int_x86_avx512_mask_vpermt2var_d_512:
1232        GCCBuiltin<"__builtin_ia32_vpermt2vard512_mask">,
1233        Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
1234                  llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
1235
1236  def int_x86_avx512_mask_vpermt2var_q_512:
1237        GCCBuiltin<"__builtin_ia32_vpermt2varq512_mask">,
1238        Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
1239                  llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
1240
1241  def int_x86_avx512_mask_vpermt2var_ps_512:
1242        GCCBuiltin<"__builtin_ia32_vpermt2varps512_mask">,
1243        Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty,
1244                  llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
1245
1246  def int_x86_avx512_mask_vpermt2var_pd_512:
1247        GCCBuiltin<"__builtin_ia32_vpermt2varpd512_mask">,
1248        Intrinsic<[llvm_v8f64_ty], [llvm_v8i64_ty,
1249                  llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
1250
1251  def int_x86_avx512_mask_vpermt2var_d_128 :
1252        GCCBuiltin<"__builtin_ia32_vpermt2vard128_mask">,
1253          Intrinsic<[llvm_v4i32_ty],
1254          [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
1255          [IntrNoMem]>;
1256
1257  def int_x86_avx512_maskz_vpermt2var_d_128 :
1258        GCCBuiltin<"__builtin_ia32_vpermt2vard128_maskz">,
1259          Intrinsic<[llvm_v4i32_ty],
1260          [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
1261          [IntrNoMem]>;
1262
1263  def int_x86_avx512_mask_vpermt2var_d_256 :
1264        GCCBuiltin<"__builtin_ia32_vpermt2vard256_mask">,
1265          Intrinsic<[llvm_v8i32_ty],
1266          [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
1267          [IntrNoMem]>;
1268
1269  def int_x86_avx512_maskz_vpermt2var_d_256 :
1270        GCCBuiltin<"__builtin_ia32_vpermt2vard256_maskz">,
1271          Intrinsic<[llvm_v8i32_ty],
1272          [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
1273          [IntrNoMem]>;
1274
1275  def int_x86_avx512_maskz_vpermt2var_d_512 :
1276        GCCBuiltin<"__builtin_ia32_vpermt2vard512_maskz">,
1277          Intrinsic<[llvm_v16i32_ty],
1278          [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
1279          [IntrNoMem]>;
1280
1281  def int_x86_avx512_mask_vpermt2var_hi_128 :
1282        GCCBuiltin<"__builtin_ia32_vpermt2varhi128_mask">,
1283          Intrinsic<[llvm_v8i16_ty],
1284          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
1285          [IntrNoMem]>;
1286
1287  def int_x86_avx512_maskz_vpermt2var_hi_128 :
1288        GCCBuiltin<"__builtin_ia32_vpermt2varhi128_maskz">,
1289          Intrinsic<[llvm_v8i16_ty],
1290          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
1291          [IntrNoMem]>;
1292
1293  def int_x86_avx512_mask_vpermt2var_hi_256 :
1294        GCCBuiltin<"__builtin_ia32_vpermt2varhi256_mask">,
1295          Intrinsic<[llvm_v16i16_ty],
1296          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
1297          [IntrNoMem]>;
1298
1299  def int_x86_avx512_maskz_vpermt2var_hi_256 :
1300        GCCBuiltin<"__builtin_ia32_vpermt2varhi256_maskz">,
1301          Intrinsic<[llvm_v16i16_ty],
1302          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
1303          [IntrNoMem]>;
1304
1305  def int_x86_avx512_mask_vpermt2var_hi_512 :
1306        GCCBuiltin<"__builtin_ia32_vpermt2varhi512_mask">,
1307          Intrinsic<[llvm_v32i16_ty],
1308          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
1309          [IntrNoMem]>;
1310
1311  def int_x86_avx512_maskz_vpermt2var_hi_512 :
1312        GCCBuiltin<"__builtin_ia32_vpermt2varhi512_maskz">,
1313          Intrinsic<[llvm_v32i16_ty],
1314          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
1315          [IntrNoMem]>;
1316
1317  def int_x86_avx512_mask_vpermt2var_pd_128 :
1318        GCCBuiltin<"__builtin_ia32_vpermt2varpd128_mask">,
1319          Intrinsic<[llvm_v2f64_ty],
1320          [llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
1321          [IntrNoMem]>;
1322
1323  def int_x86_avx512_maskz_vpermt2var_pd_128 :
1324        GCCBuiltin<"__builtin_ia32_vpermt2varpd128_maskz">,
1325          Intrinsic<[llvm_v2f64_ty],
1326          [llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
1327          [IntrNoMem]>;
1328
1329  def int_x86_avx512_mask_vpermt2var_pd_256 :
1330        GCCBuiltin<"__builtin_ia32_vpermt2varpd256_mask">,
1331          Intrinsic<[llvm_v4f64_ty],
1332          [llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
1333          [IntrNoMem]>;
1334
1335  def int_x86_avx512_maskz_vpermt2var_pd_256 :
1336        GCCBuiltin<"__builtin_ia32_vpermt2varpd256_maskz">,
1337          Intrinsic<[llvm_v4f64_ty],
1338          [llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
1339          [IntrNoMem]>;
1340
1341  def int_x86_avx512_maskz_vpermt2var_pd_512 :
1342        GCCBuiltin<"__builtin_ia32_vpermt2varpd512_maskz">,
1343          Intrinsic<[llvm_v8f64_ty],
1344          [llvm_v8i64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
1345          [IntrNoMem]>;
1346
1347  def int_x86_avx512_mask_vpermt2var_ps_128 :
1348        GCCBuiltin<"__builtin_ia32_vpermt2varps128_mask">,
1349          Intrinsic<[llvm_v4f32_ty],
1350          [llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
1351          [IntrNoMem]>;
1352
1353  def int_x86_avx512_maskz_vpermt2var_ps_128 :
1354        GCCBuiltin<"__builtin_ia32_vpermt2varps128_maskz">,
1355          Intrinsic<[llvm_v4f32_ty],
1356          [llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
1357          [IntrNoMem]>;
1358
1359  def int_x86_avx512_mask_vpermt2var_ps_256 :
1360        GCCBuiltin<"__builtin_ia32_vpermt2varps256_mask">,
1361          Intrinsic<[llvm_v8f32_ty],
1362          [llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
1363          [IntrNoMem]>;
1364
1365  def int_x86_avx512_maskz_vpermt2var_ps_256 :
1366        GCCBuiltin<"__builtin_ia32_vpermt2varps256_maskz">,
1367          Intrinsic<[llvm_v8f32_ty],
1368          [llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
1369          [IntrNoMem]>;
1370
1371  def int_x86_avx512_maskz_vpermt2var_ps_512 :
1372        GCCBuiltin<"__builtin_ia32_vpermt2varps512_maskz">,
1373          Intrinsic<[llvm_v16f32_ty],
1374          [llvm_v16i32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
1375          [IntrNoMem]>;
1376
1377  def int_x86_avx512_mask_vpermt2var_q_128 :
1378        GCCBuiltin<"__builtin_ia32_vpermt2varq128_mask">,
1379          Intrinsic<[llvm_v2i64_ty],
1380          [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
1381          [IntrNoMem]>;
1382
1383  def int_x86_avx512_maskz_vpermt2var_q_128 :
1384        GCCBuiltin<"__builtin_ia32_vpermt2varq128_maskz">,
1385          Intrinsic<[llvm_v2i64_ty],
1386          [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
1387          [IntrNoMem]>;
1388
1389  def int_x86_avx512_mask_vpermt2var_q_256 :
1390        GCCBuiltin<"__builtin_ia32_vpermt2varq256_mask">,
1391          Intrinsic<[llvm_v4i64_ty],
1392          [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
1393          [IntrNoMem]>;
1394
1395  def int_x86_avx512_maskz_vpermt2var_q_256 :
1396        GCCBuiltin<"__builtin_ia32_vpermt2varq256_maskz">,
1397          Intrinsic<[llvm_v4i64_ty],
1398          [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
1399          [IntrNoMem]>;
1400
1401  def int_x86_avx512_maskz_vpermt2var_q_512 :
1402        GCCBuiltin<"__builtin_ia32_vpermt2varq512_maskz">,
1403          Intrinsic<[llvm_v8i64_ty],
1404          [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
1405          [IntrNoMem]>;
1406
1407  def int_x86_avx512_mask_vpermil_pd_128 :
1408        GCCBuiltin<"__builtin_ia32_vpermilpd_mask">,
1409          Intrinsic<[llvm_v2f64_ty],
1410          [llvm_v2f64_ty, llvm_i32_ty, llvm_v2f64_ty, llvm_i8_ty],
1411          [IntrNoMem]>;
1412
1413  def int_x86_avx512_mask_vpermil_pd_256 :
1414        GCCBuiltin<"__builtin_ia32_vpermilpd256_mask">,
1415          Intrinsic<[llvm_v4f64_ty],
1416          [llvm_v4f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty],
1417          [IntrNoMem]>;
1418
1419  def int_x86_avx512_mask_vpermil_pd_512 :
1420        GCCBuiltin<"__builtin_ia32_vpermilpd512_mask">,
1421          Intrinsic<[llvm_v8f64_ty],
1422          [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty],
1423          [IntrNoMem]>;
1424
1425  def int_x86_avx512_mask_vpermil_ps_128 :
1426        GCCBuiltin<"__builtin_ia32_vpermilps_mask">,
1427          Intrinsic<[llvm_v4f32_ty],
1428          [llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty, llvm_i8_ty],
1429          [IntrNoMem]>;
1430
1431  def int_x86_avx512_mask_vpermil_ps_256 :
1432        GCCBuiltin<"__builtin_ia32_vpermilps256_mask">,
1433          Intrinsic<[llvm_v8f32_ty],
1434          [llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty],
1435          [IntrNoMem]>;
1436
1437  def int_x86_avx512_mask_vpermil_ps_512 :
1438        GCCBuiltin<"__builtin_ia32_vpermilps512_mask">,
1439          Intrinsic<[llvm_v16f32_ty],
1440          [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty, llvm_i16_ty],
1441          [IntrNoMem]>;
1442
1443  def int_x86_avx512_mask_vpermilvar_pd_256 :
1444        GCCBuiltin<"__builtin_ia32_vpermilvarpd256_mask">,
1445          Intrinsic<[llvm_v4f64_ty],
1446          [llvm_v4f64_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
1447          [IntrNoMem]>;
1448
1449  def int_x86_avx512_mask_vpermilvar_pd_512 :
1450        GCCBuiltin<"__builtin_ia32_vpermilvarpd512_mask">,
1451          Intrinsic<[llvm_v8f64_ty],
1452          [llvm_v8f64_ty, llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty],
1453          [IntrNoMem]>;
1454
1455  def int_x86_avx512_mask_vpermilvar_pd_128 :
1456        GCCBuiltin<"__builtin_ia32_vpermilvarpd_mask">,
1457          Intrinsic<[llvm_v2f64_ty],
1458          [llvm_v2f64_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
1459          [IntrNoMem]>;
1460
1461  def int_x86_avx512_mask_vpermilvar_ps_256 :
1462        GCCBuiltin<"__builtin_ia32_vpermilvarps256_mask">,
1463          Intrinsic<[llvm_v8f32_ty],
1464          [llvm_v8f32_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
1465          [IntrNoMem]>;
1466
1467  def int_x86_avx512_mask_vpermilvar_ps_512 :
1468        GCCBuiltin<"__builtin_ia32_vpermilvarps512_mask">,
1469          Intrinsic<[llvm_v16f32_ty],
1470          [llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty],
1471          [IntrNoMem]>;
1472
1473  def int_x86_avx512_mask_vpermilvar_ps_128 :
1474        GCCBuiltin<"__builtin_ia32_vpermilvarps_mask">,
1475          Intrinsic<[llvm_v4f32_ty],
1476          [llvm_v4f32_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
1477          [IntrNoMem]>;
1478
1479  def int_x86_avx512_mask_pshuf_b_128 :
1480        GCCBuiltin<"__builtin_ia32_pshufb128_mask">,
1481          Intrinsic<[llvm_v16i8_ty],
1482          [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty,  llvm_i16_ty],
1483          [IntrNoMem]>;
1484
1485  def int_x86_avx512_mask_pshuf_b_256 :
1486        GCCBuiltin<"__builtin_ia32_pshufb256_mask">,
1487          Intrinsic<[llvm_v32i8_ty],
1488          [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v32i8_ty,  llvm_i32_ty],
1489          [IntrNoMem]>;
1490
1491  def int_x86_avx512_mask_pshuf_b_512 :
1492        GCCBuiltin<"__builtin_ia32_pshufb512_mask">,
1493          Intrinsic<[llvm_v64i8_ty],
1494          [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v64i8_ty,  llvm_i64_ty],
1495          [IntrNoMem]>;
1496
1497  def int_x86_avx512_mask_shuf_f32x4_256 :
1498         GCCBuiltin<"__builtin_ia32_shuf_f32x4_256_mask">,
1499          Intrinsic<[llvm_v8f32_ty],
1500          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty],
1501          [IntrNoMem]>;
1502
1503  def int_x86_avx512_mask_shuf_f32x4 :
1504         GCCBuiltin<"__builtin_ia32_shuf_f32x4_mask">,
1505          Intrinsic<[llvm_v16f32_ty],
1506          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty, llvm_i16_ty],
1507          [IntrNoMem]>;
1508
1509  def int_x86_avx512_mask_shuf_f64x2_256 :
1510         GCCBuiltin<"__builtin_ia32_shuf_f64x2_256_mask">,
1511          Intrinsic<[llvm_v4f64_ty],
1512          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty],
1513          [IntrNoMem]>;
1514
1515  def int_x86_avx512_mask_shuf_f64x2 :
1516         GCCBuiltin<"__builtin_ia32_shuf_f64x2_mask">,
1517          Intrinsic<[llvm_v8f64_ty],
1518          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty],
1519          [IntrNoMem]>;
1520
1521  def int_x86_avx512_mask_shuf_i32x4_256 :
1522         GCCBuiltin<"__builtin_ia32_shuf_i32x4_256_mask">,
1523          Intrinsic<[llvm_v8i32_ty],
1524          [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_v8i32_ty, llvm_i8_ty],
1525          [IntrNoMem]>;
1526
1527  def int_x86_avx512_mask_shuf_i32x4 :
1528         GCCBuiltin<"__builtin_ia32_shuf_i32x4_mask">,
1529          Intrinsic<[llvm_v16i32_ty],
1530          [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty],
1531          [IntrNoMem]>;
1532
1533  def int_x86_avx512_mask_shuf_i64x2_256 :
1534         GCCBuiltin<"__builtin_ia32_shuf_i64x2_256_mask">,
1535          Intrinsic<[llvm_v4i64_ty],
1536          [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_v4i64_ty, llvm_i8_ty],
1537          [IntrNoMem]>;
1538
1539  def int_x86_avx512_mask_shuf_i64x2 :
1540         GCCBuiltin<"__builtin_ia32_shuf_i64x2_mask">,
1541          Intrinsic<[llvm_v8i64_ty],
1542          [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty],
1543          [IntrNoMem]>;
1544
1545  def int_x86_avx512_mask_shuf_pd_128 :
1546         GCCBuiltin<"__builtin_ia32_shufpd128_mask">,
1547          Intrinsic<[llvm_v2f64_ty],
1548          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v2f64_ty, llvm_i8_ty],
1549          [IntrNoMem]>;
1550
1551  def int_x86_avx512_mask_shuf_pd_256 :
1552         GCCBuiltin<"__builtin_ia32_shufpd256_mask">,
1553          Intrinsic<[llvm_v4f64_ty],
1554          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty],
1555          [IntrNoMem]>;
1556
1557  def int_x86_avx512_mask_shuf_pd_512 :
1558         GCCBuiltin<"__builtin_ia32_shufpd512_mask">,
1559          Intrinsic<[llvm_v8f64_ty],
1560          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty],
1561          [IntrNoMem]>;
1562
1563  def int_x86_avx512_mask_shuf_ps_128 :
1564         GCCBuiltin<"__builtin_ia32_shufps128_mask">,
1565          Intrinsic<[llvm_v4f32_ty],
1566          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty, llvm_i8_ty],
1567          [IntrNoMem]>;
1568
1569  def int_x86_avx512_mask_shuf_ps_256 :
1570         GCCBuiltin<"__builtin_ia32_shufps256_mask">,
1571          Intrinsic<[llvm_v8f32_ty],
1572          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty],
1573          [IntrNoMem]>;
1574
1575  def int_x86_avx512_mask_shuf_ps_512 :
1576         GCCBuiltin<"__builtin_ia32_shufps512_mask">,
1577          Intrinsic<[llvm_v16f32_ty],
1578          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty, llvm_i16_ty],
1579          [IntrNoMem]>;
1580
1581  def int_x86_avx512_mask_movshdup_128 :
1582         GCCBuiltin<"__builtin_ia32_movshdup128_mask">,
1583          Intrinsic<[llvm_v4f32_ty],
1584          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
1585          [IntrNoMem]>;
1586
1587  def int_x86_avx512_mask_movshdup_256 :
1588         GCCBuiltin<"__builtin_ia32_movshdup256_mask">,
1589          Intrinsic<[llvm_v8f32_ty],
1590          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
1591          [IntrNoMem]>;
1592
1593  def int_x86_avx512_mask_movshdup_512 :
1594         GCCBuiltin<"__builtin_ia32_movshdup512_mask">,
1595          Intrinsic<[llvm_v16f32_ty],
1596          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
1597          [IntrNoMem]>;
1598
1599  def int_x86_avx512_mask_movsldup_128 :
1600         GCCBuiltin<"__builtin_ia32_movsldup128_mask">,
1601          Intrinsic<[llvm_v4f32_ty],
1602          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
1603          [IntrNoMem]>;
1604
1605  def int_x86_avx512_mask_movsldup_256 :
1606         GCCBuiltin<"__builtin_ia32_movsldup256_mask">,
1607          Intrinsic<[llvm_v8f32_ty],
1608          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
1609          [IntrNoMem]>;
1610
1611  def int_x86_avx512_mask_movsldup_512 :
1612         GCCBuiltin<"__builtin_ia32_movsldup512_mask">,
1613          Intrinsic<[llvm_v16f32_ty],
1614          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
1615          [IntrNoMem]>;
1616
1617  def int_x86_avx512_mask_movddup_128 :
1618         GCCBuiltin<"__builtin_ia32_movddup128_mask">,
1619          Intrinsic<[llvm_v2f64_ty],
1620          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
1621          [IntrNoMem]>;
1622
1623  def int_x86_avx512_mask_movddup_256 :
1624         GCCBuiltin<"__builtin_ia32_movddup256_mask">,
1625          Intrinsic<[llvm_v4f64_ty],
1626          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
1627          [IntrNoMem]>;
1628
1629  def int_x86_avx512_mask_movddup_512 :
1630         GCCBuiltin<"__builtin_ia32_movddup512_mask">,
1631          Intrinsic<[llvm_v8f64_ty],
1632          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
1633          [IntrNoMem]>;
1634}
1635
1636// Vector blend
1637let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1638  def int_x86_avx_blendv_pd_256 : GCCBuiltin<"__builtin_ia32_blendvpd256">,
1639        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
1640                  llvm_v4f64_ty, llvm_v4f64_ty], [IntrNoMem]>;
1641  def int_x86_avx_blendv_ps_256 : GCCBuiltin<"__builtin_ia32_blendvps256">,
1642        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1643                  llvm_v8f32_ty, llvm_v8f32_ty], [IntrNoMem]>;
1644}
1645
1646// Vector dot product
1647let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1648  def int_x86_avx_dp_ps_256 : GCCBuiltin<"__builtin_ia32_dpps256">,
1649        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1650                  llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
1651}
1652
1653// Vector compare
1654let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1655  def int_x86_avx_cmp_pd_256 : GCCBuiltin<"__builtin_ia32_cmppd256">,
1656        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
1657                  llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
1658  def int_x86_avx_cmp_ps_256 : GCCBuiltin<"__builtin_ia32_cmpps256">,
1659        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
1660                  llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
1661}
1662
1663// Vector convert
1664let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1665  def int_x86_avx_cvtdq2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtdq2pd256">,
1666        Intrinsic<[llvm_v4f64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
1667  def int_x86_avx_cvtdq2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtdq2ps256">,
1668        Intrinsic<[llvm_v8f32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
1669  def int_x86_avx_cvt_pd2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtpd2ps256">,
1670        Intrinsic<[llvm_v4f32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
1671  def int_x86_avx_cvt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvtps2dq256">,
1672        Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
1673  def int_x86_avx_cvt_ps2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtps2pd256">,
1674        Intrinsic<[llvm_v4f64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
1675  def int_x86_avx_cvtt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvttpd2dq256">,
1676        Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
1677  def int_x86_avx_cvt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvtpd2dq256">,
1678        Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
1679  def int_x86_avx_cvtt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvttps2dq256">,
1680        Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
1681}
1682
1683// Vector bit test
1684let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1685  def int_x86_avx_vtestz_pd : GCCBuiltin<"__builtin_ia32_vtestzpd">,
1686        Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
1687                  llvm_v2f64_ty], [IntrNoMem]>;
1688  def int_x86_avx_vtestc_pd : GCCBuiltin<"__builtin_ia32_vtestcpd">,
1689        Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
1690                  llvm_v2f64_ty], [IntrNoMem]>;
1691  def int_x86_avx_vtestnzc_pd : GCCBuiltin<"__builtin_ia32_vtestnzcpd">,
1692        Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
1693                  llvm_v2f64_ty], [IntrNoMem]>;
1694  def int_x86_avx_vtestz_ps : GCCBuiltin<"__builtin_ia32_vtestzps">,
1695        Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
1696                  llvm_v4f32_ty], [IntrNoMem]>;
1697  def int_x86_avx_vtestc_ps : GCCBuiltin<"__builtin_ia32_vtestcps">,
1698        Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
1699                  llvm_v4f32_ty], [IntrNoMem]>;
1700  def int_x86_avx_vtestnzc_ps : GCCBuiltin<"__builtin_ia32_vtestnzcps">,
1701        Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
1702                  llvm_v4f32_ty], [IntrNoMem]>;
1703  def int_x86_avx_vtestz_pd_256 : GCCBuiltin<"__builtin_ia32_vtestzpd256">,
1704        Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
1705                  llvm_v4f64_ty], [IntrNoMem]>;
1706  def int_x86_avx_vtestc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestcpd256">,
1707        Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
1708                  llvm_v4f64_ty], [IntrNoMem]>;
1709  def int_x86_avx_vtestnzc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestnzcpd256">,
1710        Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
1711                  llvm_v4f64_ty], [IntrNoMem]>;
1712  def int_x86_avx_vtestz_ps_256 : GCCBuiltin<"__builtin_ia32_vtestzps256">,
1713        Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
1714                  llvm_v8f32_ty], [IntrNoMem]>;
1715  def int_x86_avx_vtestc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestcps256">,
1716        Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
1717                  llvm_v8f32_ty], [IntrNoMem]>;
1718  def int_x86_avx_vtestnzc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestnzcps256">,
1719        Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
1720                  llvm_v8f32_ty], [IntrNoMem]>;
1721  def int_x86_avx_ptestz_256 : GCCBuiltin<"__builtin_ia32_ptestz256">,
1722        Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
1723                  llvm_v4i64_ty], [IntrNoMem]>;
1724  def int_x86_avx_ptestc_256 : GCCBuiltin<"__builtin_ia32_ptestc256">,
1725        Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
1726                  llvm_v4i64_ty], [IntrNoMem]>;
1727  def int_x86_avx_ptestnzc_256 : GCCBuiltin<"__builtin_ia32_ptestnzc256">,
1728        Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
1729                  llvm_v4i64_ty], [IntrNoMem]>;
1730  def int_x86_avx512_mask_ptestm_d_512 : GCCBuiltin<"__builtin_ia32_ptestmd512">,
1731        Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
1732                  llvm_i16_ty], [IntrNoMem]>;
1733  def int_x86_avx512_mask_ptestm_q_512 : GCCBuiltin<"__builtin_ia32_ptestmq512">,
1734        Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
1735                  llvm_i8_ty], [IntrNoMem]>;
1736  def int_x86_avx512_mask_fpclass_pd_128 :
1737         GCCBuiltin<"__builtin_ia32_fpclasspd128_mask">,
1738          Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_i32_ty, llvm_i8_ty],
1739          [IntrNoMem]>;
1740  def int_x86_avx512_mask_fpclass_pd_256 :
1741         GCCBuiltin<"__builtin_ia32_fpclasspd256_mask">,
1742          Intrinsic<[llvm_i8_ty], [llvm_v4f64_ty, llvm_i32_ty, llvm_i8_ty],
1743          [IntrNoMem]>;
1744  def int_x86_avx512_mask_fpclass_pd_512 :
1745         GCCBuiltin<"__builtin_ia32_fpclasspd512_mask">,
1746          Intrinsic<[llvm_i8_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_i8_ty],
1747          [IntrNoMem]>;
1748  def int_x86_avx512_mask_fpclass_ps_128 :
1749         GCCBuiltin<"__builtin_ia32_fpclassps128_mask">,
1750          Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i8_ty],
1751          [IntrNoMem]>;
1752  def int_x86_avx512_mask_fpclass_ps_256 :
1753         GCCBuiltin<"__builtin_ia32_fpclassps256_mask">,
1754          Intrinsic<[llvm_i8_ty], [llvm_v8f32_ty, llvm_i32_ty, llvm_i8_ty],
1755          [IntrNoMem]>;
1756  def int_x86_avx512_mask_fpclass_ps_512 :
1757         GCCBuiltin<"__builtin_ia32_fpclassps512_mask">,
1758          Intrinsic<[llvm_i16_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_i16_ty],
1759          [IntrNoMem]>;
1760  def int_x86_avx512_mask_fpclass_sd :
1761         GCCBuiltin<"__builtin_ia32_fpclasssd">,
1762          Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_i32_ty, llvm_i8_ty],
1763          [IntrNoMem]>;
1764  def int_x86_avx512_mask_fpclass_ss :
1765         GCCBuiltin<"__builtin_ia32_fpclassss">,
1766          Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i8_ty],
1767          [IntrNoMem]>;
1768}
1769
1770// Vector extract sign mask
1771let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1772  def int_x86_avx_movmsk_pd_256 : GCCBuiltin<"__builtin_ia32_movmskpd256">,
1773        Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
1774  def int_x86_avx_movmsk_ps_256 : GCCBuiltin<"__builtin_ia32_movmskps256">,
1775        Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
1776}
1777
1778// Vector zero
1779let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1780  def int_x86_avx_vzeroall : GCCBuiltin<"__builtin_ia32_vzeroall">,
1781        Intrinsic<[], [], []>;
1782  def int_x86_avx_vzeroupper : GCCBuiltin<"__builtin_ia32_vzeroupper">,
1783        Intrinsic<[], [], []>;
1784}
1785
1786// Vector load with broadcast
1787let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1788  def int_x86_avx_vbroadcastf128_pd_256 :
1789        GCCBuiltin<"__builtin_ia32_vbroadcastf128_pd256">,
1790        Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
1791  def int_x86_avx_vbroadcastf128_ps_256 :
1792        GCCBuiltin<"__builtin_ia32_vbroadcastf128_ps256">,
1793        Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
1794}
1795
1796// SIMD load ops
1797let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1798  def int_x86_avx_ldu_dq_256 : GCCBuiltin<"__builtin_ia32_lddqu256">,
1799        Intrinsic<[llvm_v32i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
1800}
1801
1802// SIMD store ops
1803let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1804  def int_x86_avx_storeu_pd_256 : GCCBuiltin<"__builtin_ia32_storeupd256">,
1805        Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty], [IntrReadWriteArgMem]>;
1806  def int_x86_avx_storeu_ps_256 : GCCBuiltin<"__builtin_ia32_storeups256">,
1807        Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty], [IntrReadWriteArgMem]>;
1808  def int_x86_avx_storeu_dq_256 : GCCBuiltin<"__builtin_ia32_storedqu256">,
1809        Intrinsic<[], [llvm_ptr_ty, llvm_v32i8_ty], [IntrReadWriteArgMem]>;
1810}
1811
1812// Conditional load ops
1813let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1814  def int_x86_avx_maskload_pd : GCCBuiltin<"__builtin_ia32_maskloadpd">,
1815        Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2i64_ty],
1816                  [IntrReadArgMem]>;
1817  def int_x86_avx_maskload_ps : GCCBuiltin<"__builtin_ia32_maskloadps">,
1818        Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4i32_ty],
1819                  [IntrReadArgMem]>;
1820  def int_x86_avx_maskload_pd_256 : GCCBuiltin<"__builtin_ia32_maskloadpd256">,
1821        Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4i64_ty],
1822                  [IntrReadArgMem]>;
1823  def int_x86_avx_maskload_ps_256 : GCCBuiltin<"__builtin_ia32_maskloadps256">,
1824        Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8i32_ty],
1825                  [IntrReadArgMem]>;
1826  def int_x86_avx512_mask_loadu_ps_512 : GCCBuiltin<"__builtin_ia32_loadups512_mask">,
1827        Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
1828                  [IntrReadArgMem]>;
1829  def int_x86_avx512_mask_loadu_pd_512 : GCCBuiltin<"__builtin_ia32_loadupd512_mask">,
1830        Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
1831                  [IntrReadArgMem]>;
1832  def int_x86_avx512_mask_load_ps_512 : GCCBuiltin<"__builtin_ia32_loadaps512_mask">,
1833        Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
1834                  [IntrReadArgMem]>;
1835  def int_x86_avx512_mask_load_pd_512 : GCCBuiltin<"__builtin_ia32_loadapd512_mask">,
1836        Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
1837                  [IntrReadArgMem]>;
1838
1839  def int_x86_avx512_mask_move_ss : GCCBuiltin<"__builtin_ia32_movss_mask">,
1840        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
1841                  [IntrNoMem]>;
1842  def int_x86_avx512_mask_move_sd : GCCBuiltin<"__builtin_ia32_movsd_mask">,
1843        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
1844                  [IntrNoMem]>;
1845}
1846
1847// Conditional store ops
1848let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1849  def int_x86_avx_maskstore_pd : GCCBuiltin<"__builtin_ia32_maskstorepd">,
1850        Intrinsic<[], [llvm_ptr_ty,
1851                  llvm_v2i64_ty, llvm_v2f64_ty], [IntrReadWriteArgMem]>;
1852  def int_x86_avx_maskstore_ps : GCCBuiltin<"__builtin_ia32_maskstoreps">,
1853        Intrinsic<[], [llvm_ptr_ty,
1854                  llvm_v4i32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
1855  def int_x86_avx_maskstore_pd_256 :
1856        GCCBuiltin<"__builtin_ia32_maskstorepd256">,
1857        Intrinsic<[], [llvm_ptr_ty,
1858                  llvm_v4i64_ty, llvm_v4f64_ty], [IntrReadWriteArgMem]>;
1859  def int_x86_avx_maskstore_ps_256 :
1860        GCCBuiltin<"__builtin_ia32_maskstoreps256">,
1861        Intrinsic<[], [llvm_ptr_ty,
1862                  llvm_v8i32_ty, llvm_v8f32_ty], [IntrReadWriteArgMem]>;
1863  def int_x86_avx512_mask_storeu_ps_512 :
1864        GCCBuiltin<"__builtin_ia32_storeups512_mask">,
1865        Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
1866                  [IntrReadWriteArgMem]>;
1867  def int_x86_avx512_mask_storeu_pd_512 :
1868        GCCBuiltin<"__builtin_ia32_storeupd512_mask">,
1869        Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
1870                  [IntrReadWriteArgMem]>;
1871  def int_x86_avx512_mask_store_ps_512 :
1872        GCCBuiltin<"__builtin_ia32_storeaps512_mask">,
1873        Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
1874                  [IntrReadWriteArgMem]>;
1875  def int_x86_avx512_mask_store_pd_512 :
1876        GCCBuiltin<"__builtin_ia32_storeapd512_mask">,
1877        Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
1878                  [IntrReadWriteArgMem]>;
1879  def int_x86_avx512_mask_store_ss :
1880        GCCBuiltin<"__builtin_ia32_storess_mask">,
1881        Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty, llvm_i8_ty],
1882                  [IntrReadWriteArgMem]>;
1883}
1884
1885//===----------------------------------------------------------------------===//
1886// AVX2
1887
1888// Integer arithmetic ops.
1889let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1890  def int_x86_avx2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb256">,
1891              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
1892                         llvm_v32i8_ty], [IntrNoMem, Commutative]>;
1893  def int_x86_avx2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw256">,
1894              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1895                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1896  def int_x86_avx2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb256">,
1897              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
1898                         llvm_v32i8_ty], [IntrNoMem, Commutative]>;
1899  def int_x86_avx2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw256">,
1900              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1901                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1902  def int_x86_avx2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb256">,
1903              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
1904                         llvm_v32i8_ty], [IntrNoMem]>;
1905  def int_x86_avx2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw256">,
1906              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1907                         llvm_v16i16_ty], [IntrNoMem]>;
1908  def int_x86_avx2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb256">,
1909              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
1910                         llvm_v32i8_ty], [IntrNoMem]>;
1911  def int_x86_avx2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw256">,
1912              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1913                         llvm_v16i16_ty], [IntrNoMem]>;
1914  def int_x86_avx2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw256">,
1915              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1916                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1917  def int_x86_avx2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw256">,
1918              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1919                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1920  def int_x86_avx2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq256">,
1921              Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
1922                         llvm_v8i32_ty], [IntrNoMem, Commutative]>;
1923  def int_x86_avx2_pmul_dq : GCCBuiltin<"__builtin_ia32_pmuldq256">,
1924              Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
1925                         llvm_v8i32_ty], [IntrNoMem, Commutative]>;
1926  def int_x86_avx2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd256">,
1927              Intrinsic<[llvm_v8i32_ty], [llvm_v16i16_ty,
1928                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1929  def int_x86_avx2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb256">,
1930              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
1931                         llvm_v32i8_ty], [IntrNoMem, Commutative]>;
1932  def int_x86_avx2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw256">,
1933              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1934                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1935  def int_x86_avx2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw256">,
1936              Intrinsic<[llvm_v4i64_ty], [llvm_v32i8_ty,
1937                         llvm_v32i8_ty], [IntrNoMem, Commutative]>;
1938}
1939
1940// Vector min, max
1941let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
1942  def int_x86_avx2_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub256">,
1943              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
1944                         llvm_v32i8_ty], [IntrNoMem, Commutative]>;
1945  def int_x86_avx2_pmaxu_w : GCCBuiltin<"__builtin_ia32_pmaxuw256">,
1946              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1947                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1948  def int_x86_avx2_pmaxu_d : GCCBuiltin<"__builtin_ia32_pmaxud256">,
1949              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
1950                         llvm_v8i32_ty], [IntrNoMem, Commutative]>;
1951  def int_x86_avx2_pmaxs_b : GCCBuiltin<"__builtin_ia32_pmaxsb256">,
1952              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
1953                         llvm_v32i8_ty], [IntrNoMem, Commutative]>;
1954  def int_x86_avx2_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw256">,
1955              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1956                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1957  def int_x86_avx2_pmaxs_d : GCCBuiltin<"__builtin_ia32_pmaxsd256">,
1958              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
1959                         llvm_v8i32_ty], [IntrNoMem, Commutative]>;
1960  def int_x86_avx2_pminu_b : GCCBuiltin<"__builtin_ia32_pminub256">,
1961              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
1962                         llvm_v32i8_ty], [IntrNoMem, Commutative]>;
1963  def int_x86_avx2_pminu_w : GCCBuiltin<"__builtin_ia32_pminuw256">,
1964              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1965                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1966  def int_x86_avx2_pminu_d : GCCBuiltin<"__builtin_ia32_pminud256">,
1967              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
1968                         llvm_v8i32_ty], [IntrNoMem, Commutative]>;
1969  def int_x86_avx2_pmins_b : GCCBuiltin<"__builtin_ia32_pminsb256">,
1970              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
1971                         llvm_v32i8_ty], [IntrNoMem, Commutative]>;
1972  def int_x86_avx2_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw256">,
1973              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
1974                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
1975  def int_x86_avx2_pmins_d : GCCBuiltin<"__builtin_ia32_pminsd256">,
1976              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
1977                         llvm_v8i32_ty], [IntrNoMem, Commutative]>;
1978  def int_x86_avx512_mask_pmaxs_b_128 : GCCBuiltin<"__builtin_ia32_pmaxsb128_mask">,
1979              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
1980                         llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
1981  def int_x86_avx512_mask_pmaxs_b_256 : GCCBuiltin<"__builtin_ia32_pmaxsb256_mask">,
1982              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
1983                         llvm_v32i8_ty,  llvm_i32_ty], [IntrNoMem]>;
1984  def int_x86_avx512_mask_pmaxs_b_512 : GCCBuiltin<"__builtin_ia32_pmaxsb512_mask">,
1985              Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
1986                         llvm_v64i8_ty,  llvm_i64_ty], [IntrNoMem]>;
1987  def int_x86_avx512_mask_pmaxu_b_128 : GCCBuiltin<"__builtin_ia32_pmaxub128_mask">,
1988              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
1989                         llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
1990  def int_x86_avx512_mask_pmaxu_b_256 : GCCBuiltin<"__builtin_ia32_pmaxub256_mask">,
1991              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
1992                         llvm_v32i8_ty,  llvm_i32_ty], [IntrNoMem]>;
1993  def int_x86_avx512_mask_pmaxu_b_512 : GCCBuiltin<"__builtin_ia32_pmaxub512_mask">,
1994              Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
1995                         llvm_v64i8_ty,  llvm_i64_ty], [IntrNoMem]>;
1996  def int_x86_avx512_mask_pmaxs_w_128 : GCCBuiltin<"__builtin_ia32_pmaxsw128_mask">,
1997              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
1998                         llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
1999  def int_x86_avx512_mask_pmaxs_w_256 : GCCBuiltin<"__builtin_ia32_pmaxsw256_mask">,
2000              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
2001                         llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
2002  def int_x86_avx512_mask_pmaxs_w_512 : GCCBuiltin<"__builtin_ia32_pmaxsw512_mask">,
2003              Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
2004                   llvm_v32i16_ty,  llvm_i32_ty],[IntrNoMem]>;
2005  def int_x86_avx512_mask_pmaxu_w_128 : GCCBuiltin<"__builtin_ia32_pmaxuw128_mask">,
2006              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
2007                         llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
2008  def int_x86_avx512_mask_pmaxu_w_256 : GCCBuiltin<"__builtin_ia32_pmaxuw256_mask">,
2009              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
2010                         llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
2011  def int_x86_avx512_mask_pmaxu_w_512 : GCCBuiltin<"__builtin_ia32_pmaxuw512_mask">,
2012              Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
2013                         llvm_v32i16_ty,  llvm_i32_ty],[IntrNoMem]>;
2014  def int_x86_avx512_mask_pmins_b_128 : GCCBuiltin<"__builtin_ia32_pminsb128_mask">,
2015              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
2016                         llvm_v16i8_ty,llvm_i16_ty], [IntrNoMem]>;
2017  def int_x86_avx512_mask_pmins_b_256 : GCCBuiltin<"__builtin_ia32_pminsb256_mask">,
2018              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
2019                         llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
2020  def int_x86_avx512_mask_pmins_b_512 : GCCBuiltin<"__builtin_ia32_pminsb512_mask">,
2021              Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
2022                         llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
2023  def int_x86_avx512_mask_pminu_b_128 : GCCBuiltin<"__builtin_ia32_pminub128_mask">,
2024              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
2025                         llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
2026  def int_x86_avx512_mask_pminu_b_256 : GCCBuiltin<"__builtin_ia32_pminub256_mask">,
2027              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
2028                         llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
2029  def int_x86_avx512_mask_pminu_b_512 : GCCBuiltin<"__builtin_ia32_pminub512_mask">,
2030              Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
2031                         llvm_v64i8_ty,  llvm_i64_ty], [IntrNoMem]>;
2032  def int_x86_avx512_mask_pmins_w_128 : GCCBuiltin<"__builtin_ia32_pminsw128_mask">,
2033              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
2034                         llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
2035  def int_x86_avx512_mask_pmins_w_256 : GCCBuiltin<"__builtin_ia32_pminsw256_mask">,
2036              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
2037                         llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
2038  def int_x86_avx512_mask_pmins_w_512 : GCCBuiltin<"__builtin_ia32_pminsw512_mask">,
2039              Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
2040                         llvm_v32i16_ty,  llvm_i32_ty],[IntrNoMem]>;
2041  def int_x86_avx512_mask_pminu_w_128 : GCCBuiltin<"__builtin_ia32_pminuw128_mask">,
2042              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
2043                         llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
2044  def int_x86_avx512_mask_pminu_w_256 : GCCBuiltin<"__builtin_ia32_pminuw256_mask">,
2045              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
2046                         llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
2047  def int_x86_avx512_mask_pminu_w_512 : GCCBuiltin<"__builtin_ia32_pminuw512_mask">,
2048              Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
2049                         llvm_v32i16_ty,  llvm_i32_ty], [IntrNoMem]>;
2050  def int_x86_avx512_mask_pmaxu_d_512 : GCCBuiltin<"__builtin_ia32_pmaxud512_mask">,
2051              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
2052                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2053  def int_x86_avx512_mask_pmaxu_d_256 : GCCBuiltin<"__builtin_ia32_pmaxud256_mask">,
2054              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
2055                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
2056  def int_x86_avx512_mask_pmaxu_d_128 : GCCBuiltin<"__builtin_ia32_pmaxud128_mask">,
2057              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
2058                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
2059  def int_x86_avx512_mask_pmaxs_d_512 : GCCBuiltin<"__builtin_ia32_pmaxsd512_mask">,
2060              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
2061                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2062  def int_x86_avx512_mask_pmaxs_d_256 : GCCBuiltin<"__builtin_ia32_pmaxsd256_mask">,
2063              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
2064                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
2065  def int_x86_avx512_mask_pmaxs_d_128 : GCCBuiltin<"__builtin_ia32_pmaxsd128_mask">,
2066              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
2067                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
2068  def int_x86_avx512_mask_pmaxu_q_512 : GCCBuiltin<"__builtin_ia32_pmaxuq512_mask">,
2069              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
2070                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2071  def int_x86_avx512_mask_pmaxu_q_256 : GCCBuiltin<"__builtin_ia32_pmaxuq256_mask">,
2072              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
2073                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
2074  def int_x86_avx512_mask_pmaxu_q_128 : GCCBuiltin<"__builtin_ia32_pmaxuq128_mask">,
2075              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
2076                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
2077  def int_x86_avx512_mask_pmaxs_q_512 : GCCBuiltin<"__builtin_ia32_pmaxsq512_mask">,
2078              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
2079                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2080  def int_x86_avx512_mask_pmaxs_q_256 : GCCBuiltin<"__builtin_ia32_pmaxsq256_mask">,
2081              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
2082                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
2083  def int_x86_avx512_mask_pmaxs_q_128 : GCCBuiltin<"__builtin_ia32_pmaxsq128_mask">,
2084              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
2085                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
2086  def int_x86_avx512_mask_pminu_d_512 : GCCBuiltin<"__builtin_ia32_pminud512_mask">,
2087              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
2088                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2089  def int_x86_avx512_mask_pminu_d_256 : GCCBuiltin<"__builtin_ia32_pminud256_mask">,
2090              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
2091                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
2092  def int_x86_avx512_mask_pminu_d_128 : GCCBuiltin<"__builtin_ia32_pminud128_mask">,
2093              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
2094                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
2095  def int_x86_avx512_mask_pmins_d_512 : GCCBuiltin<"__builtin_ia32_pminsd512_mask">,
2096              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
2097                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2098  def int_x86_avx512_mask_pmins_d_256 : GCCBuiltin<"__builtin_ia32_pminsd256_mask">,
2099              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
2100                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
2101  def int_x86_avx512_mask_pmins_d_128 : GCCBuiltin<"__builtin_ia32_pminsd128_mask">,
2102              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
2103                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
2104  def int_x86_avx512_mask_pminu_q_512 : GCCBuiltin<"__builtin_ia32_pminuq512_mask">,
2105              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
2106                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2107  def int_x86_avx512_mask_pminu_q_256 : GCCBuiltin<"__builtin_ia32_pminuq256_mask">,
2108              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
2109                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
2110  def int_x86_avx512_mask_pminu_q_128 : GCCBuiltin<"__builtin_ia32_pminuq128_mask">,
2111              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
2112                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
2113  def int_x86_avx512_mask_pmins_q_512 : GCCBuiltin<"__builtin_ia32_pminsq512_mask">,
2114              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
2115                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2116  def int_x86_avx512_mask_pmins_q_256 : GCCBuiltin<"__builtin_ia32_pminsq256_mask">,
2117              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
2118                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
2119  def int_x86_avx512_mask_pmins_q_128 : GCCBuiltin<"__builtin_ia32_pminsq128_mask">,
2120              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
2121                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
2122}
2123
2124// Integer shift ops.
2125let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2126  def int_x86_avx2_psll_w : GCCBuiltin<"__builtin_ia32_psllw256">,
2127              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2128                         llvm_v8i16_ty], [IntrNoMem]>;
2129  def int_x86_avx2_psll_d : GCCBuiltin<"__builtin_ia32_pslld256">,
2130              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2131                         llvm_v4i32_ty], [IntrNoMem]>;
2132  def int_x86_avx2_psll_q : GCCBuiltin<"__builtin_ia32_psllq256">,
2133              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
2134                         llvm_v2i64_ty], [IntrNoMem]>;
2135  def int_x86_avx2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw256">,
2136              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2137                         llvm_v8i16_ty], [IntrNoMem]>;
2138  def int_x86_avx2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld256">,
2139              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2140                         llvm_v4i32_ty], [IntrNoMem]>;
2141  def int_x86_avx2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq256">,
2142              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
2143                         llvm_v2i64_ty], [IntrNoMem]>;
2144  def int_x86_avx2_psra_w : GCCBuiltin<"__builtin_ia32_psraw256">,
2145              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2146                         llvm_v8i16_ty], [IntrNoMem]>;
2147  def int_x86_avx2_psra_d : GCCBuiltin<"__builtin_ia32_psrad256">,
2148              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2149                         llvm_v4i32_ty], [IntrNoMem]>;
2150
2151  def int_x86_avx2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi256">,
2152              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2153                         llvm_i32_ty], [IntrNoMem]>;
2154  def int_x86_avx2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi256">,
2155              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2156                         llvm_i32_ty], [IntrNoMem]>;
2157  def int_x86_avx2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi256">,
2158              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
2159                         llvm_i32_ty], [IntrNoMem]>;
2160  def int_x86_avx2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi256">,
2161              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2162                         llvm_i32_ty], [IntrNoMem]>;
2163  def int_x86_avx2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi256">,
2164              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2165                         llvm_i32_ty], [IntrNoMem]>;
2166  def int_x86_avx2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi256">,
2167              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
2168                         llvm_i32_ty], [IntrNoMem]>;
2169  def int_x86_avx2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi256">,
2170              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2171                         llvm_i32_ty], [IntrNoMem]>;
2172  def int_x86_avx2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi256">,
2173              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2174                         llvm_i32_ty], [IntrNoMem]>;
2175
2176  def int_x86_avx512_mask_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi512">,
2177              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2178                         llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2179  def int_x86_avx512_mask_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi512">,
2180              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2181                         llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2182  def int_x86_avx512_mask_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi512">,
2183              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2184                         llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2185  def int_x86_avx512_mask_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi512">,
2186              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2187                         llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2188  def int_x86_avx512_mask_psrai_d : GCCBuiltin<"__builtin_ia32_psradi512">,
2189              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2190                         llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2191  def int_x86_avx512_mask_psrai_q : GCCBuiltin<"__builtin_ia32_psraqi512">,
2192              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2193                         llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2194
2195  def int_x86_avx512_mask_psll_d : GCCBuiltin<"__builtin_ia32_pslld512_mask">,
2196              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2197                         llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2198  def int_x86_avx512_mask_psll_q : GCCBuiltin<"__builtin_ia32_psllq512_mask">,
2199              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2200                         llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2201  def int_x86_avx512_mask_psrl_d : GCCBuiltin<"__builtin_ia32_psrld512_mask">,
2202              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2203                         llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2204  def int_x86_avx512_mask_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq512_mask">,
2205              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2206                         llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2207  def int_x86_avx512_mask_psra_d : GCCBuiltin<"__builtin_ia32_psrad512_mask">,
2208              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2209                         llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2210  def int_x86_avx512_mask_psra_q : GCCBuiltin<"__builtin_ia32_psraq512_mask">,
2211              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2212                         llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2213}
2214
2215// Pack ops.
2216let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2217  def int_x86_avx2_packsswb : GCCBuiltin<"__builtin_ia32_packsswb256">,
2218              Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
2219                         llvm_v16i16_ty], [IntrNoMem]>;
2220  def int_x86_avx2_packssdw : GCCBuiltin<"__builtin_ia32_packssdw256">,
2221              Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
2222                         llvm_v8i32_ty], [IntrNoMem]>;
2223  def int_x86_avx2_packuswb : GCCBuiltin<"__builtin_ia32_packuswb256">,
2224              Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
2225                         llvm_v16i16_ty], [IntrNoMem]>;
2226  def int_x86_avx2_packusdw : GCCBuiltin<"__builtin_ia32_packusdw256">,
2227              Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
2228                         llvm_v8i32_ty], [IntrNoMem]>;
2229}
2230
2231// Absolute value ops
2232let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2233  def int_x86_avx2_pabs_b : GCCBuiltin<"__builtin_ia32_pabsb256">,
2234              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty], [IntrNoMem]>;
2235  def int_x86_avx2_pabs_w : GCCBuiltin<"__builtin_ia32_pabsw256">,
2236              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty], [IntrNoMem]>;
2237  def int_x86_avx2_pabs_d : GCCBuiltin<"__builtin_ia32_pabsd256">,
2238              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
2239
2240  def int_x86_avx512_mask_pabs_b_128 :
2241       GCCBuiltin<"__builtin_ia32_pabsb128_mask">,
2242        Intrinsic<[llvm_v16i8_ty],
2243        [llvm_v16i8_ty, llvm_v16i8_ty,  llvm_i16_ty],
2244        [IntrNoMem]>;
2245
2246  def int_x86_avx512_mask_pabs_b_256 :
2247        GCCBuiltin<"__builtin_ia32_pabsb256_mask">,
2248          Intrinsic<[llvm_v32i8_ty],
2249          [llvm_v32i8_ty, llvm_v32i8_ty,  llvm_i32_ty],
2250          [IntrNoMem]>;
2251
2252  def int_x86_avx512_mask_pabs_b_512 :
2253        GCCBuiltin<"__builtin_ia32_pabsb512_mask">,
2254          Intrinsic<[llvm_v64i8_ty],
2255          [llvm_v64i8_ty, llvm_v64i8_ty,  llvm_i64_ty],
2256          [IntrNoMem]>;
2257
2258  def int_x86_avx512_mask_pabs_d_128 :
2259        GCCBuiltin<"__builtin_ia32_pabsd128_mask">,
2260          Intrinsic<[llvm_v4i32_ty],
2261          [llvm_v4i32_ty, llvm_v4i32_ty,  llvm_i8_ty],
2262          [IntrNoMem]>;
2263
2264  def int_x86_avx512_mask_pabs_d_256 :
2265        GCCBuiltin<"__builtin_ia32_pabsd256_mask">,
2266          Intrinsic<[llvm_v8i32_ty],
2267          [llvm_v8i32_ty, llvm_v8i32_ty,  llvm_i8_ty],
2268          [IntrNoMem]>;
2269
2270  def int_x86_avx512_mask_pabs_d_512 :
2271        GCCBuiltin<"__builtin_ia32_pabsd512_mask">,
2272          Intrinsic<[llvm_v16i32_ty],
2273          [llvm_v16i32_ty, llvm_v16i32_ty,  llvm_i16_ty],
2274          [IntrNoMem]>;
2275
2276  def int_x86_avx512_mask_pabs_q_128 :
2277        GCCBuiltin<"__builtin_ia32_pabsq128_mask">,
2278          Intrinsic<[llvm_v2i64_ty],
2279          [llvm_v2i64_ty, llvm_v2i64_ty,  llvm_i8_ty],
2280          [IntrNoMem]>;
2281
2282  def int_x86_avx512_mask_pabs_q_256 :
2283        GCCBuiltin<"__builtin_ia32_pabsq256_mask">,
2284          Intrinsic<[llvm_v4i64_ty],
2285          [llvm_v4i64_ty, llvm_v4i64_ty,  llvm_i8_ty],
2286          [IntrNoMem]>;
2287
2288  def int_x86_avx512_mask_pabs_q_512 :
2289        GCCBuiltin<"__builtin_ia32_pabsq512_mask">,
2290          Intrinsic<[llvm_v8i64_ty],
2291          [llvm_v8i64_ty, llvm_v8i64_ty,  llvm_i8_ty],
2292          [IntrNoMem]>;
2293
2294  def int_x86_avx512_mask_pabs_w_128 :
2295        GCCBuiltin<"__builtin_ia32_pabsw128_mask">,
2296          Intrinsic<[llvm_v8i16_ty],
2297          [llvm_v8i16_ty, llvm_v8i16_ty,  llvm_i8_ty],
2298          [IntrNoMem]>;
2299
2300  def int_x86_avx512_mask_pabs_w_256 :
2301        GCCBuiltin<"__builtin_ia32_pabsw256_mask">,
2302          Intrinsic<[llvm_v16i16_ty],
2303          [llvm_v16i16_ty, llvm_v16i16_ty,  llvm_i16_ty],
2304          [IntrNoMem]>;
2305
2306  def int_x86_avx512_mask_pabs_w_512 :
2307        GCCBuiltin<"__builtin_ia32_pabsw512_mask">,
2308          Intrinsic<[llvm_v32i16_ty],
2309          [llvm_v32i16_ty, llvm_v32i16_ty,  llvm_i32_ty],
2310          [IntrNoMem]>;
2311}
2312
2313// Horizontal arithmetic ops
2314let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2315  def int_x86_avx2_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw256">,
2316              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2317                         llvm_v16i16_ty], [IntrNoMem]>;
2318  def int_x86_avx2_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd256">,
2319              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2320                         llvm_v8i32_ty], [IntrNoMem]>;
2321  def int_x86_avx2_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw256">,
2322              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2323                         llvm_v16i16_ty], [IntrNoMem]>;
2324  def int_x86_avx2_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw256">,
2325              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2326                         llvm_v16i16_ty], [IntrNoMem]>;
2327  def int_x86_avx2_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd256">,
2328              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2329                         llvm_v8i32_ty], [IntrNoMem]>;
2330  def int_x86_avx2_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw256">,
2331              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2332                         llvm_v16i16_ty], [IntrNoMem]>;
2333  def int_x86_avx2_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw256">,
2334              Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty,
2335                         llvm_v32i8_ty], [IntrNoMem]>;
2336}
2337
2338// Sign ops
2339let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2340  def int_x86_avx2_psign_b : GCCBuiltin<"__builtin_ia32_psignb256">,
2341              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
2342                         llvm_v32i8_ty], [IntrNoMem]>;
2343  def int_x86_avx2_psign_w : GCCBuiltin<"__builtin_ia32_psignw256">,
2344              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2345                         llvm_v16i16_ty], [IntrNoMem]>;
2346  def int_x86_avx2_psign_d : GCCBuiltin<"__builtin_ia32_psignd256">,
2347              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2348                         llvm_v8i32_ty], [IntrNoMem]>;
2349}
2350
2351// Packed multiply high with round and scale
2352let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2353  def int_x86_avx2_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw256">,
2354              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2355                         llvm_v16i16_ty], [IntrNoMem, Commutative]>;
2356  def int_x86_avx512_mask_pmul_hr_sw_128 : GCCBuiltin<"__builtin_ia32_pmulhrsw128_mask">,
2357              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
2358                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
2359  def int_x86_avx512_mask_pmul_hr_sw_256 : GCCBuiltin<"__builtin_ia32_pmulhrsw256_mask">,
2360              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
2361                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
2362  def int_x86_avx512_mask_pmul_hr_sw_512 : GCCBuiltin<"__builtin_ia32_pmulhrsw512_mask">,
2363              Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
2364                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
2365}
2366
2367// Vector sign and zero extend
2368let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2369  def int_x86_avx2_pmovsxbd : GCCBuiltin<"__builtin_ia32_pmovsxbd256">,
2370              Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty],
2371                        [IntrNoMem]>;
2372  def int_x86_avx2_pmovsxbq : GCCBuiltin<"__builtin_ia32_pmovsxbq256">,
2373              Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty],
2374                        [IntrNoMem]>;
2375  def int_x86_avx2_pmovsxbw : GCCBuiltin<"__builtin_ia32_pmovsxbw256">,
2376              Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty],
2377                        [IntrNoMem]>;
2378  def int_x86_avx2_pmovsxdq : GCCBuiltin<"__builtin_ia32_pmovsxdq256">,
2379              Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty],
2380                        [IntrNoMem]>;
2381  def int_x86_avx2_pmovsxwd : GCCBuiltin<"__builtin_ia32_pmovsxwd256">,
2382              Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty],
2383                        [IntrNoMem]>;
2384  def int_x86_avx2_pmovsxwq : GCCBuiltin<"__builtin_ia32_pmovsxwq256">,
2385              Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty],
2386                        [IntrNoMem]>;
2387  def int_x86_avx2_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd256">,
2388              Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty],
2389                        [IntrNoMem]>;
2390  def int_x86_avx2_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq256">,
2391              Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty],
2392                        [IntrNoMem]>;
2393  def int_x86_avx2_pmovzxbw : GCCBuiltin<"__builtin_ia32_pmovzxbw256">,
2394              Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty],
2395                        [IntrNoMem]>;
2396  def int_x86_avx2_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq256">,
2397              Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty],
2398                        [IntrNoMem]>;
2399  def int_x86_avx2_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd256">,
2400              Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty],
2401                        [IntrNoMem]>;
2402  def int_x86_avx2_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq256">,
2403              Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty],
2404                        [IntrNoMem]>;
2405}
2406
2407// Vector blend
2408let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2409  def int_x86_avx2_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb256">,
2410              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
2411                         llvm_v32i8_ty], [IntrNoMem]>;
2412}
2413
2414// Vector load with broadcast
2415let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2416  def int_x86_avx512_mask_pbroadcast_d_gpr_512 :
2417              GCCBuiltin<"__builtin_ia32_pbroadcastd512_gpr_mask">,
2418              Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty, llvm_v16i32_ty,
2419              llvm_i16_ty], [IntrNoMem]>;
2420  def int_x86_avx512_mask_pbroadcast_q_gpr_512 :
2421              GCCBuiltin<"__builtin_ia32_pbroadcastq512_gpr_mask">,
2422              Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty,
2423              llvm_i8_ty], [IntrNoMem]>;
2424  def int_x86_avx512_mask_pbroadcast_q_mem_512 :
2425              GCCBuiltin<"__builtin_ia32_pbroadcastq512_mem_mask">,
2426              Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty,
2427              llvm_i8_ty], [IntrNoMem]>;
2428}
2429
2430// Vector permutation
2431let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2432  def int_x86_avx2_permd : GCCBuiltin<"__builtin_ia32_permvarsi256">,
2433              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
2434                        [IntrNoMem]>;
2435  def int_x86_avx2_permps : GCCBuiltin<"__builtin_ia32_permvarsf256">,
2436              Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty],
2437                        [IntrNoMem]>;
2438  def int_x86_avx2_vperm2i128 : GCCBuiltin<"__builtin_ia32_permti256">,
2439              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
2440                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
2441}
2442
2443// Vector extract and insert
2444let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2445  def int_x86_avx512_mask_vextractf32x4_512 :
2446      GCCBuiltin<"__builtin_ia32_extractf32x4_mask">,
2447                 Intrinsic<[llvm_v4f32_ty], [llvm_v16f32_ty, llvm_i32_ty,
2448                            llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
2449  def int_x86_avx512_mask_vextracti32x4_512 :
2450      GCCBuiltin<"__builtin_ia32_extracti32x4_mask">,
2451                 Intrinsic<[llvm_v4i32_ty], [llvm_v16i32_ty, llvm_i32_ty,
2452                            llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
2453  def int_x86_avx512_mask_vextractf32x4_256 :
2454      GCCBuiltin<"__builtin_ia32_extractf32x4_256_mask">,
2455                 Intrinsic<[llvm_v4f32_ty], [llvm_v8f32_ty, llvm_i32_ty,
2456                            llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
2457  def int_x86_avx512_mask_vextracti32x4_256 :
2458      GCCBuiltin<"__builtin_ia32_extracti32x4_256_mask">,
2459                 Intrinsic<[llvm_v4i32_ty], [llvm_v8i32_ty, llvm_i32_ty,
2460                            llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
2461  def int_x86_avx512_mask_vextractf64x2_256 :
2462      GCCBuiltin<"__builtin_ia32_extractf64x2_256_mask">,
2463                 Intrinsic<[llvm_v2f64_ty], [llvm_v4f64_ty, llvm_i32_ty,
2464                            llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
2465  def int_x86_avx512_mask_vextracti64x2_256 :
2466      GCCBuiltin<"__builtin_ia32_extracti64x2_256_mask">,
2467                 Intrinsic<[llvm_v2i64_ty], [llvm_v4i64_ty, llvm_i32_ty,
2468                            llvm_v2i64_ty,  llvm_i8_ty], [IntrNoMem]>;
2469  def int_x86_avx512_mask_vextractf64x2_512 :
2470      GCCBuiltin<"__builtin_ia32_extractf64x2_512_mask">,
2471                 Intrinsic<[llvm_v2f64_ty], [llvm_v8f64_ty, llvm_i32_ty,
2472                            llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
2473  def int_x86_avx512_mask_vextracti64x2_512 :
2474      GCCBuiltin<"__builtin_ia32_extracti64x2_512_mask">,
2475                 Intrinsic<[llvm_v2i64_ty], [llvm_v8i64_ty, llvm_i32_ty,
2476                            llvm_v2i64_ty,  llvm_i8_ty], [IntrNoMem]>;
2477  def int_x86_avx512_mask_vextractf32x8_512 :
2478      GCCBuiltin<"__builtin_ia32_extractf32x8_mask">,
2479                 Intrinsic<[llvm_v8f32_ty], [llvm_v16f32_ty, llvm_i32_ty,
2480                            llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
2481  def int_x86_avx512_mask_vextracti32x8_512 :
2482      GCCBuiltin<"__builtin_ia32_extracti32x8_mask">,
2483                 Intrinsic<[llvm_v8i32_ty],[llvm_v16i32_ty, llvm_i32_ty,
2484                            llvm_v8i32_ty,  llvm_i8_ty], [IntrNoMem]>;
2485  def int_x86_avx512_mask_vextractf64x4_512 :
2486      GCCBuiltin<"__builtin_ia32_extractf64x4_mask">,
2487                 Intrinsic<[llvm_v4f64_ty], [llvm_v8f64_ty, llvm_i32_ty,
2488                            llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
2489  def int_x86_avx512_mask_vextracti64x4_512 :
2490      GCCBuiltin<"__builtin_ia32_extracti64x4_mask">,
2491                 Intrinsic<[llvm_v4i64_ty], [llvm_v8i64_ty, llvm_i32_ty,
2492                            llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
2493
2494  def int_x86_avx512_mask_insertf32x4_256 :
2495        GCCBuiltin<"__builtin_ia32_insertf32x4_256_mask">,
2496          Intrinsic<[llvm_v8f32_ty],
2497          [llvm_v8f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty],
2498          [IntrNoMem]>;
2499
2500  def int_x86_avx512_mask_insertf32x4_512 :
2501        GCCBuiltin<"__builtin_ia32_insertf32x4_512_mask">,
2502          Intrinsic<[llvm_v16f32_ty],
2503          [llvm_v16f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v16f32_ty, llvm_i8_ty],
2504          [IntrNoMem]>;
2505
2506  def int_x86_avx512_mask_insertf32x8_512 :
2507        GCCBuiltin<"__builtin_ia32_insertf32x8_mask">,
2508          Intrinsic<[llvm_v16f32_ty],
2509          [llvm_v16f32_ty, llvm_v8f32_ty, llvm_i32_ty, llvm_v16f32_ty, llvm_i16_ty],
2510          [IntrNoMem]>;
2511
2512  def int_x86_avx512_mask_insertf64x2_256 :
2513        GCCBuiltin<"__builtin_ia32_insertf64x2_256_mask">,
2514          Intrinsic<[llvm_v4f64_ty],
2515          [llvm_v4f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty],
2516          [IntrNoMem]>;
2517
2518  def int_x86_avx512_mask_insertf64x2_512 :
2519        GCCBuiltin<"__builtin_ia32_insertf64x2_512_mask">,
2520          Intrinsic<[llvm_v8f64_ty],
2521          [llvm_v8f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty],
2522          [IntrNoMem]>;
2523
2524  def int_x86_avx512_mask_insertf64x4_512 :
2525        GCCBuiltin<"__builtin_ia32_insertf64x4_mask">,
2526          Intrinsic<[llvm_v8f64_ty],
2527          [llvm_v8f64_ty, llvm_v4f64_ty, llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty],
2528          [IntrNoMem]>;
2529
2530  def int_x86_avx512_mask_inserti32x4_256 :
2531        GCCBuiltin<"__builtin_ia32_inserti32x4_256_mask">,
2532          Intrinsic<[llvm_v8i32_ty],
2533          [llvm_v8i32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_v8i32_ty, llvm_i8_ty],
2534          [IntrNoMem]>;
2535
2536  def int_x86_avx512_mask_inserti32x4_512 :
2537        GCCBuiltin<"__builtin_ia32_inserti32x4_512_mask">,
2538          Intrinsic<[llvm_v16i32_ty],
2539          [llvm_v16i32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_v16i32_ty, llvm_i8_ty],
2540          [IntrNoMem]>;
2541
2542  def int_x86_avx512_mask_inserti32x8_512 :
2543        GCCBuiltin<"__builtin_ia32_inserti32x8_mask">,
2544          Intrinsic<[llvm_v16i32_ty],
2545          [llvm_v16i32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty],
2546          [IntrNoMem]>;
2547
2548  def int_x86_avx512_mask_inserti64x2_256 :
2549        GCCBuiltin<"__builtin_ia32_inserti64x2_256_mask">,
2550          Intrinsic<[llvm_v4i64_ty],
2551          [llvm_v4i64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_v4i64_ty, llvm_i8_ty],
2552          [IntrNoMem]>;
2553
2554  def int_x86_avx512_mask_inserti64x2_512 :
2555        GCCBuiltin<"__builtin_ia32_inserti64x2_512_mask">,
2556          Intrinsic<[llvm_v8i64_ty],
2557          [llvm_v8i64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty],
2558          [IntrNoMem]>;
2559
2560  def int_x86_avx512_mask_inserti64x4_512 :
2561        GCCBuiltin<"__builtin_ia32_inserti64x4_mask">,
2562          Intrinsic<[llvm_v8i64_ty],
2563          [llvm_v8i64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty],
2564          [IntrNoMem]>;
2565}
2566
2567// Conditional load ops
2568let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2569  def int_x86_avx2_maskload_d : GCCBuiltin<"__builtin_ia32_maskloadd">,
2570        Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty],
2571                  [IntrReadArgMem]>;
2572  def int_x86_avx2_maskload_q : GCCBuiltin<"__builtin_ia32_maskloadq">,
2573        Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty],
2574                  [IntrReadArgMem]>;
2575  def int_x86_avx2_maskload_d_256 : GCCBuiltin<"__builtin_ia32_maskloadd256">,
2576        Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty],
2577                  [IntrReadArgMem]>;
2578  def int_x86_avx2_maskload_q_256 : GCCBuiltin<"__builtin_ia32_maskloadq256">,
2579        Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty],
2580                  [IntrReadArgMem]>;
2581  def int_x86_avx512_mask_loadu_d_512 : GCCBuiltin<"__builtin_ia32_loaddqusi512_mask">,
2582        Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
2583                  [IntrReadArgMem]>;
2584  def int_x86_avx512_mask_loadu_q_512 : GCCBuiltin<"__builtin_ia32_loaddqudi512_mask">,
2585        Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
2586                  [IntrReadArgMem]>;
2587}
2588
2589// Conditional store ops
2590let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2591  def int_x86_avx2_maskstore_d : GCCBuiltin<"__builtin_ia32_maskstored">,
2592        Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty],
2593                  [IntrReadWriteArgMem]>;
2594  def int_x86_avx2_maskstore_q : GCCBuiltin<"__builtin_ia32_maskstoreq">,
2595        Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty],
2596                  [IntrReadWriteArgMem]>;
2597  def int_x86_avx2_maskstore_d_256 :
2598        GCCBuiltin<"__builtin_ia32_maskstored256">,
2599        Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty],
2600                  [IntrReadWriteArgMem]>;
2601  def int_x86_avx2_maskstore_q_256 :
2602        GCCBuiltin<"__builtin_ia32_maskstoreq256">,
2603        Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty],
2604                  [IntrReadWriteArgMem]>;
2605  def int_x86_avx512_mask_storeu_d_512 :
2606        GCCBuiltin<"__builtin_ia32_storedqusi512_mask">,
2607        Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
2608                  [IntrReadWriteArgMem]>;
2609  def int_x86_avx512_mask_storeu_q_512 :
2610        GCCBuiltin<"__builtin_ia32_storedqudi512_mask">,
2611        Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
2612                  [IntrReadWriteArgMem]>;
2613}
2614
2615// Variable bit shift ops
2616let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2617  def int_x86_avx2_psllv_d : GCCBuiltin<"__builtin_ia32_psllv4si">,
2618              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
2619                        [IntrNoMem]>;
2620  def int_x86_avx2_psllv_d_256 : GCCBuiltin<"__builtin_ia32_psllv8si">,
2621              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
2622                        [IntrNoMem]>;
2623  def int_x86_avx2_psllv_q : GCCBuiltin<"__builtin_ia32_psllv2di">,
2624              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
2625                        [IntrNoMem]>;
2626  def int_x86_avx2_psllv_q_256 : GCCBuiltin<"__builtin_ia32_psllv4di">,
2627              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
2628                        [IntrNoMem]>;
2629
2630  def int_x86_avx2_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv4si">,
2631              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
2632                        [IntrNoMem]>;
2633  def int_x86_avx2_psrlv_d_256 : GCCBuiltin<"__builtin_ia32_psrlv8si">,
2634              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
2635                        [IntrNoMem]>;
2636  def int_x86_avx2_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv2di">,
2637              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
2638                        [IntrNoMem]>;
2639  def int_x86_avx2_psrlv_q_256 : GCCBuiltin<"__builtin_ia32_psrlv4di">,
2640              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
2641                        [IntrNoMem]>;
2642
2643  def int_x86_avx2_psrav_d : GCCBuiltin<"__builtin_ia32_psrav4si">,
2644              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
2645                        [IntrNoMem]>;
2646  def int_x86_avx2_psrav_d_256 : GCCBuiltin<"__builtin_ia32_psrav8si">,
2647              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
2648                        [IntrNoMem]>;
2649
2650  def int_x86_avx512_mask_psllv_d : GCCBuiltin<"__builtin_ia32_psllv16si_mask">,
2651              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2652                         llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
2653                        [IntrNoMem]>;
2654  def int_x86_avx512_mask_psllv_q : GCCBuiltin<"__builtin_ia32_psllv8di_mask">,
2655              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2656                         llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
2657                        [IntrNoMem]>;
2658  def int_x86_avx512_mask_psrav_d : GCCBuiltin<"__builtin_ia32_psrav16si_mask">,
2659              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2660                         llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
2661                        [IntrNoMem]>;
2662  def int_x86_avx512_mask_psrav_q : GCCBuiltin<"__builtin_ia32_psrav8di_mask">,
2663              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2664                         llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
2665                        [IntrNoMem]>;
2666  def int_x86_avx512_mask_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv16si_mask">,
2667              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2668                         llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
2669                        [IntrNoMem]>;
2670  def int_x86_avx512_mask_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv8di_mask">,
2671              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2672                         llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
2673                        [IntrNoMem]>;
2674  def int_x86_avx512_psll_dq_512 : GCCBuiltin<"__builtin_ia32_pslldq512">,
2675              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_i32_ty],
2676                        [IntrNoMem]>;
2677  def int_x86_avx512_psrl_dq_512 : GCCBuiltin<"__builtin_ia32_psrldq512">,
2678              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_i32_ty],
2679                        [IntrNoMem]>;
2680}
2681
2682// Gather ops
2683let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2684  def int_x86_avx2_gather_d_pd : GCCBuiltin<"__builtin_ia32_gatherd_pd">,
2685      Intrinsic<[llvm_v2f64_ty],
2686        [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i8_ty],
2687        [IntrReadArgMem]>;
2688  def int_x86_avx2_gather_d_pd_256 : GCCBuiltin<"__builtin_ia32_gatherd_pd256">,
2689      Intrinsic<[llvm_v4f64_ty],
2690        [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i8_ty],
2691        [IntrReadArgMem]>;
2692  def int_x86_avx2_gather_q_pd : GCCBuiltin<"__builtin_ia32_gatherq_pd">,
2693      Intrinsic<[llvm_v2f64_ty],
2694        [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
2695        [IntrReadArgMem]>;
2696  def int_x86_avx2_gather_q_pd_256 : GCCBuiltin<"__builtin_ia32_gatherq_pd256">,
2697      Intrinsic<[llvm_v4f64_ty],
2698        [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
2699        [IntrReadArgMem]>;
2700  def int_x86_avx2_gather_d_ps : GCCBuiltin<"__builtin_ia32_gatherd_ps">,
2701      Intrinsic<[llvm_v4f32_ty],
2702        [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
2703        [IntrReadArgMem]>;
2704  def int_x86_avx2_gather_d_ps_256 : GCCBuiltin<"__builtin_ia32_gatherd_ps256">,
2705      Intrinsic<[llvm_v8f32_ty],
2706        [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
2707        [IntrReadArgMem]>;
2708  def int_x86_avx2_gather_q_ps : GCCBuiltin<"__builtin_ia32_gatherq_ps">,
2709      Intrinsic<[llvm_v4f32_ty],
2710        [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty],
2711        [IntrReadArgMem]>;
2712  def int_x86_avx2_gather_q_ps_256 : GCCBuiltin<"__builtin_ia32_gatherq_ps256">,
2713      Intrinsic<[llvm_v4f32_ty],
2714        [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty],
2715        [IntrReadArgMem]>;
2716
2717  def int_x86_avx2_gather_d_q : GCCBuiltin<"__builtin_ia32_gatherd_q">,
2718      Intrinsic<[llvm_v2i64_ty],
2719        [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i8_ty],
2720        [IntrReadArgMem]>;
2721  def int_x86_avx2_gather_d_q_256 : GCCBuiltin<"__builtin_ia32_gatherd_q256">,
2722      Intrinsic<[llvm_v4i64_ty],
2723        [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i8_ty],
2724        [IntrReadArgMem]>;
2725  def int_x86_avx2_gather_q_q : GCCBuiltin<"__builtin_ia32_gatherq_q">,
2726      Intrinsic<[llvm_v2i64_ty],
2727        [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
2728        [IntrReadArgMem]>;
2729  def int_x86_avx2_gather_q_q_256 : GCCBuiltin<"__builtin_ia32_gatherq_q256">,
2730      Intrinsic<[llvm_v4i64_ty],
2731        [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
2732        [IntrReadArgMem]>;
2733  def int_x86_avx2_gather_d_d : GCCBuiltin<"__builtin_ia32_gatherd_d">,
2734      Intrinsic<[llvm_v4i32_ty],
2735        [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
2736        [IntrReadArgMem]>;
2737  def int_x86_avx2_gather_d_d_256 : GCCBuiltin<"__builtin_ia32_gatherd_d256">,
2738      Intrinsic<[llvm_v8i32_ty],
2739        [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
2740        [IntrReadArgMem]>;
2741  def int_x86_avx2_gather_q_d : GCCBuiltin<"__builtin_ia32_gatherq_d">,
2742      Intrinsic<[llvm_v4i32_ty],
2743        [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
2744        [IntrReadArgMem]>;
2745  def int_x86_avx2_gather_q_d_256 : GCCBuiltin<"__builtin_ia32_gatherq_d256">,
2746      Intrinsic<[llvm_v4i32_ty],
2747        [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
2748        [IntrReadArgMem]>;
2749}
2750
2751// Misc.
2752let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2753  def int_x86_avx2_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb256">,
2754              Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty], [IntrNoMem]>;
2755  def int_x86_avx2_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb256">,
2756              Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
2757                         llvm_v32i8_ty], [IntrNoMem]>;
2758  def int_x86_avx2_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw256">,
2759              Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
2760                         llvm_i8_ty], [IntrNoMem, Commutative]>;
2761  def int_x86_avx2_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa256">,
2762              Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
2763}
2764
2765//===----------------------------------------------------------------------===//
2766// FMA3 and FMA4
2767
2768let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2769  def int_x86_fma_vfmadd_ss : GCCBuiltin<"__builtin_ia32_vfmaddss">,
2770              Intrinsic<[llvm_v4f32_ty],
2771                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2772                        [IntrNoMem]>;
2773  def int_x86_fma_vfmadd_sd : GCCBuiltin<"__builtin_ia32_vfmaddsd">,
2774              Intrinsic<[llvm_v2f64_ty],
2775                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2776                        [IntrNoMem]>;
2777  def int_x86_fma_vfmadd_ps : GCCBuiltin<"__builtin_ia32_vfmaddps">,
2778              Intrinsic<[llvm_v4f32_ty],
2779                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2780                        [IntrNoMem]>;
2781  def int_x86_fma_vfmadd_pd : GCCBuiltin<"__builtin_ia32_vfmaddpd">,
2782              Intrinsic<[llvm_v2f64_ty],
2783                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2784                        [IntrNoMem]>;
2785  def int_x86_fma_vfmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfmaddps256">,
2786              Intrinsic<[llvm_v8f32_ty],
2787                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2788                        [IntrNoMem]>;
2789  def int_x86_fma_vfmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfmaddpd256">,
2790              Intrinsic<[llvm_v4f64_ty],
2791                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2792                        [IntrNoMem]>;
2793
2794  def int_x86_fma_vfmsub_ss : GCCBuiltin<"__builtin_ia32_vfmsubss">,
2795              Intrinsic<[llvm_v4f32_ty],
2796                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2797                        [IntrNoMem]>;
2798  def int_x86_fma_vfmsub_sd : GCCBuiltin<"__builtin_ia32_vfmsubsd">,
2799              Intrinsic<[llvm_v2f64_ty],
2800                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2801                        [IntrNoMem]>;
2802  def int_x86_fma_vfmsub_ps : GCCBuiltin<"__builtin_ia32_vfmsubps">,
2803              Intrinsic<[llvm_v4f32_ty],
2804                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2805                        [IntrNoMem]>;
2806  def int_x86_fma_vfmsub_pd : GCCBuiltin<"__builtin_ia32_vfmsubpd">,
2807              Intrinsic<[llvm_v2f64_ty],
2808                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2809                        [IntrNoMem]>;
2810  def int_x86_fma_vfmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfmsubps256">,
2811              Intrinsic<[llvm_v8f32_ty],
2812                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2813                        [IntrNoMem]>;
2814  def int_x86_fma_vfmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfmsubpd256">,
2815              Intrinsic<[llvm_v4f64_ty],
2816                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2817                        [IntrNoMem]>;
2818  def int_x86_fma_vfnmadd_ss : GCCBuiltin<"__builtin_ia32_vfnmaddss">,
2819              Intrinsic<[llvm_v4f32_ty],
2820                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2821                        [IntrNoMem]>;
2822  def int_x86_fma_vfnmadd_sd : GCCBuiltin<"__builtin_ia32_vfnmaddsd">,
2823              Intrinsic<[llvm_v2f64_ty],
2824                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2825                        [IntrNoMem]>;
2826  def int_x86_fma_vfnmadd_ps : GCCBuiltin<"__builtin_ia32_vfnmaddps">,
2827              Intrinsic<[llvm_v4f32_ty],
2828                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2829                        [IntrNoMem]>;
2830  def int_x86_fma_vfnmadd_pd : GCCBuiltin<"__builtin_ia32_vfnmaddpd">,
2831              Intrinsic<[llvm_v2f64_ty],
2832                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2833                        [IntrNoMem]>;
2834  def int_x86_fma_vfnmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmaddps256">,
2835              Intrinsic<[llvm_v8f32_ty],
2836                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2837                        [IntrNoMem]>;
2838  def int_x86_fma_vfnmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmaddpd256">,
2839              Intrinsic<[llvm_v4f64_ty],
2840                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2841                        [IntrNoMem]>;
2842  def int_x86_fma_vfnmsub_ss : GCCBuiltin<"__builtin_ia32_vfnmsubss">,
2843              Intrinsic<[llvm_v4f32_ty],
2844                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2845                        [IntrNoMem]>;
2846  def int_x86_fma_vfnmsub_sd : GCCBuiltin<"__builtin_ia32_vfnmsubsd">,
2847              Intrinsic<[llvm_v2f64_ty],
2848                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2849                        [IntrNoMem]>;
2850  def int_x86_fma_vfnmsub_ps : GCCBuiltin<"__builtin_ia32_vfnmsubps">,
2851              Intrinsic<[llvm_v4f32_ty],
2852                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2853                        [IntrNoMem]>;
2854  def int_x86_fma_vfnmsub_pd : GCCBuiltin<"__builtin_ia32_vfnmsubpd">,
2855              Intrinsic<[llvm_v2f64_ty],
2856                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2857                        [IntrNoMem]>;
2858  def int_x86_fma_vfnmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmsubps256">,
2859              Intrinsic<[llvm_v8f32_ty],
2860                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2861                        [IntrNoMem]>;
2862  def int_x86_fma_vfnmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmsubpd256">,
2863              Intrinsic<[llvm_v4f64_ty],
2864                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2865                        [IntrNoMem]>;
2866  def int_x86_fma_vfmaddsub_ps : GCCBuiltin<"__builtin_ia32_vfmaddsubps">,
2867              Intrinsic<[llvm_v4f32_ty],
2868                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2869                        [IntrNoMem]>;
2870  def int_x86_fma_vfmaddsub_pd : GCCBuiltin<"__builtin_ia32_vfmaddsubpd">,
2871              Intrinsic<[llvm_v2f64_ty],
2872                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2873                        [IntrNoMem]>;
2874  def int_x86_fma_vfmaddsub_ps_256 :
2875               GCCBuiltin<"__builtin_ia32_vfmaddsubps256">,
2876              Intrinsic<[llvm_v8f32_ty],
2877                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2878                        [IntrNoMem]>;
2879  def int_x86_fma_vfmaddsub_pd_256 :
2880              GCCBuiltin<"__builtin_ia32_vfmaddsubpd256">,
2881              Intrinsic<[llvm_v4f64_ty],
2882                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2883                        [IntrNoMem]>;
2884  def int_x86_fma_vfmsubadd_ps : GCCBuiltin<"__builtin_ia32_vfmsubaddps">,
2885              Intrinsic<[llvm_v4f32_ty],
2886                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2887                        [IntrNoMem]>;
2888  def int_x86_fma_vfmsubadd_pd : GCCBuiltin<"__builtin_ia32_vfmsubaddpd">,
2889              Intrinsic<[llvm_v2f64_ty],
2890                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2891                        [IntrNoMem]>;
2892  def int_x86_fma_vfmsubadd_ps_256 :
2893              GCCBuiltin<"__builtin_ia32_vfmsubaddps256">,
2894              Intrinsic<[llvm_v8f32_ty],
2895                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2896                        [IntrNoMem]>;
2897  def int_x86_fma_vfmsubadd_pd_256 :
2898              GCCBuiltin<"__builtin_ia32_vfmsubaddpd256">,
2899              Intrinsic<[llvm_v4f64_ty],
2900                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2901                        [IntrNoMem]>;
2902
2903  def int_x86_avx512_mask_vfmadd_pd_128 :
2904         GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask">,
2905          Intrinsic<[llvm_v2f64_ty],
2906          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
2907          [IntrNoMem]>;
2908
2909  def int_x86_avx512_mask3_vfmadd_pd_128 :
2910         GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask3">,
2911          Intrinsic<[llvm_v2f64_ty],
2912          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
2913          [IntrNoMem]>;
2914
2915  def int_x86_avx512_maskz_vfmadd_pd_128 :
2916         GCCBuiltin<"__builtin_ia32_vfmaddpd128_maskz">,
2917          Intrinsic<[llvm_v2f64_ty],
2918          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
2919          [IntrNoMem]>;
2920
2921  def int_x86_avx512_mask_vfmadd_pd_256 :
2922         GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask">,
2923          Intrinsic<[llvm_v4f64_ty],
2924          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
2925          [IntrNoMem]>;
2926
2927  def int_x86_avx512_mask3_vfmadd_pd_256 :
2928         GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask3">,
2929          Intrinsic<[llvm_v4f64_ty],
2930          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
2931          [IntrNoMem]>;
2932
2933  def int_x86_avx512_maskz_vfmadd_pd_256 :
2934         GCCBuiltin<"__builtin_ia32_vfmaddpd256_maskz">,
2935          Intrinsic<[llvm_v4f64_ty],
2936          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
2937          [IntrNoMem]>;
2938
2939  def int_x86_avx512_mask_vfmadd_pd_512 :
2940         GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask">,
2941          Intrinsic<[llvm_v8f64_ty],
2942          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
2943          llvm_i32_ty], [IntrNoMem]>;
2944
2945  def int_x86_avx512_mask3_vfmadd_pd_512 :
2946         GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask3">,
2947          Intrinsic<[llvm_v8f64_ty],
2948          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
2949          llvm_i32_ty], [IntrNoMem]>;
2950
2951  def int_x86_avx512_maskz_vfmadd_pd_512 :
2952         GCCBuiltin<"__builtin_ia32_vfmaddpd512_maskz">,
2953          Intrinsic<[llvm_v8f64_ty],
2954          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
2955          llvm_i32_ty], [IntrNoMem]>;
2956
2957  def int_x86_avx512_mask_vfmadd_ps_128 :
2958         GCCBuiltin<"__builtin_ia32_vfmaddps128_mask">,
2959          Intrinsic<[llvm_v4f32_ty],
2960          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
2961          [IntrNoMem]>;
2962
2963  def int_x86_avx512_mask3_vfmadd_ps_128 :
2964         GCCBuiltin<"__builtin_ia32_vfmaddps128_mask3">,
2965          Intrinsic<[llvm_v4f32_ty],
2966          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
2967          [IntrNoMem]>;
2968
2969  def int_x86_avx512_maskz_vfmadd_ps_128 :
2970         GCCBuiltin<"__builtin_ia32_vfmaddps128_maskz">,
2971          Intrinsic<[llvm_v4f32_ty],
2972          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
2973          [IntrNoMem]>;
2974
2975  def int_x86_avx512_mask_vfmadd_ps_256 :
2976         GCCBuiltin<"__builtin_ia32_vfmaddps256_mask">,
2977          Intrinsic<[llvm_v8f32_ty],
2978          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
2979          [IntrNoMem]>;
2980
2981  def int_x86_avx512_mask3_vfmadd_ps_256 :
2982         GCCBuiltin<"__builtin_ia32_vfmaddps256_mask3">,
2983          Intrinsic<[llvm_v8f32_ty],
2984          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
2985          [IntrNoMem]>;
2986
2987  def int_x86_avx512_maskz_vfmadd_ps_256 :
2988         GCCBuiltin<"__builtin_ia32_vfmaddps256_maskz">,
2989          Intrinsic<[llvm_v8f32_ty],
2990          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
2991          [IntrNoMem]>;
2992
2993  def int_x86_avx512_mask_vfmadd_ps_512 :
2994         GCCBuiltin<"__builtin_ia32_vfmaddps512_mask">,
2995          Intrinsic<[llvm_v16f32_ty],
2996          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
2997          llvm_i32_ty], [IntrNoMem]>;
2998
2999  def int_x86_avx512_mask3_vfmadd_ps_512 :
3000         GCCBuiltin<"__builtin_ia32_vfmaddps512_mask3">,
3001          Intrinsic<[llvm_v16f32_ty],
3002          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3003          llvm_i32_ty], [IntrNoMem]>;
3004
3005  def int_x86_avx512_maskz_vfmadd_ps_512 :
3006         GCCBuiltin<"__builtin_ia32_vfmaddps512_maskz">,
3007          Intrinsic<[llvm_v16f32_ty],
3008          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3009          llvm_i32_ty], [IntrNoMem]>;
3010
3011  def int_x86_avx512_mask_vfmaddsub_pd_128 :
3012         GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask">,
3013          Intrinsic<[llvm_v2f64_ty],
3014          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3015          [IntrNoMem]>;
3016
3017  def int_x86_avx512_mask3_vfmaddsub_pd_128 :
3018         GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask3">,
3019          Intrinsic<[llvm_v2f64_ty],
3020          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3021          [IntrNoMem]>;
3022
3023  def int_x86_avx512_maskz_vfmaddsub_pd_128 :
3024         GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_maskz">,
3025          Intrinsic<[llvm_v2f64_ty],
3026          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3027          [IntrNoMem]>;
3028
3029  def int_x86_avx512_mask_vfmaddsub_pd_256 :
3030         GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask">,
3031          Intrinsic<[llvm_v4f64_ty],
3032          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3033          [IntrNoMem]>;
3034
3035  def int_x86_avx512_mask3_vfmaddsub_pd_256 :
3036         GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask3">,
3037          Intrinsic<[llvm_v4f64_ty],
3038          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3039          [IntrNoMem]>;
3040
3041  def int_x86_avx512_maskz_vfmaddsub_pd_256 :
3042         GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_maskz">,
3043          Intrinsic<[llvm_v4f64_ty],
3044          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3045          [IntrNoMem]>;
3046
3047  def int_x86_avx512_mask_vfmaddsub_pd_512 :
3048         GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask">,
3049          Intrinsic<[llvm_v8f64_ty],
3050          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3051          llvm_i32_ty], [IntrNoMem]>;
3052
3053  def int_x86_avx512_mask3_vfmaddsub_pd_512 :
3054         GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask3">,
3055          Intrinsic<[llvm_v8f64_ty],
3056          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3057          llvm_i32_ty], [IntrNoMem]>;
3058
3059  def int_x86_avx512_maskz_vfmaddsub_pd_512 :
3060         GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_maskz">,
3061          Intrinsic<[llvm_v8f64_ty],
3062          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3063          llvm_i32_ty], [IntrNoMem]>;
3064
3065  def int_x86_avx512_mask_vfmaddsub_ps_128 :
3066         GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask">,
3067          Intrinsic<[llvm_v4f32_ty],
3068          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3069          [IntrNoMem]>;
3070
3071  def int_x86_avx512_mask3_vfmaddsub_ps_128 :
3072         GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask3">,
3073          Intrinsic<[llvm_v4f32_ty],
3074          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3075          [IntrNoMem]>;
3076
3077  def int_x86_avx512_maskz_vfmaddsub_ps_128 :
3078         GCCBuiltin<"__builtin_ia32_vfmaddsubps128_maskz">,
3079          Intrinsic<[llvm_v4f32_ty],
3080          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3081          [IntrNoMem]>;
3082
3083  def int_x86_avx512_mask_vfmaddsub_ps_256 :
3084         GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask">,
3085          Intrinsic<[llvm_v8f32_ty],
3086          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3087          [IntrNoMem]>;
3088
3089  def int_x86_avx512_mask3_vfmaddsub_ps_256 :
3090         GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask3">,
3091          Intrinsic<[llvm_v8f32_ty],
3092          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3093          [IntrNoMem]>;
3094
3095  def int_x86_avx512_maskz_vfmaddsub_ps_256 :
3096         GCCBuiltin<"__builtin_ia32_vfmaddsubps256_maskz">,
3097          Intrinsic<[llvm_v8f32_ty],
3098          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3099          [IntrNoMem]>;
3100
3101  def int_x86_avx512_mask_vfmaddsub_ps_512 :
3102         GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask">,
3103          Intrinsic<[llvm_v16f32_ty],
3104          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3105          llvm_i32_ty], [IntrNoMem]>;
3106
3107  def int_x86_avx512_mask3_vfmaddsub_ps_512 :
3108         GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask3">,
3109          Intrinsic<[llvm_v16f32_ty],
3110          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3111          llvm_i32_ty], [IntrNoMem]>;
3112
3113  def int_x86_avx512_maskz_vfmaddsub_ps_512 :
3114         GCCBuiltin<"__builtin_ia32_vfmaddsubps512_maskz">,
3115          Intrinsic<[llvm_v16f32_ty],
3116          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3117          llvm_i32_ty], [IntrNoMem]>;
3118
3119  def int_x86_avx512_mask3_vfmsub_pd_128 :
3120         GCCBuiltin<"__builtin_ia32_vfmsubpd128_mask3">,
3121          Intrinsic<[llvm_v2f64_ty],
3122          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3123          [IntrNoMem]>;
3124
3125  def int_x86_avx512_mask3_vfmsub_pd_256 :
3126         GCCBuiltin<"__builtin_ia32_vfmsubpd256_mask3">,
3127          Intrinsic<[llvm_v4f64_ty],
3128          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3129          [IntrNoMem]>;
3130
3131  def int_x86_avx512_mask3_vfmsub_pd_512 :
3132         GCCBuiltin<"__builtin_ia32_vfmsubpd512_mask3">,
3133          Intrinsic<[llvm_v8f64_ty],
3134          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3135          llvm_i32_ty], [IntrNoMem]>;
3136
3137  def int_x86_avx512_mask3_vfmsub_ps_128 :
3138         GCCBuiltin<"__builtin_ia32_vfmsubps128_mask3">,
3139          Intrinsic<[llvm_v4f32_ty],
3140          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3141          [IntrNoMem]>;
3142
3143  def int_x86_avx512_mask3_vfmsub_ps_256 :
3144         GCCBuiltin<"__builtin_ia32_vfmsubps256_mask3">,
3145          Intrinsic<[llvm_v8f32_ty],
3146          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3147          [IntrNoMem]>;
3148
3149  def int_x86_avx512_mask3_vfmsub_ps_512 :
3150         GCCBuiltin<"__builtin_ia32_vfmsubps512_mask3">,
3151          Intrinsic<[llvm_v16f32_ty],
3152          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3153          llvm_i32_ty], [IntrNoMem]>;
3154
3155  def int_x86_avx512_mask3_vfmsubadd_pd_128 :
3156         GCCBuiltin<"__builtin_ia32_vfmsubaddpd128_mask3">,
3157          Intrinsic<[llvm_v2f64_ty],
3158          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3159          [IntrNoMem]>;
3160
3161  def int_x86_avx512_mask3_vfmsubadd_pd_256 :
3162         GCCBuiltin<"__builtin_ia32_vfmsubaddpd256_mask3">,
3163          Intrinsic<[llvm_v4f64_ty],
3164          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3165          [IntrNoMem]>;
3166
3167  def int_x86_avx512_mask3_vfmsubadd_pd_512 :
3168         GCCBuiltin<"__builtin_ia32_vfmsubaddpd512_mask3">,
3169          Intrinsic<[llvm_v8f64_ty],
3170          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3171          llvm_i32_ty], [IntrNoMem]>;
3172
3173  def int_x86_avx512_mask3_vfmsubadd_ps_128 :
3174         GCCBuiltin<"__builtin_ia32_vfmsubaddps128_mask3">,
3175          Intrinsic<[llvm_v4f32_ty],
3176          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3177          [IntrNoMem]>;
3178
3179  def int_x86_avx512_mask3_vfmsubadd_ps_256 :
3180         GCCBuiltin<"__builtin_ia32_vfmsubaddps256_mask3">,
3181          Intrinsic<[llvm_v8f32_ty],
3182          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3183          [IntrNoMem]>;
3184
3185  def int_x86_avx512_mask3_vfmsubadd_ps_512 :
3186         GCCBuiltin<"__builtin_ia32_vfmsubaddps512_mask3">,
3187          Intrinsic<[llvm_v16f32_ty],
3188          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3189          llvm_i32_ty], [IntrNoMem]>;
3190
3191  def int_x86_avx512_mask_vfnmadd_pd_128 :
3192         GCCBuiltin<"__builtin_ia32_vfnmaddpd128_mask">,
3193          Intrinsic<[llvm_v2f64_ty],
3194          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3195          [IntrNoMem]>;
3196
3197  def int_x86_avx512_mask_vfnmadd_pd_256 :
3198         GCCBuiltin<"__builtin_ia32_vfnmaddpd256_mask">,
3199          Intrinsic<[llvm_v4f64_ty],
3200          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3201          [IntrNoMem]>;
3202
3203  def int_x86_avx512_mask_vfnmadd_pd_512 :
3204         GCCBuiltin<"__builtin_ia32_vfnmaddpd512_mask">,
3205          Intrinsic<[llvm_v8f64_ty],
3206          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3207          llvm_i32_ty], [IntrNoMem]>;
3208
3209  def int_x86_avx512_mask_vfnmadd_ps_128 :
3210         GCCBuiltin<"__builtin_ia32_vfnmaddps128_mask">,
3211          Intrinsic<[llvm_v4f32_ty],
3212          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3213          [IntrNoMem]>;
3214
3215  def int_x86_avx512_mask_vfnmadd_ps_256 :
3216         GCCBuiltin<"__builtin_ia32_vfnmaddps256_mask">,
3217          Intrinsic<[llvm_v8f32_ty],
3218          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3219          [IntrNoMem]>;
3220
3221  def int_x86_avx512_mask_vfnmadd_ps_512 :
3222         GCCBuiltin<"__builtin_ia32_vfnmaddps512_mask">,
3223          Intrinsic<[llvm_v16f32_ty],
3224          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3225          llvm_i32_ty], [IntrNoMem]>;
3226
3227  def int_x86_avx512_mask_vfnmsub_pd_128 :
3228         GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask">,
3229          Intrinsic<[llvm_v2f64_ty],
3230          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3231          [IntrNoMem]>;
3232
3233  def int_x86_avx512_mask3_vfnmsub_pd_128 :
3234         GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask3">,
3235          Intrinsic<[llvm_v2f64_ty],
3236          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3237          [IntrNoMem]>;
3238
3239  def int_x86_avx512_mask_vfnmsub_pd_256 :
3240         GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask">,
3241          Intrinsic<[llvm_v4f64_ty],
3242          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3243          [IntrNoMem]>;
3244
3245  def int_x86_avx512_mask3_vfnmsub_pd_256 :
3246         GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask3">,
3247          Intrinsic<[llvm_v4f64_ty],
3248          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3249          [IntrNoMem]>;
3250
3251  def int_x86_avx512_mask_vfnmsub_pd_512 :
3252         GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask">,
3253          Intrinsic<[llvm_v8f64_ty],
3254          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3255          llvm_i32_ty], [IntrNoMem]>;
3256
3257  def int_x86_avx512_mask3_vfnmsub_pd_512 :
3258         GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask3">,
3259          Intrinsic<[llvm_v8f64_ty],
3260          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3261          llvm_i32_ty], [IntrNoMem]>;
3262
3263  def int_x86_avx512_mask_vfnmsub_ps_128 :
3264         GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask">,
3265          Intrinsic<[llvm_v4f32_ty],
3266          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3267          [IntrNoMem]>;
3268
3269  def int_x86_avx512_mask3_vfnmsub_ps_128 :
3270         GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask3">,
3271          Intrinsic<[llvm_v4f32_ty],
3272          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3273          [IntrNoMem]>;
3274
3275  def int_x86_avx512_mask_vfnmsub_ps_256 :
3276         GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask">,
3277          Intrinsic<[llvm_v8f32_ty],
3278          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3279          [IntrNoMem]>;
3280
3281  def int_x86_avx512_mask3_vfnmsub_ps_256 :
3282         GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask3">,
3283          Intrinsic<[llvm_v8f32_ty],
3284          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3285          [IntrNoMem]>;
3286
3287  def int_x86_avx512_mask_vfnmsub_ps_512 :
3288         GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask">,
3289          Intrinsic<[llvm_v16f32_ty],
3290          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3291          llvm_i32_ty], [IntrNoMem]>;
3292
3293  def int_x86_avx512_mask3_vfnmsub_ps_512 :
3294         GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask3">,
3295          Intrinsic<[llvm_v16f32_ty],
3296          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3297          llvm_i32_ty], [IntrNoMem]>;
3298
3299}
3300
3301//===----------------------------------------------------------------------===//
3302// XOP
3303
3304  def int_x86_xop_vpermil2pd : GCCBuiltin<"__builtin_ia32_vpermil2pd">,
3305              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
3306                                          llvm_v2f64_ty, llvm_i8_ty],
3307                        [IntrNoMem]>;
3308
3309  def int_x86_xop_vpermil2pd_256 :
3310              GCCBuiltin<"__builtin_ia32_vpermil2pd256">,
3311              Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
3312                                          llvm_v4f64_ty, llvm_i8_ty],
3313                        [IntrNoMem]>;
3314
3315  def int_x86_xop_vpermil2ps : GCCBuiltin<"__builtin_ia32_vpermil2ps">,
3316              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
3317                                          llvm_v4f32_ty, llvm_i8_ty],
3318                        [IntrNoMem]>;
3319  def int_x86_xop_vpermil2ps_256 :
3320              GCCBuiltin<"__builtin_ia32_vpermil2ps256">,
3321              Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
3322                                          llvm_v8f32_ty, llvm_i8_ty],
3323                        [IntrNoMem]>;
3324
3325  def int_x86_xop_vfrcz_pd : GCCBuiltin<"__builtin_ia32_vfrczpd">,
3326              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
3327  def int_x86_xop_vfrcz_ps : GCCBuiltin<"__builtin_ia32_vfrczps">,
3328              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
3329  def int_x86_xop_vfrcz_sd : GCCBuiltin<"__builtin_ia32_vfrczsd">,
3330              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
3331  def int_x86_xop_vfrcz_ss : GCCBuiltin<"__builtin_ia32_vfrczss">,
3332              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
3333  def int_x86_xop_vfrcz_pd_256 : GCCBuiltin<"__builtin_ia32_vfrczpd256">,
3334              Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
3335  def int_x86_xop_vfrcz_ps_256 : GCCBuiltin<"__builtin_ia32_vfrczps256">,
3336              Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
3337
3338  def int_x86_xop_vpcmov :
3339              GCCBuiltin<"__builtin_ia32_vpcmov">,
3340              Intrinsic<[llvm_v2i64_ty],
3341                        [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
3342                        [IntrNoMem]>;
3343  def int_x86_xop_vpcmov_256 :
3344              GCCBuiltin<"__builtin_ia32_vpcmov_256">,
3345              Intrinsic<[llvm_v4i64_ty],
3346                        [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty],
3347                        [IntrNoMem]>;
3348
3349  def int_x86_xop_vpcomb : GCCBuiltin<"__builtin_ia32_vpcomb">,
3350              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
3351                         llvm_i8_ty], [IntrNoMem]>;
3352  def int_x86_xop_vpcomw : GCCBuiltin<"__builtin_ia32_vpcomw">,
3353              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
3354                         llvm_i8_ty], [IntrNoMem]>;
3355  def int_x86_xop_vpcomd : GCCBuiltin<"__builtin_ia32_vpcomd">,
3356              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
3357                         llvm_i8_ty], [IntrNoMem]>;
3358  def int_x86_xop_vpcomq : GCCBuiltin<"__builtin_ia32_vpcomq">,
3359              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
3360                         llvm_i8_ty], [IntrNoMem]>;
3361  def int_x86_xop_vpcomub : GCCBuiltin<"__builtin_ia32_vpcomub">,
3362              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
3363                         llvm_i8_ty], [IntrNoMem]>;
3364  def int_x86_xop_vpcomuw : GCCBuiltin<"__builtin_ia32_vpcomuw">,
3365              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
3366                         llvm_i8_ty], [IntrNoMem]>;
3367  def int_x86_xop_vpcomud : GCCBuiltin<"__builtin_ia32_vpcomud">,
3368              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
3369                         llvm_i8_ty], [IntrNoMem]>;
3370  def int_x86_xop_vpcomuq : GCCBuiltin<"__builtin_ia32_vpcomuq">,
3371              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
3372                         llvm_i8_ty], [IntrNoMem]>;
3373
3374  def int_x86_xop_vphaddbd :
3375              GCCBuiltin<"__builtin_ia32_vphaddbd">,
3376              Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3377  def int_x86_xop_vphaddbq :
3378              GCCBuiltin<"__builtin_ia32_vphaddbq">,
3379              Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3380  def int_x86_xop_vphaddbw :
3381              GCCBuiltin<"__builtin_ia32_vphaddbw">,
3382              Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3383  def int_x86_xop_vphadddq :
3384              GCCBuiltin<"__builtin_ia32_vphadddq">,
3385              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
3386  def int_x86_xop_vphaddubd :
3387              GCCBuiltin<"__builtin_ia32_vphaddubd">,
3388              Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3389  def int_x86_xop_vphaddubq :
3390              GCCBuiltin<"__builtin_ia32_vphaddubq">,
3391              Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3392  def int_x86_xop_vphaddubw :
3393              GCCBuiltin<"__builtin_ia32_vphaddubw">,
3394              Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3395  def int_x86_xop_vphaddudq :
3396              GCCBuiltin<"__builtin_ia32_vphaddudq">,
3397              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
3398  def int_x86_xop_vphadduwd :
3399              GCCBuiltin<"__builtin_ia32_vphadduwd">,
3400              Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3401  def int_x86_xop_vphadduwq :
3402              GCCBuiltin<"__builtin_ia32_vphadduwq">,
3403              Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3404  def int_x86_xop_vphaddwd :
3405              GCCBuiltin<"__builtin_ia32_vphaddwd">,
3406              Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3407  def int_x86_xop_vphaddwq :
3408              GCCBuiltin<"__builtin_ia32_vphaddwq">,
3409              Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3410  def int_x86_xop_vphsubbw :
3411              GCCBuiltin<"__builtin_ia32_vphsubbw">,
3412              Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3413  def int_x86_xop_vphsubdq :
3414              GCCBuiltin<"__builtin_ia32_vphsubdq">,
3415              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
3416  def int_x86_xop_vphsubwd :
3417              GCCBuiltin<"__builtin_ia32_vphsubwd">,
3418              Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3419  def int_x86_xop_vpmacsdd :
3420              GCCBuiltin<"__builtin_ia32_vpmacsdd">,
3421              Intrinsic<[llvm_v4i32_ty],
3422                        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
3423                        [IntrNoMem]>;
3424  def int_x86_xop_vpmacsdqh :
3425              GCCBuiltin<"__builtin_ia32_vpmacsdqh">,
3426              Intrinsic<[llvm_v2i64_ty],
3427                        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
3428                        [IntrNoMem]>;
3429  def int_x86_xop_vpmacsdql :
3430              GCCBuiltin<"__builtin_ia32_vpmacsdql">,
3431              Intrinsic<[llvm_v2i64_ty],
3432                        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
3433                        [IntrNoMem]>;
3434  def int_x86_xop_vpmacssdd :
3435              GCCBuiltin<"__builtin_ia32_vpmacssdd">,
3436              Intrinsic<[llvm_v4i32_ty],
3437                        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
3438                        [IntrNoMem]>;
3439  def int_x86_xop_vpmacssdqh :
3440              GCCBuiltin<"__builtin_ia32_vpmacssdqh">,
3441              Intrinsic<[llvm_v2i64_ty],
3442                        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
3443                        [IntrNoMem]>;
3444  def int_x86_xop_vpmacssdql :
3445              GCCBuiltin<"__builtin_ia32_vpmacssdql">,
3446              Intrinsic<[llvm_v2i64_ty],
3447                        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
3448                        [IntrNoMem]>;
3449  def int_x86_xop_vpmacsswd :
3450              GCCBuiltin<"__builtin_ia32_vpmacsswd">,
3451              Intrinsic<[llvm_v4i32_ty],
3452                        [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
3453                        [IntrNoMem]>;
3454  def int_x86_xop_vpmacssww :
3455              GCCBuiltin<"__builtin_ia32_vpmacssww">,
3456              Intrinsic<[llvm_v8i16_ty],
3457                        [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
3458                        [IntrNoMem]>;
3459  def int_x86_xop_vpmacswd :
3460              GCCBuiltin<"__builtin_ia32_vpmacswd">,
3461              Intrinsic<[llvm_v4i32_ty],
3462                        [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
3463                        [IntrNoMem]>;
3464  def int_x86_xop_vpmacsww :
3465              GCCBuiltin<"__builtin_ia32_vpmacsww">,
3466              Intrinsic<[llvm_v8i16_ty],
3467                        [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
3468                        [IntrNoMem]>;
3469  def int_x86_xop_vpmadcsswd :
3470              GCCBuiltin<"__builtin_ia32_vpmadcsswd">,
3471              Intrinsic<[llvm_v4i32_ty],
3472                        [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
3473                        [IntrNoMem]>;
3474  def int_x86_xop_vpmadcswd :
3475              GCCBuiltin<"__builtin_ia32_vpmadcswd">,
3476              Intrinsic<[llvm_v4i32_ty],
3477                        [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
3478                        [IntrNoMem]>;
3479  def int_x86_xop_vpperm :
3480              GCCBuiltin<"__builtin_ia32_vpperm">,
3481              Intrinsic<[llvm_v16i8_ty],
3482                        [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
3483                        [IntrNoMem]>;
3484
3485  def int_x86_xop_vprotb : GCCBuiltin<"__builtin_ia32_vprotb">,
3486              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
3487                        [IntrNoMem]>;
3488  def int_x86_xop_vprotd : GCCBuiltin<"__builtin_ia32_vprotd">,
3489              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
3490                        [IntrNoMem]>;
3491  def int_x86_xop_vprotq : GCCBuiltin<"__builtin_ia32_vprotq">,
3492              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
3493                        [IntrNoMem]>;
3494  def int_x86_xop_vprotw : GCCBuiltin<"__builtin_ia32_vprotw">,
3495              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
3496                        [IntrNoMem]>;
3497  def int_x86_xop_vprotbi : GCCBuiltin<"__builtin_ia32_vprotbi">,
3498              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i8_ty],
3499                        [IntrNoMem]>;
3500  def int_x86_xop_vprotdi : GCCBuiltin<"__builtin_ia32_vprotdi">,
3501              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
3502                        [IntrNoMem]>;
3503  def int_x86_xop_vprotqi : GCCBuiltin<"__builtin_ia32_vprotqi">,
3504              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
3505                        [IntrNoMem]>;
3506  def int_x86_xop_vprotwi : GCCBuiltin<"__builtin_ia32_vprotwi">,
3507              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
3508                        [IntrNoMem]>;
3509
3510  def int_x86_xop_vpshab :
3511              GCCBuiltin<"__builtin_ia32_vpshab">,
3512              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
3513                        [IntrNoMem]>;
3514  def int_x86_xop_vpshad :
3515              GCCBuiltin<"__builtin_ia32_vpshad">,
3516              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
3517                        [IntrNoMem]>;
3518  def int_x86_xop_vpshaq :
3519              GCCBuiltin<"__builtin_ia32_vpshaq">,
3520              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
3521                        [IntrNoMem]>;
3522  def int_x86_xop_vpshaw :
3523              GCCBuiltin<"__builtin_ia32_vpshaw">,
3524              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
3525                        [IntrNoMem]>;
3526  def int_x86_xop_vpshlb :
3527              GCCBuiltin<"__builtin_ia32_vpshlb">,
3528              Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
3529                        [IntrNoMem]>;
3530  def int_x86_xop_vpshld :
3531              GCCBuiltin<"__builtin_ia32_vpshld">,
3532              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
3533                        [IntrNoMem]>;
3534  def int_x86_xop_vpshlq :
3535              GCCBuiltin<"__builtin_ia32_vpshlq">,
3536              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
3537                        [IntrNoMem]>;
3538  def int_x86_xop_vpshlw :
3539              GCCBuiltin<"__builtin_ia32_vpshlw">,
3540              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
3541                        [IntrNoMem]>;
3542
3543//===----------------------------------------------------------------------===//
3544// MMX
3545
3546// Empty MMX state op.
3547let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3548  def int_x86_mmx_emms  : GCCBuiltin<"__builtin_ia32_emms">,
3549              Intrinsic<[], [], []>;
3550  def int_x86_mmx_femms : GCCBuiltin<"__builtin_ia32_femms">,
3551              Intrinsic<[], [], []>;
3552}
3553
3554// Integer arithmetic ops.
3555let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3556  // Addition
3557  def int_x86_mmx_padd_b : GCCBuiltin<"__builtin_ia32_paddb">,
3558              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3559                        [IntrNoMem]>;
3560  def int_x86_mmx_padd_w : GCCBuiltin<"__builtin_ia32_paddw">,
3561              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3562                        [IntrNoMem]>;
3563  def int_x86_mmx_padd_d : GCCBuiltin<"__builtin_ia32_paddd">,
3564              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3565                        [IntrNoMem]>;
3566  def int_x86_mmx_padd_q : GCCBuiltin<"__builtin_ia32_paddq">,
3567              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3568                        [IntrNoMem]>;
3569
3570  def int_x86_mmx_padds_b : GCCBuiltin<"__builtin_ia32_paddsb">,
3571              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3572                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3573  def int_x86_mmx_padds_w : GCCBuiltin<"__builtin_ia32_paddsw">,
3574              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3575                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3576
3577  def int_x86_mmx_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb">,
3578              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3579                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3580  def int_x86_mmx_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw">,
3581              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3582                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3583
3584  // Subtraction
3585  def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">,
3586              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3587                        [IntrNoMem]>;
3588  def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">,
3589              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3590                        [IntrNoMem]>;
3591  def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">,
3592              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3593                        [IntrNoMem]>;
3594  def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">,
3595              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3596                        [IntrNoMem]>;
3597
3598  def int_x86_mmx_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb">,
3599              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3600                         llvm_x86mmx_ty], [IntrNoMem]>;
3601  def int_x86_mmx_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw">,
3602              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3603                         llvm_x86mmx_ty], [IntrNoMem]>;
3604
3605  def int_x86_mmx_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb">,
3606              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3607                         llvm_x86mmx_ty], [IntrNoMem]>;
3608  def int_x86_mmx_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw">,
3609              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3610                         llvm_x86mmx_ty], [IntrNoMem]>;
3611
3612  // Multiplication
3613  def int_x86_mmx_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw">,
3614              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3615                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3616  def int_x86_mmx_pmull_w : GCCBuiltin<"__builtin_ia32_pmullw">,
3617              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3618                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3619  def int_x86_mmx_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw">,
3620              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3621                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3622  def int_x86_mmx_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq">,
3623              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3624                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3625  def int_x86_mmx_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd">,
3626              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3627                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3628
3629  // Bitwise operations
3630  def int_x86_mmx_pand : GCCBuiltin<"__builtin_ia32_pand">,
3631              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3632                        [IntrNoMem]>;
3633  def int_x86_mmx_pandn : GCCBuiltin<"__builtin_ia32_pandn">,
3634              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3635                        [IntrNoMem]>;
3636  def int_x86_mmx_por : GCCBuiltin<"__builtin_ia32_por">,
3637              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3638                        [IntrNoMem]>;
3639  def int_x86_mmx_pxor : GCCBuiltin<"__builtin_ia32_pxor">,
3640              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3641                        [IntrNoMem]>;
3642
3643  // Averages
3644  def int_x86_mmx_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb">,
3645              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3646                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3647  def int_x86_mmx_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw">,
3648              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3649                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3650
3651  // Maximum
3652  def int_x86_mmx_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub">,
3653              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3654                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3655  def int_x86_mmx_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw">,
3656              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3657                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3658
3659  // Minimum
3660  def int_x86_mmx_pminu_b : GCCBuiltin<"__builtin_ia32_pminub">,
3661              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3662                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3663  def int_x86_mmx_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw">,
3664              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3665                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3666
3667  // Packed sum of absolute differences
3668  def int_x86_mmx_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw">,
3669              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3670                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3671}
3672
3673// Integer shift ops.
3674let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3675  // Shift left logical
3676  def int_x86_mmx_psll_w : GCCBuiltin<"__builtin_ia32_psllw">,
3677              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3678                         llvm_x86mmx_ty], [IntrNoMem]>;
3679  def int_x86_mmx_psll_d : GCCBuiltin<"__builtin_ia32_pslld">,
3680              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3681                         llvm_x86mmx_ty], [IntrNoMem]>;
3682  def int_x86_mmx_psll_q : GCCBuiltin<"__builtin_ia32_psllq">,
3683              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3684                         llvm_x86mmx_ty], [IntrNoMem]>;
3685
3686  def int_x86_mmx_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw">,
3687              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3688                         llvm_x86mmx_ty], [IntrNoMem]>;
3689  def int_x86_mmx_psrl_d : GCCBuiltin<"__builtin_ia32_psrld">,
3690              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3691                         llvm_x86mmx_ty], [IntrNoMem]>;
3692  def int_x86_mmx_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq">,
3693              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3694                         llvm_x86mmx_ty], [IntrNoMem]>;
3695
3696  def int_x86_mmx_psra_w : GCCBuiltin<"__builtin_ia32_psraw">,
3697              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3698                         llvm_x86mmx_ty], [IntrNoMem]>;
3699  def int_x86_mmx_psra_d : GCCBuiltin<"__builtin_ia32_psrad">,
3700              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3701                         llvm_x86mmx_ty], [IntrNoMem]>;
3702
3703  def int_x86_mmx_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi">,
3704              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3705                         llvm_i32_ty], [IntrNoMem]>;
3706  def int_x86_mmx_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi">,
3707              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3708                         llvm_i32_ty], [IntrNoMem]>;
3709  def int_x86_mmx_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi">,
3710              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3711                         llvm_i32_ty], [IntrNoMem]>;
3712
3713  def int_x86_mmx_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi">,
3714              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3715                         llvm_i32_ty], [IntrNoMem]>;
3716  def int_x86_mmx_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi">,
3717              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3718                         llvm_i32_ty], [IntrNoMem]>;
3719  def int_x86_mmx_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi">,
3720              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3721                         llvm_i32_ty], [IntrNoMem]>;
3722
3723  def int_x86_mmx_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi">,
3724              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3725                         llvm_i32_ty], [IntrNoMem]>;
3726  def int_x86_mmx_psrai_d : GCCBuiltin<"__builtin_ia32_psradi">,
3727              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3728                         llvm_i32_ty], [IntrNoMem]>;
3729}
3730
3731// Pack ops.
3732let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3733  def int_x86_mmx_packsswb : GCCBuiltin<"__builtin_ia32_packsswb">,
3734              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3735                         llvm_x86mmx_ty], [IntrNoMem]>;
3736  def int_x86_mmx_packssdw : GCCBuiltin<"__builtin_ia32_packssdw">,
3737              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3738                         llvm_x86mmx_ty], [IntrNoMem]>;
3739  def int_x86_mmx_packuswb : GCCBuiltin<"__builtin_ia32_packuswb">,
3740              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3741                         llvm_x86mmx_ty], [IntrNoMem]>;
3742}
3743
3744// Unpacking ops.
3745let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3746  def int_x86_mmx_punpckhbw : GCCBuiltin<"__builtin_ia32_punpckhbw">,
3747              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3748                        [IntrNoMem]>;
3749  def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">,
3750              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3751                        [IntrNoMem]>;
3752  def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">,
3753              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3754                        [IntrNoMem]>;
3755  def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">,
3756              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3757                        [IntrNoMem]>;
3758  def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">,
3759              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3760                        [IntrNoMem]>;
3761  def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">,
3762              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3763                        [IntrNoMem]>;
3764}
3765
3766// Integer comparison ops
3767let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3768  def int_x86_mmx_pcmpeq_b : GCCBuiltin<"__builtin_ia32_pcmpeqb">,
3769              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3770                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3771  def int_x86_mmx_pcmpeq_w : GCCBuiltin<"__builtin_ia32_pcmpeqw">,
3772              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3773                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3774  def int_x86_mmx_pcmpeq_d : GCCBuiltin<"__builtin_ia32_pcmpeqd">,
3775              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3776                         llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3777
3778  def int_x86_mmx_pcmpgt_b : GCCBuiltin<"__builtin_ia32_pcmpgtb">,
3779              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3780                         llvm_x86mmx_ty], [IntrNoMem]>;
3781  def int_x86_mmx_pcmpgt_w : GCCBuiltin<"__builtin_ia32_pcmpgtw">,
3782              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3783                         llvm_x86mmx_ty], [IntrNoMem]>;
3784  def int_x86_mmx_pcmpgt_d : GCCBuiltin<"__builtin_ia32_pcmpgtd">,
3785              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3786                         llvm_x86mmx_ty], [IntrNoMem]>;
3787}
3788
3789// Misc.
3790let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3791  def int_x86_mmx_maskmovq : GCCBuiltin<"__builtin_ia32_maskmovq">,
3792              Intrinsic<[], [llvm_x86mmx_ty, llvm_x86mmx_ty, llvm_ptr_ty], []>;
3793
3794  def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">,
3795              Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
3796
3797  def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">,
3798              Intrinsic<[], [llvm_ptrx86mmx_ty, llvm_x86mmx_ty], []>;
3799
3800  def int_x86_mmx_palignr_b : GCCBuiltin<"__builtin_ia32_palignr">,
3801              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3802                        llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem]>;
3803
3804  def int_x86_mmx_pextr_w : GCCBuiltin<"__builtin_ia32_vec_ext_v4hi">,
3805              Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty],
3806                        [IntrNoMem]>;
3807
3808  def int_x86_mmx_pinsr_w : GCCBuiltin<"__builtin_ia32_vec_set_v4hi">,
3809              Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3810                        llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3811}
3812
3813//===----------------------------------------------------------------------===//
3814// BMI
3815
3816let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3817  def int_x86_bmi_bextr_32 : GCCBuiltin<"__builtin_ia32_bextr_u32">,
3818              Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3819  def int_x86_bmi_bextr_64 : GCCBuiltin<"__builtin_ia32_bextr_u64">,
3820              Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3821  def int_x86_bmi_bzhi_32 : GCCBuiltin<"__builtin_ia32_bzhi_si">,
3822              Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3823  def int_x86_bmi_bzhi_64 : GCCBuiltin<"__builtin_ia32_bzhi_di">,
3824              Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3825  def int_x86_bmi_pdep_32 : GCCBuiltin<"__builtin_ia32_pdep_si">,
3826              Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3827  def int_x86_bmi_pdep_64 : GCCBuiltin<"__builtin_ia32_pdep_di">,
3828              Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3829  def int_x86_bmi_pext_32 : GCCBuiltin<"__builtin_ia32_pext_si">,
3830              Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3831  def int_x86_bmi_pext_64 : GCCBuiltin<"__builtin_ia32_pext_di">,
3832              Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3833}
3834
3835//===----------------------------------------------------------------------===//
3836// FS/GS Base
3837
3838let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3839  def int_x86_rdfsbase_32 : GCCBuiltin<"__builtin_ia32_rdfsbase32">,
3840              Intrinsic<[llvm_i32_ty], []>;
3841  def int_x86_rdgsbase_32 : GCCBuiltin<"__builtin_ia32_rdgsbase32">,
3842              Intrinsic<[llvm_i32_ty], []>;
3843  def int_x86_rdfsbase_64 : GCCBuiltin<"__builtin_ia32_rdfsbase64">,
3844              Intrinsic<[llvm_i64_ty], []>;
3845  def int_x86_rdgsbase_64 : GCCBuiltin<"__builtin_ia32_rdgsbase64">,
3846              Intrinsic<[llvm_i64_ty], []>;
3847  def int_x86_wrfsbase_32 : GCCBuiltin<"__builtin_ia32_wrfsbase32">,
3848              Intrinsic<[], [llvm_i32_ty]>;
3849  def int_x86_wrgsbase_32 : GCCBuiltin<"__builtin_ia32_wrgsbase32">,
3850              Intrinsic<[], [llvm_i32_ty]>;
3851  def int_x86_wrfsbase_64 : GCCBuiltin<"__builtin_ia32_wrfsbase64">,
3852              Intrinsic<[], [llvm_i64_ty]>;
3853  def int_x86_wrgsbase_64 : GCCBuiltin<"__builtin_ia32_wrgsbase64">,
3854              Intrinsic<[], [llvm_i64_ty]>;
3855}
3856
3857//===----------------------------------------------------------------------===//
3858// FXSR
3859let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3860  def int_x86_fxrstor : GCCBuiltin<"__builtin_ia32_fxrstor">,
3861              Intrinsic<[], [llvm_ptr_ty], []>;
3862  def int_x86_fxrstor64 : GCCBuiltin<"__builtin_ia32_fxrstor64">,
3863              Intrinsic<[], [llvm_ptr_ty], []>;
3864  def int_x86_fxsave : GCCBuiltin<"__builtin_ia32_fxsave">,
3865              Intrinsic<[], [llvm_ptr_ty], []>;
3866  def int_x86_fxsave64 : GCCBuiltin<"__builtin_ia32_fxsave64">,
3867              Intrinsic<[], [llvm_ptr_ty], []>;
3868}
3869
3870//===----------------------------------------------------------------------===//
3871// XSAVE
3872let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3873  def int_x86_xsave :
3874              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3875  def int_x86_xsave64 :
3876              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3877  def int_x86_xrstor :
3878              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3879  def int_x86_xrstor64 :
3880              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3881  def int_x86_xsaveopt :
3882              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3883  def int_x86_xsaveopt64 :
3884              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3885  def int_x86_xrstors :
3886              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3887  def int_x86_xrstors64 :
3888              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3889  def int_x86_xsavec :
3890              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3891  def int_x86_xsavec64 :
3892              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3893  def int_x86_xsaves :
3894              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3895  def int_x86_xsaves64 :
3896              Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3897}
3898
3899//===----------------------------------------------------------------------===//
3900// Half float conversion
3901
3902let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3903  def int_x86_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps">,
3904              Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3905  def int_x86_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256">,
3906              Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3907  def int_x86_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph">,
3908              Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty],
3909                        [IntrNoMem]>;
3910  def int_x86_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256">,
3911              Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty],
3912                        [IntrNoMem]>;
3913  def int_x86_avx512_mask_vcvtph2ps_512 : GCCBuiltin<"__builtin_ia32_vcvtph2ps512_mask">,
3914              Intrinsic<[llvm_v16f32_ty], [llvm_v16i16_ty, llvm_v16f32_ty,
3915                                           llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
3916  def int_x86_avx512_mask_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256_mask">,
3917              Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty, llvm_v8f32_ty,
3918                                           llvm_i8_ty], [IntrNoMem]>;
3919  def int_x86_avx512_mask_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps_mask">,
3920              Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty, llvm_v4f32_ty,
3921                                           llvm_i8_ty], [IntrNoMem]>;
3922  def int_x86_avx512_mask_vcvtps2ph_512 : GCCBuiltin<"__builtin_ia32_vcvtps2ph512_mask">,
3923              Intrinsic<[llvm_v16i16_ty], [llvm_v16f32_ty, llvm_i32_ty,
3924                                           llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
3925  def int_x86_avx512_mask_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256_mask">,
3926              Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty,
3927                                           llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
3928  def int_x86_avx512_mask_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph_mask">,
3929              Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty,
3930                                           llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
3931}
3932
3933//===----------------------------------------------------------------------===//
3934// TBM
3935
3936let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3937  def int_x86_tbm_bextri_u32 : GCCBuiltin<"__builtin_ia32_bextri_u32">,
3938        Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3939  def int_x86_tbm_bextri_u64 : GCCBuiltin<"__builtin_ia32_bextri_u64">,
3940        Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3941}
3942
3943//===----------------------------------------------------------------------===//
3944// RDRAND intrinsics - Return a random value and whether it is valid.
3945// RDSEED intrinsics - Return a NIST SP800-90B & C compliant random value and
3946// whether it is valid.
3947
3948let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3949  // These are declared side-effecting so they don't get eliminated by CSE or
3950  // LICM.
3951  def int_x86_rdrand_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
3952  def int_x86_rdrand_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
3953  def int_x86_rdrand_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
3954  def int_x86_rdseed_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
3955  def int_x86_rdseed_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
3956  def int_x86_rdseed_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
3957}
3958
3959//===----------------------------------------------------------------------===//
3960// ADX
3961
3962let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3963  def int_x86_addcarryx_u32: GCCBuiltin<"__builtin_ia32_addcarryx_u32">,
3964        Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
3965                                 llvm_ptr_ty], [IntrReadWriteArgMem]>;
3966  def int_x86_addcarryx_u64: GCCBuiltin<"__builtin_ia32_addcarryx_u64">,
3967        Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
3968                                 llvm_ptr_ty], [IntrReadWriteArgMem]>;
3969  def int_x86_addcarry_u32: GCCBuiltin<"__builtin_ia32_addcarry_u32">,
3970        Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
3971                                 llvm_ptr_ty], [IntrReadWriteArgMem]>;
3972  def int_x86_addcarry_u64: GCCBuiltin<"__builtin_ia32_addcarry_u64">,
3973        Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
3974                                 llvm_ptr_ty], [IntrReadWriteArgMem]>;
3975  def int_x86_subborrow_u32: GCCBuiltin<"__builtin_ia32_subborrow_u32">,
3976        Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
3977                                 llvm_ptr_ty], [IntrReadWriteArgMem]>;
3978  def int_x86_subborrow_u64: GCCBuiltin<"__builtin_ia32_subborrow_u64">,
3979        Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
3980                                 llvm_ptr_ty], [IntrReadWriteArgMem]>;
3981}
3982
3983//===----------------------------------------------------------------------===//
3984// RTM intrinsics. Transactional Memory support.
3985
3986let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3987  def int_x86_xbegin : GCCBuiltin<"__builtin_ia32_xbegin">,
3988              Intrinsic<[llvm_i32_ty], [], []>;
3989  def int_x86_xend : GCCBuiltin<"__builtin_ia32_xend">,
3990              Intrinsic<[], [], []>;
3991  def int_x86_xabort : GCCBuiltin<"__builtin_ia32_xabort">,
3992              Intrinsic<[], [llvm_i8_ty], [IntrNoReturn]>;
3993  def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">,
3994              Intrinsic<[llvm_i32_ty], [], []>;
3995}
3996
3997//===----------------------------------------------------------------------===//
3998// AVX512
3999
4000// Mask ops
4001let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4002  // Mask instructions
4003  // 16-bit mask
4004  def int_x86_avx512_kand_w : GCCBuiltin<"__builtin_ia32_kandhi">,
4005              Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4006                         [IntrNoMem]>;
4007  def int_x86_avx512_kandn_w : GCCBuiltin<"__builtin_ia32_kandnhi">,
4008              Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4009                         [IntrNoMem]>;
4010  def int_x86_avx512_knot_w : GCCBuiltin<"__builtin_ia32_knothi">,
4011              Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem]>;
4012  def int_x86_avx512_kor_w : GCCBuiltin<"__builtin_ia32_korhi">,
4013              Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4014                         [IntrNoMem]>;
4015  def int_x86_avx512_kxor_w : GCCBuiltin<"__builtin_ia32_kxorhi">,
4016              Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4017                         [IntrNoMem]>;
4018  def int_x86_avx512_kxnor_w : GCCBuiltin<"__builtin_ia32_kxnorhi">,
4019              Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4020                         [IntrNoMem]>;
4021  def int_x86_avx512_kunpck_bw : GCCBuiltin<"__builtin_ia32_kunpckhi">,
4022              Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4023                         [IntrNoMem]>;
4024  def int_x86_avx512_kunpck_wd : GCCBuiltin<"__builtin_ia32_kunpcksi">,
4025              Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4026                         [IntrNoMem]>;
4027  def int_x86_avx512_kunpck_dq : GCCBuiltin<"__builtin_ia32_kunpckdi">,
4028              Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
4029                         [IntrNoMem]>;
4030  def int_x86_avx512_kortestz_w : GCCBuiltin<"__builtin_ia32_kortestzhi">,
4031              Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
4032                        [IntrNoMem]>;
4033  def int_x86_avx512_kortestc_w : GCCBuiltin<"__builtin_ia32_kortestchi">,
4034              Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
4035                        [IntrNoMem]>;
4036}
4037
4038// Conversion ops
4039let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4040  def int_x86_avx512_cvtss2usi : GCCBuiltin<"__builtin_ia32_cvtss2usi">,
4041              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
4042  def int_x86_avx512_cvtss2usi64 : GCCBuiltin<"__builtin_ia32_cvtss2usi64">,
4043              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
4044  def int_x86_avx512_cvttss2si : GCCBuiltin<"__builtin_ia32_vcvttss2si32">,
4045              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
4046  def int_x86_avx512_cvttss2si64 : GCCBuiltin<"__builtin_ia32_vcvttss2si64">,
4047              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
4048  def int_x86_avx512_cvttss2usi : GCCBuiltin<"__builtin_ia32_vcvttss2usi32">,
4049              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
4050  def int_x86_avx512_cvttss2usi64 : GCCBuiltin<"__builtin_ia32_vcvttss2usi64">,
4051              Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
4052  def int_x86_avx512_cvtusi2ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss32">,
4053              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
4054                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
4055  def int_x86_avx512_cvtusi642ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss64">,
4056              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
4057                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
4058
4059  def int_x86_avx512_cvtsd2usi : GCCBuiltin<"__builtin_ia32_cvtsd2usi">,
4060              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
4061  def int_x86_avx512_cvtsd2usi64 : GCCBuiltin<"__builtin_ia32_cvtsd2usi64">,
4062              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
4063  def int_x86_avx512_cvttsd2si : GCCBuiltin<"__builtin_ia32_vcvttsd2si32">,
4064              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
4065  def int_x86_avx512_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_vcvttsd2si64">,
4066              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
4067  def int_x86_avx512_cvttsd2usi : GCCBuiltin<"__builtin_ia32_vcvttsd2usi32">,
4068              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
4069  def int_x86_avx512_cvttsd2usi64 : GCCBuiltin<"__builtin_ia32_vcvttsd2usi64">,
4070              Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
4071  def int_x86_avx512_cvtusi2sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd32">,
4072              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
4073                         llvm_i32_ty], [IntrNoMem]>;
4074  def int_x86_avx512_cvtusi642sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd64">,
4075              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
4076                         llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
4077
4078  def int_x86_avx512_cvtsi2ss32 : GCCBuiltin<"__builtin_ia32_cvtsi2ss32">,
4079                Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
4080                           llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
4081  def int_x86_avx512_cvtsi2ss64 : GCCBuiltin<"__builtin_ia32_cvtsi2ss64">,
4082                Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
4083                           llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
4084  def int_x86_avx512_cvtsi2sd32 : GCCBuiltin<"__builtin_ia32_cvtsi2sd32">,
4085                Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
4086                           llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
4087  def int_x86_avx512_cvtsi2sd64 : GCCBuiltin<"__builtin_ia32_cvtsi2sd64">,
4088                Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
4089                           llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
4090}
4091
4092// Pack ops.
4093let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4094  def int_x86_avx512_mask_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128_mask">,
4095              Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
4096                         llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
4097  def int_x86_avx512_mask_packsswb_256 : GCCBuiltin<"__builtin_ia32_packsswb256_mask">,
4098              Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,llvm_v16i16_ty,
4099                         llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
4100  def int_x86_avx512_mask_packsswb_512 : GCCBuiltin<"__builtin_ia32_packsswb512_mask">,
4101              Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty,
4102                         llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
4103  def int_x86_avx512_mask_packssdw_128 : GCCBuiltin<"__builtin_ia32_packssdw128_mask">,
4104              Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
4105                         llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
4106  def int_x86_avx512_mask_packssdw_256 : GCCBuiltin<"__builtin_ia32_packssdw256_mask">,
4107              Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
4108                         llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
4109  def int_x86_avx512_mask_packssdw_512 : GCCBuiltin<"__builtin_ia32_packssdw512_mask">,
4110              Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
4111                         llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
4112  def int_x86_avx512_mask_packuswb_128 : GCCBuiltin<"__builtin_ia32_packuswb128_mask">,
4113              Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
4114                         llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
4115  def int_x86_avx512_mask_packuswb_256 : GCCBuiltin<"__builtin_ia32_packuswb256_mask">,
4116              Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,llvm_v16i16_ty,
4117                         llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
4118  def int_x86_avx512_mask_packuswb_512 : GCCBuiltin<"__builtin_ia32_packuswb512_mask">,
4119              Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty,
4120                         llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
4121  def int_x86_avx512_mask_packusdw_128 : GCCBuiltin<"__builtin_ia32_packusdw128_mask">,
4122              Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
4123                         llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
4124  def int_x86_avx512_mask_packusdw_256 : GCCBuiltin<"__builtin_ia32_packusdw256_mask">,
4125              Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
4126                         llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
4127  def int_x86_avx512_mask_packusdw_512 : GCCBuiltin<"__builtin_ia32_packusdw512_mask">,
4128              Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
4129                         llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
4130}
4131
4132// Unpack ops.
4133let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4134  def int_x86_avx512_mask_unpckh_pd_128 :
4135         GCCBuiltin<"__builtin_ia32_unpckhpd128_mask">,
4136          Intrinsic<[llvm_v2f64_ty],
4137          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
4138          [IntrNoMem]>;
4139
4140  def int_x86_avx512_mask_unpckh_pd_256 :
4141         GCCBuiltin<"__builtin_ia32_unpckhpd256_mask">,
4142          Intrinsic<[llvm_v4f64_ty],
4143          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
4144          [IntrNoMem]>;
4145
4146  def int_x86_avx512_mask_unpckh_pd_512 :
4147         GCCBuiltin<"__builtin_ia32_unpckhpd512_mask">,
4148          Intrinsic<[llvm_v8f64_ty],
4149          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty],
4150          [IntrNoMem]>;
4151
4152  def int_x86_avx512_mask_unpckh_ps_128 :
4153         GCCBuiltin<"__builtin_ia32_unpckhps128_mask">,
4154          Intrinsic<[llvm_v4f32_ty],
4155          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
4156          [IntrNoMem]>;
4157
4158  def int_x86_avx512_mask_unpckh_ps_256 :
4159         GCCBuiltin<"__builtin_ia32_unpckhps256_mask">,
4160          Intrinsic<[llvm_v8f32_ty],
4161          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
4162          [IntrNoMem]>;
4163
4164  def int_x86_avx512_mask_unpckh_ps_512 :
4165         GCCBuiltin<"__builtin_ia32_unpckhps512_mask">,
4166          Intrinsic<[llvm_v16f32_ty],
4167          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty],
4168          [IntrNoMem]>;
4169
4170  def int_x86_avx512_mask_unpckl_pd_128 :
4171         GCCBuiltin<"__builtin_ia32_unpcklpd128_mask">,
4172          Intrinsic<[llvm_v2f64_ty],
4173          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
4174          [IntrNoMem]>;
4175
4176  def int_x86_avx512_mask_unpckl_pd_256 :
4177         GCCBuiltin<"__builtin_ia32_unpcklpd256_mask">,
4178          Intrinsic<[llvm_v4f64_ty],
4179          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
4180          [IntrNoMem]>;
4181
4182  def int_x86_avx512_mask_unpckl_pd_512 :
4183         GCCBuiltin<"__builtin_ia32_unpcklpd512_mask">,
4184          Intrinsic<[llvm_v8f64_ty],
4185          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty],
4186          [IntrNoMem]>;
4187
4188  def int_x86_avx512_mask_unpckl_ps_128 :
4189         GCCBuiltin<"__builtin_ia32_unpcklps128_mask">,
4190          Intrinsic<[llvm_v4f32_ty],
4191          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
4192          [IntrNoMem]>;
4193
4194  def int_x86_avx512_mask_unpckl_ps_256 :
4195         GCCBuiltin<"__builtin_ia32_unpcklps256_mask">,
4196          Intrinsic<[llvm_v8f32_ty],
4197          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
4198          [IntrNoMem]>;
4199
4200  def int_x86_avx512_mask_unpckl_ps_512 :
4201         GCCBuiltin<"__builtin_ia32_unpcklps512_mask">,
4202          Intrinsic<[llvm_v16f32_ty],
4203          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty],
4204          [IntrNoMem]>;
4205
4206  def int_x86_avx512_mask_punpckhb_w_128 :
4207         GCCBuiltin<"__builtin_ia32_punpckhbw128_mask">,
4208          Intrinsic<[llvm_v16i8_ty],
4209          [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty,  llvm_i16_ty],
4210          [IntrNoMem]>;
4211
4212  def int_x86_avx512_mask_punpckhb_w_256 :
4213         GCCBuiltin<"__builtin_ia32_punpckhbw256_mask">,
4214          Intrinsic<[llvm_v32i8_ty],
4215          [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v32i8_ty,  llvm_i32_ty],
4216          [IntrNoMem]>;
4217
4218  def int_x86_avx512_mask_punpckhb_w_512 :
4219         GCCBuiltin<"__builtin_ia32_punpckhbw512_mask">,
4220          Intrinsic<[llvm_v64i8_ty],
4221          [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v64i8_ty,  llvm_i64_ty],
4222          [IntrNoMem]>;
4223
4224  def int_x86_avx512_mask_punpckhd_q_128 :
4225         GCCBuiltin<"__builtin_ia32_punpckhdq128_mask">,
4226          Intrinsic<[llvm_v4i32_ty],
4227          [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4228          [IntrNoMem]>;
4229
4230  def int_x86_avx512_mask_punpckhd_q_256 :
4231         GCCBuiltin<"__builtin_ia32_punpckhdq256_mask">,
4232          Intrinsic<[llvm_v8i32_ty],
4233          [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4234          [IntrNoMem]>;
4235
4236  def int_x86_avx512_mask_punpckhd_q_512 :
4237         GCCBuiltin<"__builtin_ia32_punpckhdq512_mask">,
4238          Intrinsic<[llvm_v16i32_ty],
4239          [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty,  llvm_i16_ty],
4240          [IntrNoMem]>;
4241
4242  def int_x86_avx512_mask_punpckhqd_q_128 :
4243         GCCBuiltin<"__builtin_ia32_punpckhqdq128_mask">,
4244          Intrinsic<[llvm_v2i64_ty],
4245          [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4246          [IntrNoMem]>;
4247
4248  def int_x86_avx512_mask_punpckhqd_q_256 :
4249         GCCBuiltin<"__builtin_ia32_punpckhqdq256_mask">,
4250          Intrinsic<[llvm_v4i64_ty],
4251          [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4252          [IntrNoMem]>;
4253
4254  def int_x86_avx512_mask_punpckhqd_q_512 :
4255         GCCBuiltin<"__builtin_ia32_punpckhqdq512_mask">,
4256          Intrinsic<[llvm_v8i64_ty],
4257          [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty,  llvm_i8_ty],
4258          [IntrNoMem]>;
4259
4260  def int_x86_avx512_mask_punpckhw_d_128 :
4261         GCCBuiltin<"__builtin_ia32_punpckhwd128_mask">,
4262          Intrinsic<[llvm_v8i16_ty],
4263          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty,  llvm_i8_ty],
4264          [IntrNoMem]>;
4265
4266  def int_x86_avx512_mask_punpckhw_d_256 :
4267         GCCBuiltin<"__builtin_ia32_punpckhwd256_mask">,
4268          Intrinsic<[llvm_v16i16_ty],
4269          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty,  llvm_i16_ty],
4270          [IntrNoMem]>;
4271
4272  def int_x86_avx512_mask_punpckhw_d_512 :
4273         GCCBuiltin<"__builtin_ia32_punpckhwd512_mask">,
4274          Intrinsic<[llvm_v32i16_ty],
4275          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty,  llvm_i32_ty],
4276          [IntrNoMem]>;
4277
4278  def int_x86_avx512_mask_punpcklb_w_128 :
4279         GCCBuiltin<"__builtin_ia32_punpcklbw128_mask">,
4280          Intrinsic<[llvm_v16i8_ty],
4281          [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty,  llvm_i16_ty],
4282          [IntrNoMem]>;
4283
4284  def int_x86_avx512_mask_punpcklb_w_256 :
4285         GCCBuiltin<"__builtin_ia32_punpcklbw256_mask">,
4286          Intrinsic<[llvm_v32i8_ty],
4287          [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v32i8_ty,  llvm_i32_ty],
4288          [IntrNoMem]>;
4289
4290  def int_x86_avx512_mask_punpcklb_w_512 :
4291         GCCBuiltin<"__builtin_ia32_punpcklbw512_mask">,
4292          Intrinsic<[llvm_v64i8_ty],
4293          [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v64i8_ty,  llvm_i64_ty],
4294          [IntrNoMem]>;
4295
4296  def int_x86_avx512_mask_punpckld_q_128 :
4297         GCCBuiltin<"__builtin_ia32_punpckldq128_mask">,
4298          Intrinsic<[llvm_v4i32_ty],
4299          [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4300          [IntrNoMem]>;
4301
4302  def int_x86_avx512_mask_punpckld_q_256 :
4303         GCCBuiltin<"__builtin_ia32_punpckldq256_mask">,
4304          Intrinsic<[llvm_v8i32_ty],
4305          [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4306          [IntrNoMem]>;
4307
4308  def int_x86_avx512_mask_punpckld_q_512 :
4309         GCCBuiltin<"__builtin_ia32_punpckldq512_mask">,
4310          Intrinsic<[llvm_v16i32_ty],
4311          [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty,  llvm_i16_ty],
4312          [IntrNoMem]>;
4313
4314  def int_x86_avx512_mask_punpcklqd_q_128 :
4315         GCCBuiltin<"__builtin_ia32_punpcklqdq128_mask">,
4316          Intrinsic<[llvm_v2i64_ty],
4317          [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4318          [IntrNoMem]>;
4319
4320  def int_x86_avx512_mask_punpcklqd_q_256 :
4321         GCCBuiltin<"__builtin_ia32_punpcklqdq256_mask">,
4322          Intrinsic<[llvm_v4i64_ty],
4323          [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4324          [IntrNoMem]>;
4325
4326  def int_x86_avx512_mask_punpcklqd_q_512 :
4327         GCCBuiltin<"__builtin_ia32_punpcklqdq512_mask">,
4328          Intrinsic<[llvm_v8i64_ty],
4329          [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty,  llvm_i8_ty],
4330          [IntrNoMem]>;
4331
4332  def int_x86_avx512_mask_punpcklw_d_128 :
4333         GCCBuiltin<"__builtin_ia32_punpcklwd128_mask">,
4334          Intrinsic<[llvm_v8i16_ty],
4335          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty,  llvm_i8_ty],
4336          [IntrNoMem]>;
4337
4338  def int_x86_avx512_mask_punpcklw_d_256 :
4339         GCCBuiltin<"__builtin_ia32_punpcklwd256_mask">,
4340          Intrinsic<[llvm_v16i16_ty],
4341          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty,  llvm_i16_ty],
4342          [IntrNoMem]>;
4343
4344  def int_x86_avx512_mask_punpcklw_d_512 :
4345         GCCBuiltin<"__builtin_ia32_punpcklwd512_mask">,
4346          Intrinsic<[llvm_v32i16_ty],
4347          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty,  llvm_i32_ty],
4348          [IntrNoMem]>;
4349}
4350
4351// Vector convert
4352let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4353  def int_x86_avx512_mask_cvtdq2pd_128 :
4354        GCCBuiltin<"__builtin_ia32_cvtdq2pd128_mask">,
4355          Intrinsic<[llvm_v2f64_ty],
4356          [llvm_v4i32_ty, llvm_v2f64_ty,  llvm_i8_ty],
4357          [IntrNoMem]>;
4358
4359  def int_x86_avx512_mask_cvtdq2pd_256 :
4360        GCCBuiltin<"__builtin_ia32_cvtdq2pd256_mask">,
4361          Intrinsic<[llvm_v4f64_ty],
4362          [llvm_v4i32_ty, llvm_v4f64_ty,  llvm_i8_ty],
4363          [IntrNoMem]>;
4364
4365  def int_x86_avx512_mask_cvtdq2pd_512 :
4366        GCCBuiltin<"__builtin_ia32_cvtdq2pd512_mask">,
4367          Intrinsic<[llvm_v8f64_ty],
4368          [llvm_v8i32_ty, llvm_v8f64_ty,  llvm_i8_ty],
4369          [IntrNoMem]>;
4370
4371  def int_x86_avx512_mask_cvtdq2ps_128 :
4372        GCCBuiltin<"__builtin_ia32_cvtdq2ps128_mask">,
4373          Intrinsic<[llvm_v4f32_ty],
4374          [llvm_v4i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
4375          [IntrNoMem]>;
4376
4377  def int_x86_avx512_mask_cvtdq2ps_256 :
4378        GCCBuiltin<"__builtin_ia32_cvtdq2ps256_mask">,
4379          Intrinsic<[llvm_v8f32_ty],
4380          [llvm_v8i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
4381          [IntrNoMem]>;
4382
4383  def int_x86_avx512_mask_cvtdq2ps_512 :
4384        GCCBuiltin<"__builtin_ia32_cvtdq2ps512_mask">,
4385          Intrinsic<[llvm_v16f32_ty],
4386          [llvm_v16i32_ty, llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty],
4387          [IntrNoMem]>;
4388
4389  def int_x86_avx512_mask_cvtpd2dq_128 :
4390        GCCBuiltin<"__builtin_ia32_cvtpd2dq128_mask">,
4391          Intrinsic<[llvm_v4i32_ty],
4392          [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4393          [IntrNoMem]>;
4394
4395  def int_x86_avx512_mask_cvtpd2dq_256 :
4396        GCCBuiltin<"__builtin_ia32_cvtpd2dq256_mask">,
4397          Intrinsic<[llvm_v4i32_ty],
4398          [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4399          [IntrNoMem]>;
4400
4401  def int_x86_avx512_mask_cvtpd2dq_512 :
4402        GCCBuiltin<"__builtin_ia32_cvtpd2dq512_mask">,
4403          Intrinsic<[llvm_v8i32_ty],
4404          [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
4405          [IntrNoMem]>;
4406
4407  def int_x86_avx512_mask_cvtpd2ps_256 :
4408        GCCBuiltin<"__builtin_ia32_cvtpd2ps256_mask">,
4409          Intrinsic<[llvm_v4f32_ty],
4410          [llvm_v4f64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4411          [IntrNoMem]>;
4412
4413  def int_x86_avx512_mask_cvtpd2ps_512 :
4414        GCCBuiltin<"__builtin_ia32_cvtpd2ps512_mask">,
4415          Intrinsic<[llvm_v8f32_ty],
4416          [llvm_v8f64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
4417          [IntrNoMem]>;
4418
4419  def int_x86_avx512_mask_cvtsd2ss_round :
4420        GCCBuiltin<"__builtin_ia32_cvtsd2ss_round">,
4421          Intrinsic<[llvm_v4f32_ty],
4422          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
4423          [IntrNoMem]>;
4424
4425  def int_x86_avx512_mask_cvtss2sd_round :
4426        GCCBuiltin<"__builtin_ia32_cvtss2sd_round">,
4427          Intrinsic<[llvm_v2f64_ty],
4428          [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
4429          [IntrNoMem]>;
4430
4431  def int_x86_avx512_mask_cvtpd2ps :
4432        GCCBuiltin<"__builtin_ia32_cvtpd2ps_mask">,
4433          Intrinsic<[llvm_v4f32_ty],
4434          [llvm_v2f64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4435          [IntrNoMem]>;
4436
4437  def int_x86_avx512_mask_cvtpd2qq_128 :
4438        GCCBuiltin<"__builtin_ia32_cvtpd2qq128_mask">,
4439          Intrinsic<[llvm_v2i64_ty],
4440          [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4441          [IntrNoMem]>;
4442
4443  def int_x86_avx512_mask_cvtpd2qq_256 :
4444        GCCBuiltin<"__builtin_ia32_cvtpd2qq256_mask">,
4445          Intrinsic<[llvm_v4i64_ty],
4446          [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4447          [IntrNoMem]>;
4448
4449  def int_x86_avx512_mask_cvtpd2qq_512 :
4450        GCCBuiltin<"__builtin_ia32_cvtpd2qq512_mask">,
4451          Intrinsic<[llvm_v8i64_ty],
4452          [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4453          [IntrNoMem]>;
4454
4455  def int_x86_avx512_mask_cvtpd2udq_128 :
4456        GCCBuiltin<"__builtin_ia32_cvtpd2udq128_mask">,
4457          Intrinsic<[llvm_v4i32_ty],
4458          [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4459          [IntrNoMem]>;
4460
4461  def int_x86_avx512_mask_cvtpd2udq_256 :
4462        GCCBuiltin<"__builtin_ia32_cvtpd2udq256_mask">,
4463          Intrinsic<[llvm_v4i32_ty],
4464          [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4465          [IntrNoMem]>;
4466
4467  def int_x86_avx512_mask_cvtpd2udq_512 :
4468        GCCBuiltin<"__builtin_ia32_cvtpd2udq512_mask">,
4469          Intrinsic<[llvm_v8i32_ty],
4470          [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
4471          [IntrNoMem]>;
4472
4473  def int_x86_avx512_mask_cvtpd2uqq_128 :
4474        GCCBuiltin<"__builtin_ia32_cvtpd2uqq128_mask">,
4475          Intrinsic<[llvm_v2i64_ty],
4476          [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4477          [IntrNoMem]>;
4478
4479  def int_x86_avx512_mask_cvtpd2uqq_256 :
4480        GCCBuiltin<"__builtin_ia32_cvtpd2uqq256_mask">,
4481          Intrinsic<[llvm_v4i64_ty],
4482          [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4483          [IntrNoMem]>;
4484
4485  def int_x86_avx512_mask_cvtpd2uqq_512 :
4486        GCCBuiltin<"__builtin_ia32_cvtpd2uqq512_mask">,
4487          Intrinsic<[llvm_v8i64_ty],
4488          [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4489          [IntrNoMem]>;
4490
4491  def int_x86_avx512_mask_cvtps2dq_128 :
4492        GCCBuiltin<"__builtin_ia32_cvtps2dq128_mask">,
4493          Intrinsic<[llvm_v4i32_ty],
4494          [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4495          [IntrNoMem]>;
4496
4497  def int_x86_avx512_mask_cvtps2dq_256 :
4498        GCCBuiltin<"__builtin_ia32_cvtps2dq256_mask">,
4499          Intrinsic<[llvm_v8i32_ty],
4500          [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4501          [IntrNoMem]>;
4502
4503  def int_x86_avx512_mask_cvtps2dq_512 :
4504        GCCBuiltin<"__builtin_ia32_cvtps2dq512_mask">,
4505          Intrinsic<[llvm_v16i32_ty],
4506          [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
4507          [IntrNoMem]>;
4508
4509  def int_x86_avx512_mask_cvtps2pd_128 :
4510        GCCBuiltin<"__builtin_ia32_cvtps2pd128_mask">,
4511          Intrinsic<[llvm_v2f64_ty],
4512          [llvm_v4f32_ty, llvm_v2f64_ty,  llvm_i8_ty],
4513          [IntrNoMem]>;
4514
4515  def int_x86_avx512_mask_cvtps2pd_256 :
4516        GCCBuiltin<"__builtin_ia32_cvtps2pd256_mask">,
4517          Intrinsic<[llvm_v4f64_ty],
4518          [llvm_v4f32_ty, llvm_v4f64_ty,  llvm_i8_ty],
4519          [IntrNoMem]>;
4520
4521  def int_x86_avx512_mask_cvtps2pd_512 :
4522        GCCBuiltin<"__builtin_ia32_cvtps2pd512_mask">,
4523          Intrinsic<[llvm_v8f64_ty],
4524          [llvm_v8f32_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
4525          [IntrNoMem]>;
4526
4527  def int_x86_avx512_mask_cvtps2qq_128 :
4528        GCCBuiltin<"__builtin_ia32_cvtps2qq128_mask">,
4529          Intrinsic<[llvm_v2i64_ty],
4530          [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
4531          [IntrNoMem]>;
4532
4533  def int_x86_avx512_mask_cvtps2qq_256 :
4534        GCCBuiltin<"__builtin_ia32_cvtps2qq256_mask">,
4535          Intrinsic<[llvm_v4i64_ty],
4536          [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
4537          [IntrNoMem]>;
4538
4539  def int_x86_avx512_mask_cvtps2qq_512 :
4540        GCCBuiltin<"__builtin_ia32_cvtps2qq512_mask">,
4541          Intrinsic<[llvm_v8i64_ty],
4542          [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4543          [IntrNoMem]>;
4544
4545  def int_x86_avx512_mask_cvtps2udq_128 :
4546        GCCBuiltin<"__builtin_ia32_cvtps2udq128_mask">,
4547          Intrinsic<[llvm_v4i32_ty],
4548          [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4549          [IntrNoMem]>;
4550
4551  def int_x86_avx512_mask_cvtps2udq_256 :
4552        GCCBuiltin<"__builtin_ia32_cvtps2udq256_mask">,
4553          Intrinsic<[llvm_v8i32_ty],
4554          [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4555          [IntrNoMem]>;
4556
4557  def int_x86_avx512_mask_cvtps2udq_512 :
4558        GCCBuiltin<"__builtin_ia32_cvtps2udq512_mask">,
4559          Intrinsic<[llvm_v16i32_ty],
4560          [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
4561          [IntrNoMem]>;
4562
4563  def int_x86_avx512_mask_cvtps2uqq_128 :
4564        GCCBuiltin<"__builtin_ia32_cvtps2uqq128_mask">,
4565          Intrinsic<[llvm_v2i64_ty],
4566          [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
4567          [IntrNoMem]>;
4568
4569  def int_x86_avx512_mask_cvtps2uqq_256 :
4570        GCCBuiltin<"__builtin_ia32_cvtps2uqq256_mask">,
4571          Intrinsic<[llvm_v4i64_ty],
4572          [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
4573          [IntrNoMem]>;
4574
4575  def int_x86_avx512_mask_cvtps2uqq_512 :
4576        GCCBuiltin<"__builtin_ia32_cvtps2uqq512_mask">,
4577          Intrinsic<[llvm_v8i64_ty],
4578          [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4579          [IntrNoMem]>;
4580
4581  def int_x86_avx512_mask_cvtqq2pd_128 :
4582        GCCBuiltin<"__builtin_ia32_cvtqq2pd128_mask">,
4583          Intrinsic<[llvm_v2f64_ty],
4584          [llvm_v2i64_ty, llvm_v2f64_ty,  llvm_i8_ty],
4585          [IntrNoMem]>;
4586
4587  def int_x86_avx512_mask_cvtqq2pd_256 :
4588        GCCBuiltin<"__builtin_ia32_cvtqq2pd256_mask">,
4589          Intrinsic<[llvm_v4f64_ty],
4590          [llvm_v4i64_ty, llvm_v4f64_ty,  llvm_i8_ty],
4591          [IntrNoMem]>;
4592
4593  def int_x86_avx512_mask_cvtqq2pd_512 :
4594        GCCBuiltin<"__builtin_ia32_cvtqq2pd512_mask">,
4595          Intrinsic<[llvm_v8f64_ty],
4596          [llvm_v8i64_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
4597          [IntrNoMem]>;
4598
4599  def int_x86_avx512_mask_cvtqq2ps_128 :
4600        GCCBuiltin<"__builtin_ia32_cvtqq2ps128_mask">,
4601          Intrinsic<[llvm_v4f32_ty],
4602          [llvm_v2i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4603          [IntrNoMem]>;
4604
4605  def int_x86_avx512_mask_cvtqq2ps_256 :
4606        GCCBuiltin<"__builtin_ia32_cvtqq2ps256_mask">,
4607          Intrinsic<[llvm_v4f32_ty],
4608          [llvm_v4i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4609          [IntrNoMem]>;
4610
4611  def int_x86_avx512_mask_cvtqq2ps_512 :
4612        GCCBuiltin<"__builtin_ia32_cvtqq2ps512_mask">,
4613          Intrinsic<[llvm_v8f32_ty],
4614          [llvm_v8i64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
4615          [IntrNoMem]>;
4616
4617  def int_x86_avx512_mask_cvttpd2dq_128 :
4618        GCCBuiltin<"__builtin_ia32_cvttpd2dq128_mask">,
4619          Intrinsic<[llvm_v4i32_ty],
4620          [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4621          [IntrNoMem]>;
4622
4623  def int_x86_avx512_mask_cvttpd2dq_256 :
4624        GCCBuiltin<"__builtin_ia32_cvttpd2dq256_mask">,
4625          Intrinsic<[llvm_v4i32_ty],
4626          [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4627          [IntrNoMem]>;
4628
4629  def int_x86_avx512_mask_cvttpd2dq_512 :
4630        GCCBuiltin<"__builtin_ia32_cvttpd2dq512_mask">,
4631          Intrinsic<[llvm_v8i32_ty],
4632          [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
4633          [IntrNoMem]>;
4634
4635  def int_x86_avx512_mask_cvttpd2qq_128 :
4636        GCCBuiltin<"__builtin_ia32_cvttpd2qq128_mask">,
4637          Intrinsic<[llvm_v2i64_ty],
4638          [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4639          [IntrNoMem]>;
4640
4641  def int_x86_avx512_mask_cvttpd2qq_256 :
4642        GCCBuiltin<"__builtin_ia32_cvttpd2qq256_mask">,
4643          Intrinsic<[llvm_v4i64_ty],
4644          [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4645          [IntrNoMem]>;
4646
4647  def int_x86_avx512_mask_cvttpd2qq_512 :
4648        GCCBuiltin<"__builtin_ia32_cvttpd2qq512_mask">,
4649          Intrinsic<[llvm_v8i64_ty],
4650          [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4651          [IntrNoMem]>;
4652
4653  def int_x86_avx512_mask_cvttpd2udq_128 :
4654        GCCBuiltin<"__builtin_ia32_cvttpd2udq128_mask">,
4655          Intrinsic<[llvm_v4i32_ty],
4656          [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4657          [IntrNoMem]>;
4658
4659  def int_x86_avx512_mask_cvttpd2udq_256 :
4660        GCCBuiltin<"__builtin_ia32_cvttpd2udq256_mask">,
4661          Intrinsic<[llvm_v4i32_ty],
4662          [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4663          [IntrNoMem]>;
4664
4665  def int_x86_avx512_mask_cvttpd2udq_512 :
4666        GCCBuiltin<"__builtin_ia32_cvttpd2udq512_mask">,
4667          Intrinsic<[llvm_v8i32_ty],
4668          [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
4669          [IntrNoMem]>;
4670
4671  def int_x86_avx512_mask_cvttpd2uqq_128 :
4672        GCCBuiltin<"__builtin_ia32_cvttpd2uqq128_mask">,
4673          Intrinsic<[llvm_v2i64_ty],
4674          [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4675          [IntrNoMem]>;
4676
4677  def int_x86_avx512_mask_cvttpd2uqq_256 :
4678        GCCBuiltin<"__builtin_ia32_cvttpd2uqq256_mask">,
4679          Intrinsic<[llvm_v4i64_ty],
4680          [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4681          [IntrNoMem]>;
4682
4683  def int_x86_avx512_mask_cvttpd2uqq_512 :
4684        GCCBuiltin<"__builtin_ia32_cvttpd2uqq512_mask">,
4685          Intrinsic<[llvm_v8i64_ty],
4686          [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4687          [IntrNoMem]>;
4688
4689  def int_x86_avx512_mask_cvttps2dq_128 :
4690        GCCBuiltin<"__builtin_ia32_cvttps2dq128_mask">,
4691          Intrinsic<[llvm_v4i32_ty],
4692          [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4693          [IntrNoMem]>;
4694
4695  def int_x86_avx512_mask_cvttps2dq_256 :
4696        GCCBuiltin<"__builtin_ia32_cvttps2dq256_mask">,
4697          Intrinsic<[llvm_v8i32_ty],
4698          [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4699          [IntrNoMem]>;
4700
4701  def int_x86_avx512_mask_cvttps2dq_512 :
4702        GCCBuiltin<"__builtin_ia32_cvttps2dq512_mask">,
4703          Intrinsic<[llvm_v16i32_ty],
4704          [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
4705          [IntrNoMem]>;
4706
4707  def int_x86_avx512_mask_cvttps2qq_128 :
4708        GCCBuiltin<"__builtin_ia32_cvttps2qq128_mask">,
4709          Intrinsic<[llvm_v2i64_ty],
4710          [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
4711          [IntrNoMem]>;
4712
4713  def int_x86_avx512_mask_cvttps2qq_256 :
4714        GCCBuiltin<"__builtin_ia32_cvttps2qq256_mask">,
4715          Intrinsic<[llvm_v4i64_ty],
4716          [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
4717          [IntrNoMem]>;
4718
4719  def int_x86_avx512_mask_cvttps2qq_512 :
4720        GCCBuiltin<"__builtin_ia32_cvttps2qq512_mask">,
4721          Intrinsic<[llvm_v8i64_ty],
4722          [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4723          [IntrNoMem]>;
4724
4725  def int_x86_avx512_mask_cvttps2udq_128 :
4726        GCCBuiltin<"__builtin_ia32_cvttps2udq128_mask">,
4727          Intrinsic<[llvm_v4i32_ty],
4728          [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4729          [IntrNoMem]>;
4730
4731  def int_x86_avx512_mask_cvttps2udq_256 :
4732        GCCBuiltin<"__builtin_ia32_cvttps2udq256_mask">,
4733          Intrinsic<[llvm_v8i32_ty],
4734          [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4735          [IntrNoMem]>;
4736
4737  def int_x86_avx512_mask_cvttps2udq_512 :
4738        GCCBuiltin<"__builtin_ia32_cvttps2udq512_mask">,
4739          Intrinsic<[llvm_v16i32_ty],
4740          [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
4741          [IntrNoMem]>;
4742
4743  def int_x86_avx512_mask_cvttps2uqq_128 :
4744        GCCBuiltin<"__builtin_ia32_cvttps2uqq128_mask">,
4745          Intrinsic<[llvm_v2i64_ty],
4746          [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
4747          [IntrNoMem]>;
4748
4749  def int_x86_avx512_mask_cvttps2uqq_256 :
4750        GCCBuiltin<"__builtin_ia32_cvttps2uqq256_mask">,
4751          Intrinsic<[llvm_v4i64_ty],
4752          [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
4753          [IntrNoMem]>;
4754
4755  def int_x86_avx512_mask_cvttps2uqq_512 :
4756        GCCBuiltin<"__builtin_ia32_cvttps2uqq512_mask">,
4757          Intrinsic<[llvm_v8i64_ty],
4758          [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4759          [IntrNoMem]>;
4760
4761  def int_x86_avx512_mask_cvtudq2pd_128 :
4762        GCCBuiltin<"__builtin_ia32_cvtudq2pd128_mask">,
4763          Intrinsic<[llvm_v2f64_ty],
4764          [llvm_v4i32_ty, llvm_v2f64_ty,  llvm_i8_ty],
4765          [IntrNoMem]>;
4766
4767  def int_x86_avx512_mask_cvtudq2pd_256 :
4768        GCCBuiltin<"__builtin_ia32_cvtudq2pd256_mask">,
4769          Intrinsic<[llvm_v4f64_ty],
4770          [llvm_v4i32_ty, llvm_v4f64_ty,  llvm_i8_ty],
4771          [IntrNoMem]>;
4772
4773  def int_x86_avx512_mask_cvtudq2pd_512 :
4774        GCCBuiltin<"__builtin_ia32_cvtudq2pd512_mask">,
4775          Intrinsic<[llvm_v8f64_ty],
4776          [llvm_v8i32_ty, llvm_v8f64_ty,  llvm_i8_ty],
4777          [IntrNoMem]>;
4778
4779  def int_x86_avx512_mask_cvtudq2ps_128 :
4780        GCCBuiltin<"__builtin_ia32_cvtudq2ps128_mask">,
4781          Intrinsic<[llvm_v4f32_ty],
4782          [llvm_v4i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
4783          [IntrNoMem]>;
4784
4785  def int_x86_avx512_mask_cvtudq2ps_256 :
4786        GCCBuiltin<"__builtin_ia32_cvtudq2ps256_mask">,
4787          Intrinsic<[llvm_v8f32_ty],
4788          [llvm_v8i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
4789          [IntrNoMem]>;
4790
4791  def int_x86_avx512_mask_cvtudq2ps_512 :
4792        GCCBuiltin<"__builtin_ia32_cvtudq2ps512_mask">,
4793          Intrinsic<[llvm_v16f32_ty],
4794          [llvm_v16i32_ty, llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty],
4795          [IntrNoMem]>;
4796
4797  def int_x86_avx512_mask_cvtuqq2pd_128 :
4798        GCCBuiltin<"__builtin_ia32_cvtuqq2pd128_mask">,
4799          Intrinsic<[llvm_v2f64_ty],
4800          [llvm_v2i64_ty, llvm_v2f64_ty,  llvm_i8_ty],
4801          [IntrNoMem]>;
4802
4803  def int_x86_avx512_mask_cvtuqq2pd_256 :
4804        GCCBuiltin<"__builtin_ia32_cvtuqq2pd256_mask">,
4805          Intrinsic<[llvm_v4f64_ty],
4806          [llvm_v4i64_ty, llvm_v4f64_ty,  llvm_i8_ty],
4807          [IntrNoMem]>;
4808
4809  def int_x86_avx512_mask_cvtuqq2pd_512 :
4810        GCCBuiltin<"__builtin_ia32_cvtuqq2pd512_mask">,
4811          Intrinsic<[llvm_v8f64_ty],
4812          [llvm_v8i64_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
4813          [IntrNoMem]>;
4814
4815  def int_x86_avx512_mask_cvtuqq2ps_128 :
4816        GCCBuiltin<"__builtin_ia32_cvtuqq2ps128_mask">,
4817          Intrinsic<[llvm_v4f32_ty],
4818          [llvm_v2i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4819          [IntrNoMem]>;
4820
4821  def int_x86_avx512_mask_cvtuqq2ps_256 :
4822        GCCBuiltin<"__builtin_ia32_cvtuqq2ps256_mask">,
4823          Intrinsic<[llvm_v4f32_ty],
4824          [llvm_v4i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4825          [IntrNoMem]>;
4826
4827  def int_x86_avx512_mask_cvtuqq2ps_512 :
4828        GCCBuiltin<"__builtin_ia32_cvtuqq2ps512_mask">,
4829          Intrinsic<[llvm_v8f32_ty],
4830          [llvm_v8i64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
4831          [IntrNoMem]>;
4832
4833  def int_x86_avx512_mask_rndscale_pd_128 : GCCBuiltin<"__builtin_ia32_rndscalepd_128_mask">,
4834        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty,
4835                                     llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4836  def int_x86_avx512_mask_rndscale_pd_256 : GCCBuiltin<"__builtin_ia32_rndscalepd_256_mask">,
4837        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty,
4838                                     llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4839  def int_x86_avx512_mask_rndscale_pd_512 : GCCBuiltin<"__builtin_ia32_rndscalepd_mask">,
4840        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
4841                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
4842  def int_x86_avx512_mask_rndscale_ps_128 : GCCBuiltin<"__builtin_ia32_rndscaleps_128_mask">,
4843        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty,
4844                                     llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4845  def int_x86_avx512_mask_rndscale_ps_256 : GCCBuiltin<"__builtin_ia32_rndscaleps_256_mask">,
4846        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty,
4847                                     llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4848  def int_x86_avx512_mask_rndscale_ps_512 : GCCBuiltin<"__builtin_ia32_rndscaleps_mask">,
4849        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
4850                                     llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
4851  def int_x86_avx512_mask_reduce_pd_128 : GCCBuiltin<"__builtin_ia32_reducepd128_mask">,
4852        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty,
4853                                     llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4854  def int_x86_avx512_mask_reduce_pd_256 : GCCBuiltin<"__builtin_ia32_reducepd256_mask">,
4855        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty,
4856                                     llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4857  def int_x86_avx512_mask_reduce_pd_512 : GCCBuiltin<"__builtin_ia32_reducepd512_mask">,
4858        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
4859                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
4860  def int_x86_avx512_mask_reduce_ps_128 : GCCBuiltin<"__builtin_ia32_reduceps128_mask">,
4861        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty,
4862                                     llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4863  def int_x86_avx512_mask_reduce_ps_256 : GCCBuiltin<"__builtin_ia32_reduceps256_mask">,
4864        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty,
4865                                     llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4866  def int_x86_avx512_mask_reduce_ps_512 : GCCBuiltin<"__builtin_ia32_reduceps512_mask">,
4867        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
4868                                     llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
4869def int_x86_avx512_mask_range_pd_128 : GCCBuiltin<"__builtin_ia32_rangepd128_mask">,
4870        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty,
4871                                    llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4872def int_x86_avx512_mask_range_pd_256 : GCCBuiltin<"__builtin_ia32_rangepd256_mask">,
4873        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty,
4874                                    llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4875def int_x86_avx512_mask_range_pd_512 : GCCBuiltin<"__builtin_ia32_rangepd512_mask">,
4876        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty,
4877                                    llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty], [IntrNoMem]>;
4878def int_x86_avx512_mask_range_ps_128 : GCCBuiltin<"__builtin_ia32_rangeps128_mask">,
4879        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty,
4880                                    llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4881def int_x86_avx512_mask_range_ps_256 : GCCBuiltin<"__builtin_ia32_rangeps256_mask">,
4882        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty,
4883                                    llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4884def int_x86_avx512_mask_range_ps_512 : GCCBuiltin<"__builtin_ia32_rangeps512_mask">,
4885        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty,
4886                                     llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty], [IntrNoMem]>;
4887}
4888
4889// Vector load with broadcast
4890let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4891  def int_x86_avx512_vbroadcast_ss_512 :
4892        GCCBuiltin<"__builtin_ia32_vbroadcastss512">,
4893        Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
4894  def int_x86_avx512_vbroadcast_ss_ps_512 :
4895              GCCBuiltin<"__builtin_ia32_vbroadcastss_ps512">,
4896              Intrinsic<[llvm_v16f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
4897
4898  def int_x86_avx512_vbroadcast_sd_512 :
4899        GCCBuiltin<"__builtin_ia32_vbroadcastsd512">,
4900        Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
4901  def int_x86_avx512_vbroadcast_sd_pd_512 :
4902              GCCBuiltin<"__builtin_ia32_vbroadcastsd_pd512">,
4903              Intrinsic<[llvm_v8f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
4904
4905  def int_x86_avx512_pbroadcastb_128 :
4906          GCCBuiltin<"__builtin_ia32_pbroadcastb128_mask">,
4907          Intrinsic<[llvm_v16i8_ty],
4908                    [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
4909  def int_x86_avx512_pbroadcastb_256 :
4910          GCCBuiltin<"__builtin_ia32_pbroadcastb256_mask">,
4911          Intrinsic<[llvm_v32i8_ty],
4912                    [llvm_v16i8_ty, llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
4913  def int_x86_avx512_pbroadcastb_512 :
4914          GCCBuiltin<"__builtin_ia32_pbroadcastb512_mask">,
4915          Intrinsic<[llvm_v64i8_ty],
4916                    [llvm_v16i8_ty, llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
4917  def int_x86_avx512_pbroadcastw_128 :
4918          GCCBuiltin<"__builtin_ia32_pbroadcastw128_mask">,
4919          Intrinsic<[llvm_v8i16_ty],
4920                    [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
4921  def int_x86_avx512_pbroadcastw_256 :
4922          GCCBuiltin<"__builtin_ia32_pbroadcastw256_mask">,
4923          Intrinsic<[llvm_v16i16_ty],
4924                    [llvm_v8i16_ty, llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
4925  def int_x86_avx512_pbroadcastw_512 :
4926          GCCBuiltin<"__builtin_ia32_pbroadcastw512_mask">,
4927          Intrinsic<[llvm_v32i16_ty],
4928                    [llvm_v8i16_ty, llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
4929  def int_x86_avx512_pbroadcastd_128 :
4930          GCCBuiltin<"__builtin_ia32_pbroadcastd128_mask">,
4931          Intrinsic<[llvm_v4i32_ty],
4932                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
4933  def int_x86_avx512_pbroadcastd_256 :
4934          GCCBuiltin<"__builtin_ia32_pbroadcastd256_mask">,
4935          Intrinsic<[llvm_v8i32_ty],
4936                    [llvm_v4i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
4937  def int_x86_avx512_pbroadcastd_512 :
4938          GCCBuiltin<"__builtin_ia32_pbroadcastd512">,
4939          Intrinsic<[llvm_v16i32_ty],
4940                    [llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
4941  def int_x86_avx512_pbroadcastq_128 :
4942          GCCBuiltin<"__builtin_ia32_pbroadcastq128_mask">,
4943          Intrinsic<[llvm_v2i64_ty],
4944                    [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
4945  def int_x86_avx512_pbroadcastq_256 :
4946          GCCBuiltin<"__builtin_ia32_pbroadcastq256_mask">,
4947          Intrinsic<[llvm_v4i64_ty],
4948                    [llvm_v2i64_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
4949  def int_x86_avx512_pbroadcastq_512 :
4950          GCCBuiltin<"__builtin_ia32_pbroadcastq512">,
4951          Intrinsic<[llvm_v8i64_ty],
4952                    [llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
4953
4954  def int_x86_avx512_mask_broadcastf32x2_256 :
4955          GCCBuiltin<"__builtin_ia32_broadcastf32x2_256_mask">,
4956          Intrinsic<[llvm_v8f32_ty],
4957                    [llvm_v4f32_ty, llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
4958
4959  def int_x86_avx512_mask_broadcastf32x2_512 :
4960          GCCBuiltin<"__builtin_ia32_broadcastf32x2_512_mask">,
4961          Intrinsic<[llvm_v16f32_ty],
4962                    [llvm_v4f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
4963
4964  def int_x86_avx512_mask_broadcasti32x2_128 :
4965          GCCBuiltin<"__builtin_ia32_broadcasti32x2_128_mask">,
4966          Intrinsic<[llvm_v4i32_ty],
4967                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
4968
4969  def int_x86_avx512_mask_broadcasti32x2_256 :
4970          GCCBuiltin<"__builtin_ia32_broadcasti32x2_256_mask">,
4971          Intrinsic<[llvm_v8i32_ty],
4972                    [llvm_v4i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
4973
4974  def int_x86_avx512_mask_broadcasti32x2_512 :
4975          GCCBuiltin<"__builtin_ia32_broadcasti32x2_512_mask">,
4976          Intrinsic<[llvm_v16i32_ty],
4977                    [llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
4978
4979  def int_x86_avx512_pbroadcastd_i32_512 :
4980         Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty], [IntrNoMem]>;
4981
4982  def int_x86_avx512_pbroadcastq_i64_512 :
4983         Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty], [IntrNoMem]>;
4984   def int_x86_avx512_broadcastmw_512 :
4985          GCCBuiltin<"__builtin_ia32_broadcastmw512">,
4986          Intrinsic<[llvm_v16i32_ty], [llvm_i16_ty], [IntrNoMem]>;
4987   def int_x86_avx512_broadcastmw_256 :
4988          GCCBuiltin<"__builtin_ia32_broadcastmw256">,
4989          Intrinsic<[llvm_v8i32_ty], [llvm_i16_ty], [IntrNoMem]>;
4990   def int_x86_avx512_broadcastmw_128 :
4991          GCCBuiltin<"__builtin_ia32_broadcastmw128">,
4992          Intrinsic<[llvm_v4i32_ty], [llvm_i16_ty], [IntrNoMem]>;
4993   def int_x86_avx512_broadcastmb_512 :
4994          GCCBuiltin<"__builtin_ia32_broadcastmb512">,
4995          Intrinsic<[llvm_v8i64_ty], [llvm_i8_ty], [IntrNoMem]>;
4996   def int_x86_avx512_broadcastmb_256 :
4997          GCCBuiltin<"__builtin_ia32_broadcastmb256">,
4998          Intrinsic<[llvm_v4i64_ty], [llvm_i8_ty], [IntrNoMem]>;
4999   def int_x86_avx512_broadcastmb_128 :
5000          GCCBuiltin<"__builtin_ia32_broadcastmb128">,
5001          Intrinsic<[llvm_v2i64_ty], [llvm_i8_ty], [IntrNoMem]>;
5002}
5003
5004// Vector sign and zero extend
5005let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
5006  def int_x86_avx512_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq512">,
5007              Intrinsic<[llvm_v8i64_ty], [llvm_v16i8_ty],
5008                        [IntrNoMem]>;
5009  def int_x86_avx512_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd512">,
5010              Intrinsic<[llvm_v16i32_ty], [llvm_v16i16_ty],
5011                        [IntrNoMem]>;
5012  def int_x86_avx512_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd512">,
5013              Intrinsic<[llvm_v16i32_ty], [llvm_v16i8_ty],
5014                        [IntrNoMem]>;
5015  def int_x86_avx512_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq512">,
5016              Intrinsic<[llvm_v8i64_ty], [llvm_v8i16_ty],
5017                        [IntrNoMem]>;
5018  def int_x86_avx512_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq512">,
5019              Intrinsic<[llvm_v8i64_ty], [llvm_v8i32_ty],
5020                        [IntrNoMem]>;
5021}
5022//Bitwise Ops
5023let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
5024  def int_x86_avx512_mask_pand_d_128 : GCCBuiltin<"__builtin_ia32_pandd128_mask">,
5025          Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5026                     llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5027  def int_x86_avx512_mask_pand_d_256 : GCCBuiltin<"__builtin_ia32_pandd256_mask">,
5028          Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5029                     llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5030  def int_x86_avx512_mask_pand_d_512 : GCCBuiltin<"__builtin_ia32_pandd512_mask">,
5031          Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5032                     llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5033  def int_x86_avx512_mask_pand_q_128 : GCCBuiltin<"__builtin_ia32_pandq128_mask">,
5034          Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5035                     llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5036  def int_x86_avx512_mask_pand_q_256 : GCCBuiltin<"__builtin_ia32_pandq256_mask">,
5037          Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5038                     llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5039  def int_x86_avx512_mask_pand_q_512 : GCCBuiltin<"__builtin_ia32_pandq512_mask">,
5040          Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5041                     llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5042  def int_x86_avx512_mask_pandn_d_128 : GCCBuiltin<"__builtin_ia32_pandnd128_mask">,
5043          Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5044                     llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5045  def int_x86_avx512_mask_pandn_d_256 : GCCBuiltin<"__builtin_ia32_pandnd256_mask">,
5046          Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5047                     llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5048  def int_x86_avx512_mask_pandn_d_512 : GCCBuiltin<"__builtin_ia32_pandnd512_mask">,
5049          Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5050                     llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5051  def int_x86_avx512_mask_pandn_q_128 : GCCBuiltin<"__builtin_ia32_pandnq128_mask">,
5052          Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5053                     llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5054  def int_x86_avx512_mask_pandn_q_256 : GCCBuiltin<"__builtin_ia32_pandnq256_mask">,
5055          Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5056                     llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5057  def int_x86_avx512_mask_pandn_q_512 : GCCBuiltin<"__builtin_ia32_pandnq512_mask">,
5058          Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5059                     llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5060  def int_x86_avx512_mask_por_d_128 : GCCBuiltin<"__builtin_ia32_pord128_mask">,
5061          Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5062                     llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5063  def int_x86_avx512_mask_por_d_256 : GCCBuiltin<"__builtin_ia32_pord256_mask">,
5064          Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5065                     llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5066  def int_x86_avx512_mask_por_d_512 : GCCBuiltin<"__builtin_ia32_pord512_mask">,
5067          Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5068                     llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5069  def int_x86_avx512_mask_por_q_128 : GCCBuiltin<"__builtin_ia32_porq128_mask">,
5070          Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5071                     llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5072  def int_x86_avx512_mask_por_q_256 : GCCBuiltin<"__builtin_ia32_porq256_mask">,
5073          Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5074                     llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5075  def int_x86_avx512_mask_por_q_512 : GCCBuiltin<"__builtin_ia32_porq512_mask">,
5076          Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5077                     llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5078  def int_x86_avx512_mask_pxor_d_128 : GCCBuiltin<"__builtin_ia32_pxord128_mask">,
5079          Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5080                     llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5081  def int_x86_avx512_mask_pxor_d_256 : GCCBuiltin<"__builtin_ia32_pxord256_mask">,
5082          Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5083                     llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5084  def int_x86_avx512_mask_pxor_d_512 : GCCBuiltin<"__builtin_ia32_pxord512_mask">,
5085          Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5086                     llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5087  def int_x86_avx512_mask_pxor_q_128 : GCCBuiltin<"__builtin_ia32_pxorq128_mask">,
5088          Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5089                     llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5090  def int_x86_avx512_mask_pxor_q_256 : GCCBuiltin<"__builtin_ia32_pxorq256_mask">,
5091          Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5092                     llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5093  def int_x86_avx512_mask_pxor_q_512 : GCCBuiltin<"__builtin_ia32_pxorq512_mask">,
5094          Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5095                     llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5096}
5097// Arithmetic ops
5098let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
5099
5100  def int_x86_avx512_mask_add_ps_128 : GCCBuiltin<"__builtin_ia32_addps128_mask">,
5101          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5102                     llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5103  def int_x86_avx512_mask_add_ps_256 : GCCBuiltin<"__builtin_ia32_addps256_mask">,
5104          Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5105                     llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5106  def int_x86_avx512_mask_add_ps_512 : GCCBuiltin<"__builtin_ia32_addps512_mask">,
5107          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5108                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5109  def int_x86_avx512_mask_add_pd_128 : GCCBuiltin<"__builtin_ia32_addpd128_mask">,
5110          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5111                     llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5112  def int_x86_avx512_mask_add_pd_256 : GCCBuiltin<"__builtin_ia32_addpd256_mask">,
5113          Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5114                     llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5115  def int_x86_avx512_mask_add_pd_512 : GCCBuiltin<"__builtin_ia32_addpd512_mask">,
5116          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5117                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5118  def int_x86_avx512_mask_sub_ps_128 : GCCBuiltin<"__builtin_ia32_subps128_mask">,
5119          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5120                     llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5121  def int_x86_avx512_mask_sub_ps_256 : GCCBuiltin<"__builtin_ia32_subps256_mask">,
5122          Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5123                     llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5124  def int_x86_avx512_mask_sub_ps_512 : GCCBuiltin<"__builtin_ia32_subps512_mask">,
5125          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5126                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5127  def int_x86_avx512_mask_sub_pd_128 : GCCBuiltin<"__builtin_ia32_subpd128_mask">,
5128          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5129                     llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5130  def int_x86_avx512_mask_sub_pd_256 : GCCBuiltin<"__builtin_ia32_subpd256_mask">,
5131          Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5132                     llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5133  def int_x86_avx512_mask_sub_pd_512 : GCCBuiltin<"__builtin_ia32_subpd512_mask">,
5134          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5135                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5136  def int_x86_avx512_mask_mul_ps_128 : GCCBuiltin<"__builtin_ia32_mulps_mask">,
5137          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5138                     llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5139  def int_x86_avx512_mask_mul_ps_256 : GCCBuiltin<"__builtin_ia32_mulps256_mask">,
5140          Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5141                     llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5142  def int_x86_avx512_mask_mul_ps_512 : GCCBuiltin<"__builtin_ia32_mulps512_mask">,
5143          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5144                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5145  def int_x86_avx512_mask_mul_pd_128 : GCCBuiltin<"__builtin_ia32_mulpd_mask">,
5146          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5147                     llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5148  def int_x86_avx512_mask_mul_pd_256 : GCCBuiltin<"__builtin_ia32_mulpd256_mask">,
5149          Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5150                     llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5151  def int_x86_avx512_mask_mul_pd_512 : GCCBuiltin<"__builtin_ia32_mulpd512_mask">,
5152          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5153                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5154  def int_x86_avx512_mask_div_ps_128 : GCCBuiltin<"__builtin_ia32_divps_mask">,
5155          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5156                     llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5157  def int_x86_avx512_mask_div_ps_256 : GCCBuiltin<"__builtin_ia32_divps256_mask">,
5158          Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5159                     llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5160  def int_x86_avx512_mask_div_ps_512 : GCCBuiltin<"__builtin_ia32_divps512_mask">,
5161          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5162                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5163  def int_x86_avx512_mask_div_pd_128 : GCCBuiltin<"__builtin_ia32_divpd_mask">,
5164          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5165                     llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5166  def int_x86_avx512_mask_div_pd_256 : GCCBuiltin<"__builtin_ia32_divpd256_mask">,
5167          Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5168                     llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5169  def int_x86_avx512_mask_div_pd_512 : GCCBuiltin<"__builtin_ia32_divpd512_mask">,
5170          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5171                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5172  def int_x86_avx512_mask_max_ps_128 : GCCBuiltin<"__builtin_ia32_maxps_mask">,
5173          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5174                     llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5175  def int_x86_avx512_mask_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256_mask">,
5176          Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5177                     llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5178  def int_x86_avx512_mask_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512_mask">,
5179          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5180                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5181  def int_x86_avx512_mask_max_pd_128 : GCCBuiltin<"__builtin_ia32_maxpd_mask">,
5182          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5183                     llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5184  def int_x86_avx512_mask_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256_mask">,
5185          Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5186                     llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5187  def int_x86_avx512_mask_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512_mask">,
5188          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5189                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5190  def int_x86_avx512_mask_min_ps_128 : GCCBuiltin<"__builtin_ia32_minps_mask">,
5191          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5192                     llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5193  def int_x86_avx512_mask_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256_mask">,
5194          Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5195                     llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5196  def int_x86_avx512_mask_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512_mask">,
5197          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5198                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5199  def int_x86_avx512_mask_min_pd_128 : GCCBuiltin<"__builtin_ia32_minpd_mask">,
5200          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5201                     llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5202  def int_x86_avx512_mask_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256_mask">,
5203          Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5204                     llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5205  def int_x86_avx512_mask_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512_mask">,
5206          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5207                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5208
5209  def int_x86_avx512_mask_add_ss_round : GCCBuiltin<"__builtin_ia32_addss_round">,
5210          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5211                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5212  def int_x86_avx512_mask_div_ss_round : GCCBuiltin<"__builtin_ia32_divss_round">,
5213          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5214                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5215  def int_x86_avx512_mask_mul_ss_round : GCCBuiltin<"__builtin_ia32_mulss_round">,
5216          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5217                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5218  def int_x86_avx512_mask_sub_ss_round : GCCBuiltin<"__builtin_ia32_subss_round">,
5219          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5220                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5221  def int_x86_avx512_mask_max_ss_round : GCCBuiltin<"__builtin_ia32_maxss_round">,
5222          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5223                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5224  def int_x86_avx512_mask_min_ss_round : GCCBuiltin<"__builtin_ia32_minss_round">,
5225          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5226                     llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5227  def int_x86_avx512_mask_add_sd_round : GCCBuiltin<"__builtin_ia32_addsd_round">,
5228          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5229                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5230  def int_x86_avx512_mask_div_sd_round : GCCBuiltin<"__builtin_ia32_divsd_round">,
5231          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5232                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5233  def int_x86_avx512_mask_mul_sd_round : GCCBuiltin<"__builtin_ia32_mulsd_round">,
5234          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5235                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5236  def int_x86_avx512_mask_sub_sd_round : GCCBuiltin<"__builtin_ia32_subsd_round">,
5237          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5238                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5239  def int_x86_avx512_mask_max_sd_round : GCCBuiltin<"__builtin_ia32_maxsd_round">,
5240          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5241                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5242  def int_x86_avx512_mask_min_sd_round : GCCBuiltin<"__builtin_ia32_minsd_round">,
5243          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5244                     llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5245
5246  def int_x86_avx512_mask_rndscale_ss : GCCBuiltin<"__builtin_ia32_rndscaless_round">,
5247          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5248                                     llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5249                                     [IntrNoMem]>;
5250  def int_x86_avx512_mask_rndscale_sd : GCCBuiltin<"__builtin_ia32_rndscalesd_round">,
5251          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5252                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5253                                     [IntrNoMem]>;
5254  def int_x86_avx512_mask_range_ss : GCCBuiltin<"__builtin_ia32_rangess128_round">,
5255          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5256                                     llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5257                                     [IntrNoMem]>;
5258  def int_x86_avx512_mask_range_sd : GCCBuiltin<"__builtin_ia32_rangesd128_round">,
5259          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5260                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5261                                     [IntrNoMem]>;
5262  def int_x86_avx512_mask_reduce_ss : GCCBuiltin<"__builtin_ia32_reducess">,
5263          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5264                                     llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5265                                     [IntrNoMem]>;
5266  def int_x86_avx512_mask_reduce_sd : GCCBuiltin<"__builtin_ia32_reducesd">,
5267          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5268                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5269                                     [IntrNoMem]>;
5270  def int_x86_avx512_mask_scalef_sd : GCCBuiltin<"__builtin_ia32_scalefsd_round">,
5271          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5272                                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5273  def int_x86_avx512_mask_scalef_ss : GCCBuiltin<"__builtin_ia32_scalefss_round">,
5274          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5275                                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5276  def int_x86_avx512_mask_scalef_pd_128 : GCCBuiltin<"__builtin_ia32_scalefpd128_mask">,
5277          Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5278                    llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5279  def int_x86_avx512_mask_scalef_pd_256 : GCCBuiltin<"__builtin_ia32_scalefpd256_mask">,
5280          Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5281                    llvm_v4f64_ty, llvm_i8_ty],[IntrNoMem]>;
5282  def int_x86_avx512_mask_scalef_pd_512 : GCCBuiltin<"__builtin_ia32_scalefpd512_mask">,
5283          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5284                    llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5285  def int_x86_avx512_mask_scalef_ps_128 : GCCBuiltin<"__builtin_ia32_scalefps128_mask">,
5286          Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5287                    llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5288  def int_x86_avx512_mask_scalef_ps_256 : GCCBuiltin<"__builtin_ia32_scalefps256_mask">,
5289          Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5290                    llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5291  def int_x86_avx512_mask_scalef_ps_512 : GCCBuiltin<"__builtin_ia32_scalefps512_mask">,
5292          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5293                    llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5294
5295  def int_x86_avx512_mask_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss_round">,
5296        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5297                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5298  def int_x86_avx512_mask_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtsd_round">,
5299        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5300                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5301
5302  def int_x86_avx512_mask_sqrt_pd_128 : GCCBuiltin<"__builtin_ia32_sqrtpd128_mask">,
5303        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5304                                    llvm_i8_ty], [IntrNoMem]>;
5305  def int_x86_avx512_mask_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256_mask">,
5306        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5307                                    llvm_i8_ty], [IntrNoMem]>;
5308  def int_x86_avx512_mask_sqrt_pd_512 : GCCBuiltin<"__builtin_ia32_sqrtpd512_mask">,
5309        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5310                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5311  def int_x86_avx512_mask_sqrt_ps_128 : GCCBuiltin<"__builtin_ia32_sqrtps128_mask">,
5312        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5313                                     llvm_i8_ty], [IntrNoMem]>;
5314  def int_x86_avx512_mask_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256_mask">,
5315        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5316                                     llvm_i8_ty], [IntrNoMem]>;
5317  def int_x86_avx512_mask_sqrt_ps_512 : GCCBuiltin<"__builtin_ia32_sqrtps512_mask">,
5318        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5319                                     llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5320  def int_x86_avx512_mask_getexp_pd_128 : GCCBuiltin<"__builtin_ia32_getexppd128_mask">,
5321        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5322                                    llvm_i8_ty], [IntrNoMem]>;
5323  def int_x86_avx512_mask_getexp_pd_256 : GCCBuiltin<"__builtin_ia32_getexppd256_mask">,
5324        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5325                                    llvm_i8_ty], [IntrNoMem]>;
5326  def int_x86_avx512_mask_getexp_pd_512 : GCCBuiltin<"__builtin_ia32_getexppd512_mask">,
5327        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5328                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5329  def int_x86_avx512_mask_getexp_ps_128 : GCCBuiltin<"__builtin_ia32_getexpps128_mask">,
5330        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5331                                     llvm_i8_ty], [IntrNoMem]>;
5332  def int_x86_avx512_mask_getexp_ps_256 : GCCBuiltin<"__builtin_ia32_getexpps256_mask">,
5333        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5334                                     llvm_i8_ty], [IntrNoMem]>;
5335  def int_x86_avx512_mask_getexp_ps_512 : GCCBuiltin<"__builtin_ia32_getexpps512_mask">,
5336        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5337                                     llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5338
5339  def int_x86_avx512_mask_getexp_ss : GCCBuiltin<"__builtin_ia32_getexpss_mask">,
5340        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5341                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5342  def int_x86_avx512_mask_getexp_sd : GCCBuiltin<"__builtin_ia32_getexpsd_mask">,
5343        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5344                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5345
5346  def int_x86_avx512_mask_getmant_pd_128 :
5347         GCCBuiltin<"__builtin_ia32_getmantpd128_mask">,
5348          Intrinsic<[llvm_v2f64_ty],
5349          [llvm_v2f64_ty,llvm_i32_ty, llvm_v2f64_ty,  llvm_i8_ty],
5350          [IntrNoMem]>;
5351
5352  def int_x86_avx512_mask_getmant_pd_256 :
5353         GCCBuiltin<"__builtin_ia32_getmantpd256_mask">,
5354          Intrinsic<[llvm_v4f64_ty],
5355          [llvm_v4f64_ty,llvm_i32_ty, llvm_v4f64_ty,  llvm_i8_ty],
5356          [IntrNoMem]>;
5357
5358  def int_x86_avx512_mask_getmant_pd_512 :
5359         GCCBuiltin<"__builtin_ia32_getmantpd512_mask">,
5360          Intrinsic<[llvm_v8f64_ty],
5361          [llvm_v8f64_ty,llvm_i32_ty, llvm_v8f64_ty,  llvm_i8_ty,llvm_i32_ty ],
5362          [IntrNoMem]>;
5363
5364  def int_x86_avx512_mask_getmant_ps_128 :
5365         GCCBuiltin<"__builtin_ia32_getmantps128_mask">,
5366          Intrinsic<[llvm_v4f32_ty],
5367          [llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
5368          [IntrNoMem]>;
5369
5370  def int_x86_avx512_mask_getmant_ps_256 :
5371         GCCBuiltin<"__builtin_ia32_getmantps256_mask">,
5372          Intrinsic<[llvm_v8f32_ty],
5373          [llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
5374          [IntrNoMem]>;
5375
5376  def int_x86_avx512_mask_getmant_ps_512 :
5377         GCCBuiltin<"__builtin_ia32_getmantps512_mask">,
5378          Intrinsic<[llvm_v16f32_ty],
5379          [llvm_v16f32_ty,llvm_i32_ty, llvm_v16f32_ty,llvm_i16_ty,llvm_i32_ty],
5380          [IntrNoMem]>;
5381
5382  def int_x86_avx512_mask_getmant_ss :
5383         GCCBuiltin<"__builtin_ia32_getmantss_round">,
5384          Intrinsic<[llvm_v4f32_ty],
5385          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty,
5386           llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5387
5388  def int_x86_avx512_mask_getmant_sd :
5389         GCCBuiltin<"__builtin_ia32_getmantsd_round">,
5390          Intrinsic<[llvm_v2f64_ty],
5391          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v2f64_ty,
5392           llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5393
5394  def int_x86_avx512_rsqrt14_ss : GCCBuiltin<"__builtin_ia32_rsqrt14ss">,
5395        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5396                                    llvm_i8_ty], [IntrNoMem]>;
5397  def int_x86_avx512_rsqrt14_sd : GCCBuiltin<"__builtin_ia32_rsqrt14sd">,
5398        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5399                                    llvm_i8_ty], [IntrNoMem]>;
5400
5401  def int_x86_avx512_rsqrt14_pd_512 : GCCBuiltin<"__builtin_ia32_rsqrt14pd512_mask">,
5402        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5403                                    llvm_i8_ty], [IntrNoMem]>;
5404  def int_x86_avx512_rsqrt14_ps_512 : GCCBuiltin<"__builtin_ia32_rsqrt14ps512_mask">,
5405        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5406                                     llvm_i16_ty], [IntrNoMem]>;
5407  def int_x86_avx512_rcp14_ss : GCCBuiltin<"__builtin_ia32_rcp14ss">,
5408        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5409                                    llvm_i8_ty], [IntrNoMem]>;
5410  def int_x86_avx512_rcp14_sd : GCCBuiltin<"__builtin_ia32_rcp14sd">,
5411        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5412                                    llvm_i8_ty], [IntrNoMem]>;
5413
5414  def int_x86_avx512_rcp14_pd_512 : GCCBuiltin<"__builtin_ia32_rcp14pd512_mask">,
5415        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5416                                    llvm_i8_ty], [IntrNoMem]>;
5417  def int_x86_avx512_rcp14_ps_512 : GCCBuiltin<"__builtin_ia32_rcp14ps512_mask">,
5418        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5419                                     llvm_i16_ty], [IntrNoMem]>;
5420
5421  def int_x86_avx512_rcp28_ps : GCCBuiltin<"__builtin_ia32_rcp28ps_mask">,
5422            Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5423                                         llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5424  def int_x86_avx512_rcp28_pd : GCCBuiltin<"__builtin_ia32_rcp28pd_mask">,
5425            Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5426                                        llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5427  def int_x86_avx512_exp2_ps : GCCBuiltin<"__builtin_ia32_exp2ps_mask">,
5428            Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5429                                         llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5430  def int_x86_avx512_exp2_pd : GCCBuiltin<"__builtin_ia32_exp2pd_mask">,
5431            Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5432                                        llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5433
5434  def int_x86_avx512_rcp28_ss : GCCBuiltin<"__builtin_ia32_rcp28ss_round">,
5435            Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5436                                        llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
5437                      [IntrNoMem]>;
5438  def int_x86_avx512_rcp28_sd : GCCBuiltin<"__builtin_ia32_rcp28sd_round">,
5439            Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5440                                        llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
5441                      [IntrNoMem]>;
5442  def int_x86_avx512_rsqrt28_ps : GCCBuiltin<"__builtin_ia32_rsqrt28ps_mask">,
5443            Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5444                                         llvm_i16_ty, llvm_i32_ty],
5445                      [IntrNoMem]>;
5446  def int_x86_avx512_rsqrt28_pd : GCCBuiltin<"__builtin_ia32_rsqrt28pd_mask">,
5447            Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5448                                        llvm_i8_ty, llvm_i32_ty],
5449                      [IntrNoMem]>;
5450  def int_x86_avx512_rsqrt28_ss : GCCBuiltin<"__builtin_ia32_rsqrt28ss_round">,
5451            Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5452                                        llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
5453                      [IntrNoMem]>;
5454  def int_x86_avx512_rsqrt28_sd : GCCBuiltin<"__builtin_ia32_rsqrt28sd_round">,
5455            Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5456                                        llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
5457                      [IntrNoMem]>;
5458def int_x86_avx512_psad_bw_512 : GCCBuiltin<"__builtin_ia32_psadbw512">,
5459            Intrinsic<[llvm_v8i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty],
5460                      [IntrNoMem]>;
5461}
5462// FP logical ops
5463let TargetPrefix = "x86" in {
5464  def int_x86_avx512_mask_and_pd_128 : GCCBuiltin<"__builtin_ia32_andpd128_mask">,
5465            Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5466                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5467  def int_x86_avx512_mask_and_pd_256 : GCCBuiltin<"__builtin_ia32_andpd256_mask">,
5468            Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5469                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5470  def int_x86_avx512_mask_and_pd_512 : GCCBuiltin<"__builtin_ia32_andpd512_mask">,
5471          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5472                    llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5473  def int_x86_avx512_mask_and_ps_128 : GCCBuiltin<"__builtin_ia32_andps128_mask">,
5474            Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5475                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5476  def int_x86_avx512_mask_and_ps_256 : GCCBuiltin<"__builtin_ia32_andps256_mask">,
5477            Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5478                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5479  def int_x86_avx512_mask_and_ps_512 : GCCBuiltin<"__builtin_ia32_andps512_mask">,
5480          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5481                    llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5482  def int_x86_avx512_mask_andn_pd_128 : GCCBuiltin<"__builtin_ia32_andnpd128_mask">,
5483            Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5484                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5485  def int_x86_avx512_mask_andn_pd_256 : GCCBuiltin<"__builtin_ia32_andnpd256_mask">,
5486            Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5487                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5488  def int_x86_avx512_mask_andn_pd_512 : GCCBuiltin<"__builtin_ia32_andnpd512_mask">,
5489          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5490                    llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5491  def int_x86_avx512_mask_andn_ps_128 : GCCBuiltin<"__builtin_ia32_andnps128_mask">,
5492            Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5493                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5494  def int_x86_avx512_mask_andn_ps_256 : GCCBuiltin<"__builtin_ia32_andnps256_mask">,
5495            Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5496                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5497  def int_x86_avx512_mask_andn_ps_512 : GCCBuiltin<"__builtin_ia32_andnps512_mask">,
5498          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5499                    llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5500  def int_x86_avx512_mask_or_pd_128 : GCCBuiltin<"__builtin_ia32_orpd128_mask">,
5501            Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5502                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5503  def int_x86_avx512_mask_or_pd_256 : GCCBuiltin<"__builtin_ia32_orpd256_mask">,
5504            Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5505                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5506  def int_x86_avx512_mask_or_pd_512 : GCCBuiltin<"__builtin_ia32_orpd512_mask">,
5507          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5508                    llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5509  def int_x86_avx512_mask_or_ps_128 : GCCBuiltin<"__builtin_ia32_orps128_mask">,
5510            Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5511                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5512  def int_x86_avx512_mask_or_ps_256 : GCCBuiltin<"__builtin_ia32_orps256_mask">,
5513            Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5514                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5515  def int_x86_avx512_mask_or_ps_512 : GCCBuiltin<"__builtin_ia32_orps512_mask">,
5516          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5517                    llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5518
5519  def int_x86_avx512_mask_xor_pd_128 : GCCBuiltin<"__builtin_ia32_xorpd128_mask">,
5520            Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5521                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5522  def int_x86_avx512_mask_xor_pd_256 : GCCBuiltin<"__builtin_ia32_xorpd256_mask">,
5523            Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5524                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5525  def int_x86_avx512_mask_xor_pd_512 : GCCBuiltin<"__builtin_ia32_xorpd512_mask">,
5526          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5527                    llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5528  def int_x86_avx512_mask_xor_ps_128 : GCCBuiltin<"__builtin_ia32_xorps128_mask">,
5529            Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5530                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5531  def int_x86_avx512_mask_xor_ps_256 : GCCBuiltin<"__builtin_ia32_xorps256_mask">,
5532            Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5533                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5534  def int_x86_avx512_mask_xor_ps_512 : GCCBuiltin<"__builtin_ia32_xorps512_mask">,
5535          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5536                    llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5537}
5538// Integer arithmetic ops
5539let TargetPrefix = "x86" in {
5540  def int_x86_avx512_mask_padd_b_128 : GCCBuiltin<"__builtin_ia32_paddb128_mask">,
5541          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5542                     llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5543  def int_x86_avx512_mask_padd_b_256 : GCCBuiltin<"__builtin_ia32_paddb256_mask">,
5544          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5545                     llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5546  def int_x86_avx512_mask_padd_b_512 : GCCBuiltin<"__builtin_ia32_paddb512_mask">,
5547          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5548                     llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5549  def int_x86_avx512_mask_padd_w_128 : GCCBuiltin<"__builtin_ia32_paddw128_mask">,
5550          Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5551                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5552  def int_x86_avx512_mask_padd_w_256 : GCCBuiltin<"__builtin_ia32_paddw256_mask">,
5553          Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5554                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5555  def int_x86_avx512_mask_padd_w_512 : GCCBuiltin<"__builtin_ia32_paddw512_mask">,
5556          Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5557                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5558  def int_x86_avx512_mask_padds_b_128 : GCCBuiltin<"__builtin_ia32_paddsb128_mask">,
5559          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5560                     llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5561  def int_x86_avx512_mask_padds_b_256 : GCCBuiltin<"__builtin_ia32_paddsb256_mask">,
5562          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5563                     llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5564  def int_x86_avx512_mask_padds_b_512 : GCCBuiltin<"__builtin_ia32_paddsb512_mask">,
5565          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5566                     llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5567  def int_x86_avx512_mask_padds_w_128 : GCCBuiltin<"__builtin_ia32_paddsw128_mask">,
5568          Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5569                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5570  def int_x86_avx512_mask_padds_w_256 : GCCBuiltin<"__builtin_ia32_paddsw256_mask">,
5571          Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5572                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5573  def int_x86_avx512_mask_padds_w_512 : GCCBuiltin<"__builtin_ia32_paddsw512_mask">,
5574          Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5575                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5576  def int_x86_avx512_mask_paddus_b_128 : GCCBuiltin<"__builtin_ia32_paddusb128_mask">,
5577          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5578                     llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5579  def int_x86_avx512_mask_paddus_b_256 : GCCBuiltin<"__builtin_ia32_paddusb256_mask">,
5580          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5581                     llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5582  def int_x86_avx512_mask_paddus_b_512 : GCCBuiltin<"__builtin_ia32_paddusb512_mask">,
5583          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5584                     llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5585  def int_x86_avx512_mask_paddus_w_128 : GCCBuiltin<"__builtin_ia32_paddusw128_mask">,
5586          Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5587                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5588  def int_x86_avx512_mask_paddus_w_256 : GCCBuiltin<"__builtin_ia32_paddusw256_mask">,
5589          Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5590                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5591  def int_x86_avx512_mask_paddus_w_512 : GCCBuiltin<"__builtin_ia32_paddusw512_mask">,
5592          Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5593                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5594  def int_x86_avx512_mask_padd_d_128 : GCCBuiltin<"__builtin_ia32_paddd128_mask">,
5595          Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5596                     llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5597  def int_x86_avx512_mask_padd_d_256 : GCCBuiltin<"__builtin_ia32_paddd256_mask">,
5598          Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5599                     llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5600  def int_x86_avx512_mask_padd_d_512 : GCCBuiltin<"__builtin_ia32_paddd512_mask">,
5601          Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5602                     llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5603  def int_x86_avx512_mask_padd_q_128 : GCCBuiltin<"__builtin_ia32_paddq128_mask">,
5604          Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5605                     llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5606  def int_x86_avx512_mask_padd_q_256 : GCCBuiltin<"__builtin_ia32_paddq256_mask">,
5607          Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5608                     llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5609  def int_x86_avx512_mask_padd_q_512 : GCCBuiltin<"__builtin_ia32_paddq512_mask">,
5610          Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5611                     llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5612  def int_x86_avx512_mask_psub_b_128 : GCCBuiltin<"__builtin_ia32_psubb128_mask">,
5613          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5614                     llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5615  def int_x86_avx512_mask_psub_b_256 : GCCBuiltin<"__builtin_ia32_psubb256_mask">,
5616          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5617                     llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5618  def int_x86_avx512_mask_psub_b_512 : GCCBuiltin<"__builtin_ia32_psubb512_mask">,
5619          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5620                     llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5621  def int_x86_avx512_mask_psub_w_128 : GCCBuiltin<"__builtin_ia32_psubw128_mask">,
5622          Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5623                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5624  def int_x86_avx512_mask_psub_w_256 : GCCBuiltin<"__builtin_ia32_psubw256_mask">,
5625          Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5626                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5627  def int_x86_avx512_mask_psub_w_512 : GCCBuiltin<"__builtin_ia32_psubw512_mask">,
5628          Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5629                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5630  def int_x86_avx512_mask_psubs_b_128 : GCCBuiltin<"__builtin_ia32_psubsb128_mask">,
5631          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5632                     llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5633  def int_x86_avx512_mask_psubs_b_256 : GCCBuiltin<"__builtin_ia32_psubsb256_mask">,
5634          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5635                     llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5636  def int_x86_avx512_mask_psubs_b_512 : GCCBuiltin<"__builtin_ia32_psubsb512_mask">,
5637          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5638                     llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5639  def int_x86_avx512_mask_psubs_w_128 : GCCBuiltin<"__builtin_ia32_psubsw128_mask">,
5640          Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5641                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5642  def int_x86_avx512_mask_psubs_w_256 : GCCBuiltin<"__builtin_ia32_psubsw256_mask">,
5643          Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5644                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5645  def int_x86_avx512_mask_psubs_w_512 : GCCBuiltin<"__builtin_ia32_psubsw512_mask">,
5646          Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5647                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5648  def int_x86_avx512_mask_psubus_b_128 : GCCBuiltin<"__builtin_ia32_psubusb128_mask">,
5649          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5650                     llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5651  def int_x86_avx512_mask_psubus_b_256 : GCCBuiltin<"__builtin_ia32_psubusb256_mask">,
5652          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5653                     llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5654  def int_x86_avx512_mask_psubus_b_512 : GCCBuiltin<"__builtin_ia32_psubusb512_mask">,
5655          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5656                     llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5657  def int_x86_avx512_mask_psubus_w_128 : GCCBuiltin<"__builtin_ia32_psubusw128_mask">,
5658          Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5659                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5660  def int_x86_avx512_mask_psubus_w_256 : GCCBuiltin<"__builtin_ia32_psubusw256_mask">,
5661          Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5662                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5663  def int_x86_avx512_mask_psubus_w_512 : GCCBuiltin<"__builtin_ia32_psubusw512_mask">,
5664          Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5665                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5666  def int_x86_avx512_mask_psub_d_128 : GCCBuiltin<"__builtin_ia32_psubd128_mask">,
5667          Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5668                     llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5669  def int_x86_avx512_mask_psub_d_256 : GCCBuiltin<"__builtin_ia32_psubd256_mask">,
5670          Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5671                     llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5672  def int_x86_avx512_mask_psub_d_512 : GCCBuiltin<"__builtin_ia32_psubd512_mask">,
5673          Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5674                     llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5675  def int_x86_avx512_mask_psub_q_128 : GCCBuiltin<"__builtin_ia32_psubq128_mask">,
5676          Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5677                     llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5678  def int_x86_avx512_mask_psub_q_256 : GCCBuiltin<"__builtin_ia32_psubq256_mask">,
5679          Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5680                     llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5681  def int_x86_avx512_mask_psub_q_512 : GCCBuiltin<"__builtin_ia32_psubq512_mask">,
5682          Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5683                     llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5684  def int_x86_avx512_mask_pmulu_dq_128 : GCCBuiltin<"__builtin_ia32_pmuludq128_mask">,
5685              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5686                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5687  def int_x86_avx512_mask_pmul_dq_128 : GCCBuiltin<"__builtin_ia32_pmuldq128_mask">,
5688              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5689                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5690  def int_x86_avx512_mask_pmulu_dq_256 : GCCBuiltin<"__builtin_ia32_pmuludq256_mask">,
5691              Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5692                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5693  def int_x86_avx512_mask_pmul_dq_256 : GCCBuiltin<"__builtin_ia32_pmuldq256_mask">,
5694              Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5695                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5696  def int_x86_avx512_mask_pmulu_dq_512 : GCCBuiltin<"__builtin_ia32_pmuludq512_mask">,
5697              Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5698                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5699  def int_x86_avx512_mask_pmul_dq_512 : GCCBuiltin<"__builtin_ia32_pmuldq512_mask">,
5700              Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5701                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5702  def int_x86_avx512_mask_pmull_w_128 : GCCBuiltin<"__builtin_ia32_pmullw128_mask">,
5703              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5704                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5705  def int_x86_avx512_mask_pmull_w_256 : GCCBuiltin<"__builtin_ia32_pmullw256_mask">,
5706              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5707                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5708  def int_x86_avx512_mask_pmull_w_512 : GCCBuiltin<"__builtin_ia32_pmullw512_mask">,
5709              Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5710                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5711  def int_x86_avx512_mask_pmull_d_128 : GCCBuiltin<"__builtin_ia32_pmulld128_mask">,
5712              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5713                     llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5714  def int_x86_avx512_mask_pmull_d_256 : GCCBuiltin<"__builtin_ia32_pmulld256_mask">,
5715              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5716                     llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5717  def int_x86_avx512_mask_pmull_d_512 : GCCBuiltin<"__builtin_ia32_pmulld512_mask">,
5718              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5719                     llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5720  def int_x86_avx512_mask_pmull_q_128 : GCCBuiltin<"__builtin_ia32_pmullq128_mask">,
5721              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5722                     llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5723  def int_x86_avx512_mask_pmull_q_256 : GCCBuiltin<"__builtin_ia32_pmullq256_mask">,
5724              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5725                     llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5726  def int_x86_avx512_mask_pmull_q_512 : GCCBuiltin<"__builtin_ia32_pmullq512_mask">,
5727              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5728                     llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5729  def int_x86_avx512_mask_pmulhu_w_512 : GCCBuiltin<"__builtin_ia32_pmulhuw512_mask">,
5730              Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5731                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5732  def int_x86_avx512_mask_pmulh_w_512 : GCCBuiltin<"__builtin_ia32_pmulhw512_mask">,
5733              Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5734                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5735  def int_x86_avx512_mask_pmulhu_w_128 : GCCBuiltin<"__builtin_ia32_pmulhuw128_mask">,
5736              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5737                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5738  def int_x86_avx512_mask_pmulhu_w_256 : GCCBuiltin<"__builtin_ia32_pmulhuw256_mask">,
5739              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5740                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5741  def int_x86_avx512_mask_pmulh_w_128 : GCCBuiltin<"__builtin_ia32_pmulhw128_mask">,
5742              Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5743                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5744  def int_x86_avx512_mask_pmulh_w_256 : GCCBuiltin<"__builtin_ia32_pmulhw256_mask">,
5745              Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5746                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5747  def int_x86_avx512_mask_pavg_b_512 : GCCBuiltin<"__builtin_ia32_pavgb512_mask">,
5748          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5749                    llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5750  def int_x86_avx512_mask_pavg_w_512 : GCCBuiltin<"__builtin_ia32_pavgw512_mask">,
5751          Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5752                    llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5753  def int_x86_avx512_mask_pavg_b_128 : GCCBuiltin<"__builtin_ia32_pavgb128_mask">,
5754          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5755                    llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5756  def int_x86_avx512_mask_pavg_b_256 : GCCBuiltin<"__builtin_ia32_pavgb256_mask">,
5757          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5758                    llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5759  def int_x86_avx512_mask_pavg_w_128 : GCCBuiltin<"__builtin_ia32_pavgw128_mask">,
5760          Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5761                    llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5762  def int_x86_avx512_mask_pavg_w_256 : GCCBuiltin<"__builtin_ia32_pavgw256_mask">,
5763          Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5764                    llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5765  def int_x86_avx512_mask_pmaddw_d_128 :
5766         GCCBuiltin<"__builtin_ia32_pmaddwd128_mask">,
5767          Intrinsic<[llvm_v4i32_ty],
5768          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty,  llvm_i8_ty],
5769          [IntrNoMem]>;
5770  def int_x86_avx512_mask_pmaddw_d_256 :
5771         GCCBuiltin<"__builtin_ia32_pmaddwd256_mask">,
5772          Intrinsic<[llvm_v8i32_ty],
5773          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v8i32_ty,  llvm_i8_ty],
5774          [IntrNoMem]>;
5775  def int_x86_avx512_mask_pmaddw_d_512 :
5776         GCCBuiltin<"__builtin_ia32_pmaddwd512_mask">,
5777          Intrinsic<[llvm_v16i32_ty],
5778          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v16i32_ty,  llvm_i16_ty],
5779          [IntrNoMem]>;
5780  def int_x86_avx512_mask_pmaddubs_w_128 :
5781         GCCBuiltin<"__builtin_ia32_pmaddubsw128_mask">,
5782          Intrinsic<[llvm_v8i16_ty],
5783          [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v8i16_ty,  llvm_i8_ty],
5784          [IntrNoMem]>;
5785  def int_x86_avx512_mask_pmaddubs_w_256 :
5786         GCCBuiltin<"__builtin_ia32_pmaddubsw256_mask">,
5787          Intrinsic<[llvm_v16i16_ty],
5788          [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v16i16_ty,  llvm_i16_ty],
5789          [IntrNoMem]>;
5790  def int_x86_avx512_mask_pmaddubs_w_512 :
5791         GCCBuiltin<"__builtin_ia32_pmaddubsw512_mask">,
5792          Intrinsic<[llvm_v32i16_ty],
5793          [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v32i16_ty,  llvm_i32_ty],
5794          [IntrNoMem]>;
5795
5796  def int_x86_avx512_mask_dbpsadbw_128 :
5797         GCCBuiltin<"__builtin_ia32_dbpsadbw128_mask">,
5798          Intrinsic<[llvm_v8i16_ty],
5799          [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, llvm_v8i16_ty,
5800           llvm_i8_ty], [IntrNoMem]>;
5801
5802  def int_x86_avx512_mask_dbpsadbw_256 :
5803         GCCBuiltin<"__builtin_ia32_dbpsadbw256_mask">,
5804          Intrinsic<[llvm_v16i16_ty],
5805          [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty, llvm_v16i16_ty,
5806           llvm_i16_ty], [IntrNoMem]>;
5807
5808  def int_x86_avx512_mask_dbpsadbw_512 :
5809         GCCBuiltin<"__builtin_ia32_dbpsadbw512_mask">,
5810          Intrinsic<[llvm_v32i16_ty],
5811          [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty, llvm_v32i16_ty,
5812           llvm_i32_ty], [IntrNoMem]>;
5813}
5814
5815// Gather and Scatter ops
5816let TargetPrefix = "x86" in {
5817  def int_x86_avx512_gather_dpd_512  : GCCBuiltin<"__builtin_ia32_gathersiv8df">,
5818          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
5819                     llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5820                    [IntrReadArgMem]>;
5821  def int_x86_avx512_gather_dps_512  : GCCBuiltin<"__builtin_ia32_gathersiv16sf">,
5822          Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty,
5823                     llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
5824                    [IntrReadArgMem]>;
5825  def int_x86_avx512_gather_qpd_512  : GCCBuiltin<"__builtin_ia32_gatherdiv8df">,
5826          Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
5827                     llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
5828                    [IntrReadArgMem]>;
5829  def int_x86_avx512_gather_qps_512  : GCCBuiltin<"__builtin_ia32_gatherdiv16sf">,
5830          Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty,
5831                     llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
5832                    [IntrReadArgMem]>;
5833
5834
5835  def int_x86_avx512_gather_dpq_512  : GCCBuiltin<"__builtin_ia32_gathersiv8di">,
5836          Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
5837                     llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5838                    [IntrReadArgMem]>;
5839  def int_x86_avx512_gather_dpi_512  : GCCBuiltin<"__builtin_ia32_gathersiv16si">,
5840          Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty,
5841                     llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
5842                    [IntrReadArgMem]>;
5843  def int_x86_avx512_gather_qpq_512  : GCCBuiltin<"__builtin_ia32_gatherdiv8di">,
5844          Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
5845                     llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
5846                    [IntrReadArgMem]>;
5847  def int_x86_avx512_gather_qpi_512  : GCCBuiltin<"__builtin_ia32_gatherdiv16si">,
5848          Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty,
5849                     llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
5850                    [IntrReadArgMem]>;
5851
5852  def int_x86_avx512_gather3div2_df :
5853        GCCBuiltin<"__builtin_ia32_gather3div2df">,
5854          Intrinsic<[llvm_v2f64_ty],
5855          [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
5856          [IntrReadArgMem]>;
5857
5858  def int_x86_avx512_gather3div2_di :
5859        GCCBuiltin<"__builtin_ia32_gather3div2di">,
5860          Intrinsic<[llvm_v4i32_ty],
5861          [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
5862          [IntrReadArgMem]>;
5863
5864  def int_x86_avx512_gather3div4_df :
5865        GCCBuiltin<"__builtin_ia32_gather3div4df">,
5866          Intrinsic<[llvm_v4f64_ty],
5867          [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5868          [IntrReadArgMem]>;
5869
5870  def int_x86_avx512_gather3div4_di :
5871        GCCBuiltin<"__builtin_ia32_gather3div4di">,
5872          Intrinsic<[llvm_v8i32_ty],
5873          [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5874          [IntrReadArgMem]>;
5875
5876  def int_x86_avx512_gather3div4_sf :
5877        GCCBuiltin<"__builtin_ia32_gather3div4sf">,
5878          Intrinsic<[llvm_v4f32_ty],
5879          [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
5880          [IntrReadArgMem]>;
5881
5882  def int_x86_avx512_gather3div4_si :
5883        GCCBuiltin<"__builtin_ia32_gather3div4si">,
5884          Intrinsic<[llvm_v4i32_ty],
5885          [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
5886          [IntrReadArgMem]>;
5887
5888  def int_x86_avx512_gather3div8_sf :
5889        GCCBuiltin<"__builtin_ia32_gather3div8sf">,
5890          Intrinsic<[llvm_v4f32_ty],
5891          [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5892          [IntrReadArgMem]>;
5893
5894  def int_x86_avx512_gather3div8_si :
5895        GCCBuiltin<"__builtin_ia32_gather3div8si">,
5896          Intrinsic<[llvm_v4i32_ty],
5897          [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5898          [IntrReadArgMem]>;
5899
5900  def int_x86_avx512_gather3siv2_df :
5901        GCCBuiltin<"__builtin_ia32_gather3siv2df">,
5902          Intrinsic<[llvm_v2f64_ty],
5903          [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5904          [IntrReadArgMem]>;
5905
5906  def int_x86_avx512_gather3siv2_di :
5907        GCCBuiltin<"__builtin_ia32_gather3siv2di">,
5908          Intrinsic<[llvm_v4i32_ty],
5909          [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5910          [IntrReadArgMem]>;
5911
5912  def int_x86_avx512_gather3siv4_df :
5913        GCCBuiltin<"__builtin_ia32_gather3siv4df">,
5914          Intrinsic<[llvm_v4f64_ty],
5915          [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5916          [IntrReadArgMem]>;
5917
5918  def int_x86_avx512_gather3siv4_di :
5919        GCCBuiltin<"__builtin_ia32_gather3siv4di">,
5920          Intrinsic<[llvm_v8i32_ty],
5921          [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5922          [IntrReadArgMem]>;
5923
5924  def int_x86_avx512_gather3siv4_sf :
5925        GCCBuiltin<"__builtin_ia32_gather3siv4sf">,
5926          Intrinsic<[llvm_v4f32_ty],
5927          [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5928          [IntrReadArgMem]>;
5929
5930  def int_x86_avx512_gather3siv4_si :
5931        GCCBuiltin<"__builtin_ia32_gather3siv4si">,
5932          Intrinsic<[llvm_v4i32_ty],
5933          [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5934          [IntrReadArgMem]>;
5935
5936  def int_x86_avx512_gather3siv8_sf :
5937        GCCBuiltin<"__builtin_ia32_gather3siv8sf">,
5938          Intrinsic<[llvm_v8f32_ty],
5939          [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5940          [IntrReadArgMem]>;
5941
5942  def int_x86_avx512_gather3siv8_si :
5943        GCCBuiltin<"__builtin_ia32_gather3siv8si">,
5944          Intrinsic<[llvm_v8i32_ty],
5945          [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5946          [IntrReadArgMem]>;
5947
5948// scatter
5949  def int_x86_avx512_scatter_dpd_512  : GCCBuiltin<"__builtin_ia32_scattersiv8df">,
5950          Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
5951                        llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty],
5952                    [IntrReadWriteArgMem]>;
5953  def int_x86_avx512_scatter_dps_512  : GCCBuiltin<"__builtin_ia32_scattersiv16sf">,
5954          Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
5955                       llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty],
5956                    [IntrReadWriteArgMem]>;
5957  def int_x86_avx512_scatter_qpd_512  : GCCBuiltin<"__builtin_ia32_scatterdiv8df">,
5958          Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
5959                     llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty],
5960                    [IntrReadWriteArgMem]>;
5961  def int_x86_avx512_scatter_qps_512  : GCCBuiltin<"__builtin_ia32_scatterdiv16sf">,
5962          Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
5963                     llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty],
5964                    [IntrReadWriteArgMem]>;
5965
5966
5967  def int_x86_avx512_scatter_dpq_512  : GCCBuiltin<"__builtin_ia32_scattersiv8di">,
5968          Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
5969                         llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty],
5970                    [IntrReadWriteArgMem]>;
5971  def int_x86_avx512_scatter_dpi_512  : GCCBuiltin<"__builtin_ia32_scattersiv16si">,
5972          Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
5973                     llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty],
5974                    [IntrReadWriteArgMem]>;
5975  def int_x86_avx512_scatter_qpq_512  : GCCBuiltin<"__builtin_ia32_scatterdiv8di">,
5976          Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,llvm_v8i64_ty, llvm_v8i64_ty,
5977                         llvm_i32_ty],
5978                    [IntrReadWriteArgMem]>;
5979  def int_x86_avx512_scatter_qpi_512  : GCCBuiltin<"__builtin_ia32_scatterdiv16si">,
5980          Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8i32_ty,
5981                         llvm_i32_ty],
5982                    [IntrReadWriteArgMem]>;
5983
5984  def int_x86_avx512_scatterdiv2_df :
5985       GCCBuiltin<"__builtin_ia32_scatterdiv2df">,
5986        Intrinsic<[],
5987        [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty],
5988        [IntrReadWriteArgMem]>;
5989
5990  def int_x86_avx512_scatterdiv2_di :
5991        GCCBuiltin<"__builtin_ia32_scatterdiv2di">,
5992          Intrinsic<[],
5993          [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
5994          [IntrReadWriteArgMem]>;
5995
5996  def int_x86_avx512_scatterdiv4_df :
5997        GCCBuiltin<"__builtin_ia32_scatterdiv4df">,
5998          Intrinsic<[],
5999          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty],
6000          [IntrReadWriteArgMem]>;
6001
6002  def int_x86_avx512_scatterdiv4_di :
6003        GCCBuiltin<"__builtin_ia32_scatterdiv4di">,
6004          Intrinsic<[],
6005          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty],
6006          [IntrReadWriteArgMem]>;
6007
6008  def int_x86_avx512_scatterdiv4_sf :
6009        GCCBuiltin<"__builtin_ia32_scatterdiv4sf">,
6010          Intrinsic<[],
6011          [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty],
6012          [IntrReadWriteArgMem]>;
6013
6014  def int_x86_avx512_scatterdiv4_si :
6015        GCCBuiltin<"__builtin_ia32_scatterdiv4si">,
6016          Intrinsic<[],
6017          [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty],
6018          [IntrReadWriteArgMem]>;
6019
6020  def int_x86_avx512_scatterdiv8_sf :
6021        GCCBuiltin<"__builtin_ia32_scatterdiv8sf">,
6022          Intrinsic<[],
6023          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty],
6024          [IntrReadWriteArgMem]>;
6025
6026  def int_x86_avx512_scatterdiv8_si :
6027        GCCBuiltin<"__builtin_ia32_scatterdiv8si">,
6028          Intrinsic<[],
6029          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty],
6030          [IntrReadWriteArgMem]>;
6031
6032  def int_x86_avx512_scattersiv2_df :
6033        GCCBuiltin<"__builtin_ia32_scattersiv2df">,
6034          Intrinsic<[],
6035          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty],
6036          [IntrReadWriteArgMem]>;
6037
6038  def int_x86_avx512_scattersiv2_di :
6039        GCCBuiltin<"__builtin_ia32_scattersiv2di">,
6040          Intrinsic<[],
6041          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty],
6042          [IntrReadWriteArgMem]>;
6043
6044  def int_x86_avx512_scattersiv4_df :
6045        GCCBuiltin<"__builtin_ia32_scattersiv4df">,
6046          Intrinsic<[],
6047          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty],
6048          [IntrReadWriteArgMem]>;
6049
6050  def int_x86_avx512_scattersiv4_di :
6051        GCCBuiltin<"__builtin_ia32_scattersiv4di">,
6052          Intrinsic<[],
6053          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty],
6054          [IntrReadWriteArgMem]>;
6055
6056  def int_x86_avx512_scattersiv4_sf :
6057        GCCBuiltin<"__builtin_ia32_scattersiv4sf">,
6058          Intrinsic<[],
6059          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty],
6060          [IntrReadWriteArgMem]>;
6061
6062  def int_x86_avx512_scattersiv4_si :
6063        GCCBuiltin<"__builtin_ia32_scattersiv4si">,
6064          Intrinsic<[],
6065          [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
6066          [IntrReadWriteArgMem]>;
6067
6068  def int_x86_avx512_scattersiv8_sf :
6069        GCCBuiltin<"__builtin_ia32_scattersiv8sf">,
6070          Intrinsic<[],
6071          [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty],
6072          [IntrReadWriteArgMem]>;
6073
6074  def int_x86_avx512_scattersiv8_si :
6075        GCCBuiltin<"__builtin_ia32_scattersiv8si">,
6076          Intrinsic<[],
6077          [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty],
6078          [IntrReadWriteArgMem]>;
6079
6080  // gather prefetch
6081  def int_x86_avx512_gatherpf_dpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfdpd">,
6082          Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
6083                     llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6084  def int_x86_avx512_gatherpf_dps_512  : GCCBuiltin<"__builtin_ia32_gatherpfdps">,
6085          Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
6086                     llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6087  def int_x86_avx512_gatherpf_qpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfqpd">,
6088          Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
6089                     llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6090  def int_x86_avx512_gatherpf_qps_512  : GCCBuiltin<"__builtin_ia32_gatherpfqps">,
6091          Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
6092                     llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6093
6094  // scatter prefetch
6095  def int_x86_avx512_scatterpf_dpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfdpd">,
6096          Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
6097                     llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6098  def int_x86_avx512_scatterpf_dps_512  : GCCBuiltin<"__builtin_ia32_scatterpfdps">,
6099          Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
6100                     llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6101  def int_x86_avx512_scatterpf_qpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfqpd">,
6102          Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
6103                     llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6104  def int_x86_avx512_scatterpf_qps_512  : GCCBuiltin<"__builtin_ia32_scatterpfqps">,
6105          Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
6106                     llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6107}
6108
6109// AVX-512 conflict detection instruction
6110// Instructions that count the number of leading zero bits
6111let TargetPrefix = "x86" in {
6112  def int_x86_avx512_mask_conflict_d_128 :
6113          GCCBuiltin<"__builtin_ia32_vpconflictsi_128_mask">,
6114          Intrinsic<[llvm_v4i32_ty],
6115                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6116                    [IntrNoMem]>;
6117  def int_x86_avx512_mask_conflict_d_256 :
6118          GCCBuiltin<"__builtin_ia32_vpconflictsi_256_mask">,
6119          Intrinsic<[llvm_v8i32_ty],
6120                    [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6121                    [IntrNoMem]>;
6122  def int_x86_avx512_mask_conflict_d_512 :
6123          GCCBuiltin<"__builtin_ia32_vpconflictsi_512_mask">,
6124          Intrinsic<[llvm_v16i32_ty],
6125                    [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6126                    [IntrNoMem]>;
6127
6128  def int_x86_avx512_mask_conflict_q_128 :
6129          GCCBuiltin<"__builtin_ia32_vpconflictdi_128_mask">,
6130          Intrinsic<[llvm_v2i64_ty],
6131                    [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6132                    [IntrNoMem]>;
6133  def int_x86_avx512_mask_conflict_q_256 :
6134          GCCBuiltin<"__builtin_ia32_vpconflictdi_256_mask">,
6135          Intrinsic<[llvm_v4i64_ty],
6136                    [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6137                    [IntrNoMem]>;
6138  def int_x86_avx512_mask_conflict_q_512 :
6139          GCCBuiltin<"__builtin_ia32_vpconflictdi_512_mask">,
6140          Intrinsic<[llvm_v8i64_ty],
6141                    [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6142                    [IntrNoMem]>;
6143
6144  def int_x86_avx512_mask_lzcnt_d_128 :
6145          GCCBuiltin<"__builtin_ia32_vplzcntd_128_mask">,
6146          Intrinsic<[llvm_v4i32_ty],
6147                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6148                    [IntrNoMem]>;
6149  def int_x86_avx512_mask_lzcnt_d_256 :
6150          GCCBuiltin<"__builtin_ia32_vplzcntd_256_mask">,
6151          Intrinsic<[llvm_v8i32_ty],
6152                    [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6153                    [IntrNoMem]>;
6154  def int_x86_avx512_mask_lzcnt_d_512 :
6155          GCCBuiltin<"__builtin_ia32_vplzcntd_512_mask">,
6156          Intrinsic<[llvm_v16i32_ty],
6157                    [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6158                    [IntrNoMem]>;
6159
6160  def int_x86_avx512_mask_lzcnt_q_128 :
6161          GCCBuiltin<"__builtin_ia32_vplzcntq_128_mask">,
6162          Intrinsic<[llvm_v2i64_ty],
6163                    [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6164                    [IntrNoMem]>;
6165 def int_x86_avx512_mask_lzcnt_q_256 :
6166          GCCBuiltin<"__builtin_ia32_vplzcntq_256_mask">,
6167          Intrinsic<[llvm_v4i64_ty],
6168                    [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6169                    [IntrNoMem]>;
6170  def int_x86_avx512_mask_lzcnt_q_512 :
6171          GCCBuiltin<"__builtin_ia32_vplzcntq_512_mask">,
6172          Intrinsic<[llvm_v8i64_ty],
6173                    [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6174                    [IntrNoMem]>;
6175}
6176
6177// Vector blend
6178let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
6179  def int_x86_avx512_mask_blend_ps_512 : GCCBuiltin<"__builtin_ia32_blendmps_512_mask">,
6180        Intrinsic<[llvm_v16f32_ty],
6181                  [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
6182                  [IntrNoMem]>;
6183  def int_x86_avx512_mask_blend_ps_256 : GCCBuiltin<"__builtin_ia32_blendmps_256_mask">,
6184        Intrinsic<[llvm_v8f32_ty],
6185                  [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
6186                  [IntrNoMem]>;
6187  def int_x86_avx512_mask_blend_ps_128 : GCCBuiltin<"__builtin_ia32_blendmps_128_mask">,
6188        Intrinsic<[llvm_v4f32_ty],
6189                  [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
6190                  [IntrNoMem]>;
6191  def int_x86_avx512_mask_blend_pd_512 : GCCBuiltin<"__builtin_ia32_blendmpd_512_mask">,
6192        Intrinsic<[llvm_v8f64_ty],
6193                  [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
6194                  [IntrNoMem]>;
6195  def int_x86_avx512_mask_blend_pd_256 : GCCBuiltin<"__builtin_ia32_blendmpd_256_mask">,
6196        Intrinsic<[llvm_v4f64_ty],
6197                  [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
6198                  [IntrNoMem]>;
6199  def int_x86_avx512_mask_blend_pd_128 : GCCBuiltin<"__builtin_ia32_blendmpd_128_mask">,
6200        Intrinsic<[llvm_v2f64_ty],
6201                  [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
6202                  [IntrNoMem]>;
6203
6204  def int_x86_avx512_mask_blend_d_512 : GCCBuiltin<"__builtin_ia32_blendmd_512_mask">,
6205        Intrinsic<[llvm_v16i32_ty],
6206                  [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6207                  [IntrNoMem]>;
6208  def int_x86_avx512_mask_blend_q_512 : GCCBuiltin<"__builtin_ia32_blendmq_512_mask">,
6209        Intrinsic<[llvm_v8i64_ty],
6210                  [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6211                  [IntrNoMem]>;
6212  def int_x86_avx512_mask_blend_d_256 : GCCBuiltin<"__builtin_ia32_blendmd_256_mask">,
6213        Intrinsic<[llvm_v8i32_ty],
6214                  [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6215                  [IntrNoMem]>;
6216  def int_x86_avx512_mask_blend_q_256 : GCCBuiltin<"__builtin_ia32_blendmq_256_mask">,
6217        Intrinsic<[llvm_v4i64_ty],
6218                  [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6219                  [IntrNoMem]>;
6220  def int_x86_avx512_mask_blend_d_128 : GCCBuiltin<"__builtin_ia32_blendmd_128_mask">,
6221        Intrinsic<[llvm_v4i32_ty],
6222                  [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6223                  [IntrNoMem]>;
6224  def int_x86_avx512_mask_blend_q_128 : GCCBuiltin<"__builtin_ia32_blendmq_128_mask">,
6225        Intrinsic<[llvm_v2i64_ty],
6226                  [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6227                  [IntrNoMem]>;
6228
6229   def int_x86_avx512_mask_blend_w_512 : GCCBuiltin<"__builtin_ia32_blendmw_512_mask">,
6230        Intrinsic<[llvm_v32i16_ty],
6231                  [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
6232                  [IntrNoMem]>;
6233   def int_x86_avx512_mask_blend_w_256 : GCCBuiltin<"__builtin_ia32_blendmw_256_mask">,
6234        Intrinsic<[llvm_v16i16_ty],
6235                  [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
6236                  [IntrNoMem]>;
6237   def int_x86_avx512_mask_blend_w_128 : GCCBuiltin<"__builtin_ia32_blendmw_128_mask">,
6238        Intrinsic<[llvm_v8i16_ty],
6239                  [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
6240                  [IntrNoMem]>;
6241   def int_x86_avx512_mask_blend_b_512 : GCCBuiltin<"__builtin_ia32_blendmb_512_mask">,
6242        Intrinsic<[llvm_v64i8_ty],
6243                  [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
6244                  [IntrNoMem]>;
6245   def int_x86_avx512_mask_blend_b_256 : GCCBuiltin<"__builtin_ia32_blendmb_256_mask">,
6246        Intrinsic<[llvm_v32i8_ty],
6247                  [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
6248                  [IntrNoMem]>;
6249   def int_x86_avx512_mask_blend_b_128 : GCCBuiltin<"__builtin_ia32_blendmb_128_mask">,
6250        Intrinsic<[llvm_v16i8_ty],
6251                  [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
6252                  [IntrNoMem]>;
6253
6254}
6255
6256let TargetPrefix = "x86" in {
6257  def int_x86_avx512_mask_valign_q_512 :
6258        GCCBuiltin<"__builtin_ia32_alignq512_mask">,
6259        Intrinsic<[llvm_v8i64_ty],
6260                  [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_v8i64_ty,
6261                   llvm_i8_ty], [IntrNoMem]>;
6262
6263  def int_x86_avx512_mask_valign_d_512 :
6264        GCCBuiltin<"__builtin_ia32_alignd512_mask">,
6265        Intrinsic<[llvm_v16i32_ty],
6266                  [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty, llvm_v16i32_ty,
6267                   llvm_i16_ty], [IntrNoMem]>;
6268
6269  def int_x86_avx512_mask_valign_q_256 :
6270        GCCBuiltin<"__builtin_ia32_alignq256_mask">,
6271        Intrinsic<[llvm_v4i64_ty],
6272                  [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_v4i64_ty,
6273                   llvm_i8_ty], [IntrNoMem]>;
6274
6275  def int_x86_avx512_mask_valign_d_256 :
6276        GCCBuiltin<"__builtin_ia32_alignd256_mask">,
6277        Intrinsic<[llvm_v8i32_ty],
6278                  [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_v8i32_ty,
6279                   llvm_i8_ty], [IntrNoMem]>;
6280
6281  def int_x86_avx512_mask_valign_q_128 :
6282        GCCBuiltin<"__builtin_ia32_alignq128_mask">,
6283        Intrinsic<[llvm_v2i64_ty],
6284                  [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_v2i64_ty,
6285                   llvm_i8_ty], [IntrNoMem]>;
6286
6287  def int_x86_avx512_mask_valign_d_128 :
6288        GCCBuiltin<"__builtin_ia32_alignd128_mask">,
6289        Intrinsic<[llvm_v4i32_ty],
6290                  [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_v4i32_ty,
6291                   llvm_i8_ty], [IntrNoMem]>;
6292
6293  def int_x86_avx512_mask_palignr_128 :
6294        GCCBuiltin<"__builtin_ia32_palignr128_mask">,
6295        Intrinsic<[llvm_v16i8_ty],
6296                  [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty,
6297                   llvm_i16_ty], [IntrNoMem]>;
6298
6299  def int_x86_avx512_mask_palignr_256 :
6300        GCCBuiltin<"__builtin_ia32_palignr256_mask">,
6301        Intrinsic<[llvm_v32i8_ty],
6302                  [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty, llvm_v32i8_ty,
6303                   llvm_i32_ty], [IntrNoMem]>;
6304
6305  def int_x86_avx512_mask_palignr_512 :
6306        GCCBuiltin<"__builtin_ia32_palignr512_mask">,
6307        Intrinsic<[llvm_v64i8_ty],
6308                  [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty, llvm_v64i8_ty,
6309                   llvm_i64_ty], [IntrNoMem]>;
6310}
6311
6312// Compares
6313let TargetPrefix = "x86" in {
6314  // 512-bit
6315  def int_x86_avx512_vcomi_sd : GCCBuiltin<"__builtin_ia32_vcomisd">,
6316              Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
6317                         llvm_v2f64_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
6318  def int_x86_avx512_vcomi_ss : GCCBuiltin<"__builtin_ia32_vcomiss">,
6319              Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
6320                         llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
6321  def int_x86_avx512_mask_pcmpeq_b_512 : GCCBuiltin<"__builtin_ia32_pcmpeqb512_mask">,
6322        Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
6323                  [IntrNoMem]>;
6324  def int_x86_avx512_mask_pcmpeq_w_512 : GCCBuiltin<"__builtin_ia32_pcmpeqw512_mask">,
6325        Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
6326                  [IntrNoMem]>;
6327  def int_x86_avx512_mask_pcmpeq_d_512 : GCCBuiltin<"__builtin_ia32_pcmpeqd512_mask">,
6328            Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6329                      [IntrNoMem]>;
6330  def int_x86_avx512_mask_pcmpeq_q_512 : GCCBuiltin<"__builtin_ia32_pcmpeqq512_mask">,
6331            Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6332                      [IntrNoMem]>;
6333
6334  def int_x86_avx512_mask_pcmpgt_b_512: GCCBuiltin<"__builtin_ia32_pcmpgtb512_mask">,
6335        Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
6336                  [IntrNoMem]>;
6337  def int_x86_avx512_mask_pcmpgt_w_512: GCCBuiltin<"__builtin_ia32_pcmpgtw512_mask">,
6338        Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
6339                  [IntrNoMem]>;
6340  def int_x86_avx512_mask_pcmpgt_d_512: GCCBuiltin<"__builtin_ia32_pcmpgtd512_mask">,
6341        Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6342                  [IntrNoMem]>;
6343  def int_x86_avx512_mask_pcmpgt_q_512: GCCBuiltin<"__builtin_ia32_pcmpgtq512_mask">,
6344        Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6345                  [IntrNoMem]>;
6346
6347  def int_x86_avx512_mask_cmp_b_512: GCCBuiltin<"__builtin_ia32_cmpb512_mask">,
6348        Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty,
6349                  llvm_i64_ty], [IntrNoMem]>;
6350  def int_x86_avx512_mask_cmp_w_512: GCCBuiltin<"__builtin_ia32_cmpw512_mask">,
6351        Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty,
6352                  llvm_i32_ty], [IntrNoMem]>;
6353  def int_x86_avx512_mask_cmp_d_512: GCCBuiltin<"__builtin_ia32_cmpd512_mask">,
6354        Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
6355                  llvm_i16_ty], [IntrNoMem ]>;
6356  def int_x86_avx512_mask_cmp_q_512: GCCBuiltin<"__builtin_ia32_cmpq512_mask">,
6357        Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
6358                  llvm_i8_ty], [IntrNoMem]>;
6359
6360  def int_x86_avx512_mask_ucmp_b_512: GCCBuiltin<"__builtin_ia32_ucmpb512_mask">,
6361        Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty,
6362                  llvm_i64_ty], [IntrNoMem]>;
6363  def int_x86_avx512_mask_ucmp_w_512: GCCBuiltin<"__builtin_ia32_ucmpw512_mask">,
6364        Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty,
6365                  llvm_i32_ty], [IntrNoMem]>;
6366  def int_x86_avx512_mask_ucmp_d_512: GCCBuiltin<"__builtin_ia32_ucmpd512_mask">,
6367        Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
6368                  llvm_i16_ty], [IntrNoMem]>;
6369  def int_x86_avx512_mask_ucmp_q_512: GCCBuiltin<"__builtin_ia32_ucmpq512_mask">,
6370        Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
6371                  llvm_i8_ty], [IntrNoMem]>;
6372
6373  // 256-bit
6374  def int_x86_avx512_mask_pcmpeq_b_256 : GCCBuiltin<"__builtin_ia32_pcmpeqb256_mask">,
6375        Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
6376                  [IntrNoMem]>;
6377  def int_x86_avx512_mask_pcmpeq_w_256 : GCCBuiltin<"__builtin_ia32_pcmpeqw256_mask">,
6378        Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
6379                  [IntrNoMem]>;
6380  def int_x86_avx512_mask_pcmpeq_d_256 : GCCBuiltin<"__builtin_ia32_pcmpeqd256_mask">,
6381        Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6382                  [IntrNoMem]>;
6383  def int_x86_avx512_mask_pcmpeq_q_256 : GCCBuiltin<"__builtin_ia32_pcmpeqq256_mask">,
6384        Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6385                  [IntrNoMem]>;
6386
6387  def int_x86_avx512_mask_pcmpgt_b_256: GCCBuiltin<"__builtin_ia32_pcmpgtb256_mask">,
6388        Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
6389                  [IntrNoMem]>;
6390  def int_x86_avx512_mask_pcmpgt_w_256: GCCBuiltin<"__builtin_ia32_pcmpgtw256_mask">,
6391        Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
6392                  [IntrNoMem]>;
6393  def int_x86_avx512_mask_pcmpgt_d_256: GCCBuiltin<"__builtin_ia32_pcmpgtd256_mask">,
6394        Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6395                  [IntrNoMem]>;
6396  def int_x86_avx512_mask_pcmpgt_q_256: GCCBuiltin<"__builtin_ia32_pcmpgtq256_mask">,
6397        Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6398                  [IntrNoMem]>;
6399
6400  def int_x86_avx512_mask_cmp_b_256: GCCBuiltin<"__builtin_ia32_cmpb256_mask">,
6401        Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty,
6402                  llvm_i32_ty], [IntrNoMem]>;
6403  def int_x86_avx512_mask_cmp_w_256: GCCBuiltin<"__builtin_ia32_cmpw256_mask">,
6404        Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty,
6405                  llvm_i16_ty], [IntrNoMem]>;
6406  def int_x86_avx512_mask_cmp_d_256: GCCBuiltin<"__builtin_ia32_cmpd256_mask">,
6407        Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
6408                  llvm_i8_ty], [IntrNoMem]>;
6409  def int_x86_avx512_mask_cmp_q_256: GCCBuiltin<"__builtin_ia32_cmpq256_mask">,
6410        Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
6411                  llvm_i8_ty], [IntrNoMem]>;
6412
6413  def int_x86_avx512_mask_ucmp_b_256: GCCBuiltin<"__builtin_ia32_ucmpb256_mask">,
6414        Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty,
6415                  llvm_i32_ty], [IntrNoMem]>;
6416  def int_x86_avx512_mask_ucmp_w_256: GCCBuiltin<"__builtin_ia32_ucmpw256_mask">,
6417        Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty,
6418                  llvm_i16_ty], [IntrNoMem]>;
6419  def int_x86_avx512_mask_ucmp_d_256: GCCBuiltin<"__builtin_ia32_ucmpd256_mask">,
6420        Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
6421                  llvm_i8_ty], [IntrNoMem]>;
6422  def int_x86_avx512_mask_ucmp_q_256: GCCBuiltin<"__builtin_ia32_ucmpq256_mask">,
6423        Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
6424                  llvm_i8_ty], [IntrNoMem]>;
6425
6426  // 128-bit
6427  def int_x86_avx512_mask_pcmpeq_b_128 : GCCBuiltin<"__builtin_ia32_pcmpeqb128_mask">,
6428        Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
6429                  [IntrNoMem]>;
6430  def int_x86_avx512_mask_pcmpeq_w_128 : GCCBuiltin<"__builtin_ia32_pcmpeqw128_mask">,
6431        Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
6432                  [IntrNoMem]>;
6433  def int_x86_avx512_mask_pcmpeq_d_128 : GCCBuiltin<"__builtin_ia32_pcmpeqd128_mask">,
6434        Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6435                  [IntrNoMem]>;
6436  def int_x86_avx512_mask_pcmpeq_q_128 : GCCBuiltin<"__builtin_ia32_pcmpeqq128_mask">,
6437        Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6438                  [IntrNoMem]>;
6439
6440  def int_x86_avx512_mask_pcmpgt_b_128: GCCBuiltin<"__builtin_ia32_pcmpgtb128_mask">,
6441        Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
6442                  [IntrNoMem]>;
6443  def int_x86_avx512_mask_pcmpgt_w_128: GCCBuiltin<"__builtin_ia32_pcmpgtw128_mask">,
6444        Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
6445                  [IntrNoMem]>;
6446  def int_x86_avx512_mask_pcmpgt_d_128: GCCBuiltin<"__builtin_ia32_pcmpgtd128_mask">,
6447        Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6448                  [IntrNoMem]>;
6449  def int_x86_avx512_mask_pcmpgt_q_128: GCCBuiltin<"__builtin_ia32_pcmpgtq128_mask">,
6450        Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6451                  [IntrNoMem]>;
6452
6453  def int_x86_avx512_mask_cmp_b_128: GCCBuiltin<"__builtin_ia32_cmpb128_mask">,
6454        Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
6455                  llvm_i16_ty], [IntrNoMem]>;
6456  def int_x86_avx512_mask_cmp_w_128: GCCBuiltin<"__builtin_ia32_cmpw128_mask">,
6457        Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty,
6458                  llvm_i8_ty], [IntrNoMem]>;
6459  def int_x86_avx512_mask_cmp_d_128: GCCBuiltin<"__builtin_ia32_cmpd128_mask">,
6460        Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
6461                  llvm_i8_ty], [IntrNoMem]>;
6462  def int_x86_avx512_mask_cmp_q_128: GCCBuiltin<"__builtin_ia32_cmpq128_mask">,
6463        Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
6464                  llvm_i8_ty], [IntrNoMem]>;
6465
6466  def int_x86_avx512_mask_ucmp_b_128: GCCBuiltin<"__builtin_ia32_ucmpb128_mask">,
6467        Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
6468                  llvm_i16_ty], [IntrNoMem]>;
6469  def int_x86_avx512_mask_ucmp_w_128: GCCBuiltin<"__builtin_ia32_ucmpw128_mask">,
6470        Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty,
6471                  llvm_i8_ty], [IntrNoMem]>;
6472  def int_x86_avx512_mask_ucmp_d_128: GCCBuiltin<"__builtin_ia32_ucmpd128_mask">,
6473        Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
6474                  llvm_i8_ty], [IntrNoMem]>;
6475  def int_x86_avx512_mask_ucmp_q_128: GCCBuiltin<"__builtin_ia32_ucmpq128_mask">,
6476        Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
6477                  llvm_i8_ty], [IntrNoMem]>;
6478}
6479
6480// Compress, Expand
6481let TargetPrefix = "x86" in {
6482  def int_x86_avx512_mask_compress_ps_512 :
6483                             GCCBuiltin<"__builtin_ia32_compresssf512_mask">,
6484        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
6485                   llvm_i16_ty], [IntrNoMem]>;
6486  def int_x86_avx512_mask_compress_pd_512 :
6487                             GCCBuiltin<"__builtin_ia32_compressdf512_mask">,
6488        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
6489                   llvm_i8_ty], [IntrNoMem]>;
6490  def int_x86_avx512_mask_compress_ps_256 :
6491                             GCCBuiltin<"__builtin_ia32_compresssf256_mask">,
6492        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
6493                   llvm_i8_ty], [IntrNoMem]>;
6494  def int_x86_avx512_mask_compress_pd_256 :
6495                             GCCBuiltin<"__builtin_ia32_compressdf256_mask">,
6496        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
6497                   llvm_i8_ty], [IntrNoMem]>;
6498  def int_x86_avx512_mask_compress_ps_128 :
6499                             GCCBuiltin<"__builtin_ia32_compresssf128_mask">,
6500        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
6501                   llvm_i8_ty], [IntrNoMem]>;
6502  def int_x86_avx512_mask_compress_pd_128 :
6503                             GCCBuiltin<"__builtin_ia32_compressdf128_mask">,
6504        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
6505                   llvm_i8_ty], [IntrNoMem]>;
6506
6507  def int_x86_avx512_mask_compress_store_ps_512 :
6508                            GCCBuiltin<"__builtin_ia32_compressstoresf512_mask">,
6509        Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty,
6510                   llvm_i16_ty], [IntrReadWriteArgMem]>;
6511  def int_x86_avx512_mask_compress_store_pd_512 :
6512                            GCCBuiltin<"__builtin_ia32_compressstoredf512_mask">,
6513        Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty,
6514                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6515  def int_x86_avx512_mask_compress_store_ps_256 :
6516                            GCCBuiltin<"__builtin_ia32_compressstoresf256_mask">,
6517        Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty,
6518                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6519  def int_x86_avx512_mask_compress_store_pd_256 :
6520                            GCCBuiltin<"__builtin_ia32_compressstoredf256_mask">,
6521        Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty,
6522                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6523  def int_x86_avx512_mask_compress_store_ps_128 :
6524                            GCCBuiltin<"__builtin_ia32_compressstoresf128_mask">,
6525        Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty,
6526                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6527  def int_x86_avx512_mask_compress_store_pd_128 :
6528                            GCCBuiltin<"__builtin_ia32_compressstoredf128_mask">,
6529        Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty,
6530                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6531
6532  def int_x86_avx512_mask_compress_d_512 :
6533                             GCCBuiltin<"__builtin_ia32_compresssi512_mask">,
6534        Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
6535                   llvm_i16_ty], [IntrNoMem]>;
6536  def int_x86_avx512_mask_compress_q_512 :
6537                             GCCBuiltin<"__builtin_ia32_compressdi512_mask">,
6538        Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
6539                   llvm_i8_ty], [IntrNoMem]>;
6540  def int_x86_avx512_mask_compress_d_256 :
6541                             GCCBuiltin<"__builtin_ia32_compresssi256_mask">,
6542        Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
6543                   llvm_i8_ty], [IntrNoMem]>;
6544  def int_x86_avx512_mask_compress_q_256 :
6545                             GCCBuiltin<"__builtin_ia32_compressdi256_mask">,
6546        Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
6547                   llvm_i8_ty], [IntrNoMem]>;
6548  def int_x86_avx512_mask_compress_d_128 :
6549                             GCCBuiltin<"__builtin_ia32_compresssi128_mask">,
6550        Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
6551                   llvm_i8_ty], [IntrNoMem]>;
6552  def int_x86_avx512_mask_compress_q_128 :
6553                             GCCBuiltin<"__builtin_ia32_compressdi128_mask">,
6554        Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
6555                   llvm_i8_ty], [IntrNoMem]>;
6556
6557  def int_x86_avx512_mask_compress_store_d_512 :
6558                            GCCBuiltin<"__builtin_ia32_compressstoresi512_mask">,
6559        Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty,
6560                   llvm_i16_ty], [IntrReadWriteArgMem]>;
6561  def int_x86_avx512_mask_compress_store_q_512 :
6562                            GCCBuiltin<"__builtin_ia32_compressstoredi512_mask">,
6563        Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty,
6564                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6565  def int_x86_avx512_mask_compress_store_d_256 :
6566                            GCCBuiltin<"__builtin_ia32_compressstoresi256_mask">,
6567        Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty,
6568                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6569  def int_x86_avx512_mask_compress_store_q_256 :
6570                            GCCBuiltin<"__builtin_ia32_compressstoredi256_mask">,
6571        Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty,
6572                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6573  def int_x86_avx512_mask_compress_store_d_128 :
6574                            GCCBuiltin<"__builtin_ia32_compressstoresi128_mask">,
6575        Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty,
6576                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6577  def int_x86_avx512_mask_compress_store_q_128 :
6578                            GCCBuiltin<"__builtin_ia32_compressstoredi128_mask">,
6579        Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty,
6580                   llvm_i8_ty], [IntrReadWriteArgMem]>;
6581
6582// expand
6583  def int_x86_avx512_mask_expand_ps_512 :
6584                             GCCBuiltin<"__builtin_ia32_expandsf512_mask">,
6585        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
6586                   llvm_i16_ty], [IntrNoMem]>;
6587  def int_x86_avx512_mask_expand_pd_512 :
6588                             GCCBuiltin<"__builtin_ia32_expanddf512_mask">,
6589        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
6590                   llvm_i8_ty], [IntrNoMem]>;
6591  def int_x86_avx512_mask_expand_ps_256 :
6592                             GCCBuiltin<"__builtin_ia32_expandsf256_mask">,
6593        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
6594                   llvm_i8_ty], [IntrNoMem]>;
6595  def int_x86_avx512_mask_expand_pd_256 :
6596                             GCCBuiltin<"__builtin_ia32_expanddf256_mask">,
6597        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
6598                   llvm_i8_ty], [IntrNoMem]>;
6599  def int_x86_avx512_mask_expand_ps_128 :
6600                             GCCBuiltin<"__builtin_ia32_expandsf128_mask">,
6601        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
6602                   llvm_i8_ty], [IntrNoMem]>;
6603  def int_x86_avx512_mask_expand_pd_128 :
6604                             GCCBuiltin<"__builtin_ia32_expanddf128_mask">,
6605        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
6606                   llvm_i8_ty], [IntrNoMem]>;
6607
6608  def int_x86_avx512_mask_expand_load_ps_512 :
6609                            GCCBuiltin<"__builtin_ia32_expandloadsf512_mask">,
6610        Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty,
6611                   llvm_i16_ty], [IntrReadArgMem]>;
6612  def int_x86_avx512_mask_expand_load_pd_512 :
6613                            GCCBuiltin<"__builtin_ia32_expandloaddf512_mask">,
6614        Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty,
6615                   llvm_i8_ty], [IntrReadArgMem]>;
6616  def int_x86_avx512_mask_expand_load_ps_256 :
6617                            GCCBuiltin<"__builtin_ia32_expandloadsf256_mask">,
6618        Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8f32_ty,
6619                   llvm_i8_ty], [IntrReadArgMem]>;
6620  def int_x86_avx512_mask_expand_load_pd_256 :
6621                            GCCBuiltin<"__builtin_ia32_expandloaddf256_mask">,
6622        Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4f64_ty,
6623                   llvm_i8_ty], [IntrReadArgMem]>;
6624  def int_x86_avx512_mask_expand_load_ps_128 :
6625                            GCCBuiltin<"__builtin_ia32_expandloadsf128_mask">,
6626        Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4f32_ty,
6627                   llvm_i8_ty], [IntrReadArgMem]>;
6628  def int_x86_avx512_mask_expand_load_pd_128 :
6629                            GCCBuiltin<"__builtin_ia32_expandloaddf128_mask">,
6630        Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2f64_ty,
6631                   llvm_i8_ty], [IntrReadArgMem]>;
6632
6633  def int_x86_avx512_mask_expand_d_512 :
6634                             GCCBuiltin<"__builtin_ia32_expandsi512_mask">,
6635        Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
6636                   llvm_i16_ty], [IntrNoMem]>;
6637  def int_x86_avx512_mask_expand_q_512 :
6638                             GCCBuiltin<"__builtin_ia32_expanddi512_mask">,
6639        Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
6640                   llvm_i8_ty], [IntrNoMem]>;
6641  def int_x86_avx512_mask_expand_d_256 :
6642                             GCCBuiltin<"__builtin_ia32_expandsi256_mask">,
6643        Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
6644                   llvm_i8_ty], [IntrNoMem]>;
6645  def int_x86_avx512_mask_expand_q_256 :
6646                             GCCBuiltin<"__builtin_ia32_expanddi256_mask">,
6647        Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
6648                   llvm_i8_ty], [IntrNoMem]>;
6649  def int_x86_avx512_mask_expand_d_128 :
6650                             GCCBuiltin<"__builtin_ia32_expandsi128_mask">,
6651        Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
6652                   llvm_i8_ty], [IntrNoMem]>;
6653  def int_x86_avx512_mask_expand_q_128 :
6654                             GCCBuiltin<"__builtin_ia32_expanddi128_mask">,
6655        Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
6656                   llvm_i8_ty], [IntrNoMem]>;
6657
6658  def int_x86_avx512_mask_expand_load_d_512 :
6659                            GCCBuiltin<"__builtin_ia32_expandloadsi512_mask">,
6660        Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty,
6661                   llvm_i16_ty], [IntrReadArgMem]>;
6662  def int_x86_avx512_mask_expand_load_q_512 :
6663                            GCCBuiltin<"__builtin_ia32_expandloaddi512_mask">,
6664        Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty,
6665                   llvm_i8_ty], [IntrReadArgMem]>;
6666  def int_x86_avx512_mask_expand_load_d_256 :
6667                            GCCBuiltin<"__builtin_ia32_expandloadsi256_mask">,
6668        Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty,
6669                   llvm_i8_ty], [IntrReadArgMem]>;
6670  def int_x86_avx512_mask_expand_load_q_256 :
6671                            GCCBuiltin<"__builtin_ia32_expandloaddi256_mask">,
6672        Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty,
6673                   llvm_i8_ty], [IntrReadArgMem]>;
6674  def int_x86_avx512_mask_expand_load_d_128 :
6675                            GCCBuiltin<"__builtin_ia32_expandloadsi128_mask">,
6676        Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty,
6677                   llvm_i8_ty], [IntrReadArgMem]>;
6678  def int_x86_avx512_mask_expand_load_q_128 :
6679                            GCCBuiltin<"__builtin_ia32_expandloaddi128_mask">,
6680        Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty,
6681                   llvm_i8_ty], [IntrReadArgMem]>;
6682
6683}
6684
6685// truncate
6686let TargetPrefix = "x86" in {
6687  def int_x86_avx512_mask_pmov_qb_128 :
6688          GCCBuiltin<"__builtin_ia32_pmovqb128_mask">,
6689          Intrinsic<[llvm_v16i8_ty],
6690                    [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6691                    [IntrNoMem]>;
6692  def int_x86_avx512_mask_pmov_qb_mem_128 :
6693          GCCBuiltin<"__builtin_ia32_pmovqb128mem_mask">,
6694          Intrinsic<[],
6695                    [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6696                    [IntrReadWriteArgMem]>;
6697  def int_x86_avx512_mask_pmovs_qb_128 :
6698          GCCBuiltin<"__builtin_ia32_pmovsqb128_mask">,
6699          Intrinsic<[llvm_v16i8_ty],
6700                    [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6701                    [IntrNoMem]>;
6702  def int_x86_avx512_mask_pmovs_qb_mem_128 :
6703          GCCBuiltin<"__builtin_ia32_pmovsqb128mem_mask">,
6704          Intrinsic<[],
6705                    [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6706                    [IntrReadWriteArgMem]>;
6707  def int_x86_avx512_mask_pmovus_qb_128 :
6708          GCCBuiltin<"__builtin_ia32_pmovusqb128_mask">,
6709          Intrinsic<[llvm_v16i8_ty],
6710                    [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6711                    [IntrNoMem]>;
6712  def int_x86_avx512_mask_pmovus_qb_mem_128 :
6713          GCCBuiltin<"__builtin_ia32_pmovusqb128mem_mask">,
6714          Intrinsic<[],
6715                    [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6716                    [IntrReadWriteArgMem]>;
6717  def int_x86_avx512_mask_pmov_qb_256 :
6718          GCCBuiltin<"__builtin_ia32_pmovqb256_mask">,
6719          Intrinsic<[llvm_v16i8_ty],
6720                    [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6721                    [IntrNoMem]>;
6722  def int_x86_avx512_mask_pmov_qb_mem_256 :
6723          GCCBuiltin<"__builtin_ia32_pmovqb256mem_mask">,
6724          Intrinsic<[],
6725                    [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6726                    [IntrReadWriteArgMem]>;
6727  def int_x86_avx512_mask_pmovs_qb_256 :
6728          GCCBuiltin<"__builtin_ia32_pmovsqb256_mask">,
6729          Intrinsic<[llvm_v16i8_ty],
6730                    [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6731                    [IntrNoMem]>;
6732  def int_x86_avx512_mask_pmovs_qb_mem_256 :
6733          GCCBuiltin<"__builtin_ia32_pmovsqb256mem_mask">,
6734          Intrinsic<[],
6735                    [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6736                    [IntrReadWriteArgMem]>;
6737  def int_x86_avx512_mask_pmovus_qb_256 :
6738          GCCBuiltin<"__builtin_ia32_pmovusqb256_mask">,
6739          Intrinsic<[llvm_v16i8_ty],
6740                    [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6741                    [IntrNoMem]>;
6742  def int_x86_avx512_mask_pmovus_qb_mem_256 :
6743          GCCBuiltin<"__builtin_ia32_pmovusqb256mem_mask">,
6744          Intrinsic<[],
6745                    [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6746                    [IntrReadWriteArgMem]>;
6747  def int_x86_avx512_mask_pmov_qb_512 :
6748          GCCBuiltin<"__builtin_ia32_pmovqb512_mask">,
6749          Intrinsic<[llvm_v16i8_ty],
6750                    [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6751                    [IntrNoMem]>;
6752  def int_x86_avx512_mask_pmov_qb_mem_512 :
6753          GCCBuiltin<"__builtin_ia32_pmovqb512mem_mask">,
6754          Intrinsic<[],
6755                    [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6756                    [IntrReadWriteArgMem]>;
6757  def int_x86_avx512_mask_pmovs_qb_512 :
6758          GCCBuiltin<"__builtin_ia32_pmovsqb512_mask">,
6759          Intrinsic<[llvm_v16i8_ty],
6760                    [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6761                    [IntrNoMem]>;
6762  def int_x86_avx512_mask_pmovs_qb_mem_512 :
6763          GCCBuiltin<"__builtin_ia32_pmovsqb512mem_mask">,
6764          Intrinsic<[],
6765                    [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6766                    [IntrReadWriteArgMem]>;
6767  def int_x86_avx512_mask_pmovus_qb_512 :
6768          GCCBuiltin<"__builtin_ia32_pmovusqb512_mask">,
6769          Intrinsic<[llvm_v16i8_ty],
6770                    [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6771                    [IntrNoMem]>;
6772  def int_x86_avx512_mask_pmovus_qb_mem_512 :
6773          GCCBuiltin<"__builtin_ia32_pmovusqb512mem_mask">,
6774          Intrinsic<[],
6775                    [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6776                    [IntrReadWriteArgMem]>;
6777  def int_x86_avx512_mask_pmov_qw_128 :
6778          GCCBuiltin<"__builtin_ia32_pmovqw128_mask">,
6779          Intrinsic<[llvm_v8i16_ty],
6780                    [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6781                    [IntrNoMem]>;
6782  def int_x86_avx512_mask_pmov_qw_mem_128 :
6783          GCCBuiltin<"__builtin_ia32_pmovqw128mem_mask">,
6784          Intrinsic<[],
6785                    [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6786                    [IntrReadWriteArgMem]>;
6787  def int_x86_avx512_mask_pmovs_qw_128 :
6788          GCCBuiltin<"__builtin_ia32_pmovsqw128_mask">,
6789          Intrinsic<[llvm_v8i16_ty],
6790                    [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6791                    [IntrNoMem]>;
6792  def int_x86_avx512_mask_pmovs_qw_mem_128 :
6793          GCCBuiltin<"__builtin_ia32_pmovsqw128mem_mask">,
6794          Intrinsic<[],
6795                    [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6796                    [IntrReadWriteArgMem]>;
6797  def int_x86_avx512_mask_pmovus_qw_128 :
6798          GCCBuiltin<"__builtin_ia32_pmovusqw128_mask">,
6799          Intrinsic<[llvm_v8i16_ty],
6800                    [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6801                    [IntrNoMem]>;
6802  def int_x86_avx512_mask_pmovus_qw_mem_128 :
6803          GCCBuiltin<"__builtin_ia32_pmovusqw128mem_mask">,
6804          Intrinsic<[],
6805                    [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6806                    [IntrReadWriteArgMem]>;
6807  def int_x86_avx512_mask_pmov_qw_256 :
6808          GCCBuiltin<"__builtin_ia32_pmovqw256_mask">,
6809          Intrinsic<[llvm_v8i16_ty],
6810                    [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6811                    [IntrNoMem]>;
6812  def int_x86_avx512_mask_pmov_qw_mem_256 :
6813          GCCBuiltin<"__builtin_ia32_pmovqw256mem_mask">,
6814          Intrinsic<[],
6815                    [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6816                    [IntrReadWriteArgMem]>;
6817  def int_x86_avx512_mask_pmovs_qw_256 :
6818          GCCBuiltin<"__builtin_ia32_pmovsqw256_mask">,
6819          Intrinsic<[llvm_v8i16_ty],
6820                    [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6821                    [IntrNoMem]>;
6822  def int_x86_avx512_mask_pmovs_qw_mem_256 :
6823          GCCBuiltin<"__builtin_ia32_pmovsqw256mem_mask">,
6824          Intrinsic<[],
6825                    [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6826                    [IntrReadWriteArgMem]>;
6827  def int_x86_avx512_mask_pmovus_qw_256 :
6828          GCCBuiltin<"__builtin_ia32_pmovusqw256_mask">,
6829          Intrinsic<[llvm_v8i16_ty],
6830                    [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6831                    [IntrNoMem]>;
6832  def int_x86_avx512_mask_pmovus_qw_mem_256 :
6833          GCCBuiltin<"__builtin_ia32_pmovusqw256mem_mask">,
6834          Intrinsic<[],
6835                    [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6836                    [IntrReadWriteArgMem]>;
6837  def int_x86_avx512_mask_pmov_qw_512 :
6838          GCCBuiltin<"__builtin_ia32_pmovqw512_mask">,
6839          Intrinsic<[llvm_v8i16_ty],
6840                    [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6841                    [IntrNoMem]>;
6842  def int_x86_avx512_mask_pmov_qw_mem_512 :
6843          GCCBuiltin<"__builtin_ia32_pmovqw512mem_mask">,
6844          Intrinsic<[],
6845                    [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6846                    [IntrReadWriteArgMem]>;
6847  def int_x86_avx512_mask_pmovs_qw_512 :
6848          GCCBuiltin<"__builtin_ia32_pmovsqw512_mask">,
6849          Intrinsic<[llvm_v8i16_ty],
6850                    [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6851                    [IntrNoMem]>;
6852  def int_x86_avx512_mask_pmovs_qw_mem_512 :
6853          GCCBuiltin<"__builtin_ia32_pmovsqw512mem_mask">,
6854          Intrinsic<[],
6855                    [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6856                    [IntrReadWriteArgMem]>;
6857  def int_x86_avx512_mask_pmovus_qw_512 :
6858          GCCBuiltin<"__builtin_ia32_pmovusqw512_mask">,
6859          Intrinsic<[llvm_v8i16_ty],
6860                    [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6861                    [IntrNoMem]>;
6862  def int_x86_avx512_mask_pmovus_qw_mem_512 :
6863          GCCBuiltin<"__builtin_ia32_pmovusqw512mem_mask">,
6864          Intrinsic<[],
6865                    [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6866                    [IntrReadWriteArgMem]>;
6867  def int_x86_avx512_mask_pmov_qd_128 :
6868          GCCBuiltin<"__builtin_ia32_pmovqd128_mask">,
6869          Intrinsic<[llvm_v4i32_ty],
6870                    [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
6871                    [IntrNoMem]>;
6872  def int_x86_avx512_mask_pmov_qd_mem_128 :
6873          GCCBuiltin<"__builtin_ia32_pmovqd128mem_mask">,
6874          Intrinsic<[],
6875                    [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6876                    [IntrReadWriteArgMem]>;
6877  def int_x86_avx512_mask_pmovs_qd_128 :
6878          GCCBuiltin<"__builtin_ia32_pmovsqd128_mask">,
6879          Intrinsic<[llvm_v4i32_ty],
6880                    [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
6881                    [IntrNoMem]>;
6882  def int_x86_avx512_mask_pmovs_qd_mem_128 :
6883          GCCBuiltin<"__builtin_ia32_pmovsqd128mem_mask">,
6884          Intrinsic<[],
6885                    [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6886                    [IntrReadWriteArgMem]>;
6887  def int_x86_avx512_mask_pmovus_qd_128 :
6888          GCCBuiltin<"__builtin_ia32_pmovusqd128_mask">,
6889          Intrinsic<[llvm_v4i32_ty],
6890                    [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
6891                    [IntrNoMem]>;
6892  def int_x86_avx512_mask_pmovus_qd_mem_128 :
6893          GCCBuiltin<"__builtin_ia32_pmovusqd128mem_mask">,
6894          Intrinsic<[],
6895                    [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6896                    [IntrReadWriteArgMem]>;
6897  def int_x86_avx512_mask_pmov_qd_256 :
6898          GCCBuiltin<"__builtin_ia32_pmovqd256_mask">,
6899          Intrinsic<[llvm_v4i32_ty],
6900                    [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
6901                    [IntrNoMem]>;
6902  def int_x86_avx512_mask_pmov_qd_mem_256 :
6903          GCCBuiltin<"__builtin_ia32_pmovqd256mem_mask">,
6904          Intrinsic<[],
6905                    [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6906                    [IntrReadWriteArgMem]>;
6907  def int_x86_avx512_mask_pmovs_qd_256 :
6908          GCCBuiltin<"__builtin_ia32_pmovsqd256_mask">,
6909          Intrinsic<[llvm_v4i32_ty],
6910                    [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
6911                    [IntrNoMem]>;
6912  def int_x86_avx512_mask_pmovs_qd_mem_256 :
6913          GCCBuiltin<"__builtin_ia32_pmovsqd256mem_mask">,
6914          Intrinsic<[],
6915                    [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6916                    [IntrReadWriteArgMem]>;
6917  def int_x86_avx512_mask_pmovus_qd_256 :
6918          GCCBuiltin<"__builtin_ia32_pmovusqd256_mask">,
6919          Intrinsic<[llvm_v4i32_ty],
6920                    [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
6921                    [IntrNoMem]>;
6922  def int_x86_avx512_mask_pmovus_qd_mem_256 :
6923          GCCBuiltin<"__builtin_ia32_pmovusqd256mem_mask">,
6924          Intrinsic<[],
6925                    [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6926                    [IntrReadWriteArgMem]>;
6927  def int_x86_avx512_mask_pmov_qd_512 :
6928          GCCBuiltin<"__builtin_ia32_pmovqd512_mask">,
6929          Intrinsic<[llvm_v8i32_ty],
6930                    [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
6931                    [IntrNoMem]>;
6932  def int_x86_avx512_mask_pmov_qd_mem_512 :
6933          GCCBuiltin<"__builtin_ia32_pmovqd512mem_mask">,
6934          Intrinsic<[],
6935                    [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6936                    [IntrReadWriteArgMem]>;
6937  def int_x86_avx512_mask_pmovs_qd_512 :
6938          GCCBuiltin<"__builtin_ia32_pmovsqd512_mask">,
6939          Intrinsic<[llvm_v8i32_ty],
6940                    [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
6941                    [IntrNoMem]>;
6942  def int_x86_avx512_mask_pmovs_qd_mem_512 :
6943          GCCBuiltin<"__builtin_ia32_pmovsqd512mem_mask">,
6944          Intrinsic<[],
6945                    [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6946                    [IntrReadWriteArgMem]>;
6947  def int_x86_avx512_mask_pmovus_qd_512 :
6948          GCCBuiltin<"__builtin_ia32_pmovusqd512_mask">,
6949          Intrinsic<[llvm_v8i32_ty],
6950                    [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
6951                    [IntrNoMem]>;
6952  def int_x86_avx512_mask_pmovus_qd_mem_512 :
6953          GCCBuiltin<"__builtin_ia32_pmovusqd512mem_mask">,
6954          Intrinsic<[],
6955                    [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6956                    [IntrReadWriteArgMem]>;
6957  def int_x86_avx512_mask_pmov_db_128 :
6958          GCCBuiltin<"__builtin_ia32_pmovdb128_mask">,
6959          Intrinsic<[llvm_v16i8_ty],
6960                    [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty],
6961                    [IntrNoMem]>;
6962  def int_x86_avx512_mask_pmov_db_mem_128 :
6963          GCCBuiltin<"__builtin_ia32_pmovdb128mem_mask">,
6964          Intrinsic<[],
6965                    [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
6966                    [IntrReadWriteArgMem]>;
6967  def int_x86_avx512_mask_pmovs_db_128 :
6968          GCCBuiltin<"__builtin_ia32_pmovsdb128_mask">,
6969          Intrinsic<[llvm_v16i8_ty],
6970                    [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty],
6971                    [IntrNoMem]>;
6972  def int_x86_avx512_mask_pmovs_db_mem_128 :
6973          GCCBuiltin<"__builtin_ia32_pmovsdb128mem_mask">,
6974          Intrinsic<[],
6975                    [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
6976                    [IntrReadWriteArgMem]>;
6977  def int_x86_avx512_mask_pmovus_db_128 :
6978          GCCBuiltin<"__builtin_ia32_pmovusdb128_mask">,
6979          Intrinsic<[llvm_v16i8_ty],
6980                    [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty],
6981                    [IntrNoMem]>;
6982  def int_x86_avx512_mask_pmovus_db_mem_128 :
6983          GCCBuiltin<"__builtin_ia32_pmovusdb128mem_mask">,
6984          Intrinsic<[],
6985                    [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
6986                    [IntrReadWriteArgMem]>;
6987  def int_x86_avx512_mask_pmov_db_256 :
6988          GCCBuiltin<"__builtin_ia32_pmovdb256_mask">,
6989          Intrinsic<[llvm_v16i8_ty],
6990                    [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty],
6991                    [IntrNoMem]>;
6992  def int_x86_avx512_mask_pmov_db_mem_256 :
6993          GCCBuiltin<"__builtin_ia32_pmovdb256mem_mask">,
6994          Intrinsic<[],
6995                    [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
6996                    [IntrReadWriteArgMem]>;
6997  def int_x86_avx512_mask_pmovs_db_256 :
6998          GCCBuiltin<"__builtin_ia32_pmovsdb256_mask">,
6999          Intrinsic<[llvm_v16i8_ty],
7000                    [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty],
7001                    [IntrNoMem]>;
7002  def int_x86_avx512_mask_pmovs_db_mem_256 :
7003          GCCBuiltin<"__builtin_ia32_pmovsdb256mem_mask">,
7004          Intrinsic<[],
7005                    [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7006                    [IntrReadWriteArgMem]>;
7007  def int_x86_avx512_mask_pmovus_db_256 :
7008          GCCBuiltin<"__builtin_ia32_pmovusdb256_mask">,
7009          Intrinsic<[llvm_v16i8_ty],
7010                    [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty],
7011                    [IntrNoMem]>;
7012  def int_x86_avx512_mask_pmovus_db_mem_256 :
7013          GCCBuiltin<"__builtin_ia32_pmovusdb256mem_mask">,
7014          Intrinsic<[],
7015                    [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7016                    [IntrReadWriteArgMem]>;
7017  def int_x86_avx512_mask_pmov_db_512 :
7018          GCCBuiltin<"__builtin_ia32_pmovdb512_mask">,
7019          Intrinsic<[llvm_v16i8_ty],
7020                    [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
7021                    [IntrNoMem]>;
7022  def int_x86_avx512_mask_pmov_db_mem_512 :
7023          GCCBuiltin<"__builtin_ia32_pmovdb512mem_mask">,
7024          Intrinsic<[],
7025                    [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7026                    [IntrReadWriteArgMem]>;
7027  def int_x86_avx512_mask_pmovs_db_512 :
7028          GCCBuiltin<"__builtin_ia32_pmovsdb512_mask">,
7029          Intrinsic<[llvm_v16i8_ty],
7030                    [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
7031                    [IntrNoMem]>;
7032  def int_x86_avx512_mask_pmovs_db_mem_512 :
7033          GCCBuiltin<"__builtin_ia32_pmovsdb512mem_mask">,
7034          Intrinsic<[],
7035                    [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7036                    [IntrReadWriteArgMem]>;
7037  def int_x86_avx512_mask_pmovus_db_512 :
7038          GCCBuiltin<"__builtin_ia32_pmovusdb512_mask">,
7039          Intrinsic<[llvm_v16i8_ty],
7040                    [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
7041                    [IntrNoMem]>;
7042  def int_x86_avx512_mask_pmovus_db_mem_512 :
7043          GCCBuiltin<"__builtin_ia32_pmovusdb512mem_mask">,
7044          Intrinsic<[],
7045                    [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7046                    [IntrReadWriteArgMem]>;
7047  def int_x86_avx512_mask_pmov_dw_128 :
7048          GCCBuiltin<"__builtin_ia32_pmovdw128_mask">,
7049          Intrinsic<[llvm_v8i16_ty],
7050                    [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7051                    [IntrNoMem]>;
7052  def int_x86_avx512_mask_pmov_dw_mem_128 :
7053          GCCBuiltin<"__builtin_ia32_pmovdw128mem_mask">,
7054          Intrinsic<[],
7055                    [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
7056                    [IntrReadWriteArgMem]>;
7057  def int_x86_avx512_mask_pmovs_dw_128 :
7058          GCCBuiltin<"__builtin_ia32_pmovsdw128_mask">,
7059          Intrinsic<[llvm_v8i16_ty],
7060                    [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7061                    [IntrNoMem]>;
7062  def int_x86_avx512_mask_pmovs_dw_mem_128 :
7063          GCCBuiltin<"__builtin_ia32_pmovsdw128mem_mask">,
7064          Intrinsic<[],
7065                    [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
7066                    [IntrReadWriteArgMem]>;
7067  def int_x86_avx512_mask_pmovus_dw_128 :
7068          GCCBuiltin<"__builtin_ia32_pmovusdw128_mask">,
7069          Intrinsic<[llvm_v8i16_ty],
7070                    [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7071                    [IntrNoMem]>;
7072  def int_x86_avx512_mask_pmovus_dw_mem_128 :
7073          GCCBuiltin<"__builtin_ia32_pmovusdw128mem_mask">,
7074          Intrinsic<[],
7075                    [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
7076                    [IntrReadWriteArgMem]>;
7077  def int_x86_avx512_mask_pmov_dw_256 :
7078          GCCBuiltin<"__builtin_ia32_pmovdw256_mask">,
7079          Intrinsic<[llvm_v8i16_ty],
7080                    [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7081                    [IntrNoMem]>;
7082  def int_x86_avx512_mask_pmov_dw_mem_256 :
7083          GCCBuiltin<"__builtin_ia32_pmovdw256mem_mask">,
7084          Intrinsic<[],
7085                    [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7086                    [IntrReadWriteArgMem]>;
7087  def int_x86_avx512_mask_pmovs_dw_256 :
7088          GCCBuiltin<"__builtin_ia32_pmovsdw256_mask">,
7089          Intrinsic<[llvm_v8i16_ty],
7090                    [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7091                    [IntrNoMem]>;
7092  def int_x86_avx512_mask_pmovs_dw_mem_256 :
7093          GCCBuiltin<"__builtin_ia32_pmovsdw256mem_mask">,
7094          Intrinsic<[],
7095                    [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7096                    [IntrReadWriteArgMem]>;
7097  def int_x86_avx512_mask_pmovus_dw_256 :
7098          GCCBuiltin<"__builtin_ia32_pmovusdw256_mask">,
7099          Intrinsic<[llvm_v8i16_ty],
7100                    [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7101                    [IntrNoMem]>;
7102  def int_x86_avx512_mask_pmovus_dw_mem_256 :
7103          GCCBuiltin<"__builtin_ia32_pmovusdw256mem_mask">,
7104          Intrinsic<[],
7105                    [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7106                    [IntrReadWriteArgMem]>;
7107  def int_x86_avx512_mask_pmov_dw_512 :
7108          GCCBuiltin<"__builtin_ia32_pmovdw512_mask">,
7109          Intrinsic<[llvm_v16i16_ty],
7110                    [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
7111                    [IntrNoMem]>;
7112  def int_x86_avx512_mask_pmov_dw_mem_512 :
7113          GCCBuiltin<"__builtin_ia32_pmovdw512mem_mask">,
7114          Intrinsic<[],
7115                    [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7116                    [IntrReadWriteArgMem]>;
7117  def int_x86_avx512_mask_pmovs_dw_512 :
7118          GCCBuiltin<"__builtin_ia32_pmovsdw512_mask">,
7119          Intrinsic<[llvm_v16i16_ty],
7120                    [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
7121                    [IntrNoMem]>;
7122  def int_x86_avx512_mask_pmovs_dw_mem_512 :
7123          GCCBuiltin<"__builtin_ia32_pmovsdw512mem_mask">,
7124          Intrinsic<[],
7125                    [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7126                    [IntrReadWriteArgMem]>;
7127  def int_x86_avx512_mask_pmovus_dw_512 :
7128          GCCBuiltin<"__builtin_ia32_pmovusdw512_mask">,
7129          Intrinsic<[llvm_v16i16_ty],
7130                    [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
7131                    [IntrNoMem]>;
7132  def int_x86_avx512_mask_pmovus_dw_mem_512 :
7133          GCCBuiltin<"__builtin_ia32_pmovusdw512mem_mask">,
7134          Intrinsic<[],
7135                    [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7136                    [IntrReadWriteArgMem]>;
7137  def int_x86_avx512_mask_pmov_wb_128 :
7138          GCCBuiltin<"__builtin_ia32_pmovwb128_mask">,
7139          Intrinsic<[llvm_v16i8_ty],
7140                    [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty],
7141                    [IntrNoMem]>;
7142  def int_x86_avx512_mask_pmov_wb_mem_128 :
7143          GCCBuiltin<"__builtin_ia32_pmovwb128mem_mask">,
7144          Intrinsic<[],
7145                    [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
7146                    [IntrReadWriteArgMem]>;
7147  def int_x86_avx512_mask_pmovs_wb_128 :
7148          GCCBuiltin<"__builtin_ia32_pmovswb128_mask">,
7149          Intrinsic<[llvm_v16i8_ty],
7150                    [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty],
7151                    [IntrNoMem]>;
7152  def int_x86_avx512_mask_pmovs_wb_mem_128 :
7153          GCCBuiltin<"__builtin_ia32_pmovswb128mem_mask">,
7154          Intrinsic<[],
7155                    [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
7156                    [IntrReadWriteArgMem]>;
7157  def int_x86_avx512_mask_pmovus_wb_128 :
7158          GCCBuiltin<"__builtin_ia32_pmovuswb128_mask">,
7159          Intrinsic<[llvm_v16i8_ty],
7160                    [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty],
7161                    [IntrNoMem]>;
7162  def int_x86_avx512_mask_pmovus_wb_mem_128 :
7163          GCCBuiltin<"__builtin_ia32_pmovuswb128mem_mask">,
7164          Intrinsic<[],
7165                    [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
7166                    [IntrReadWriteArgMem]>;
7167  def int_x86_avx512_mask_pmov_wb_256 :
7168          GCCBuiltin<"__builtin_ia32_pmovwb256_mask">,
7169          Intrinsic<[llvm_v16i8_ty],
7170                    [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
7171                    [IntrNoMem]>;
7172  def int_x86_avx512_mask_pmov_wb_mem_256 :
7173          GCCBuiltin<"__builtin_ia32_pmovwb256mem_mask">,
7174          Intrinsic<[],
7175                    [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
7176                    [IntrReadWriteArgMem]>;
7177  def int_x86_avx512_mask_pmovs_wb_256 :
7178          GCCBuiltin<"__builtin_ia32_pmovswb256_mask">,
7179          Intrinsic<[llvm_v16i8_ty],
7180                    [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
7181                    [IntrNoMem]>;
7182  def int_x86_avx512_mask_pmovs_wb_mem_256 :
7183          GCCBuiltin<"__builtin_ia32_pmovswb256mem_mask">,
7184          Intrinsic<[],
7185                    [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
7186                    [IntrReadWriteArgMem]>;
7187  def int_x86_avx512_mask_pmovus_wb_256 :
7188          GCCBuiltin<"__builtin_ia32_pmovuswb256_mask">,
7189          Intrinsic<[llvm_v16i8_ty],
7190                    [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
7191                    [IntrNoMem]>;
7192  def int_x86_avx512_mask_pmovus_wb_mem_256 :
7193          GCCBuiltin<"__builtin_ia32_pmovuswb256mem_mask">,
7194          Intrinsic<[],
7195                    [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
7196                    [IntrReadWriteArgMem]>;
7197  def int_x86_avx512_mask_pmov_wb_512 :
7198          GCCBuiltin<"__builtin_ia32_pmovwb512_mask">,
7199          Intrinsic<[llvm_v32i8_ty],
7200                    [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
7201                    [IntrNoMem]>;
7202  def int_x86_avx512_mask_pmov_wb_mem_512 :
7203          GCCBuiltin<"__builtin_ia32_pmovwb512mem_mask">,
7204          Intrinsic<[],
7205                    [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
7206                    [IntrReadWriteArgMem]>;
7207  def int_x86_avx512_mask_pmovs_wb_512 :
7208          GCCBuiltin<"__builtin_ia32_pmovswb512_mask">,
7209          Intrinsic<[llvm_v32i8_ty],
7210                    [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
7211                    [IntrNoMem]>;
7212  def int_x86_avx512_mask_pmovs_wb_mem_512 :
7213          GCCBuiltin<"__builtin_ia32_pmovswb512mem_mask">,
7214          Intrinsic<[],
7215                    [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
7216                    [IntrReadWriteArgMem]>;
7217  def int_x86_avx512_mask_pmovus_wb_512 :
7218          GCCBuiltin<"__builtin_ia32_pmovuswb512_mask">,
7219          Intrinsic<[llvm_v32i8_ty],
7220                    [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
7221                    [IntrNoMem]>;
7222  def int_x86_avx512_mask_pmovus_wb_mem_512 :
7223          GCCBuiltin<"__builtin_ia32_pmovuswb512mem_mask">,
7224          Intrinsic<[],
7225                    [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
7226                    [IntrReadWriteArgMem]>;
7227}
7228
7229// Bitwise ternary logic
7230let TargetPrefix = "x86" in {
7231  def int_x86_avx512_mask_pternlog_d_128 :
7232          GCCBuiltin<"__builtin_ia32_pternlogd128_mask">,
7233          Intrinsic<[llvm_v4i32_ty],
7234                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
7235                     llvm_i8_ty], [IntrNoMem]>;
7236
7237  def int_x86_avx512_maskz_pternlog_d_128 :
7238          GCCBuiltin<"__builtin_ia32_pternlogd128_maskz">,
7239          Intrinsic<[llvm_v4i32_ty],
7240                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
7241                     llvm_i8_ty], [IntrNoMem]>;
7242
7243  def int_x86_avx512_mask_pternlog_d_256 :
7244          GCCBuiltin<"__builtin_ia32_pternlogd256_mask">,
7245          Intrinsic<[llvm_v8i32_ty],
7246                    [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
7247                     llvm_i8_ty], [IntrNoMem]>;
7248
7249  def int_x86_avx512_maskz_pternlog_d_256 :
7250          GCCBuiltin<"__builtin_ia32_pternlogd256_maskz">,
7251          Intrinsic<[llvm_v8i32_ty],
7252                    [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
7253                     llvm_i8_ty], [IntrNoMem]>;
7254
7255  def int_x86_avx512_mask_pternlog_d_512 :
7256          GCCBuiltin<"__builtin_ia32_pternlogd512_mask">,
7257          Intrinsic<[llvm_v16i32_ty],
7258                    [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
7259                     llvm_i16_ty], [IntrNoMem]>;
7260
7261  def int_x86_avx512_maskz_pternlog_d_512 :
7262          GCCBuiltin<"__builtin_ia32_pternlogd512_maskz">,
7263          Intrinsic<[llvm_v16i32_ty],
7264                    [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
7265                     llvm_i16_ty], [IntrNoMem]>;
7266
7267  def int_x86_avx512_mask_pternlog_q_128 :
7268          GCCBuiltin<"__builtin_ia32_pternlogq128_mask">,
7269          Intrinsic<[llvm_v2i64_ty],
7270                    [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
7271                     llvm_i8_ty], [IntrNoMem]>;
7272
7273  def int_x86_avx512_maskz_pternlog_q_128 :
7274          GCCBuiltin<"__builtin_ia32_pternlogq128_maskz">,
7275          Intrinsic<[llvm_v2i64_ty],
7276                    [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
7277                     llvm_i8_ty], [IntrNoMem]>;
7278
7279  def int_x86_avx512_mask_pternlog_q_256 :
7280          GCCBuiltin<"__builtin_ia32_pternlogq256_mask">,
7281          Intrinsic<[llvm_v4i64_ty],
7282                    [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
7283                     llvm_i8_ty], [IntrNoMem]>;
7284
7285  def int_x86_avx512_maskz_pternlog_q_256 :
7286          GCCBuiltin<"__builtin_ia32_pternlogq256_maskz">,
7287          Intrinsic<[llvm_v4i64_ty],
7288                    [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
7289                     llvm_i8_ty], [IntrNoMem]>;
7290
7291  def int_x86_avx512_mask_pternlog_q_512 :
7292          GCCBuiltin<"__builtin_ia32_pternlogq512_mask">,
7293          Intrinsic<[llvm_v8i64_ty],
7294                    [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
7295                     llvm_i8_ty], [IntrNoMem]>;
7296
7297  def int_x86_avx512_maskz_pternlog_q_512 :
7298          GCCBuiltin<"__builtin_ia32_pternlogq512_maskz">,
7299          Intrinsic<[llvm_v8i64_ty],
7300                    [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
7301                     llvm_i8_ty], [IntrNoMem]>;
7302}
7303
7304// Misc.
7305let TargetPrefix = "x86" in {
7306  def int_x86_avx512_mask_cmp_ps_512 :
7307        GCCBuiltin<"__builtin_ia32_cmpps512_mask">,
7308              Intrinsic<[llvm_i16_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
7309                         llvm_i32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
7310  def int_x86_avx512_mask_cmp_pd_512 :
7311        GCCBuiltin<"__builtin_ia32_cmppd512_mask">,
7312              Intrinsic<[llvm_i8_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
7313                         llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
7314  def int_x86_avx512_mask_cmp_ps_256 :
7315        GCCBuiltin<"__builtin_ia32_cmpps256_mask">,
7316              Intrinsic<[llvm_i8_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
7317                         llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
7318  def int_x86_avx512_mask_cmp_pd_256 :
7319        GCCBuiltin<"__builtin_ia32_cmppd256_mask">,
7320              Intrinsic<[llvm_i8_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
7321                         llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
7322  def int_x86_avx512_mask_cmp_ps_128 :
7323        GCCBuiltin<"__builtin_ia32_cmpps128_mask">,
7324            Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
7325                       llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
7326  def int_x86_avx512_mask_cmp_pd_128 :
7327        GCCBuiltin<"__builtin_ia32_cmppd128_mask">,
7328            Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
7329                       llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
7330  def int_x86_avx512_mask_cmp_ss :
7331        GCCBuiltin<"__builtin_ia32_cmpss_mask">,
7332              Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
7333                         llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
7334  def int_x86_avx512_mask_cmp_sd :
7335        GCCBuiltin<"__builtin_ia32_cmpsd_mask">,
7336              Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
7337                         llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
7338
7339  def int_x86_avx512_movntdqa :
7340        GCCBuiltin<"__builtin_ia32_movntdqa512">,
7341            Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
7342}
7343
7344//===----------------------------------------------------------------------===//
7345// SHA intrinsics
7346let TargetPrefix = "x86" in {
7347  def int_x86_sha1rnds4 : GCCBuiltin<"__builtin_ia32_sha1rnds4">,
7348        Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
7349                  [IntrNoMem]>;
7350  def int_x86_sha1nexte : GCCBuiltin<"__builtin_ia32_sha1nexte">,
7351      Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7352  def int_x86_sha1msg1 : GCCBuiltin<"__builtin_ia32_sha1msg1">,
7353      Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7354  def int_x86_sha1msg2 : GCCBuiltin<"__builtin_ia32_sha1msg2">,
7355      Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7356  def int_x86_sha256rnds2 : GCCBuiltin<"__builtin_ia32_sha256rnds2">,
7357      Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
7358                [IntrNoMem]>;
7359  def int_x86_sha256msg1 : GCCBuiltin<"__builtin_ia32_sha256msg1">,
7360      Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7361  def int_x86_sha256msg2 : GCCBuiltin<"__builtin_ia32_sha256msg2">,
7362      Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7363}
7364