[X86][PKU] Add {RD,WR}PKRU intrinsics
[oota-llvm.git] / include / llvm / IR / IntrinsicsX86.td
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
16 let 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
22 let 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.
37 let 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.
45 let 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
53 let 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
112 let 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
131 let 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
177 let 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
224 let 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
250 let 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
257 let 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.
263 let 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.
271 let 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
280 let 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
314 let 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.
360 let 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.
421 let 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
474 let 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
520 let 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.
533 let 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.
564 let 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.
574 let 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.
590 let 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.
596 let 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
609 let 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
661 let 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
671 let 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
693 let 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
717 let 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
738 let 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
754 let 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
794 let 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
801 let 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
829 let 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
852 let 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
859 let 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
866 let 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
873 let 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
889 let 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
896 let 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
909 let 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
919 let 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
926 let 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.
932 let 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
949 let 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.
965 let 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
1034 let 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
1057 let 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
1097 let 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
1113 let 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
1637 let 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
1647 let 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
1654 let 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
1664 let 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
1684 let 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
1771 let 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
1779 let 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
1787 let 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
1797 let 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
1803 let 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
1813 let 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
1848 let 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.
1889 let 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
1941 let 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.
2125 let 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_psrl_w_128 : GCCBuiltin<"__builtin_ia32_psrlw128_mask">,
2196               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
2197                          llvm_v8i16_ty, llvm_v8i16_ty,  llvm_i8_ty], [IntrNoMem]>;
2198   def int_x86_avx512_mask_psrl_w_256 : GCCBuiltin<"__builtin_ia32_psrlw256_mask">,
2199               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2200                          llvm_v8i16_ty, llvm_v16i16_ty,  llvm_i16_ty], [IntrNoMem]>;
2201   def int_x86_avx512_mask_psrl_w_512 : GCCBuiltin<"__builtin_ia32_psrlw512_mask">,
2202               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
2203                          llvm_v8i16_ty, llvm_v32i16_ty,  llvm_i32_ty], [IntrNoMem]>;
2204   def int_x86_avx512_mask_psrl_wi_128 : GCCBuiltin<"__builtin_ia32_psrlwi128_mask">,
2205               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
2206                          llvm_i8_ty, llvm_v8i16_ty,  llvm_i8_ty], [IntrNoMem]>;
2207   def int_x86_avx512_mask_psrl_wi_256 : GCCBuiltin<"__builtin_ia32_psrlwi256_mask">,
2208               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2209                          llvm_i8_ty, llvm_v16i16_ty,  llvm_i16_ty], [IntrNoMem]>;
2210   def int_x86_avx512_mask_psrl_wi_512 : GCCBuiltin<"__builtin_ia32_psrlwi512_mask">,
2211               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
2212                          llvm_i8_ty, llvm_v32i16_ty,  llvm_i32_ty], [IntrNoMem]>;
2213
2214   def int_x86_avx512_mask_psll_d : GCCBuiltin<"__builtin_ia32_pslld512_mask">,
2215               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2216                          llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2217   def int_x86_avx512_mask_psll_q : GCCBuiltin<"__builtin_ia32_psllq512_mask">,
2218               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2219                          llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2220   def int_x86_avx512_mask_psrl_d : GCCBuiltin<"__builtin_ia32_psrld512_mask">,
2221               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2222                          llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2223   def int_x86_avx512_mask_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq512_mask">,
2224               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2225                          llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2226   def int_x86_avx512_mask_psra_d : GCCBuiltin<"__builtin_ia32_psrad512_mask">,
2227               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2228                          llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
2229   def int_x86_avx512_mask_psra_q : GCCBuiltin<"__builtin_ia32_psraq512_mask">,
2230               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2231                          llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
2232 }
2233
2234 // Pack ops.
2235 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2236   def int_x86_avx2_packsswb : GCCBuiltin<"__builtin_ia32_packsswb256">,
2237               Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
2238                          llvm_v16i16_ty], [IntrNoMem]>;
2239   def int_x86_avx2_packssdw : GCCBuiltin<"__builtin_ia32_packssdw256">,
2240               Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
2241                          llvm_v8i32_ty], [IntrNoMem]>;
2242   def int_x86_avx2_packuswb : GCCBuiltin<"__builtin_ia32_packuswb256">,
2243               Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
2244                          llvm_v16i16_ty], [IntrNoMem]>;
2245   def int_x86_avx2_packusdw : GCCBuiltin<"__builtin_ia32_packusdw256">,
2246               Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
2247                          llvm_v8i32_ty], [IntrNoMem]>;
2248 }
2249
2250 // Absolute value ops
2251 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2252   def int_x86_avx2_pabs_b : GCCBuiltin<"__builtin_ia32_pabsb256">,
2253               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty], [IntrNoMem]>;
2254   def int_x86_avx2_pabs_w : GCCBuiltin<"__builtin_ia32_pabsw256">,
2255               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty], [IntrNoMem]>;
2256   def int_x86_avx2_pabs_d : GCCBuiltin<"__builtin_ia32_pabsd256">,
2257               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
2258
2259   def int_x86_avx512_mask_pabs_b_128 : 
2260        GCCBuiltin<"__builtin_ia32_pabsb128_mask">,
2261         Intrinsic<[llvm_v16i8_ty],
2262         [llvm_v16i8_ty, llvm_v16i8_ty,  llvm_i16_ty],
2263         [IntrNoMem]>;
2264
2265   def int_x86_avx512_mask_pabs_b_256 : 
2266         GCCBuiltin<"__builtin_ia32_pabsb256_mask">,
2267           Intrinsic<[llvm_v32i8_ty],
2268           [llvm_v32i8_ty, llvm_v32i8_ty,  llvm_i32_ty],
2269           [IntrNoMem]>;
2270
2271   def int_x86_avx512_mask_pabs_b_512 : 
2272         GCCBuiltin<"__builtin_ia32_pabsb512_mask">,
2273           Intrinsic<[llvm_v64i8_ty],
2274           [llvm_v64i8_ty, llvm_v64i8_ty,  llvm_i64_ty],
2275           [IntrNoMem]>;
2276
2277   def int_x86_avx512_mask_pabs_d_128 : 
2278         GCCBuiltin<"__builtin_ia32_pabsd128_mask">,
2279           Intrinsic<[llvm_v4i32_ty],
2280           [llvm_v4i32_ty, llvm_v4i32_ty,  llvm_i8_ty],
2281           [IntrNoMem]>;
2282
2283   def int_x86_avx512_mask_pabs_d_256 : 
2284         GCCBuiltin<"__builtin_ia32_pabsd256_mask">,
2285           Intrinsic<[llvm_v8i32_ty],
2286           [llvm_v8i32_ty, llvm_v8i32_ty,  llvm_i8_ty],
2287           [IntrNoMem]>;
2288
2289   def int_x86_avx512_mask_pabs_d_512 : 
2290         GCCBuiltin<"__builtin_ia32_pabsd512_mask">,
2291           Intrinsic<[llvm_v16i32_ty],
2292           [llvm_v16i32_ty, llvm_v16i32_ty,  llvm_i16_ty],
2293           [IntrNoMem]>;
2294
2295   def int_x86_avx512_mask_pabs_q_128 : 
2296         GCCBuiltin<"__builtin_ia32_pabsq128_mask">,
2297           Intrinsic<[llvm_v2i64_ty],
2298           [llvm_v2i64_ty, llvm_v2i64_ty,  llvm_i8_ty],
2299           [IntrNoMem]>;
2300
2301   def int_x86_avx512_mask_pabs_q_256 : 
2302         GCCBuiltin<"__builtin_ia32_pabsq256_mask">,
2303           Intrinsic<[llvm_v4i64_ty],
2304           [llvm_v4i64_ty, llvm_v4i64_ty,  llvm_i8_ty],
2305           [IntrNoMem]>;
2306
2307   def int_x86_avx512_mask_pabs_q_512 : 
2308         GCCBuiltin<"__builtin_ia32_pabsq512_mask">,
2309           Intrinsic<[llvm_v8i64_ty],
2310           [llvm_v8i64_ty, llvm_v8i64_ty,  llvm_i8_ty],
2311           [IntrNoMem]>;
2312
2313   def int_x86_avx512_mask_pabs_w_128 : 
2314         GCCBuiltin<"__builtin_ia32_pabsw128_mask">,
2315           Intrinsic<[llvm_v8i16_ty],
2316           [llvm_v8i16_ty, llvm_v8i16_ty,  llvm_i8_ty],
2317           [IntrNoMem]>;
2318
2319   def int_x86_avx512_mask_pabs_w_256 : 
2320         GCCBuiltin<"__builtin_ia32_pabsw256_mask">,
2321           Intrinsic<[llvm_v16i16_ty],
2322           [llvm_v16i16_ty, llvm_v16i16_ty,  llvm_i16_ty],
2323           [IntrNoMem]>;
2324
2325   def int_x86_avx512_mask_pabs_w_512 : 
2326         GCCBuiltin<"__builtin_ia32_pabsw512_mask">,
2327           Intrinsic<[llvm_v32i16_ty],
2328           [llvm_v32i16_ty, llvm_v32i16_ty,  llvm_i32_ty],
2329           [IntrNoMem]>;
2330 }
2331
2332 // Horizontal arithmetic ops
2333 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2334   def int_x86_avx2_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw256">,
2335               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2336                          llvm_v16i16_ty], [IntrNoMem]>;
2337   def int_x86_avx2_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd256">,
2338               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2339                          llvm_v8i32_ty], [IntrNoMem]>;
2340   def int_x86_avx2_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw256">,
2341               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2342                          llvm_v16i16_ty], [IntrNoMem]>;
2343   def int_x86_avx2_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw256">,
2344               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2345                          llvm_v16i16_ty], [IntrNoMem]>;
2346   def int_x86_avx2_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd256">,
2347               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2348                          llvm_v8i32_ty], [IntrNoMem]>;
2349   def int_x86_avx2_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw256">,
2350               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2351                          llvm_v16i16_ty], [IntrNoMem]>;
2352   def int_x86_avx2_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw256">,
2353               Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty,
2354                          llvm_v32i8_ty], [IntrNoMem]>;
2355 }
2356
2357 // Sign ops
2358 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2359   def int_x86_avx2_psign_b : GCCBuiltin<"__builtin_ia32_psignb256">,
2360               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
2361                          llvm_v32i8_ty], [IntrNoMem]>;
2362   def int_x86_avx2_psign_w : GCCBuiltin<"__builtin_ia32_psignw256">,
2363               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2364                          llvm_v16i16_ty], [IntrNoMem]>;
2365   def int_x86_avx2_psign_d : GCCBuiltin<"__builtin_ia32_psignd256">,
2366               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
2367                          llvm_v8i32_ty], [IntrNoMem]>;
2368 }
2369
2370 // Packed multiply high with round and scale
2371 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2372   def int_x86_avx2_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw256">,
2373               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
2374                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
2375   def int_x86_avx512_mask_pmul_hr_sw_128 : GCCBuiltin<"__builtin_ia32_pmulhrsw128_mask">,
2376               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 
2377                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
2378   def int_x86_avx512_mask_pmul_hr_sw_256 : GCCBuiltin<"__builtin_ia32_pmulhrsw256_mask">,
2379               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 
2380                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
2381   def int_x86_avx512_mask_pmul_hr_sw_512 : GCCBuiltin<"__builtin_ia32_pmulhrsw512_mask">,
2382               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty, 
2383                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
2384 }
2385
2386 // Vector sign and zero extend
2387 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2388   def int_x86_avx2_pmovsxbd : GCCBuiltin<"__builtin_ia32_pmovsxbd256">,
2389               Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty],
2390                         [IntrNoMem]>;
2391   def int_x86_avx2_pmovsxbq : GCCBuiltin<"__builtin_ia32_pmovsxbq256">,
2392               Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty],
2393                         [IntrNoMem]>;
2394   def int_x86_avx2_pmovsxbw : GCCBuiltin<"__builtin_ia32_pmovsxbw256">,
2395               Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty],
2396                         [IntrNoMem]>;
2397   def int_x86_avx2_pmovsxdq : GCCBuiltin<"__builtin_ia32_pmovsxdq256">,
2398               Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty],
2399                         [IntrNoMem]>;
2400   def int_x86_avx2_pmovsxwd : GCCBuiltin<"__builtin_ia32_pmovsxwd256">,
2401               Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty],
2402                         [IntrNoMem]>;
2403   def int_x86_avx2_pmovsxwq : GCCBuiltin<"__builtin_ia32_pmovsxwq256">,
2404               Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty],
2405                         [IntrNoMem]>;
2406   def int_x86_avx2_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd256">,
2407               Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty],
2408                         [IntrNoMem]>;
2409   def int_x86_avx2_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq256">,
2410               Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty],
2411                         [IntrNoMem]>;
2412   def int_x86_avx2_pmovzxbw : GCCBuiltin<"__builtin_ia32_pmovzxbw256">,
2413               Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty],
2414                         [IntrNoMem]>;
2415   def int_x86_avx2_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq256">,
2416               Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty],
2417                         [IntrNoMem]>;
2418   def int_x86_avx2_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd256">,
2419               Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty],
2420                         [IntrNoMem]>;
2421   def int_x86_avx2_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq256">,
2422               Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty],
2423                         [IntrNoMem]>;
2424 }
2425
2426 // Vector blend
2427 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2428   def int_x86_avx2_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb256">,
2429               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
2430                          llvm_v32i8_ty], [IntrNoMem]>;
2431 }
2432
2433 // Vector load with broadcast
2434 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2435   def int_x86_avx512_mask_pbroadcast_d_gpr_512 :
2436               GCCBuiltin<"__builtin_ia32_pbroadcastd512_gpr_mask">,
2437               Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty, llvm_v16i32_ty,
2438               llvm_i16_ty], [IntrNoMem]>;
2439   def int_x86_avx512_mask_pbroadcast_q_gpr_512 :
2440               GCCBuiltin<"__builtin_ia32_pbroadcastq512_gpr_mask">,
2441               Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty,
2442               llvm_i8_ty], [IntrNoMem]>;
2443   def int_x86_avx512_mask_pbroadcast_q_mem_512 :
2444               GCCBuiltin<"__builtin_ia32_pbroadcastq512_mem_mask">,
2445               Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty,
2446               llvm_i8_ty], [IntrNoMem]>;
2447 }
2448
2449 // Vector permutation
2450 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2451   def int_x86_avx2_permd : GCCBuiltin<"__builtin_ia32_permvarsi256">,
2452               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
2453                         [IntrNoMem]>;
2454   def int_x86_avx2_permps : GCCBuiltin<"__builtin_ia32_permvarsf256">,
2455               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty],
2456                         [IntrNoMem]>;
2457   def int_x86_avx2_vperm2i128 : GCCBuiltin<"__builtin_ia32_permti256">,
2458               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
2459                          llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
2460 }
2461
2462 // Vector extract and insert
2463 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2464   def int_x86_avx512_mask_vextractf32x4_512 :
2465       GCCBuiltin<"__builtin_ia32_extractf32x4_mask">,
2466                  Intrinsic<[llvm_v4f32_ty], [llvm_v16f32_ty, llvm_i32_ty,
2467                             llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
2468   def int_x86_avx512_mask_vextracti32x4_512 :
2469       GCCBuiltin<"__builtin_ia32_extracti32x4_mask">,
2470                  Intrinsic<[llvm_v4i32_ty], [llvm_v16i32_ty, llvm_i32_ty,
2471                             llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
2472   def int_x86_avx512_mask_vextractf32x4_256 :
2473       GCCBuiltin<"__builtin_ia32_extractf32x4_256_mask">,
2474                  Intrinsic<[llvm_v4f32_ty], [llvm_v8f32_ty, llvm_i32_ty,
2475                             llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
2476   def int_x86_avx512_mask_vextracti32x4_256 :
2477       GCCBuiltin<"__builtin_ia32_extracti32x4_256_mask">,
2478                  Intrinsic<[llvm_v4i32_ty], [llvm_v8i32_ty, llvm_i32_ty,
2479                             llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
2480   def int_x86_avx512_mask_vextractf64x2_256 :
2481       GCCBuiltin<"__builtin_ia32_extractf64x2_256_mask">,
2482                  Intrinsic<[llvm_v2f64_ty], [llvm_v4f64_ty, llvm_i32_ty,
2483                             llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
2484   def int_x86_avx512_mask_vextracti64x2_256 :
2485       GCCBuiltin<"__builtin_ia32_extracti64x2_256_mask">,
2486                  Intrinsic<[llvm_v2i64_ty], [llvm_v4i64_ty, llvm_i32_ty,
2487                             llvm_v2i64_ty,  llvm_i8_ty], [IntrNoMem]>;
2488   def int_x86_avx512_mask_vextractf64x2_512 :
2489       GCCBuiltin<"__builtin_ia32_extractf64x2_512_mask">,
2490                  Intrinsic<[llvm_v2f64_ty], [llvm_v8f64_ty, llvm_i32_ty,
2491                             llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
2492   def int_x86_avx512_mask_vextracti64x2_512 :
2493       GCCBuiltin<"__builtin_ia32_extracti64x2_512_mask">,
2494                  Intrinsic<[llvm_v2i64_ty], [llvm_v8i64_ty, llvm_i32_ty,
2495                             llvm_v2i64_ty,  llvm_i8_ty], [IntrNoMem]>;
2496   def int_x86_avx512_mask_vextractf32x8_512 :
2497       GCCBuiltin<"__builtin_ia32_extractf32x8_mask">,
2498                  Intrinsic<[llvm_v8f32_ty], [llvm_v16f32_ty, llvm_i32_ty,
2499                             llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
2500   def int_x86_avx512_mask_vextracti32x8_512 :
2501       GCCBuiltin<"__builtin_ia32_extracti32x8_mask">,
2502                  Intrinsic<[llvm_v8i32_ty],[llvm_v16i32_ty, llvm_i32_ty,
2503                             llvm_v8i32_ty,  llvm_i8_ty], [IntrNoMem]>;
2504   def int_x86_avx512_mask_vextractf64x4_512 :
2505       GCCBuiltin<"__builtin_ia32_extractf64x4_mask">,
2506                  Intrinsic<[llvm_v4f64_ty], [llvm_v8f64_ty, llvm_i32_ty,
2507                             llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
2508   def int_x86_avx512_mask_vextracti64x4_512 :
2509       GCCBuiltin<"__builtin_ia32_extracti64x4_mask">,
2510                  Intrinsic<[llvm_v4i64_ty], [llvm_v8i64_ty, llvm_i32_ty,
2511                             llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
2512
2513   def int_x86_avx512_mask_insertf32x4_256 :
2514         GCCBuiltin<"__builtin_ia32_insertf32x4_256_mask">,
2515           Intrinsic<[llvm_v8f32_ty],
2516           [llvm_v8f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty],
2517           [IntrNoMem]>;
2518
2519   def int_x86_avx512_mask_insertf32x4_512 :
2520         GCCBuiltin<"__builtin_ia32_insertf32x4_512_mask">,
2521           Intrinsic<[llvm_v16f32_ty],
2522           [llvm_v16f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v16f32_ty, llvm_i8_ty],
2523           [IntrNoMem]>;
2524
2525   def int_x86_avx512_mask_insertf32x8_512 :
2526         GCCBuiltin<"__builtin_ia32_insertf32x8_mask">,
2527           Intrinsic<[llvm_v16f32_ty],
2528           [llvm_v16f32_ty, llvm_v8f32_ty, llvm_i32_ty, llvm_v16f32_ty, llvm_i16_ty],
2529           [IntrNoMem]>;
2530
2531   def int_x86_avx512_mask_insertf64x2_256 :
2532         GCCBuiltin<"__builtin_ia32_insertf64x2_256_mask">,
2533           Intrinsic<[llvm_v4f64_ty],
2534           [llvm_v4f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty],
2535           [IntrNoMem]>;
2536
2537   def int_x86_avx512_mask_insertf64x2_512 :
2538         GCCBuiltin<"__builtin_ia32_insertf64x2_512_mask">,
2539           Intrinsic<[llvm_v8f64_ty],
2540           [llvm_v8f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty],
2541           [IntrNoMem]>;
2542
2543   def int_x86_avx512_mask_insertf64x4_512 :
2544         GCCBuiltin<"__builtin_ia32_insertf64x4_mask">,
2545           Intrinsic<[llvm_v8f64_ty],
2546           [llvm_v8f64_ty, llvm_v4f64_ty, llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty],
2547           [IntrNoMem]>;
2548
2549   def int_x86_avx512_mask_inserti32x4_256 :
2550         GCCBuiltin<"__builtin_ia32_inserti32x4_256_mask">,
2551           Intrinsic<[llvm_v8i32_ty],
2552           [llvm_v8i32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_v8i32_ty, llvm_i8_ty],
2553           [IntrNoMem]>;
2554
2555   def int_x86_avx512_mask_inserti32x4_512 :
2556         GCCBuiltin<"__builtin_ia32_inserti32x4_512_mask">,
2557           Intrinsic<[llvm_v16i32_ty],
2558           [llvm_v16i32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_v16i32_ty, llvm_i8_ty],
2559           [IntrNoMem]>;
2560
2561   def int_x86_avx512_mask_inserti32x8_512 :
2562         GCCBuiltin<"__builtin_ia32_inserti32x8_mask">,
2563           Intrinsic<[llvm_v16i32_ty],
2564           [llvm_v16i32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty],
2565           [IntrNoMem]>;
2566
2567   def int_x86_avx512_mask_inserti64x2_256 :
2568         GCCBuiltin<"__builtin_ia32_inserti64x2_256_mask">,
2569           Intrinsic<[llvm_v4i64_ty],
2570           [llvm_v4i64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_v4i64_ty, llvm_i8_ty],
2571           [IntrNoMem]>;
2572
2573   def int_x86_avx512_mask_inserti64x2_512 :
2574         GCCBuiltin<"__builtin_ia32_inserti64x2_512_mask">,
2575           Intrinsic<[llvm_v8i64_ty],
2576           [llvm_v8i64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty],
2577           [IntrNoMem]>;
2578
2579   def int_x86_avx512_mask_inserti64x4_512 :
2580         GCCBuiltin<"__builtin_ia32_inserti64x4_mask">,
2581           Intrinsic<[llvm_v8i64_ty],
2582           [llvm_v8i64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty],
2583           [IntrNoMem]>;                            
2584 }
2585
2586 // Conditional load ops
2587 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2588   def int_x86_avx2_maskload_d : GCCBuiltin<"__builtin_ia32_maskloadd">,
2589         Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty],
2590                   [IntrReadArgMem]>;
2591   def int_x86_avx2_maskload_q : GCCBuiltin<"__builtin_ia32_maskloadq">,
2592         Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty],
2593                   [IntrReadArgMem]>;
2594   def int_x86_avx2_maskload_d_256 : GCCBuiltin<"__builtin_ia32_maskloadd256">,
2595         Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty],
2596                   [IntrReadArgMem]>;
2597   def int_x86_avx2_maskload_q_256 : GCCBuiltin<"__builtin_ia32_maskloadq256">,
2598         Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty],
2599                   [IntrReadArgMem]>;
2600   def int_x86_avx512_mask_loadu_d_512 : GCCBuiltin<"__builtin_ia32_loaddqusi512_mask">,
2601         Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
2602                   [IntrReadArgMem]>;
2603   def int_x86_avx512_mask_loadu_q_512 : GCCBuiltin<"__builtin_ia32_loaddqudi512_mask">,
2604         Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
2605                   [IntrReadArgMem]>;
2606 }
2607
2608 // Conditional store ops
2609 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2610   def int_x86_avx2_maskstore_d : GCCBuiltin<"__builtin_ia32_maskstored">,
2611         Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty],
2612                   [IntrReadWriteArgMem]>;
2613   def int_x86_avx2_maskstore_q : GCCBuiltin<"__builtin_ia32_maskstoreq">,
2614         Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty],
2615                   [IntrReadWriteArgMem]>;
2616   def int_x86_avx2_maskstore_d_256 :
2617         GCCBuiltin<"__builtin_ia32_maskstored256">,
2618         Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty],
2619                   [IntrReadWriteArgMem]>;
2620   def int_x86_avx2_maskstore_q_256 :
2621         GCCBuiltin<"__builtin_ia32_maskstoreq256">,
2622         Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty],
2623                   [IntrReadWriteArgMem]>;
2624   def int_x86_avx512_mask_storeu_d_512 :
2625         GCCBuiltin<"__builtin_ia32_storedqusi512_mask">,
2626         Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
2627                   [IntrReadWriteArgMem]>;
2628   def int_x86_avx512_mask_storeu_q_512 :
2629         GCCBuiltin<"__builtin_ia32_storedqudi512_mask">,
2630         Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
2631                   [IntrReadWriteArgMem]>;
2632 }
2633
2634 // Variable bit shift ops
2635 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2636   def int_x86_avx2_psllv_d : GCCBuiltin<"__builtin_ia32_psllv4si">,
2637               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
2638                         [IntrNoMem]>;
2639   def int_x86_avx2_psllv_d_256 : GCCBuiltin<"__builtin_ia32_psllv8si">,
2640               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
2641                         [IntrNoMem]>;
2642   def int_x86_avx2_psllv_q : GCCBuiltin<"__builtin_ia32_psllv2di">,
2643               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
2644                         [IntrNoMem]>;
2645   def int_x86_avx2_psllv_q_256 : GCCBuiltin<"__builtin_ia32_psllv4di">,
2646               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
2647                         [IntrNoMem]>;
2648
2649   def int_x86_avx2_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv4si">,
2650               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
2651                         [IntrNoMem]>;
2652   def int_x86_avx2_psrlv_d_256 : GCCBuiltin<"__builtin_ia32_psrlv8si">,
2653               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
2654                         [IntrNoMem]>;
2655   def int_x86_avx2_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv2di">,
2656               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
2657                         [IntrNoMem]>;
2658   def int_x86_avx2_psrlv_q_256 : GCCBuiltin<"__builtin_ia32_psrlv4di">,
2659               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
2660                         [IntrNoMem]>;
2661
2662   def int_x86_avx2_psrav_d : GCCBuiltin<"__builtin_ia32_psrav4si">,
2663               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
2664                         [IntrNoMem]>;
2665   def int_x86_avx2_psrav_d_256 : GCCBuiltin<"__builtin_ia32_psrav8si">,
2666               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
2667                         [IntrNoMem]>;
2668
2669   def int_x86_avx512_mask_psllv_d : GCCBuiltin<"__builtin_ia32_psllv16si_mask">,
2670               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2671                          llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
2672                         [IntrNoMem]>;
2673   def int_x86_avx512_mask_psllv_q : GCCBuiltin<"__builtin_ia32_psllv8di_mask">,
2674               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2675                          llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], 
2676                         [IntrNoMem]>;
2677   def int_x86_avx512_mask_psrav_d : GCCBuiltin<"__builtin_ia32_psrav16si_mask">,
2678               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2679                          llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
2680                         [IntrNoMem]>;
2681   def int_x86_avx512_mask_psrav_q : GCCBuiltin<"__builtin_ia32_psrav8di_mask">,
2682               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2683                          llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
2684                         [IntrNoMem]>;
2685   def int_x86_avx512_mask_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv16si_mask">,
2686               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
2687                          llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
2688                         [IntrNoMem]>;
2689   def int_x86_avx512_mask_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv8di_mask">,
2690               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
2691                          llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], 
2692                         [IntrNoMem]>;
2693   def int_x86_avx512_psll_dq_512 : GCCBuiltin<"__builtin_ia32_pslldq512">,
2694               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_i32_ty], 
2695                         [IntrNoMem]>;
2696   def int_x86_avx512_psrl_dq_512 : GCCBuiltin<"__builtin_ia32_psrldq512">,
2697               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_i32_ty], 
2698                         [IntrNoMem]>;                        
2699 }
2700
2701 // Gather ops
2702 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2703   def int_x86_avx2_gather_d_pd : GCCBuiltin<"__builtin_ia32_gatherd_pd">,
2704       Intrinsic<[llvm_v2f64_ty],
2705         [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i8_ty],
2706         [IntrReadArgMem]>;
2707   def int_x86_avx2_gather_d_pd_256 : GCCBuiltin<"__builtin_ia32_gatherd_pd256">,
2708       Intrinsic<[llvm_v4f64_ty],
2709         [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i8_ty],
2710         [IntrReadArgMem]>;
2711   def int_x86_avx2_gather_q_pd : GCCBuiltin<"__builtin_ia32_gatherq_pd">,
2712       Intrinsic<[llvm_v2f64_ty],
2713         [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
2714         [IntrReadArgMem]>;
2715   def int_x86_avx2_gather_q_pd_256 : GCCBuiltin<"__builtin_ia32_gatherq_pd256">,
2716       Intrinsic<[llvm_v4f64_ty],
2717         [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
2718         [IntrReadArgMem]>;
2719   def int_x86_avx2_gather_d_ps : GCCBuiltin<"__builtin_ia32_gatherd_ps">,
2720       Intrinsic<[llvm_v4f32_ty],
2721         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
2722         [IntrReadArgMem]>;
2723   def int_x86_avx2_gather_d_ps_256 : GCCBuiltin<"__builtin_ia32_gatherd_ps256">,
2724       Intrinsic<[llvm_v8f32_ty],
2725         [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
2726         [IntrReadArgMem]>;
2727   def int_x86_avx2_gather_q_ps : GCCBuiltin<"__builtin_ia32_gatherq_ps">,
2728       Intrinsic<[llvm_v4f32_ty],
2729         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty],
2730         [IntrReadArgMem]>;
2731   def int_x86_avx2_gather_q_ps_256 : GCCBuiltin<"__builtin_ia32_gatherq_ps256">,
2732       Intrinsic<[llvm_v4f32_ty],
2733         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty],
2734         [IntrReadArgMem]>;
2735
2736   def int_x86_avx2_gather_d_q : GCCBuiltin<"__builtin_ia32_gatherd_q">,
2737       Intrinsic<[llvm_v2i64_ty],
2738         [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i8_ty],
2739         [IntrReadArgMem]>;
2740   def int_x86_avx2_gather_d_q_256 : GCCBuiltin<"__builtin_ia32_gatherd_q256">,
2741       Intrinsic<[llvm_v4i64_ty],
2742         [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i8_ty],
2743         [IntrReadArgMem]>;
2744   def int_x86_avx2_gather_q_q : GCCBuiltin<"__builtin_ia32_gatherq_q">,
2745       Intrinsic<[llvm_v2i64_ty],
2746         [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
2747         [IntrReadArgMem]>;
2748   def int_x86_avx2_gather_q_q_256 : GCCBuiltin<"__builtin_ia32_gatherq_q256">,
2749       Intrinsic<[llvm_v4i64_ty],
2750         [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
2751         [IntrReadArgMem]>;
2752   def int_x86_avx2_gather_d_d : GCCBuiltin<"__builtin_ia32_gatherd_d">,
2753       Intrinsic<[llvm_v4i32_ty],
2754         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
2755         [IntrReadArgMem]>;
2756   def int_x86_avx2_gather_d_d_256 : GCCBuiltin<"__builtin_ia32_gatherd_d256">,
2757       Intrinsic<[llvm_v8i32_ty],
2758         [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
2759         [IntrReadArgMem]>;
2760   def int_x86_avx2_gather_q_d : GCCBuiltin<"__builtin_ia32_gatherq_d">,
2761       Intrinsic<[llvm_v4i32_ty],
2762         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
2763         [IntrReadArgMem]>;
2764   def int_x86_avx2_gather_q_d_256 : GCCBuiltin<"__builtin_ia32_gatherq_d256">,
2765       Intrinsic<[llvm_v4i32_ty],
2766         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
2767         [IntrReadArgMem]>;
2768 }
2769
2770 // Misc.
2771 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2772   def int_x86_avx2_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb256">,
2773               Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty], [IntrNoMem]>;
2774   def int_x86_avx2_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb256">,
2775               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
2776                          llvm_v32i8_ty], [IntrNoMem]>;
2777   def int_x86_avx2_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw256">,
2778               Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
2779                          llvm_i8_ty], [IntrNoMem, Commutative]>;
2780   def int_x86_avx2_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa256">,
2781               Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
2782 }
2783
2784 //===----------------------------------------------------------------------===//
2785 // FMA3 and FMA4
2786
2787 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
2788   def int_x86_fma_vfmadd_ss : GCCBuiltin<"__builtin_ia32_vfmaddss">,
2789               Intrinsic<[llvm_v4f32_ty],
2790                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2791                         [IntrNoMem]>;
2792   def int_x86_fma_vfmadd_sd : GCCBuiltin<"__builtin_ia32_vfmaddsd">,
2793               Intrinsic<[llvm_v2f64_ty],
2794                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2795                         [IntrNoMem]>;
2796   def int_x86_fma_vfmadd_ps : GCCBuiltin<"__builtin_ia32_vfmaddps">,
2797               Intrinsic<[llvm_v4f32_ty],
2798                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2799                         [IntrNoMem]>;
2800   def int_x86_fma_vfmadd_pd : GCCBuiltin<"__builtin_ia32_vfmaddpd">,
2801               Intrinsic<[llvm_v2f64_ty],
2802                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2803                         [IntrNoMem]>;
2804   def int_x86_fma_vfmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfmaddps256">,
2805               Intrinsic<[llvm_v8f32_ty],
2806                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2807                         [IntrNoMem]>;
2808   def int_x86_fma_vfmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfmaddpd256">,
2809               Intrinsic<[llvm_v4f64_ty],
2810                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2811                         [IntrNoMem]>;
2812
2813   def int_x86_fma_vfmsub_ss : GCCBuiltin<"__builtin_ia32_vfmsubss">,
2814               Intrinsic<[llvm_v4f32_ty],
2815                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2816                         [IntrNoMem]>;
2817   def int_x86_fma_vfmsub_sd : GCCBuiltin<"__builtin_ia32_vfmsubsd">,
2818               Intrinsic<[llvm_v2f64_ty],
2819                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2820                         [IntrNoMem]>;
2821   def int_x86_fma_vfmsub_ps : GCCBuiltin<"__builtin_ia32_vfmsubps">,
2822               Intrinsic<[llvm_v4f32_ty],
2823                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2824                         [IntrNoMem]>;
2825   def int_x86_fma_vfmsub_pd : GCCBuiltin<"__builtin_ia32_vfmsubpd">,
2826               Intrinsic<[llvm_v2f64_ty],
2827                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2828                         [IntrNoMem]>;
2829   def int_x86_fma_vfmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfmsubps256">,
2830               Intrinsic<[llvm_v8f32_ty],
2831                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2832                         [IntrNoMem]>;
2833   def int_x86_fma_vfmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfmsubpd256">,
2834               Intrinsic<[llvm_v4f64_ty],
2835                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2836                         [IntrNoMem]>;
2837   def int_x86_fma_vfnmadd_ss : GCCBuiltin<"__builtin_ia32_vfnmaddss">,
2838               Intrinsic<[llvm_v4f32_ty],
2839                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2840                         [IntrNoMem]>;
2841   def int_x86_fma_vfnmadd_sd : GCCBuiltin<"__builtin_ia32_vfnmaddsd">,
2842               Intrinsic<[llvm_v2f64_ty],
2843                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2844                         [IntrNoMem]>;
2845   def int_x86_fma_vfnmadd_ps : GCCBuiltin<"__builtin_ia32_vfnmaddps">,
2846               Intrinsic<[llvm_v4f32_ty],
2847                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2848                         [IntrNoMem]>;
2849   def int_x86_fma_vfnmadd_pd : GCCBuiltin<"__builtin_ia32_vfnmaddpd">,
2850               Intrinsic<[llvm_v2f64_ty],
2851                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2852                         [IntrNoMem]>;
2853   def int_x86_fma_vfnmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmaddps256">,
2854               Intrinsic<[llvm_v8f32_ty],
2855                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2856                         [IntrNoMem]>;
2857   def int_x86_fma_vfnmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmaddpd256">,
2858               Intrinsic<[llvm_v4f64_ty],
2859                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2860                         [IntrNoMem]>;
2861   def int_x86_fma_vfnmsub_ss : GCCBuiltin<"__builtin_ia32_vfnmsubss">,
2862               Intrinsic<[llvm_v4f32_ty],
2863                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2864                         [IntrNoMem]>;
2865   def int_x86_fma_vfnmsub_sd : GCCBuiltin<"__builtin_ia32_vfnmsubsd">,
2866               Intrinsic<[llvm_v2f64_ty],
2867                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2868                         [IntrNoMem]>;
2869   def int_x86_fma_vfnmsub_ps : GCCBuiltin<"__builtin_ia32_vfnmsubps">,
2870               Intrinsic<[llvm_v4f32_ty],
2871                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2872                         [IntrNoMem]>;
2873   def int_x86_fma_vfnmsub_pd : GCCBuiltin<"__builtin_ia32_vfnmsubpd">,
2874               Intrinsic<[llvm_v2f64_ty],
2875                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2876                         [IntrNoMem]>;
2877   def int_x86_fma_vfnmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmsubps256">,
2878               Intrinsic<[llvm_v8f32_ty],
2879                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2880                         [IntrNoMem]>;
2881   def int_x86_fma_vfnmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmsubpd256">,
2882               Intrinsic<[llvm_v4f64_ty],
2883                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2884                         [IntrNoMem]>;
2885   def int_x86_fma_vfmaddsub_ps : GCCBuiltin<"__builtin_ia32_vfmaddsubps">,
2886               Intrinsic<[llvm_v4f32_ty],
2887                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2888                         [IntrNoMem]>;
2889   def int_x86_fma_vfmaddsub_pd : GCCBuiltin<"__builtin_ia32_vfmaddsubpd">,
2890               Intrinsic<[llvm_v2f64_ty],
2891                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2892                         [IntrNoMem]>;
2893   def int_x86_fma_vfmaddsub_ps_256 :
2894                GCCBuiltin<"__builtin_ia32_vfmaddsubps256">,
2895               Intrinsic<[llvm_v8f32_ty],
2896                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2897                         [IntrNoMem]>;
2898   def int_x86_fma_vfmaddsub_pd_256 :
2899               GCCBuiltin<"__builtin_ia32_vfmaddsubpd256">,
2900               Intrinsic<[llvm_v4f64_ty],
2901                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2902                         [IntrNoMem]>;
2903   def int_x86_fma_vfmsubadd_ps : GCCBuiltin<"__builtin_ia32_vfmsubaddps">,
2904               Intrinsic<[llvm_v4f32_ty],
2905                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
2906                         [IntrNoMem]>;
2907   def int_x86_fma_vfmsubadd_pd : GCCBuiltin<"__builtin_ia32_vfmsubaddpd">,
2908               Intrinsic<[llvm_v2f64_ty],
2909                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
2910                         [IntrNoMem]>;
2911   def int_x86_fma_vfmsubadd_ps_256 :
2912               GCCBuiltin<"__builtin_ia32_vfmsubaddps256">,
2913               Intrinsic<[llvm_v8f32_ty],
2914                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
2915                         [IntrNoMem]>;
2916   def int_x86_fma_vfmsubadd_pd_256 :
2917               GCCBuiltin<"__builtin_ia32_vfmsubaddpd256">,
2918               Intrinsic<[llvm_v4f64_ty],
2919                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
2920                         [IntrNoMem]>;
2921
2922   def int_x86_avx512_mask_vfmadd_pd_128 :
2923          GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask">,
2924           Intrinsic<[llvm_v2f64_ty],
2925           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
2926           [IntrNoMem]>;
2927
2928   def int_x86_avx512_mask3_vfmadd_pd_128 :
2929          GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask3">,
2930           Intrinsic<[llvm_v2f64_ty],
2931           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
2932           [IntrNoMem]>;
2933
2934   def int_x86_avx512_maskz_vfmadd_pd_128 :
2935          GCCBuiltin<"__builtin_ia32_vfmaddpd128_maskz">,
2936           Intrinsic<[llvm_v2f64_ty],
2937           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
2938           [IntrNoMem]>;
2939
2940   def int_x86_avx512_mask_vfmadd_pd_256 :
2941          GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask">,
2942           Intrinsic<[llvm_v4f64_ty],
2943           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
2944           [IntrNoMem]>;
2945
2946   def int_x86_avx512_mask3_vfmadd_pd_256 :
2947          GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask3">,
2948           Intrinsic<[llvm_v4f64_ty],
2949           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
2950           [IntrNoMem]>;
2951
2952   def int_x86_avx512_maskz_vfmadd_pd_256 :
2953          GCCBuiltin<"__builtin_ia32_vfmaddpd256_maskz">,
2954           Intrinsic<[llvm_v4f64_ty],
2955           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
2956           [IntrNoMem]>;
2957
2958   def int_x86_avx512_mask_vfmadd_pd_512 :
2959          GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask">,
2960           Intrinsic<[llvm_v8f64_ty],
2961           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
2962           llvm_i32_ty], [IntrNoMem]>;
2963
2964   def int_x86_avx512_mask3_vfmadd_pd_512 :
2965          GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask3">,
2966           Intrinsic<[llvm_v8f64_ty],
2967           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
2968           llvm_i32_ty], [IntrNoMem]>;
2969
2970   def int_x86_avx512_maskz_vfmadd_pd_512 :
2971          GCCBuiltin<"__builtin_ia32_vfmaddpd512_maskz">,
2972           Intrinsic<[llvm_v8f64_ty],
2973           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
2974           llvm_i32_ty], [IntrNoMem]>;
2975
2976   def int_x86_avx512_mask_vfmadd_ps_128 :
2977          GCCBuiltin<"__builtin_ia32_vfmaddps128_mask">,
2978           Intrinsic<[llvm_v4f32_ty],
2979           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
2980           [IntrNoMem]>;
2981
2982   def int_x86_avx512_mask3_vfmadd_ps_128 :
2983          GCCBuiltin<"__builtin_ia32_vfmaddps128_mask3">,
2984           Intrinsic<[llvm_v4f32_ty],
2985           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
2986           [IntrNoMem]>;
2987
2988   def int_x86_avx512_maskz_vfmadd_ps_128 :
2989          GCCBuiltin<"__builtin_ia32_vfmaddps128_maskz">,
2990           Intrinsic<[llvm_v4f32_ty],
2991           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
2992           [IntrNoMem]>;
2993
2994   def int_x86_avx512_mask_vfmadd_ps_256 :
2995          GCCBuiltin<"__builtin_ia32_vfmaddps256_mask">,
2996           Intrinsic<[llvm_v8f32_ty],
2997           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
2998           [IntrNoMem]>;
2999
3000   def int_x86_avx512_mask3_vfmadd_ps_256 :
3001          GCCBuiltin<"__builtin_ia32_vfmaddps256_mask3">,
3002           Intrinsic<[llvm_v8f32_ty],
3003           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3004           [IntrNoMem]>;
3005
3006   def int_x86_avx512_maskz_vfmadd_ps_256 :
3007          GCCBuiltin<"__builtin_ia32_vfmaddps256_maskz">,
3008           Intrinsic<[llvm_v8f32_ty],
3009           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3010           [IntrNoMem]>;
3011
3012   def int_x86_avx512_mask_vfmadd_ps_512 :
3013          GCCBuiltin<"__builtin_ia32_vfmaddps512_mask">,
3014           Intrinsic<[llvm_v16f32_ty],
3015           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3016           llvm_i32_ty], [IntrNoMem]>;
3017
3018   def int_x86_avx512_mask3_vfmadd_ps_512 :
3019          GCCBuiltin<"__builtin_ia32_vfmaddps512_mask3">,
3020           Intrinsic<[llvm_v16f32_ty],
3021           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3022           llvm_i32_ty], [IntrNoMem]>;
3023
3024   def int_x86_avx512_maskz_vfmadd_ps_512 :
3025          GCCBuiltin<"__builtin_ia32_vfmaddps512_maskz">,
3026           Intrinsic<[llvm_v16f32_ty],
3027           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3028           llvm_i32_ty], [IntrNoMem]>;
3029
3030   def int_x86_avx512_mask_vfmaddsub_pd_128 :
3031          GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask">,
3032           Intrinsic<[llvm_v2f64_ty],
3033           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3034           [IntrNoMem]>;
3035
3036   def int_x86_avx512_mask3_vfmaddsub_pd_128 :
3037          GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask3">,
3038           Intrinsic<[llvm_v2f64_ty],
3039           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3040           [IntrNoMem]>;
3041
3042   def int_x86_avx512_maskz_vfmaddsub_pd_128 :
3043          GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_maskz">,
3044           Intrinsic<[llvm_v2f64_ty],
3045           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3046           [IntrNoMem]>;
3047
3048   def int_x86_avx512_mask_vfmaddsub_pd_256 :
3049          GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask">,
3050           Intrinsic<[llvm_v4f64_ty],
3051           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3052           [IntrNoMem]>;
3053
3054   def int_x86_avx512_mask3_vfmaddsub_pd_256 :
3055          GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask3">,
3056           Intrinsic<[llvm_v4f64_ty],
3057           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3058           [IntrNoMem]>;
3059
3060   def int_x86_avx512_maskz_vfmaddsub_pd_256 :
3061          GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_maskz">,
3062           Intrinsic<[llvm_v4f64_ty],
3063           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3064           [IntrNoMem]>;
3065
3066   def int_x86_avx512_mask_vfmaddsub_pd_512 :
3067          GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask">,
3068           Intrinsic<[llvm_v8f64_ty],
3069           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3070           llvm_i32_ty], [IntrNoMem]>;
3071
3072   def int_x86_avx512_mask3_vfmaddsub_pd_512 :
3073          GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask3">,
3074           Intrinsic<[llvm_v8f64_ty],
3075           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3076           llvm_i32_ty], [IntrNoMem]>;
3077
3078   def int_x86_avx512_maskz_vfmaddsub_pd_512 :
3079          GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_maskz">,
3080           Intrinsic<[llvm_v8f64_ty],
3081           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3082           llvm_i32_ty], [IntrNoMem]>;
3083
3084   def int_x86_avx512_mask_vfmaddsub_ps_128 :
3085          GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask">,
3086           Intrinsic<[llvm_v4f32_ty],
3087           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3088           [IntrNoMem]>;
3089
3090   def int_x86_avx512_mask3_vfmaddsub_ps_128 :
3091          GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask3">,
3092           Intrinsic<[llvm_v4f32_ty],
3093           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3094           [IntrNoMem]>;
3095
3096   def int_x86_avx512_maskz_vfmaddsub_ps_128 :
3097          GCCBuiltin<"__builtin_ia32_vfmaddsubps128_maskz">,
3098           Intrinsic<[llvm_v4f32_ty],
3099           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3100           [IntrNoMem]>;
3101
3102   def int_x86_avx512_mask_vfmaddsub_ps_256 :
3103          GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask">,
3104           Intrinsic<[llvm_v8f32_ty],
3105           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3106           [IntrNoMem]>;
3107
3108   def int_x86_avx512_mask3_vfmaddsub_ps_256 :
3109          GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask3">,
3110           Intrinsic<[llvm_v8f32_ty],
3111           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3112           [IntrNoMem]>;
3113
3114   def int_x86_avx512_maskz_vfmaddsub_ps_256 :
3115          GCCBuiltin<"__builtin_ia32_vfmaddsubps256_maskz">,
3116           Intrinsic<[llvm_v8f32_ty],
3117           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3118           [IntrNoMem]>;
3119
3120   def int_x86_avx512_mask_vfmaddsub_ps_512 :
3121          GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask">,
3122           Intrinsic<[llvm_v16f32_ty],
3123           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3124           llvm_i32_ty], [IntrNoMem]>;
3125
3126   def int_x86_avx512_mask3_vfmaddsub_ps_512 :
3127          GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask3">,
3128           Intrinsic<[llvm_v16f32_ty],
3129           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3130           llvm_i32_ty], [IntrNoMem]>;
3131
3132   def int_x86_avx512_maskz_vfmaddsub_ps_512 :
3133          GCCBuiltin<"__builtin_ia32_vfmaddsubps512_maskz">,
3134           Intrinsic<[llvm_v16f32_ty],
3135           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3136           llvm_i32_ty], [IntrNoMem]>;
3137
3138   def int_x86_avx512_mask3_vfmsub_pd_128 :
3139          GCCBuiltin<"__builtin_ia32_vfmsubpd128_mask3">,
3140           Intrinsic<[llvm_v2f64_ty],
3141           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3142           [IntrNoMem]>;
3143
3144   def int_x86_avx512_mask3_vfmsub_pd_256 :
3145          GCCBuiltin<"__builtin_ia32_vfmsubpd256_mask3">,
3146           Intrinsic<[llvm_v4f64_ty],
3147           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3148           [IntrNoMem]>;
3149
3150   def int_x86_avx512_mask3_vfmsub_pd_512 :
3151          GCCBuiltin<"__builtin_ia32_vfmsubpd512_mask3">,
3152           Intrinsic<[llvm_v8f64_ty],
3153           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3154           llvm_i32_ty], [IntrNoMem]>;
3155
3156   def int_x86_avx512_mask3_vfmsub_ps_128 :
3157          GCCBuiltin<"__builtin_ia32_vfmsubps128_mask3">,
3158           Intrinsic<[llvm_v4f32_ty],
3159           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3160           [IntrNoMem]>;
3161
3162   def int_x86_avx512_mask3_vfmsub_ps_256 :
3163          GCCBuiltin<"__builtin_ia32_vfmsubps256_mask3">,
3164           Intrinsic<[llvm_v8f32_ty],
3165           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3166           [IntrNoMem]>;
3167
3168   def int_x86_avx512_mask3_vfmsub_ps_512 :
3169          GCCBuiltin<"__builtin_ia32_vfmsubps512_mask3">,
3170           Intrinsic<[llvm_v16f32_ty],
3171           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3172           llvm_i32_ty], [IntrNoMem]>;
3173
3174   def int_x86_avx512_mask3_vfmsubadd_pd_128 :
3175          GCCBuiltin<"__builtin_ia32_vfmsubaddpd128_mask3">,
3176           Intrinsic<[llvm_v2f64_ty],
3177           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3178           [IntrNoMem]>;
3179
3180   def int_x86_avx512_mask3_vfmsubadd_pd_256 :
3181          GCCBuiltin<"__builtin_ia32_vfmsubaddpd256_mask3">,
3182           Intrinsic<[llvm_v4f64_ty],
3183           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3184           [IntrNoMem]>;
3185
3186   def int_x86_avx512_mask3_vfmsubadd_pd_512 :
3187          GCCBuiltin<"__builtin_ia32_vfmsubaddpd512_mask3">,
3188           Intrinsic<[llvm_v8f64_ty],
3189           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3190           llvm_i32_ty], [IntrNoMem]>;
3191
3192   def int_x86_avx512_mask3_vfmsubadd_ps_128 :
3193          GCCBuiltin<"__builtin_ia32_vfmsubaddps128_mask3">,
3194           Intrinsic<[llvm_v4f32_ty],
3195           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3196           [IntrNoMem]>;
3197
3198   def int_x86_avx512_mask3_vfmsubadd_ps_256 :
3199          GCCBuiltin<"__builtin_ia32_vfmsubaddps256_mask3">,
3200           Intrinsic<[llvm_v8f32_ty],
3201           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3202           [IntrNoMem]>;
3203
3204   def int_x86_avx512_mask3_vfmsubadd_ps_512 :
3205          GCCBuiltin<"__builtin_ia32_vfmsubaddps512_mask3">,
3206           Intrinsic<[llvm_v16f32_ty],
3207           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3208           llvm_i32_ty], [IntrNoMem]>;
3209
3210   def int_x86_avx512_mask_vfnmadd_pd_128 :
3211          GCCBuiltin<"__builtin_ia32_vfnmaddpd128_mask">,
3212           Intrinsic<[llvm_v2f64_ty],
3213           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3214           [IntrNoMem]>;
3215
3216   def int_x86_avx512_mask_vfnmadd_pd_256 :
3217          GCCBuiltin<"__builtin_ia32_vfnmaddpd256_mask">,
3218           Intrinsic<[llvm_v4f64_ty],
3219           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3220           [IntrNoMem]>;
3221
3222   def int_x86_avx512_mask_vfnmadd_pd_512 :
3223          GCCBuiltin<"__builtin_ia32_vfnmaddpd512_mask">,
3224           Intrinsic<[llvm_v8f64_ty],
3225           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3226           llvm_i32_ty], [IntrNoMem]>;
3227
3228   def int_x86_avx512_mask_vfnmadd_ps_128 :
3229          GCCBuiltin<"__builtin_ia32_vfnmaddps128_mask">,
3230           Intrinsic<[llvm_v4f32_ty],
3231           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3232           [IntrNoMem]>;
3233
3234   def int_x86_avx512_mask_vfnmadd_ps_256 :
3235          GCCBuiltin<"__builtin_ia32_vfnmaddps256_mask">,
3236           Intrinsic<[llvm_v8f32_ty],
3237           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3238           [IntrNoMem]>;
3239
3240   def int_x86_avx512_mask_vfnmadd_ps_512 :
3241          GCCBuiltin<"__builtin_ia32_vfnmaddps512_mask">,
3242           Intrinsic<[llvm_v16f32_ty],
3243           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3244           llvm_i32_ty], [IntrNoMem]>;
3245
3246   def int_x86_avx512_mask_vfnmsub_pd_128 :
3247          GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask">,
3248           Intrinsic<[llvm_v2f64_ty],
3249           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3250           [IntrNoMem]>;
3251
3252   def int_x86_avx512_mask3_vfnmsub_pd_128 :
3253          GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask3">,
3254           Intrinsic<[llvm_v2f64_ty],
3255           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
3256           [IntrNoMem]>;
3257
3258   def int_x86_avx512_mask_vfnmsub_pd_256 :
3259          GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask">,
3260           Intrinsic<[llvm_v4f64_ty],
3261           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3262           [IntrNoMem]>;
3263
3264   def int_x86_avx512_mask3_vfnmsub_pd_256 :
3265          GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask3">,
3266           Intrinsic<[llvm_v4f64_ty],
3267           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
3268           [IntrNoMem]>;
3269
3270   def int_x86_avx512_mask_vfnmsub_pd_512 :
3271          GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask">,
3272           Intrinsic<[llvm_v8f64_ty],
3273           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3274           llvm_i32_ty], [IntrNoMem]>;
3275
3276   def int_x86_avx512_mask3_vfnmsub_pd_512 :
3277          GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask3">,
3278           Intrinsic<[llvm_v8f64_ty],
3279           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
3280           llvm_i32_ty], [IntrNoMem]>;
3281
3282   def int_x86_avx512_mask_vfnmsub_ps_128 :
3283          GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask">,
3284           Intrinsic<[llvm_v4f32_ty],
3285           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3286           [IntrNoMem]>;
3287
3288   def int_x86_avx512_mask3_vfnmsub_ps_128 :
3289          GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask3">,
3290           Intrinsic<[llvm_v4f32_ty],
3291           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
3292           [IntrNoMem]>;
3293
3294   def int_x86_avx512_mask_vfnmsub_ps_256 :
3295          GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask">,
3296           Intrinsic<[llvm_v8f32_ty],
3297           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3298           [IntrNoMem]>;
3299
3300   def int_x86_avx512_mask3_vfnmsub_ps_256 :
3301          GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask3">,
3302           Intrinsic<[llvm_v8f32_ty],
3303           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
3304           [IntrNoMem]>;
3305
3306   def int_x86_avx512_mask_vfnmsub_ps_512 :
3307          GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask">,
3308           Intrinsic<[llvm_v16f32_ty],
3309           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3310           llvm_i32_ty], [IntrNoMem]>;
3311
3312   def int_x86_avx512_mask3_vfnmsub_ps_512 :
3313          GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask3">,
3314           Intrinsic<[llvm_v16f32_ty],
3315           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
3316           llvm_i32_ty], [IntrNoMem]>;
3317
3318 }
3319
3320 //===----------------------------------------------------------------------===//
3321 // XOP
3322
3323   def int_x86_xop_vpermil2pd : GCCBuiltin<"__builtin_ia32_vpermil2pd">,
3324               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
3325                                           llvm_v2f64_ty, llvm_i8_ty],
3326                         [IntrNoMem]>;
3327
3328   def int_x86_xop_vpermil2pd_256 :
3329               GCCBuiltin<"__builtin_ia32_vpermil2pd256">,
3330               Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
3331                                           llvm_v4f64_ty, llvm_i8_ty],
3332                         [IntrNoMem]>;
3333
3334   def int_x86_xop_vpermil2ps : GCCBuiltin<"__builtin_ia32_vpermil2ps">,
3335               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
3336                                           llvm_v4f32_ty, llvm_i8_ty],
3337                         [IntrNoMem]>;
3338   def int_x86_xop_vpermil2ps_256 :
3339               GCCBuiltin<"__builtin_ia32_vpermil2ps256">,
3340               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
3341                                           llvm_v8f32_ty, llvm_i8_ty],
3342                         [IntrNoMem]>;
3343
3344   def int_x86_xop_vfrcz_pd : GCCBuiltin<"__builtin_ia32_vfrczpd">,
3345               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
3346   def int_x86_xop_vfrcz_ps : GCCBuiltin<"__builtin_ia32_vfrczps">,
3347               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
3348   def int_x86_xop_vfrcz_sd : GCCBuiltin<"__builtin_ia32_vfrczsd">,
3349               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
3350   def int_x86_xop_vfrcz_ss : GCCBuiltin<"__builtin_ia32_vfrczss">,
3351               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
3352   def int_x86_xop_vfrcz_pd_256 : GCCBuiltin<"__builtin_ia32_vfrczpd256">,
3353               Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
3354   def int_x86_xop_vfrcz_ps_256 : GCCBuiltin<"__builtin_ia32_vfrczps256">,
3355               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
3356
3357   def int_x86_xop_vpcmov :
3358               GCCBuiltin<"__builtin_ia32_vpcmov">,
3359               Intrinsic<[llvm_v2i64_ty],
3360                         [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
3361                         [IntrNoMem]>;
3362   def int_x86_xop_vpcmov_256 :
3363               GCCBuiltin<"__builtin_ia32_vpcmov_256">,
3364               Intrinsic<[llvm_v4i64_ty],
3365                         [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty],
3366                         [IntrNoMem]>;
3367
3368   def int_x86_xop_vpcomb : GCCBuiltin<"__builtin_ia32_vpcomb">,
3369               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
3370                          llvm_i8_ty], [IntrNoMem]>;
3371   def int_x86_xop_vpcomw : GCCBuiltin<"__builtin_ia32_vpcomw">,
3372               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
3373                          llvm_i8_ty], [IntrNoMem]>;
3374   def int_x86_xop_vpcomd : GCCBuiltin<"__builtin_ia32_vpcomd">,
3375               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
3376                          llvm_i8_ty], [IntrNoMem]>;
3377   def int_x86_xop_vpcomq : GCCBuiltin<"__builtin_ia32_vpcomq">,
3378               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
3379                          llvm_i8_ty], [IntrNoMem]>;
3380   def int_x86_xop_vpcomub : GCCBuiltin<"__builtin_ia32_vpcomub">,
3381               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
3382                          llvm_i8_ty], [IntrNoMem]>;
3383   def int_x86_xop_vpcomuw : GCCBuiltin<"__builtin_ia32_vpcomuw">,
3384               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
3385                          llvm_i8_ty], [IntrNoMem]>;
3386   def int_x86_xop_vpcomud : GCCBuiltin<"__builtin_ia32_vpcomud">,
3387               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
3388                          llvm_i8_ty], [IntrNoMem]>;
3389   def int_x86_xop_vpcomuq : GCCBuiltin<"__builtin_ia32_vpcomuq">,
3390               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
3391                          llvm_i8_ty], [IntrNoMem]>;
3392
3393   def int_x86_xop_vphaddbd :
3394               GCCBuiltin<"__builtin_ia32_vphaddbd">,
3395               Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3396   def int_x86_xop_vphaddbq :
3397               GCCBuiltin<"__builtin_ia32_vphaddbq">,
3398               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3399   def int_x86_xop_vphaddbw :
3400               GCCBuiltin<"__builtin_ia32_vphaddbw">,
3401               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3402   def int_x86_xop_vphadddq :
3403               GCCBuiltin<"__builtin_ia32_vphadddq">,
3404               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
3405   def int_x86_xop_vphaddubd :
3406               GCCBuiltin<"__builtin_ia32_vphaddubd">,
3407               Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3408   def int_x86_xop_vphaddubq :
3409               GCCBuiltin<"__builtin_ia32_vphaddubq">,
3410               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3411   def int_x86_xop_vphaddubw :
3412               GCCBuiltin<"__builtin_ia32_vphaddubw">,
3413               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3414   def int_x86_xop_vphaddudq :
3415               GCCBuiltin<"__builtin_ia32_vphaddudq">,
3416               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
3417   def int_x86_xop_vphadduwd :
3418               GCCBuiltin<"__builtin_ia32_vphadduwd">,
3419               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3420   def int_x86_xop_vphadduwq :
3421               GCCBuiltin<"__builtin_ia32_vphadduwq">,
3422               Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3423   def int_x86_xop_vphaddwd :
3424               GCCBuiltin<"__builtin_ia32_vphaddwd">,
3425               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3426   def int_x86_xop_vphaddwq :
3427               GCCBuiltin<"__builtin_ia32_vphaddwq">,
3428               Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3429   def int_x86_xop_vphsubbw :
3430               GCCBuiltin<"__builtin_ia32_vphsubbw">,
3431               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
3432   def int_x86_xop_vphsubdq :
3433               GCCBuiltin<"__builtin_ia32_vphsubdq">,
3434               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
3435   def int_x86_xop_vphsubwd :
3436               GCCBuiltin<"__builtin_ia32_vphsubwd">,
3437               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3438   def int_x86_xop_vpmacsdd :
3439               GCCBuiltin<"__builtin_ia32_vpmacsdd">,
3440               Intrinsic<[llvm_v4i32_ty],
3441                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
3442                         [IntrNoMem]>;
3443   def int_x86_xop_vpmacsdqh :
3444               GCCBuiltin<"__builtin_ia32_vpmacsdqh">,
3445               Intrinsic<[llvm_v2i64_ty],
3446                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
3447                         [IntrNoMem]>;
3448   def int_x86_xop_vpmacsdql :
3449               GCCBuiltin<"__builtin_ia32_vpmacsdql">,
3450               Intrinsic<[llvm_v2i64_ty],
3451                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
3452                         [IntrNoMem]>;
3453   def int_x86_xop_vpmacssdd :
3454               GCCBuiltin<"__builtin_ia32_vpmacssdd">,
3455               Intrinsic<[llvm_v4i32_ty],
3456                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
3457                         [IntrNoMem]>;
3458   def int_x86_xop_vpmacssdqh :
3459               GCCBuiltin<"__builtin_ia32_vpmacssdqh">,
3460               Intrinsic<[llvm_v2i64_ty],
3461                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
3462                         [IntrNoMem]>;
3463   def int_x86_xop_vpmacssdql :
3464               GCCBuiltin<"__builtin_ia32_vpmacssdql">,
3465               Intrinsic<[llvm_v2i64_ty],
3466                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
3467                         [IntrNoMem]>;
3468   def int_x86_xop_vpmacsswd :
3469               GCCBuiltin<"__builtin_ia32_vpmacsswd">,
3470               Intrinsic<[llvm_v4i32_ty],
3471                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
3472                         [IntrNoMem]>;
3473   def int_x86_xop_vpmacssww :
3474               GCCBuiltin<"__builtin_ia32_vpmacssww">,
3475               Intrinsic<[llvm_v8i16_ty],
3476                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
3477                         [IntrNoMem]>;
3478   def int_x86_xop_vpmacswd :
3479               GCCBuiltin<"__builtin_ia32_vpmacswd">,
3480               Intrinsic<[llvm_v4i32_ty],
3481                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
3482                         [IntrNoMem]>;
3483   def int_x86_xop_vpmacsww :
3484               GCCBuiltin<"__builtin_ia32_vpmacsww">,
3485               Intrinsic<[llvm_v8i16_ty],
3486                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
3487                         [IntrNoMem]>;
3488   def int_x86_xop_vpmadcsswd :
3489               GCCBuiltin<"__builtin_ia32_vpmadcsswd">,
3490               Intrinsic<[llvm_v4i32_ty],
3491                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
3492                         [IntrNoMem]>;
3493   def int_x86_xop_vpmadcswd :
3494               GCCBuiltin<"__builtin_ia32_vpmadcswd">,
3495               Intrinsic<[llvm_v4i32_ty],
3496                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
3497                         [IntrNoMem]>;
3498   def int_x86_xop_vpperm :
3499               GCCBuiltin<"__builtin_ia32_vpperm">,
3500               Intrinsic<[llvm_v16i8_ty],
3501                         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
3502                         [IntrNoMem]>;
3503
3504   def int_x86_xop_vprotb : GCCBuiltin<"__builtin_ia32_vprotb">,
3505               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
3506                         [IntrNoMem]>;
3507   def int_x86_xop_vprotd : GCCBuiltin<"__builtin_ia32_vprotd">,
3508               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
3509                         [IntrNoMem]>;
3510   def int_x86_xop_vprotq : GCCBuiltin<"__builtin_ia32_vprotq">,
3511               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
3512                         [IntrNoMem]>;
3513   def int_x86_xop_vprotw : GCCBuiltin<"__builtin_ia32_vprotw">,
3514               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
3515                         [IntrNoMem]>;
3516   def int_x86_xop_vprotbi : GCCBuiltin<"__builtin_ia32_vprotbi">,
3517               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i8_ty],
3518                         [IntrNoMem]>;
3519   def int_x86_xop_vprotdi : GCCBuiltin<"__builtin_ia32_vprotdi">,
3520               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
3521                         [IntrNoMem]>;
3522   def int_x86_xop_vprotqi : GCCBuiltin<"__builtin_ia32_vprotqi">,
3523               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
3524                         [IntrNoMem]>;
3525   def int_x86_xop_vprotwi : GCCBuiltin<"__builtin_ia32_vprotwi">,
3526               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
3527                         [IntrNoMem]>;
3528
3529   def int_x86_xop_vpshab :
3530               GCCBuiltin<"__builtin_ia32_vpshab">,
3531               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
3532                         [IntrNoMem]>;
3533   def int_x86_xop_vpshad :
3534               GCCBuiltin<"__builtin_ia32_vpshad">,
3535               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
3536                         [IntrNoMem]>;
3537   def int_x86_xop_vpshaq :
3538               GCCBuiltin<"__builtin_ia32_vpshaq">,
3539               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
3540                         [IntrNoMem]>;
3541   def int_x86_xop_vpshaw :
3542               GCCBuiltin<"__builtin_ia32_vpshaw">,
3543               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
3544                         [IntrNoMem]>;
3545   def int_x86_xop_vpshlb :
3546               GCCBuiltin<"__builtin_ia32_vpshlb">,
3547               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
3548                         [IntrNoMem]>;
3549   def int_x86_xop_vpshld :
3550               GCCBuiltin<"__builtin_ia32_vpshld">,
3551               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
3552                         [IntrNoMem]>;
3553   def int_x86_xop_vpshlq :
3554               GCCBuiltin<"__builtin_ia32_vpshlq">,
3555               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
3556                         [IntrNoMem]>;
3557   def int_x86_xop_vpshlw :
3558               GCCBuiltin<"__builtin_ia32_vpshlw">,
3559               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
3560                         [IntrNoMem]>;
3561
3562 //===----------------------------------------------------------------------===//
3563 // MMX
3564
3565 // Empty MMX state op.
3566 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3567   def int_x86_mmx_emms  : GCCBuiltin<"__builtin_ia32_emms">,
3568               Intrinsic<[], [], []>;
3569   def int_x86_mmx_femms : GCCBuiltin<"__builtin_ia32_femms">,
3570               Intrinsic<[], [], []>;
3571 }
3572
3573 // Integer arithmetic ops.
3574 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3575   // Addition
3576   def int_x86_mmx_padd_b : GCCBuiltin<"__builtin_ia32_paddb">,
3577               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3578                         [IntrNoMem]>;
3579   def int_x86_mmx_padd_w : GCCBuiltin<"__builtin_ia32_paddw">,
3580               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3581                         [IntrNoMem]>;
3582   def int_x86_mmx_padd_d : GCCBuiltin<"__builtin_ia32_paddd">,
3583               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3584                         [IntrNoMem]>;
3585   def int_x86_mmx_padd_q : GCCBuiltin<"__builtin_ia32_paddq">,
3586               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3587                         [IntrNoMem]>;
3588
3589   def int_x86_mmx_padds_b : GCCBuiltin<"__builtin_ia32_paddsb">,
3590               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3591                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3592   def int_x86_mmx_padds_w : GCCBuiltin<"__builtin_ia32_paddsw">,
3593               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3594                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3595
3596   def int_x86_mmx_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb">,
3597               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3598                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3599   def int_x86_mmx_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw">,
3600               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3601                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3602
3603   // Subtraction
3604   def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">,
3605               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3606                         [IntrNoMem]>;
3607   def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">,
3608               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3609                         [IntrNoMem]>;
3610   def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">,
3611               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3612                         [IntrNoMem]>;
3613   def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">,
3614               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3615                         [IntrNoMem]>;
3616
3617   def int_x86_mmx_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb">,
3618               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3619                          llvm_x86mmx_ty], [IntrNoMem]>;
3620   def int_x86_mmx_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw">,
3621               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3622                          llvm_x86mmx_ty], [IntrNoMem]>;
3623
3624   def int_x86_mmx_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb">,
3625               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3626                          llvm_x86mmx_ty], [IntrNoMem]>;
3627   def int_x86_mmx_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw">,
3628               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3629                          llvm_x86mmx_ty], [IntrNoMem]>;
3630
3631   // Multiplication
3632   def int_x86_mmx_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw">,
3633               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3634                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3635   def int_x86_mmx_pmull_w : GCCBuiltin<"__builtin_ia32_pmullw">,
3636               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3637                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3638   def int_x86_mmx_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw">,
3639               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3640                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3641   def int_x86_mmx_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq">,
3642               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3643                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3644   def int_x86_mmx_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd">,
3645               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3646                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3647
3648   // Bitwise operations
3649   def int_x86_mmx_pand : GCCBuiltin<"__builtin_ia32_pand">,
3650               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3651                         [IntrNoMem]>;
3652   def int_x86_mmx_pandn : GCCBuiltin<"__builtin_ia32_pandn">,
3653               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3654                         [IntrNoMem]>;
3655   def int_x86_mmx_por : GCCBuiltin<"__builtin_ia32_por">,
3656               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3657                         [IntrNoMem]>;
3658   def int_x86_mmx_pxor : GCCBuiltin<"__builtin_ia32_pxor">,
3659               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3660                         [IntrNoMem]>;
3661
3662   // Averages
3663   def int_x86_mmx_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb">,
3664               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3665                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3666   def int_x86_mmx_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw">,
3667               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3668                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3669
3670   // Maximum
3671   def int_x86_mmx_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub">,
3672               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3673                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3674   def int_x86_mmx_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw">,
3675               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3676                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3677
3678   // Minimum
3679   def int_x86_mmx_pminu_b : GCCBuiltin<"__builtin_ia32_pminub">,
3680               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3681                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3682   def int_x86_mmx_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw">,
3683               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3684                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3685
3686   // Packed sum of absolute differences
3687   def int_x86_mmx_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw">,
3688               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3689                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3690 }
3691
3692 // Integer shift ops.
3693 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3694   // Shift left logical
3695   def int_x86_mmx_psll_w : GCCBuiltin<"__builtin_ia32_psllw">,
3696               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3697                          llvm_x86mmx_ty], [IntrNoMem]>;
3698   def int_x86_mmx_psll_d : GCCBuiltin<"__builtin_ia32_pslld">,
3699               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3700                          llvm_x86mmx_ty], [IntrNoMem]>;
3701   def int_x86_mmx_psll_q : GCCBuiltin<"__builtin_ia32_psllq">,
3702               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3703                          llvm_x86mmx_ty], [IntrNoMem]>;
3704
3705   def int_x86_mmx_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw">,
3706               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3707                          llvm_x86mmx_ty], [IntrNoMem]>;
3708   def int_x86_mmx_psrl_d : GCCBuiltin<"__builtin_ia32_psrld">,
3709               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3710                          llvm_x86mmx_ty], [IntrNoMem]>;
3711   def int_x86_mmx_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq">,
3712               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3713                          llvm_x86mmx_ty], [IntrNoMem]>;
3714
3715   def int_x86_mmx_psra_w : GCCBuiltin<"__builtin_ia32_psraw">,
3716               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3717                          llvm_x86mmx_ty], [IntrNoMem]>;
3718   def int_x86_mmx_psra_d : GCCBuiltin<"__builtin_ia32_psrad">,
3719               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3720                          llvm_x86mmx_ty], [IntrNoMem]>;
3721
3722   def int_x86_mmx_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi">,
3723               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3724                          llvm_i32_ty], [IntrNoMem]>;
3725   def int_x86_mmx_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi">,
3726               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3727                          llvm_i32_ty], [IntrNoMem]>;
3728   def int_x86_mmx_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi">,
3729               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3730                          llvm_i32_ty], [IntrNoMem]>;
3731
3732   def int_x86_mmx_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi">,
3733               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3734                          llvm_i32_ty], [IntrNoMem]>;
3735   def int_x86_mmx_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi">,
3736               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3737                          llvm_i32_ty], [IntrNoMem]>;
3738   def int_x86_mmx_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi">,
3739               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3740                          llvm_i32_ty], [IntrNoMem]>;
3741
3742   def int_x86_mmx_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi">,
3743               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3744                          llvm_i32_ty], [IntrNoMem]>;
3745   def int_x86_mmx_psrai_d : GCCBuiltin<"__builtin_ia32_psradi">,
3746               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3747                          llvm_i32_ty], [IntrNoMem]>;
3748 }
3749
3750 // Pack ops.
3751 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3752   def int_x86_mmx_packsswb : GCCBuiltin<"__builtin_ia32_packsswb">,
3753               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3754                          llvm_x86mmx_ty], [IntrNoMem]>;
3755   def int_x86_mmx_packssdw : GCCBuiltin<"__builtin_ia32_packssdw">,
3756               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3757                          llvm_x86mmx_ty], [IntrNoMem]>;
3758   def int_x86_mmx_packuswb : GCCBuiltin<"__builtin_ia32_packuswb">,
3759               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3760                          llvm_x86mmx_ty], [IntrNoMem]>;
3761 }
3762
3763 // Unpacking ops.
3764 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3765   def int_x86_mmx_punpckhbw : GCCBuiltin<"__builtin_ia32_punpckhbw">,
3766               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3767                         [IntrNoMem]>;
3768   def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">,
3769               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3770                         [IntrNoMem]>;
3771   def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">,
3772               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3773                         [IntrNoMem]>;
3774   def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">,
3775               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3776                         [IntrNoMem]>;
3777   def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">,
3778               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3779                         [IntrNoMem]>;
3780   def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">,
3781               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
3782                         [IntrNoMem]>;
3783 }
3784
3785 // Integer comparison ops
3786 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3787   def int_x86_mmx_pcmpeq_b : GCCBuiltin<"__builtin_ia32_pcmpeqb">,
3788               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3789                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3790   def int_x86_mmx_pcmpeq_w : GCCBuiltin<"__builtin_ia32_pcmpeqw">,
3791               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3792                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3793   def int_x86_mmx_pcmpeq_d : GCCBuiltin<"__builtin_ia32_pcmpeqd">,
3794               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3795                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
3796
3797   def int_x86_mmx_pcmpgt_b : GCCBuiltin<"__builtin_ia32_pcmpgtb">,
3798               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3799                          llvm_x86mmx_ty], [IntrNoMem]>;
3800   def int_x86_mmx_pcmpgt_w : GCCBuiltin<"__builtin_ia32_pcmpgtw">,
3801               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3802                          llvm_x86mmx_ty], [IntrNoMem]>;
3803   def int_x86_mmx_pcmpgt_d : GCCBuiltin<"__builtin_ia32_pcmpgtd">,
3804               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3805                          llvm_x86mmx_ty], [IntrNoMem]>;
3806 }
3807
3808 // Misc.
3809 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3810   def int_x86_mmx_maskmovq : GCCBuiltin<"__builtin_ia32_maskmovq">,
3811               Intrinsic<[], [llvm_x86mmx_ty, llvm_x86mmx_ty, llvm_ptr_ty], []>;
3812
3813   def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">,
3814               Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
3815
3816   def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">,
3817               Intrinsic<[], [llvm_ptrx86mmx_ty, llvm_x86mmx_ty], []>;
3818
3819   def int_x86_mmx_palignr_b : GCCBuiltin<"__builtin_ia32_palignr">,
3820               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3821                         llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem]>;
3822
3823   def int_x86_mmx_pextr_w : GCCBuiltin<"__builtin_ia32_vec_ext_v4hi">,
3824               Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty],
3825                         [IntrNoMem]>;
3826
3827   def int_x86_mmx_pinsr_w : GCCBuiltin<"__builtin_ia32_vec_set_v4hi">,
3828               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
3829                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3830 }
3831
3832 //===----------------------------------------------------------------------===//
3833 // BMI
3834
3835 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3836   def int_x86_bmi_bextr_32 : GCCBuiltin<"__builtin_ia32_bextr_u32">,
3837               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3838   def int_x86_bmi_bextr_64 : GCCBuiltin<"__builtin_ia32_bextr_u64">,
3839               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3840   def int_x86_bmi_bzhi_32 : GCCBuiltin<"__builtin_ia32_bzhi_si">,
3841               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3842   def int_x86_bmi_bzhi_64 : GCCBuiltin<"__builtin_ia32_bzhi_di">,
3843               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3844   def int_x86_bmi_pdep_32 : GCCBuiltin<"__builtin_ia32_pdep_si">,
3845               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3846   def int_x86_bmi_pdep_64 : GCCBuiltin<"__builtin_ia32_pdep_di">,
3847               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3848   def int_x86_bmi_pext_32 : GCCBuiltin<"__builtin_ia32_pext_si">,
3849               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3850   def int_x86_bmi_pext_64 : GCCBuiltin<"__builtin_ia32_pext_di">,
3851               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3852 }
3853
3854 //===----------------------------------------------------------------------===//
3855 // FS/GS Base
3856
3857 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3858   def int_x86_rdfsbase_32 : GCCBuiltin<"__builtin_ia32_rdfsbase32">,
3859               Intrinsic<[llvm_i32_ty], []>;
3860   def int_x86_rdgsbase_32 : GCCBuiltin<"__builtin_ia32_rdgsbase32">,
3861               Intrinsic<[llvm_i32_ty], []>;
3862   def int_x86_rdfsbase_64 : GCCBuiltin<"__builtin_ia32_rdfsbase64">,
3863               Intrinsic<[llvm_i64_ty], []>;
3864   def int_x86_rdgsbase_64 : GCCBuiltin<"__builtin_ia32_rdgsbase64">,
3865               Intrinsic<[llvm_i64_ty], []>;
3866   def int_x86_wrfsbase_32 : GCCBuiltin<"__builtin_ia32_wrfsbase32">,
3867               Intrinsic<[], [llvm_i32_ty]>;
3868   def int_x86_wrgsbase_32 : GCCBuiltin<"__builtin_ia32_wrgsbase32">,
3869               Intrinsic<[], [llvm_i32_ty]>;
3870   def int_x86_wrfsbase_64 : GCCBuiltin<"__builtin_ia32_wrfsbase64">,
3871               Intrinsic<[], [llvm_i64_ty]>;
3872   def int_x86_wrgsbase_64 : GCCBuiltin<"__builtin_ia32_wrgsbase64">,
3873               Intrinsic<[], [llvm_i64_ty]>;
3874 }
3875
3876 //===----------------------------------------------------------------------===//
3877 // FXSR
3878 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3879   def int_x86_fxrstor : GCCBuiltin<"__builtin_ia32_fxrstor">,
3880               Intrinsic<[], [llvm_ptr_ty], []>;
3881   def int_x86_fxrstor64 : GCCBuiltin<"__builtin_ia32_fxrstor64">,
3882               Intrinsic<[], [llvm_ptr_ty], []>;
3883   def int_x86_fxsave : GCCBuiltin<"__builtin_ia32_fxsave">,
3884               Intrinsic<[], [llvm_ptr_ty], []>;
3885   def int_x86_fxsave64 : GCCBuiltin<"__builtin_ia32_fxsave64">,
3886               Intrinsic<[], [llvm_ptr_ty], []>;
3887 }
3888
3889 //===----------------------------------------------------------------------===//
3890 // XSAVE
3891 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3892   def int_x86_xsave :
3893               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3894   def int_x86_xsave64 :
3895               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3896   def int_x86_xrstor :
3897               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3898   def int_x86_xrstor64 :
3899               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3900   def int_x86_xsaveopt :
3901               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3902   def int_x86_xsaveopt64 :
3903               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3904   def int_x86_xrstors :
3905               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3906   def int_x86_xrstors64 :
3907               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3908   def int_x86_xsavec :
3909               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3910   def int_x86_xsavec64 :
3911               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3912   def int_x86_xsaves :
3913               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3914   def int_x86_xsaves64 :
3915               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
3916 }
3917
3918 //===----------------------------------------------------------------------===//
3919 // Support protection key
3920 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3921   def int_x86_rdpkru : GCCBuiltin <"__builtin_ia32_rdpkru">,
3922               Intrinsic<[llvm_i32_ty], [], []>;
3923   def int_x86_wrpkru : GCCBuiltin<"__builtin_ia32_wrpkru">,
3924               Intrinsic<[], [llvm_i32_ty], []>;
3925 }
3926 //===----------------------------------------------------------------------===//
3927 // Half float conversion
3928
3929 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3930   def int_x86_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps">,
3931               Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3932   def int_x86_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256">,
3933               Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
3934   def int_x86_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph">,
3935               Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty],
3936                         [IntrNoMem]>;
3937   def int_x86_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256">,
3938               Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty],
3939                         [IntrNoMem]>;
3940   def int_x86_avx512_mask_vcvtph2ps_512 : GCCBuiltin<"__builtin_ia32_vcvtph2ps512_mask">,
3941               Intrinsic<[llvm_v16f32_ty], [llvm_v16i16_ty, llvm_v16f32_ty,
3942                                            llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
3943   def int_x86_avx512_mask_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256_mask">,
3944               Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty, llvm_v8f32_ty,
3945                                            llvm_i8_ty], [IntrNoMem]>;
3946   def int_x86_avx512_mask_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps_mask">,
3947               Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty, llvm_v4f32_ty,
3948                                            llvm_i8_ty], [IntrNoMem]>;
3949   def int_x86_avx512_mask_vcvtps2ph_512 : GCCBuiltin<"__builtin_ia32_vcvtps2ph512_mask">,
3950               Intrinsic<[llvm_v16i16_ty], [llvm_v16f32_ty, llvm_i32_ty,
3951                                            llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
3952   def int_x86_avx512_mask_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256_mask">,
3953               Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty,
3954                                            llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
3955   def int_x86_avx512_mask_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph_mask">,
3956               Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty,
3957                                            llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
3958 }
3959
3960 //===----------------------------------------------------------------------===//
3961 // TBM
3962
3963 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3964   def int_x86_tbm_bextri_u32 : GCCBuiltin<"__builtin_ia32_bextri_u32">,
3965         Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
3966   def int_x86_tbm_bextri_u64 : GCCBuiltin<"__builtin_ia32_bextri_u64">,
3967         Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
3968 }
3969
3970 //===----------------------------------------------------------------------===//
3971 // RDRAND intrinsics - Return a random value and whether it is valid.
3972 // RDSEED intrinsics - Return a NIST SP800-90B & C compliant random value and
3973 // whether it is valid.
3974
3975 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3976   // These are declared side-effecting so they don't get eliminated by CSE or
3977   // LICM.
3978   def int_x86_rdrand_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
3979   def int_x86_rdrand_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
3980   def int_x86_rdrand_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
3981   def int_x86_rdseed_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
3982   def int_x86_rdseed_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
3983   def int_x86_rdseed_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
3984 }
3985
3986 //===----------------------------------------------------------------------===//
3987 // ADX
3988
3989 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
3990   def int_x86_addcarryx_u32: GCCBuiltin<"__builtin_ia32_addcarryx_u32">,
3991         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
3992                                  llvm_ptr_ty], [IntrReadWriteArgMem]>;
3993   def int_x86_addcarryx_u64: GCCBuiltin<"__builtin_ia32_addcarryx_u64">,
3994         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
3995                                  llvm_ptr_ty], [IntrReadWriteArgMem]>;
3996   def int_x86_addcarry_u32: GCCBuiltin<"__builtin_ia32_addcarry_u32">,
3997         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
3998                                  llvm_ptr_ty], [IntrReadWriteArgMem]>;
3999   def int_x86_addcarry_u64: GCCBuiltin<"__builtin_ia32_addcarry_u64">,
4000         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
4001                                  llvm_ptr_ty], [IntrReadWriteArgMem]>;
4002   def int_x86_subborrow_u32: GCCBuiltin<"__builtin_ia32_subborrow_u32">,
4003         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
4004                                  llvm_ptr_ty], [IntrReadWriteArgMem]>;
4005   def int_x86_subborrow_u64: GCCBuiltin<"__builtin_ia32_subborrow_u64">,
4006         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
4007                                  llvm_ptr_ty], [IntrReadWriteArgMem]>;
4008 }
4009
4010 //===----------------------------------------------------------------------===//
4011 // RTM intrinsics. Transactional Memory support.
4012
4013 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4014   def int_x86_xbegin : GCCBuiltin<"__builtin_ia32_xbegin">,
4015               Intrinsic<[llvm_i32_ty], [], []>;
4016   def int_x86_xend : GCCBuiltin<"__builtin_ia32_xend">,
4017               Intrinsic<[], [], []>;
4018   def int_x86_xabort : GCCBuiltin<"__builtin_ia32_xabort">,
4019               Intrinsic<[], [llvm_i8_ty], [IntrNoReturn]>;
4020   def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">,
4021               Intrinsic<[llvm_i32_ty], [], []>;
4022 }
4023
4024 //===----------------------------------------------------------------------===//
4025 // AVX512
4026
4027 // Mask ops
4028 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4029   // Mask instructions
4030   // 16-bit mask
4031   def int_x86_avx512_kand_w : GCCBuiltin<"__builtin_ia32_kandhi">,
4032               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4033                          [IntrNoMem]>;
4034   def int_x86_avx512_kandn_w : GCCBuiltin<"__builtin_ia32_kandnhi">,
4035               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4036                          [IntrNoMem]>;
4037   def int_x86_avx512_knot_w : GCCBuiltin<"__builtin_ia32_knothi">,
4038               Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem]>;
4039   def int_x86_avx512_kor_w : GCCBuiltin<"__builtin_ia32_korhi">,
4040               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4041                          [IntrNoMem]>;
4042   def int_x86_avx512_kxor_w : GCCBuiltin<"__builtin_ia32_kxorhi">,
4043               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4044                          [IntrNoMem]>;
4045   def int_x86_avx512_kxnor_w : GCCBuiltin<"__builtin_ia32_kxnorhi">,
4046               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4047                          [IntrNoMem]>;
4048   def int_x86_avx512_kunpck_bw : GCCBuiltin<"__builtin_ia32_kunpckhi">,
4049               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
4050                          [IntrNoMem]>;
4051   def int_x86_avx512_kunpck_wd : GCCBuiltin<"__builtin_ia32_kunpcksi">,
4052               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
4053                          [IntrNoMem]>;
4054   def int_x86_avx512_kunpck_dq : GCCBuiltin<"__builtin_ia32_kunpckdi">,
4055               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
4056                          [IntrNoMem]>;
4057   def int_x86_avx512_kortestz_w : GCCBuiltin<"__builtin_ia32_kortestzhi">,
4058               Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
4059                         [IntrNoMem]>;
4060   def int_x86_avx512_kortestc_w : GCCBuiltin<"__builtin_ia32_kortestchi">,
4061               Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
4062                         [IntrNoMem]>;
4063 }
4064
4065 // Conversion ops
4066 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4067   def int_x86_avx512_cvtss2usi : GCCBuiltin<"__builtin_ia32_cvtss2usi">,
4068               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
4069   def int_x86_avx512_cvtss2usi64 : GCCBuiltin<"__builtin_ia32_cvtss2usi64">,
4070               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
4071   def int_x86_avx512_cvttss2si : GCCBuiltin<"__builtin_ia32_vcvttss2si32">,
4072               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
4073   def int_x86_avx512_cvttss2si64 : GCCBuiltin<"__builtin_ia32_vcvttss2si64">,
4074               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
4075   def int_x86_avx512_cvttss2usi : GCCBuiltin<"__builtin_ia32_vcvttss2usi32">,
4076               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
4077   def int_x86_avx512_cvttss2usi64 : GCCBuiltin<"__builtin_ia32_vcvttss2usi64">,
4078               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
4079   def int_x86_avx512_cvtusi2ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss32">,
4080               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
4081                          llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
4082   def int_x86_avx512_cvtusi642ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss64">,
4083               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
4084                          llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
4085
4086   def int_x86_avx512_cvtsd2usi : GCCBuiltin<"__builtin_ia32_cvtsd2usi">,
4087               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
4088   def int_x86_avx512_cvtsd2usi64 : GCCBuiltin<"__builtin_ia32_cvtsd2usi64">,
4089               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
4090   def int_x86_avx512_cvttsd2si : GCCBuiltin<"__builtin_ia32_vcvttsd2si32">,
4091               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
4092   def int_x86_avx512_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_vcvttsd2si64">,
4093               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
4094   def int_x86_avx512_cvttsd2usi : GCCBuiltin<"__builtin_ia32_vcvttsd2usi32">,
4095               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
4096   def int_x86_avx512_cvttsd2usi64 : GCCBuiltin<"__builtin_ia32_vcvttsd2usi64">,
4097               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
4098   def int_x86_avx512_cvtusi2sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd32">,
4099               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
4100                          llvm_i32_ty], [IntrNoMem]>;
4101   def int_x86_avx512_cvtusi642sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd64">,
4102               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
4103                          llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
4104
4105   def int_x86_avx512_cvtsi2ss32 : GCCBuiltin<"__builtin_ia32_cvtsi2ss32">,
4106               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
4107                          llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
4108   def int_x86_avx512_cvtsi2ss64 : GCCBuiltin<"__builtin_ia32_cvtsi2ss64">,
4109               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
4110                          llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
4111   def int_x86_avx512_cvtsi2sd32 : GCCBuiltin<"__builtin_ia32_cvtsi2sd32">,
4112               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
4113                          llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
4114   def int_x86_avx512_cvtsi2sd64 : GCCBuiltin<"__builtin_ia32_cvtsi2sd64">,
4115               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
4116                          llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>; 
4117
4118   def int_x86_avx512_cvtb2mask_128 : GCCBuiltin<"__builtin_ia32_cvtb2mask128">,
4119               Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
4120   def int_x86_avx512_cvtb2mask_256 : GCCBuiltin<"__builtin_ia32_cvtb2mask256">,
4121               Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty], [IntrNoMem]>;
4122   def int_x86_avx512_cvtb2mask_512 : GCCBuiltin<"__builtin_ia32_cvtb2mask512">,
4123               Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty], [IntrNoMem]>;
4124   
4125   def int_x86_avx512_cvtw2mask_128 : GCCBuiltin<"__builtin_ia32_cvtw2mask128">,
4126               Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty], [IntrNoMem]>;
4127   def int_x86_avx512_cvtw2mask_256 : GCCBuiltin<"__builtin_ia32_cvtw2mask256">,
4128               Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty], [IntrNoMem]>;
4129   def int_x86_avx512_cvtw2mask_512 : GCCBuiltin<"__builtin_ia32_cvtw2mask512">,
4130               Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty], [IntrNoMem]>;
4131   
4132   def int_x86_avx512_cvtd2mask_128 : GCCBuiltin<"__builtin_ia32_cvtd2mask128">,
4133               Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty], [IntrNoMem]>;
4134   def int_x86_avx512_cvtd2mask_256 : GCCBuiltin<"__builtin_ia32_cvtd2mask256">,
4135               Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty], [IntrNoMem]>;  
4136   def int_x86_avx512_cvtd2mask_512 : GCCBuiltin<"__builtin_ia32_cvtd2mask512">,
4137               Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty], [IntrNoMem]>;
4138
4139   def int_x86_avx512_cvtq2mask_128 : GCCBuiltin<"__builtin_ia32_cvtq2mask128">,
4140               Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty], [IntrNoMem]>;  
4141   def int_x86_avx512_cvtq2mask_256 : GCCBuiltin<"__builtin_ia32_cvtq2mask256">,
4142               Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty], [IntrNoMem]>;
4143   def int_x86_avx512_cvtq2mask_512 : GCCBuiltin<"__builtin_ia32_cvtq2mask512">,
4144               Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty], [IntrNoMem]>;
4145
4146   def int_x86_avx512_cvtmask2b_128 : GCCBuiltin<"__builtin_ia32_cvtmask2b128">,
4147               Intrinsic<[llvm_v16i8_ty], [llvm_i16_ty], [IntrNoMem]>;
4148   def int_x86_avx512_cvtmask2b_256 : GCCBuiltin<"__builtin_ia32_cvtmask2b256">,
4149               Intrinsic<[llvm_v32i8_ty], [llvm_i32_ty], [IntrNoMem]>;
4150   def int_x86_avx512_cvtmask2b_512 : GCCBuiltin<"__builtin_ia32_cvtmask2b512">,
4151               Intrinsic<[llvm_v64i8_ty], [llvm_i64_ty], [IntrNoMem]>;
4152   
4153   def int_x86_avx512_cvtmask2w_128 : GCCBuiltin<"__builtin_ia32_cvtmask2w128">,
4154               Intrinsic<[llvm_v8i16_ty], [llvm_i8_ty], [IntrNoMem]>;
4155   def int_x86_avx512_cvtmask2w_256 : GCCBuiltin<"__builtin_ia32_cvtmask2w256">,
4156               Intrinsic<[llvm_v16i16_ty], [llvm_i16_ty], [IntrNoMem]>;
4157   def int_x86_avx512_cvtmask2w_512 : GCCBuiltin<"__builtin_ia32_cvtmask2w512">,
4158               Intrinsic<[llvm_v32i16_ty], [llvm_i32_ty], [IntrNoMem]>;
4159   
4160   def int_x86_avx512_cvtmask2d_128 : GCCBuiltin<"__builtin_ia32_cvtmask2d128">,
4161               Intrinsic<[llvm_v4i32_ty], [llvm_i8_ty], [IntrNoMem]>;
4162   def int_x86_avx512_cvtmask2d_256 : GCCBuiltin<"__builtin_ia32_cvtmask2d256">,
4163               Intrinsic<[llvm_v8i32_ty], [llvm_i8_ty], [IntrNoMem]>;  
4164   def int_x86_avx512_cvtmask2d_512 : GCCBuiltin<"__builtin_ia32_cvtmask2d512">,
4165               Intrinsic<[llvm_v16i32_ty], [llvm_i16_ty], [IntrNoMem]>;
4166   
4167   def int_x86_avx512_cvtmask2q_128 : GCCBuiltin<"__builtin_ia32_cvtmask2q128">,
4168               Intrinsic<[llvm_v2i64_ty], [llvm_i8_ty], [IntrNoMem]>;  
4169   def int_x86_avx512_cvtmask2q_256 : GCCBuiltin<"__builtin_ia32_cvtmask2q256">,
4170               Intrinsic<[llvm_v4i64_ty], [llvm_i8_ty], [IntrNoMem]>;
4171   def int_x86_avx512_cvtmask2q_512 : GCCBuiltin<"__builtin_ia32_cvtmask2q512">,
4172               Intrinsic<[llvm_v8i64_ty], [llvm_i8_ty], [IntrNoMem]>;
4173   
4174 }
4175
4176 // Pack ops.
4177 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4178   def int_x86_avx512_mask_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128_mask">,
4179               Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
4180                          llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
4181   def int_x86_avx512_mask_packsswb_256 : GCCBuiltin<"__builtin_ia32_packsswb256_mask">,
4182               Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,llvm_v16i16_ty,
4183                          llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
4184   def int_x86_avx512_mask_packsswb_512 : GCCBuiltin<"__builtin_ia32_packsswb512_mask">,
4185               Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty, 
4186                          llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
4187   def int_x86_avx512_mask_packssdw_128 : GCCBuiltin<"__builtin_ia32_packssdw128_mask">,
4188               Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
4189                          llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
4190   def int_x86_avx512_mask_packssdw_256 : GCCBuiltin<"__builtin_ia32_packssdw256_mask">,
4191               Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
4192                          llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
4193   def int_x86_avx512_mask_packssdw_512 : GCCBuiltin<"__builtin_ia32_packssdw512_mask">,
4194               Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
4195                          llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
4196   def int_x86_avx512_mask_packuswb_128 : GCCBuiltin<"__builtin_ia32_packuswb128_mask">,
4197               Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
4198                          llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
4199   def int_x86_avx512_mask_packuswb_256 : GCCBuiltin<"__builtin_ia32_packuswb256_mask">,
4200               Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,llvm_v16i16_ty,
4201                          llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
4202   def int_x86_avx512_mask_packuswb_512 : GCCBuiltin<"__builtin_ia32_packuswb512_mask">,
4203               Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty, 
4204                          llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
4205   def int_x86_avx512_mask_packusdw_128 : GCCBuiltin<"__builtin_ia32_packusdw128_mask">,
4206               Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
4207                          llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
4208   def int_x86_avx512_mask_packusdw_256 : GCCBuiltin<"__builtin_ia32_packusdw256_mask">,
4209               Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
4210                          llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
4211   def int_x86_avx512_mask_packusdw_512 : GCCBuiltin<"__builtin_ia32_packusdw512_mask">,
4212               Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
4213                          llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
4214 }
4215
4216 // Unpack ops.
4217 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4218   def int_x86_avx512_mask_unpckh_pd_128 :
4219          GCCBuiltin<"__builtin_ia32_unpckhpd128_mask">,
4220           Intrinsic<[llvm_v2f64_ty],
4221           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
4222           [IntrNoMem]>;
4223
4224   def int_x86_avx512_mask_unpckh_pd_256 :
4225          GCCBuiltin<"__builtin_ia32_unpckhpd256_mask">,
4226           Intrinsic<[llvm_v4f64_ty],
4227           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
4228           [IntrNoMem]>;
4229
4230   def int_x86_avx512_mask_unpckh_pd_512 :
4231          GCCBuiltin<"__builtin_ia32_unpckhpd512_mask">,
4232           Intrinsic<[llvm_v8f64_ty],
4233           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty],
4234           [IntrNoMem]>;
4235
4236   def int_x86_avx512_mask_unpckh_ps_128 :
4237          GCCBuiltin<"__builtin_ia32_unpckhps128_mask">,
4238           Intrinsic<[llvm_v4f32_ty],
4239           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
4240           [IntrNoMem]>;
4241
4242   def int_x86_avx512_mask_unpckh_ps_256 :
4243          GCCBuiltin<"__builtin_ia32_unpckhps256_mask">,
4244           Intrinsic<[llvm_v8f32_ty],
4245           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
4246           [IntrNoMem]>;
4247
4248   def int_x86_avx512_mask_unpckh_ps_512 :
4249          GCCBuiltin<"__builtin_ia32_unpckhps512_mask">,
4250           Intrinsic<[llvm_v16f32_ty],
4251           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty],
4252           [IntrNoMem]>;
4253
4254   def int_x86_avx512_mask_unpckl_pd_128 :
4255          GCCBuiltin<"__builtin_ia32_unpcklpd128_mask">,
4256           Intrinsic<[llvm_v2f64_ty],
4257           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
4258           [IntrNoMem]>;
4259
4260   def int_x86_avx512_mask_unpckl_pd_256 :
4261          GCCBuiltin<"__builtin_ia32_unpcklpd256_mask">,
4262           Intrinsic<[llvm_v4f64_ty],
4263           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
4264           [IntrNoMem]>;
4265
4266   def int_x86_avx512_mask_unpckl_pd_512 :
4267          GCCBuiltin<"__builtin_ia32_unpcklpd512_mask">,
4268           Intrinsic<[llvm_v8f64_ty],
4269           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty],
4270           [IntrNoMem]>;
4271
4272   def int_x86_avx512_mask_unpckl_ps_128 :
4273          GCCBuiltin<"__builtin_ia32_unpcklps128_mask">,
4274           Intrinsic<[llvm_v4f32_ty],
4275           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
4276           [IntrNoMem]>;
4277
4278   def int_x86_avx512_mask_unpckl_ps_256 :
4279          GCCBuiltin<"__builtin_ia32_unpcklps256_mask">,
4280           Intrinsic<[llvm_v8f32_ty],
4281           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
4282           [IntrNoMem]>;
4283
4284   def int_x86_avx512_mask_unpckl_ps_512 :
4285          GCCBuiltin<"__builtin_ia32_unpcklps512_mask">,
4286           Intrinsic<[llvm_v16f32_ty],
4287           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty],
4288           [IntrNoMem]>;
4289
4290   def int_x86_avx512_mask_punpckhb_w_128 :
4291          GCCBuiltin<"__builtin_ia32_punpckhbw128_mask">,
4292           Intrinsic<[llvm_v16i8_ty],
4293           [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty,  llvm_i16_ty],
4294           [IntrNoMem]>;
4295
4296   def int_x86_avx512_mask_punpckhb_w_256 :
4297          GCCBuiltin<"__builtin_ia32_punpckhbw256_mask">,
4298           Intrinsic<[llvm_v32i8_ty],
4299           [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v32i8_ty,  llvm_i32_ty],
4300           [IntrNoMem]>;
4301
4302   def int_x86_avx512_mask_punpckhb_w_512 :
4303          GCCBuiltin<"__builtin_ia32_punpckhbw512_mask">,
4304           Intrinsic<[llvm_v64i8_ty],
4305           [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v64i8_ty,  llvm_i64_ty],
4306           [IntrNoMem]>;
4307
4308   def int_x86_avx512_mask_punpckhd_q_128 :
4309          GCCBuiltin<"__builtin_ia32_punpckhdq128_mask">,
4310           Intrinsic<[llvm_v4i32_ty],
4311           [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4312           [IntrNoMem]>;
4313
4314   def int_x86_avx512_mask_punpckhd_q_256 :
4315          GCCBuiltin<"__builtin_ia32_punpckhdq256_mask">,
4316           Intrinsic<[llvm_v8i32_ty],
4317           [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4318           [IntrNoMem]>;
4319
4320   def int_x86_avx512_mask_punpckhd_q_512 :
4321          GCCBuiltin<"__builtin_ia32_punpckhdq512_mask">,
4322           Intrinsic<[llvm_v16i32_ty],
4323           [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty,  llvm_i16_ty],
4324           [IntrNoMem]>;
4325
4326   def int_x86_avx512_mask_punpckhqd_q_128 :
4327          GCCBuiltin<"__builtin_ia32_punpckhqdq128_mask">,
4328           Intrinsic<[llvm_v2i64_ty],
4329           [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4330           [IntrNoMem]>;
4331
4332   def int_x86_avx512_mask_punpckhqd_q_256 :
4333          GCCBuiltin<"__builtin_ia32_punpckhqdq256_mask">,
4334           Intrinsic<[llvm_v4i64_ty],
4335           [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4336           [IntrNoMem]>;
4337
4338   def int_x86_avx512_mask_punpckhqd_q_512 :
4339          GCCBuiltin<"__builtin_ia32_punpckhqdq512_mask">,
4340           Intrinsic<[llvm_v8i64_ty],
4341           [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty,  llvm_i8_ty],
4342           [IntrNoMem]>;
4343
4344   def int_x86_avx512_mask_punpckhw_d_128 :
4345          GCCBuiltin<"__builtin_ia32_punpckhwd128_mask">,
4346           Intrinsic<[llvm_v8i16_ty],
4347           [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty,  llvm_i8_ty],
4348           [IntrNoMem]>;
4349
4350   def int_x86_avx512_mask_punpckhw_d_256 :
4351          GCCBuiltin<"__builtin_ia32_punpckhwd256_mask">,
4352           Intrinsic<[llvm_v16i16_ty],
4353           [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty,  llvm_i16_ty],
4354           [IntrNoMem]>;
4355
4356   def int_x86_avx512_mask_punpckhw_d_512 :
4357          GCCBuiltin<"__builtin_ia32_punpckhwd512_mask">,
4358           Intrinsic<[llvm_v32i16_ty],
4359           [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty,  llvm_i32_ty],
4360           [IntrNoMem]>;
4361
4362   def int_x86_avx512_mask_punpcklb_w_128 :
4363          GCCBuiltin<"__builtin_ia32_punpcklbw128_mask">,
4364           Intrinsic<[llvm_v16i8_ty],
4365           [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty,  llvm_i16_ty],
4366           [IntrNoMem]>;
4367
4368   def int_x86_avx512_mask_punpcklb_w_256 :
4369          GCCBuiltin<"__builtin_ia32_punpcklbw256_mask">,
4370           Intrinsic<[llvm_v32i8_ty],
4371           [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v32i8_ty,  llvm_i32_ty],
4372           [IntrNoMem]>;
4373
4374   def int_x86_avx512_mask_punpcklb_w_512 :
4375          GCCBuiltin<"__builtin_ia32_punpcklbw512_mask">,
4376           Intrinsic<[llvm_v64i8_ty],
4377           [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v64i8_ty,  llvm_i64_ty],
4378           [IntrNoMem]>;
4379
4380   def int_x86_avx512_mask_punpckld_q_128 :
4381          GCCBuiltin<"__builtin_ia32_punpckldq128_mask">,
4382           Intrinsic<[llvm_v4i32_ty],
4383           [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4384           [IntrNoMem]>;
4385
4386   def int_x86_avx512_mask_punpckld_q_256 :
4387          GCCBuiltin<"__builtin_ia32_punpckldq256_mask">,
4388           Intrinsic<[llvm_v8i32_ty],
4389           [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4390           [IntrNoMem]>;
4391
4392   def int_x86_avx512_mask_punpckld_q_512 :
4393          GCCBuiltin<"__builtin_ia32_punpckldq512_mask">,
4394           Intrinsic<[llvm_v16i32_ty],
4395           [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty,  llvm_i16_ty],
4396           [IntrNoMem]>;
4397
4398   def int_x86_avx512_mask_punpcklqd_q_128 :
4399          GCCBuiltin<"__builtin_ia32_punpcklqdq128_mask">,
4400           Intrinsic<[llvm_v2i64_ty],
4401           [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4402           [IntrNoMem]>;
4403
4404   def int_x86_avx512_mask_punpcklqd_q_256 :
4405          GCCBuiltin<"__builtin_ia32_punpcklqdq256_mask">,
4406           Intrinsic<[llvm_v4i64_ty],
4407           [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4408           [IntrNoMem]>;
4409
4410   def int_x86_avx512_mask_punpcklqd_q_512 :
4411          GCCBuiltin<"__builtin_ia32_punpcklqdq512_mask">,
4412           Intrinsic<[llvm_v8i64_ty],
4413           [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty,  llvm_i8_ty],
4414           [IntrNoMem]>;
4415
4416   def int_x86_avx512_mask_punpcklw_d_128 :
4417          GCCBuiltin<"__builtin_ia32_punpcklwd128_mask">,
4418           Intrinsic<[llvm_v8i16_ty],
4419           [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty,  llvm_i8_ty],
4420           [IntrNoMem]>;
4421
4422   def int_x86_avx512_mask_punpcklw_d_256 :
4423          GCCBuiltin<"__builtin_ia32_punpcklwd256_mask">,
4424           Intrinsic<[llvm_v16i16_ty],
4425           [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty,  llvm_i16_ty],
4426           [IntrNoMem]>;
4427
4428   def int_x86_avx512_mask_punpcklw_d_512 :
4429          GCCBuiltin<"__builtin_ia32_punpcklwd512_mask">,
4430           Intrinsic<[llvm_v32i16_ty],
4431           [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty,  llvm_i32_ty],
4432           [IntrNoMem]>;
4433 }
4434
4435 // Vector convert
4436 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4437   def int_x86_avx512_mask_cvtdq2pd_128 : 
4438         GCCBuiltin<"__builtin_ia32_cvtdq2pd128_mask">,
4439           Intrinsic<[llvm_v2f64_ty],
4440           [llvm_v4i32_ty, llvm_v2f64_ty,  llvm_i8_ty],
4441           [IntrNoMem]>;
4442
4443   def int_x86_avx512_mask_cvtdq2pd_256 : 
4444         GCCBuiltin<"__builtin_ia32_cvtdq2pd256_mask">,
4445           Intrinsic<[llvm_v4f64_ty],
4446           [llvm_v4i32_ty, llvm_v4f64_ty,  llvm_i8_ty],
4447           [IntrNoMem]>;
4448
4449   def int_x86_avx512_mask_cvtdq2pd_512 : 
4450         GCCBuiltin<"__builtin_ia32_cvtdq2pd512_mask">,
4451           Intrinsic<[llvm_v8f64_ty],
4452           [llvm_v8i32_ty, llvm_v8f64_ty,  llvm_i8_ty],
4453           [IntrNoMem]>;
4454
4455   def int_x86_avx512_mask_cvtdq2ps_128 : 
4456         GCCBuiltin<"__builtin_ia32_cvtdq2ps128_mask">,
4457           Intrinsic<[llvm_v4f32_ty],
4458           [llvm_v4i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
4459           [IntrNoMem]>;
4460
4461   def int_x86_avx512_mask_cvtdq2ps_256 : 
4462         GCCBuiltin<"__builtin_ia32_cvtdq2ps256_mask">,
4463           Intrinsic<[llvm_v8f32_ty],
4464           [llvm_v8i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
4465           [IntrNoMem]>;
4466
4467   def int_x86_avx512_mask_cvtdq2ps_512 : 
4468         GCCBuiltin<"__builtin_ia32_cvtdq2ps512_mask">,
4469           Intrinsic<[llvm_v16f32_ty],
4470           [llvm_v16i32_ty, llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty],
4471           [IntrNoMem]>;
4472
4473   def int_x86_avx512_mask_cvtpd2dq_128 : 
4474         GCCBuiltin<"__builtin_ia32_cvtpd2dq128_mask">,
4475           Intrinsic<[llvm_v4i32_ty],
4476           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4477           [IntrNoMem]>;
4478
4479   def int_x86_avx512_mask_cvtpd2dq_256 : 
4480         GCCBuiltin<"__builtin_ia32_cvtpd2dq256_mask">,
4481           Intrinsic<[llvm_v4i32_ty],
4482           [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4483           [IntrNoMem]>;
4484
4485   def int_x86_avx512_mask_cvtpd2dq_512 : 
4486         GCCBuiltin<"__builtin_ia32_cvtpd2dq512_mask">,
4487           Intrinsic<[llvm_v8i32_ty],
4488           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
4489           [IntrNoMem]>;
4490
4491   def int_x86_avx512_mask_cvtpd2ps_256 : 
4492         GCCBuiltin<"__builtin_ia32_cvtpd2ps256_mask">,
4493           Intrinsic<[llvm_v4f32_ty],
4494           [llvm_v4f64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4495           [IntrNoMem]>;
4496
4497   def int_x86_avx512_mask_cvtpd2ps_512 : 
4498         GCCBuiltin<"__builtin_ia32_cvtpd2ps512_mask">,
4499           Intrinsic<[llvm_v8f32_ty],
4500           [llvm_v8f64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
4501           [IntrNoMem]>;
4502
4503   def int_x86_avx512_mask_cvtsd2ss_round : 
4504         GCCBuiltin<"__builtin_ia32_cvtsd2ss_round">,
4505           Intrinsic<[llvm_v4f32_ty],
4506           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
4507           [IntrNoMem]>;
4508
4509   def int_x86_avx512_mask_cvtss2sd_round : 
4510         GCCBuiltin<"__builtin_ia32_cvtss2sd_round">,
4511           Intrinsic<[llvm_v2f64_ty],
4512           [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
4513           [IntrNoMem]>;
4514
4515   def int_x86_avx512_mask_cvtpd2ps : 
4516         GCCBuiltin<"__builtin_ia32_cvtpd2ps_mask">,
4517           Intrinsic<[llvm_v4f32_ty],
4518           [llvm_v2f64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4519           [IntrNoMem]>;
4520
4521   def int_x86_avx512_mask_cvtpd2qq_128 : 
4522         GCCBuiltin<"__builtin_ia32_cvtpd2qq128_mask">,
4523           Intrinsic<[llvm_v2i64_ty],
4524           [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4525           [IntrNoMem]>;
4526
4527   def int_x86_avx512_mask_cvtpd2qq_256 : 
4528         GCCBuiltin<"__builtin_ia32_cvtpd2qq256_mask">,
4529           Intrinsic<[llvm_v4i64_ty],
4530           [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4531           [IntrNoMem]>;
4532
4533   def int_x86_avx512_mask_cvtpd2qq_512 : 
4534         GCCBuiltin<"__builtin_ia32_cvtpd2qq512_mask">,
4535           Intrinsic<[llvm_v8i64_ty],
4536           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4537           [IntrNoMem]>;
4538
4539   def int_x86_avx512_mask_cvtpd2udq_128 : 
4540         GCCBuiltin<"__builtin_ia32_cvtpd2udq128_mask">,
4541           Intrinsic<[llvm_v4i32_ty],
4542           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4543           [IntrNoMem]>;
4544
4545   def int_x86_avx512_mask_cvtpd2udq_256 : 
4546         GCCBuiltin<"__builtin_ia32_cvtpd2udq256_mask">,
4547           Intrinsic<[llvm_v4i32_ty],
4548           [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4549           [IntrNoMem]>;
4550
4551   def int_x86_avx512_mask_cvtpd2udq_512 : 
4552         GCCBuiltin<"__builtin_ia32_cvtpd2udq512_mask">,
4553           Intrinsic<[llvm_v8i32_ty],
4554           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
4555           [IntrNoMem]>;
4556
4557   def int_x86_avx512_mask_cvtpd2uqq_128 : 
4558         GCCBuiltin<"__builtin_ia32_cvtpd2uqq128_mask">,
4559           Intrinsic<[llvm_v2i64_ty],
4560           [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4561           [IntrNoMem]>;
4562
4563   def int_x86_avx512_mask_cvtpd2uqq_256 : 
4564         GCCBuiltin<"__builtin_ia32_cvtpd2uqq256_mask">,
4565           Intrinsic<[llvm_v4i64_ty],
4566           [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4567           [IntrNoMem]>;
4568
4569   def int_x86_avx512_mask_cvtpd2uqq_512 : 
4570         GCCBuiltin<"__builtin_ia32_cvtpd2uqq512_mask">,
4571           Intrinsic<[llvm_v8i64_ty],
4572           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4573           [IntrNoMem]>;
4574
4575   def int_x86_avx512_mask_cvtps2dq_128 : 
4576         GCCBuiltin<"__builtin_ia32_cvtps2dq128_mask">,
4577           Intrinsic<[llvm_v4i32_ty],
4578           [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4579           [IntrNoMem]>;
4580
4581   def int_x86_avx512_mask_cvtps2dq_256 : 
4582         GCCBuiltin<"__builtin_ia32_cvtps2dq256_mask">,
4583           Intrinsic<[llvm_v8i32_ty],
4584           [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4585           [IntrNoMem]>;
4586
4587   def int_x86_avx512_mask_cvtps2dq_512 : 
4588         GCCBuiltin<"__builtin_ia32_cvtps2dq512_mask">,
4589           Intrinsic<[llvm_v16i32_ty],
4590           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
4591           [IntrNoMem]>;
4592
4593   def int_x86_avx512_mask_cvtps2pd_128 : 
4594         GCCBuiltin<"__builtin_ia32_cvtps2pd128_mask">,
4595           Intrinsic<[llvm_v2f64_ty],
4596           [llvm_v4f32_ty, llvm_v2f64_ty,  llvm_i8_ty],
4597           [IntrNoMem]>;
4598
4599   def int_x86_avx512_mask_cvtps2pd_256 : 
4600         GCCBuiltin<"__builtin_ia32_cvtps2pd256_mask">,
4601           Intrinsic<[llvm_v4f64_ty],
4602           [llvm_v4f32_ty, llvm_v4f64_ty,  llvm_i8_ty],
4603           [IntrNoMem]>;
4604
4605   def int_x86_avx512_mask_cvtps2pd_512 : 
4606         GCCBuiltin<"__builtin_ia32_cvtps2pd512_mask">,
4607           Intrinsic<[llvm_v8f64_ty],
4608           [llvm_v8f32_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
4609           [IntrNoMem]>;
4610
4611   def int_x86_avx512_mask_cvtps2qq_128 : 
4612         GCCBuiltin<"__builtin_ia32_cvtps2qq128_mask">,
4613           Intrinsic<[llvm_v2i64_ty],
4614           [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
4615           [IntrNoMem]>;
4616
4617   def int_x86_avx512_mask_cvtps2qq_256 : 
4618         GCCBuiltin<"__builtin_ia32_cvtps2qq256_mask">,
4619           Intrinsic<[llvm_v4i64_ty],
4620           [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
4621           [IntrNoMem]>;
4622
4623   def int_x86_avx512_mask_cvtps2qq_512 : 
4624         GCCBuiltin<"__builtin_ia32_cvtps2qq512_mask">,
4625           Intrinsic<[llvm_v8i64_ty],
4626           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4627           [IntrNoMem]>;
4628
4629   def int_x86_avx512_mask_cvtps2udq_128 : 
4630         GCCBuiltin<"__builtin_ia32_cvtps2udq128_mask">,
4631           Intrinsic<[llvm_v4i32_ty],
4632           [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4633           [IntrNoMem]>;
4634
4635   def int_x86_avx512_mask_cvtps2udq_256 : 
4636         GCCBuiltin<"__builtin_ia32_cvtps2udq256_mask">,
4637           Intrinsic<[llvm_v8i32_ty],
4638           [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4639           [IntrNoMem]>;
4640
4641   def int_x86_avx512_mask_cvtps2udq_512 : 
4642         GCCBuiltin<"__builtin_ia32_cvtps2udq512_mask">,
4643           Intrinsic<[llvm_v16i32_ty],
4644           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
4645           [IntrNoMem]>;
4646
4647   def int_x86_avx512_mask_cvtps2uqq_128 : 
4648         GCCBuiltin<"__builtin_ia32_cvtps2uqq128_mask">,
4649           Intrinsic<[llvm_v2i64_ty],
4650           [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
4651           [IntrNoMem]>;
4652
4653   def int_x86_avx512_mask_cvtps2uqq_256 : 
4654         GCCBuiltin<"__builtin_ia32_cvtps2uqq256_mask">,
4655           Intrinsic<[llvm_v4i64_ty],
4656           [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
4657           [IntrNoMem]>;
4658
4659   def int_x86_avx512_mask_cvtps2uqq_512 : 
4660         GCCBuiltin<"__builtin_ia32_cvtps2uqq512_mask">,
4661           Intrinsic<[llvm_v8i64_ty],
4662           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4663           [IntrNoMem]>;
4664
4665   def int_x86_avx512_mask_cvtqq2pd_128 : 
4666         GCCBuiltin<"__builtin_ia32_cvtqq2pd128_mask">,
4667           Intrinsic<[llvm_v2f64_ty],
4668           [llvm_v2i64_ty, llvm_v2f64_ty,  llvm_i8_ty],
4669           [IntrNoMem]>;
4670
4671   def int_x86_avx512_mask_cvtqq2pd_256 : 
4672         GCCBuiltin<"__builtin_ia32_cvtqq2pd256_mask">,
4673           Intrinsic<[llvm_v4f64_ty],
4674           [llvm_v4i64_ty, llvm_v4f64_ty,  llvm_i8_ty],
4675           [IntrNoMem]>;
4676
4677   def int_x86_avx512_mask_cvtqq2pd_512 : 
4678         GCCBuiltin<"__builtin_ia32_cvtqq2pd512_mask">,
4679           Intrinsic<[llvm_v8f64_ty],
4680           [llvm_v8i64_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
4681           [IntrNoMem]>;
4682
4683   def int_x86_avx512_mask_cvtqq2ps_128 : 
4684         GCCBuiltin<"__builtin_ia32_cvtqq2ps128_mask">,
4685           Intrinsic<[llvm_v4f32_ty],
4686           [llvm_v2i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4687           [IntrNoMem]>;
4688
4689   def int_x86_avx512_mask_cvtqq2ps_256 : 
4690         GCCBuiltin<"__builtin_ia32_cvtqq2ps256_mask">,
4691           Intrinsic<[llvm_v4f32_ty],
4692           [llvm_v4i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4693           [IntrNoMem]>;
4694
4695   def int_x86_avx512_mask_cvtqq2ps_512 : 
4696         GCCBuiltin<"__builtin_ia32_cvtqq2ps512_mask">,
4697           Intrinsic<[llvm_v8f32_ty],
4698           [llvm_v8i64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
4699           [IntrNoMem]>;
4700
4701   def int_x86_avx512_mask_cvttpd2dq_128 : 
4702         GCCBuiltin<"__builtin_ia32_cvttpd2dq128_mask">,
4703           Intrinsic<[llvm_v4i32_ty],
4704           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4705           [IntrNoMem]>;
4706
4707   def int_x86_avx512_mask_cvttpd2dq_256 : 
4708         GCCBuiltin<"__builtin_ia32_cvttpd2dq256_mask">,
4709           Intrinsic<[llvm_v4i32_ty],
4710           [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4711           [IntrNoMem]>;
4712
4713   def int_x86_avx512_mask_cvttpd2dq_512 : 
4714         GCCBuiltin<"__builtin_ia32_cvttpd2dq512_mask">,
4715           Intrinsic<[llvm_v8i32_ty],
4716           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
4717           [IntrNoMem]>;
4718
4719   def int_x86_avx512_mask_cvttpd2qq_128 : 
4720         GCCBuiltin<"__builtin_ia32_cvttpd2qq128_mask">,
4721           Intrinsic<[llvm_v2i64_ty],
4722           [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4723           [IntrNoMem]>;
4724
4725   def int_x86_avx512_mask_cvttpd2qq_256 : 
4726         GCCBuiltin<"__builtin_ia32_cvttpd2qq256_mask">,
4727           Intrinsic<[llvm_v4i64_ty],
4728           [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4729           [IntrNoMem]>;
4730
4731   def int_x86_avx512_mask_cvttpd2qq_512 : 
4732         GCCBuiltin<"__builtin_ia32_cvttpd2qq512_mask">,
4733           Intrinsic<[llvm_v8i64_ty],
4734           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4735           [IntrNoMem]>;
4736
4737   def int_x86_avx512_mask_cvttpd2udq_128 : 
4738         GCCBuiltin<"__builtin_ia32_cvttpd2udq128_mask">,
4739           Intrinsic<[llvm_v4i32_ty],
4740           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4741           [IntrNoMem]>;
4742
4743   def int_x86_avx512_mask_cvttpd2udq_256 : 
4744         GCCBuiltin<"__builtin_ia32_cvttpd2udq256_mask">,
4745           Intrinsic<[llvm_v4i32_ty],
4746           [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
4747           [IntrNoMem]>;
4748
4749   def int_x86_avx512_mask_cvttpd2udq_512 : 
4750         GCCBuiltin<"__builtin_ia32_cvttpd2udq512_mask">,
4751           Intrinsic<[llvm_v8i32_ty],
4752           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
4753           [IntrNoMem]>;
4754
4755   def int_x86_avx512_mask_cvttpd2uqq_128 : 
4756         GCCBuiltin<"__builtin_ia32_cvttpd2uqq128_mask">,
4757           Intrinsic<[llvm_v2i64_ty],
4758           [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
4759           [IntrNoMem]>;
4760
4761   def int_x86_avx512_mask_cvttpd2uqq_256 : 
4762         GCCBuiltin<"__builtin_ia32_cvttpd2uqq256_mask">,
4763           Intrinsic<[llvm_v4i64_ty],
4764           [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
4765           [IntrNoMem]>;
4766
4767   def int_x86_avx512_mask_cvttpd2uqq_512 : 
4768         GCCBuiltin<"__builtin_ia32_cvttpd2uqq512_mask">,
4769           Intrinsic<[llvm_v8i64_ty],
4770           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4771           [IntrNoMem]>;
4772
4773   def int_x86_avx512_mask_cvttps2dq_128 : 
4774         GCCBuiltin<"__builtin_ia32_cvttps2dq128_mask">,
4775           Intrinsic<[llvm_v4i32_ty],
4776           [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4777           [IntrNoMem]>;
4778
4779   def int_x86_avx512_mask_cvttps2dq_256 : 
4780         GCCBuiltin<"__builtin_ia32_cvttps2dq256_mask">,
4781           Intrinsic<[llvm_v8i32_ty],
4782           [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4783           [IntrNoMem]>;
4784
4785   def int_x86_avx512_mask_cvttps2dq_512 : 
4786         GCCBuiltin<"__builtin_ia32_cvttps2dq512_mask">,
4787           Intrinsic<[llvm_v16i32_ty],
4788           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
4789           [IntrNoMem]>;
4790
4791   def int_x86_avx512_mask_cvttps2qq_128 : 
4792         GCCBuiltin<"__builtin_ia32_cvttps2qq128_mask">,
4793           Intrinsic<[llvm_v2i64_ty],
4794           [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
4795           [IntrNoMem]>;
4796
4797   def int_x86_avx512_mask_cvttps2qq_256 : 
4798         GCCBuiltin<"__builtin_ia32_cvttps2qq256_mask">,
4799           Intrinsic<[llvm_v4i64_ty],
4800           [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
4801           [IntrNoMem]>;
4802
4803   def int_x86_avx512_mask_cvttps2qq_512 : 
4804         GCCBuiltin<"__builtin_ia32_cvttps2qq512_mask">,
4805           Intrinsic<[llvm_v8i64_ty],
4806           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4807           [IntrNoMem]>;
4808
4809   def int_x86_avx512_mask_cvttps2udq_128 : 
4810         GCCBuiltin<"__builtin_ia32_cvttps2udq128_mask">,
4811           Intrinsic<[llvm_v4i32_ty],
4812           [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
4813           [IntrNoMem]>;
4814
4815   def int_x86_avx512_mask_cvttps2udq_256 : 
4816         GCCBuiltin<"__builtin_ia32_cvttps2udq256_mask">,
4817           Intrinsic<[llvm_v8i32_ty],
4818           [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
4819           [IntrNoMem]>;
4820
4821   def int_x86_avx512_mask_cvttps2udq_512 : 
4822         GCCBuiltin<"__builtin_ia32_cvttps2udq512_mask">,
4823           Intrinsic<[llvm_v16i32_ty],
4824           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
4825           [IntrNoMem]>;
4826
4827   def int_x86_avx512_mask_cvttps2uqq_128 : 
4828         GCCBuiltin<"__builtin_ia32_cvttps2uqq128_mask">,
4829           Intrinsic<[llvm_v2i64_ty],
4830           [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
4831           [IntrNoMem]>;
4832
4833   def int_x86_avx512_mask_cvttps2uqq_256 : 
4834         GCCBuiltin<"__builtin_ia32_cvttps2uqq256_mask">,
4835           Intrinsic<[llvm_v4i64_ty],
4836           [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
4837           [IntrNoMem]>;
4838
4839   def int_x86_avx512_mask_cvttps2uqq_512 : 
4840         GCCBuiltin<"__builtin_ia32_cvttps2uqq512_mask">,
4841           Intrinsic<[llvm_v8i64_ty],
4842           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
4843           [IntrNoMem]>;
4844
4845   def int_x86_avx512_mask_cvtudq2pd_128 : 
4846         GCCBuiltin<"__builtin_ia32_cvtudq2pd128_mask">,
4847           Intrinsic<[llvm_v2f64_ty],
4848           [llvm_v4i32_ty, llvm_v2f64_ty,  llvm_i8_ty],
4849           [IntrNoMem]>;
4850
4851   def int_x86_avx512_mask_cvtudq2pd_256 : 
4852         GCCBuiltin<"__builtin_ia32_cvtudq2pd256_mask">,
4853           Intrinsic<[llvm_v4f64_ty],
4854           [llvm_v4i32_ty, llvm_v4f64_ty,  llvm_i8_ty],
4855           [IntrNoMem]>;
4856
4857   def int_x86_avx512_mask_cvtudq2pd_512 : 
4858         GCCBuiltin<"__builtin_ia32_cvtudq2pd512_mask">,
4859           Intrinsic<[llvm_v8f64_ty],
4860           [llvm_v8i32_ty, llvm_v8f64_ty,  llvm_i8_ty],
4861           [IntrNoMem]>;
4862
4863   def int_x86_avx512_mask_cvtudq2ps_128 : 
4864         GCCBuiltin<"__builtin_ia32_cvtudq2ps128_mask">,
4865           Intrinsic<[llvm_v4f32_ty],
4866           [llvm_v4i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
4867           [IntrNoMem]>;
4868
4869   def int_x86_avx512_mask_cvtudq2ps_256 : 
4870         GCCBuiltin<"__builtin_ia32_cvtudq2ps256_mask">,
4871           Intrinsic<[llvm_v8f32_ty],
4872           [llvm_v8i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
4873           [IntrNoMem]>;
4874
4875   def int_x86_avx512_mask_cvtudq2ps_512 : 
4876         GCCBuiltin<"__builtin_ia32_cvtudq2ps512_mask">,
4877           Intrinsic<[llvm_v16f32_ty],
4878           [llvm_v16i32_ty, llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty],
4879           [IntrNoMem]>;
4880
4881   def int_x86_avx512_mask_cvtuqq2pd_128 : 
4882         GCCBuiltin<"__builtin_ia32_cvtuqq2pd128_mask">,
4883           Intrinsic<[llvm_v2f64_ty],
4884           [llvm_v2i64_ty, llvm_v2f64_ty,  llvm_i8_ty],
4885           [IntrNoMem]>;
4886
4887   def int_x86_avx512_mask_cvtuqq2pd_256 : 
4888         GCCBuiltin<"__builtin_ia32_cvtuqq2pd256_mask">,
4889           Intrinsic<[llvm_v4f64_ty],
4890           [llvm_v4i64_ty, llvm_v4f64_ty,  llvm_i8_ty],
4891           [IntrNoMem]>;
4892
4893   def int_x86_avx512_mask_cvtuqq2pd_512 : 
4894         GCCBuiltin<"__builtin_ia32_cvtuqq2pd512_mask">,
4895           Intrinsic<[llvm_v8f64_ty],
4896           [llvm_v8i64_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
4897           [IntrNoMem]>;
4898
4899   def int_x86_avx512_mask_cvtuqq2ps_128 : 
4900         GCCBuiltin<"__builtin_ia32_cvtuqq2ps128_mask">,
4901           Intrinsic<[llvm_v4f32_ty],
4902           [llvm_v2i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4903           [IntrNoMem]>;
4904
4905   def int_x86_avx512_mask_cvtuqq2ps_256 : 
4906         GCCBuiltin<"__builtin_ia32_cvtuqq2ps256_mask">,
4907           Intrinsic<[llvm_v4f32_ty],
4908           [llvm_v4i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
4909           [IntrNoMem]>;
4910
4911   def int_x86_avx512_mask_cvtuqq2ps_512 : 
4912         GCCBuiltin<"__builtin_ia32_cvtuqq2ps512_mask">,
4913           Intrinsic<[llvm_v8f32_ty],
4914           [llvm_v8i64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
4915           [IntrNoMem]>;
4916
4917   def int_x86_avx512_mask_rndscale_pd_128 : GCCBuiltin<"__builtin_ia32_rndscalepd_128_mask">,
4918         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty,
4919                                      llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4920   def int_x86_avx512_mask_rndscale_pd_256 : GCCBuiltin<"__builtin_ia32_rndscalepd_256_mask">,
4921         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty, 
4922                                      llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4923   def int_x86_avx512_mask_rndscale_pd_512 : GCCBuiltin<"__builtin_ia32_rndscalepd_mask">,
4924         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
4925                                      llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
4926   def int_x86_avx512_mask_rndscale_ps_128 : GCCBuiltin<"__builtin_ia32_rndscaleps_128_mask">,
4927         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty,
4928                                      llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4929   def int_x86_avx512_mask_rndscale_ps_256 : GCCBuiltin<"__builtin_ia32_rndscaleps_256_mask">,
4930         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty, 
4931                                      llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4932   def int_x86_avx512_mask_rndscale_ps_512 : GCCBuiltin<"__builtin_ia32_rndscaleps_mask">,
4933         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
4934                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
4935   def int_x86_avx512_mask_reduce_pd_128 : GCCBuiltin<"__builtin_ia32_reducepd128_mask">,
4936         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty, 
4937                                      llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4938   def int_x86_avx512_mask_reduce_pd_256 : GCCBuiltin<"__builtin_ia32_reducepd256_mask">,
4939         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty,
4940                                      llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4941   def int_x86_avx512_mask_reduce_pd_512 : GCCBuiltin<"__builtin_ia32_reducepd512_mask">,
4942         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
4943                                      llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
4944   def int_x86_avx512_mask_reduce_ps_128 : GCCBuiltin<"__builtin_ia32_reduceps128_mask">,
4945         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, 
4946                                      llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4947   def int_x86_avx512_mask_reduce_ps_256 : GCCBuiltin<"__builtin_ia32_reduceps256_mask">,
4948         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty,
4949                                      llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4950   def int_x86_avx512_mask_reduce_ps_512 : GCCBuiltin<"__builtin_ia32_reduceps512_mask">,
4951         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
4952                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
4953 def int_x86_avx512_mask_range_pd_128 : GCCBuiltin<"__builtin_ia32_rangepd128_mask">,
4954         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, 
4955                                     llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4956 def int_x86_avx512_mask_range_pd_256 : GCCBuiltin<"__builtin_ia32_rangepd256_mask">,
4957         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty,
4958                                     llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
4959 def int_x86_avx512_mask_range_pd_512 : GCCBuiltin<"__builtin_ia32_rangepd512_mask">,
4960         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty,
4961                                     llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty], [IntrNoMem]>;
4962 def int_x86_avx512_mask_range_ps_128 : GCCBuiltin<"__builtin_ia32_rangeps128_mask">,
4963         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty,
4964                                     llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4965 def int_x86_avx512_mask_range_ps_256 : GCCBuiltin<"__builtin_ia32_rangeps256_mask">,
4966         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty, 
4967                                     llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
4968 def int_x86_avx512_mask_range_ps_512 : GCCBuiltin<"__builtin_ia32_rangeps512_mask">,
4969         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty,
4970                                      llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty], [IntrNoMem]>;
4971 }
4972
4973 // Vector load with broadcast
4974 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
4975   def int_x86_avx512_vbroadcast_ss_512 :
4976         GCCBuiltin<"__builtin_ia32_vbroadcastss512">,
4977         Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
4978   def int_x86_avx512_mask_broadcast_ss_ps_512 :
4979         GCCBuiltin<"__builtin_ia32_broadcastss512">,
4980         Intrinsic<[llvm_v16f32_ty], [llvm_v4f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
4981   def int_x86_avx512_mask_broadcast_ss_ps_256 :
4982         GCCBuiltin<"__builtin_ia32_broadcastss256_mask">,
4983         Intrinsic<[llvm_v8f32_ty], [llvm_v4f32_ty, llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
4984   def int_x86_avx512_mask_broadcast_ss_ps_128 :
4985         GCCBuiltin<"__builtin_ia32_broadcastss128_mask">,
4986         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
4987
4988   def int_x86_avx512_vbroadcast_sd_512 :
4989         GCCBuiltin<"__builtin_ia32_vbroadcastsd512">,
4990         Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
4991   def int_x86_avx512_mask_broadcast_sd_pd_512 :
4992         GCCBuiltin<"__builtin_ia32_broadcastsd512">,
4993         Intrinsic<[llvm_v8f64_ty], [llvm_v2f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
4994   def int_x86_avx512_mask_broadcast_sd_pd_256 :
4995         GCCBuiltin<"__builtin_ia32_broadcastsd256_mask">,
4996         Intrinsic<[llvm_v4f64_ty], [llvm_v2f64_ty, llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
4997
4998   def int_x86_avx512_pbroadcastb_128 :
4999           GCCBuiltin<"__builtin_ia32_pbroadcastb128_mask">,
5000           Intrinsic<[llvm_v16i8_ty],
5001                     [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5002   def int_x86_avx512_pbroadcastb_256 :
5003           GCCBuiltin<"__builtin_ia32_pbroadcastb256_mask">,
5004           Intrinsic<[llvm_v32i8_ty],
5005                     [llvm_v16i8_ty, llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5006   def int_x86_avx512_pbroadcastb_512 :
5007           GCCBuiltin<"__builtin_ia32_pbroadcastb512_mask">,
5008           Intrinsic<[llvm_v64i8_ty],
5009                     [llvm_v16i8_ty, llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5010   def int_x86_avx512_pbroadcastw_128 :
5011           GCCBuiltin<"__builtin_ia32_pbroadcastw128_mask">,
5012           Intrinsic<[llvm_v8i16_ty],
5013                     [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5014   def int_x86_avx512_pbroadcastw_256 :
5015           GCCBuiltin<"__builtin_ia32_pbroadcastw256_mask">,
5016           Intrinsic<[llvm_v16i16_ty],
5017                     [llvm_v8i16_ty, llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5018   def int_x86_avx512_pbroadcastw_512 :
5019           GCCBuiltin<"__builtin_ia32_pbroadcastw512_mask">,
5020           Intrinsic<[llvm_v32i16_ty],
5021                     [llvm_v8i16_ty, llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5022   def int_x86_avx512_pbroadcastd_128 :
5023           GCCBuiltin<"__builtin_ia32_pbroadcastd128_mask">,
5024           Intrinsic<[llvm_v4i32_ty],
5025                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5026   def int_x86_avx512_pbroadcastd_256 :
5027           GCCBuiltin<"__builtin_ia32_pbroadcastd256_mask">,
5028           Intrinsic<[llvm_v8i32_ty],
5029                     [llvm_v4i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5030   def int_x86_avx512_pbroadcastd_512 :
5031           GCCBuiltin<"__builtin_ia32_pbroadcastd512">,
5032           Intrinsic<[llvm_v16i32_ty],
5033                     [llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5034   def int_x86_avx512_pbroadcastq_128 :
5035           GCCBuiltin<"__builtin_ia32_pbroadcastq128_mask">,
5036           Intrinsic<[llvm_v2i64_ty],
5037                     [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5038   def int_x86_avx512_pbroadcastq_256 :
5039           GCCBuiltin<"__builtin_ia32_pbroadcastq256_mask">,
5040           Intrinsic<[llvm_v4i64_ty],
5041                     [llvm_v2i64_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5042   def int_x86_avx512_pbroadcastq_512 :
5043           GCCBuiltin<"__builtin_ia32_pbroadcastq512">,
5044           Intrinsic<[llvm_v8i64_ty],
5045                     [llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5046
5047   def int_x86_avx512_mask_broadcastf32x2_256 :
5048           GCCBuiltin<"__builtin_ia32_broadcastf32x2_256_mask">,
5049           Intrinsic<[llvm_v8f32_ty],
5050                     [llvm_v4f32_ty, llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5051
5052   def int_x86_avx512_mask_broadcastf32x2_512 :
5053           GCCBuiltin<"__builtin_ia32_broadcastf32x2_512_mask">,
5054           Intrinsic<[llvm_v16f32_ty],
5055                     [llvm_v4f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5056
5057   def int_x86_avx512_mask_broadcasti32x2_128 :
5058           GCCBuiltin<"__builtin_ia32_broadcasti32x2_128_mask">,
5059           Intrinsic<[llvm_v4i32_ty],
5060                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5061
5062   def int_x86_avx512_mask_broadcasti32x2_256 :
5063           GCCBuiltin<"__builtin_ia32_broadcasti32x2_256_mask">,
5064           Intrinsic<[llvm_v8i32_ty],
5065                     [llvm_v4i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5066
5067   def int_x86_avx512_mask_broadcasti32x2_512 :
5068           GCCBuiltin<"__builtin_ia32_broadcasti32x2_512_mask">,
5069           Intrinsic<[llvm_v16i32_ty],
5070                     [llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5071
5072   def int_x86_avx512_mask_broadcastf32x4_256 :
5073             GCCBuiltin<"__builtin_ia32_broadcastf32x4_256_mask">,
5074             Intrinsic<[llvm_v8f32_ty],
5075                     [llvm_v4f32_ty, llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5076
5077   def int_x86_avx512_mask_broadcastf32x4_512 :
5078           GCCBuiltin<"__builtin_ia32_broadcastf32x4_512">,
5079           Intrinsic<[llvm_v16f32_ty],
5080                     [llvm_v4f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5081
5082   def int_x86_avx512_mask_broadcastf32x8_512 :
5083           GCCBuiltin<"__builtin_ia32_broadcastf32x8_512_mask">,
5084           Intrinsic<[llvm_v16f32_ty],
5085                     [llvm_v8f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5086
5087   def int_x86_avx512_mask_broadcastf64x2_256 :
5088           GCCBuiltin<"__builtin_ia32_broadcastf64x2_256_mask">,
5089           Intrinsic<[llvm_v4f64_ty],
5090                     [llvm_v2f64_ty, llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5091
5092   def int_x86_avx512_mask_broadcastf64x2_512 :
5093           GCCBuiltin<"__builtin_ia32_broadcastf64x2_512_mask">,
5094           Intrinsic<[llvm_v8f64_ty],
5095                     [llvm_v2f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5096
5097   def int_x86_avx512_mask_broadcastf64x4_512 :
5098           GCCBuiltin<"__builtin_ia32_broadcastf64x4_512">,
5099           Intrinsic<[llvm_v8f64_ty],
5100                     [llvm_v4f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5101
5102   def int_x86_avx512_mask_broadcasti32x4_256 :
5103           GCCBuiltin<"__builtin_ia32_broadcasti32x4_256_mask">,
5104           Intrinsic<[llvm_v8i32_ty],
5105                     [llvm_v4i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5106
5107   def int_x86_avx512_mask_broadcasti32x4_512 :
5108           GCCBuiltin<"__builtin_ia32_broadcasti32x4_512">,
5109           Intrinsic<[llvm_v16i32_ty],
5110                     [llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5111
5112   def int_x86_avx512_mask_broadcasti32x8_512 :
5113           GCCBuiltin<"__builtin_ia32_broadcasti32x8_512_mask">,
5114           Intrinsic<[llvm_v16i32_ty],
5115                     [llvm_v8i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5116
5117   def int_x86_avx512_mask_broadcasti64x2_256 :
5118           GCCBuiltin<"__builtin_ia32_broadcasti64x2_256_mask">,
5119           Intrinsic<[llvm_v4i64_ty],
5120                     [llvm_v2i64_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5121
5122   def int_x86_avx512_mask_broadcasti64x2_512 :
5123           GCCBuiltin<"__builtin_ia32_broadcasti64x2_512_mask">,
5124           Intrinsic<[llvm_v8i64_ty],
5125                     [llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5126
5127   def int_x86_avx512_mask_broadcasti64x4_512 :
5128           GCCBuiltin<"__builtin_ia32_broadcasti64x4_512">,
5129           Intrinsic<[llvm_v8i64_ty],
5130                     [llvm_v4i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5131
5132   def int_x86_avx512_pbroadcastd_i32_512 :
5133          Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty], [IntrNoMem]>;
5134
5135   def int_x86_avx512_pbroadcastq_i64_512 :
5136          Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty], [IntrNoMem]>;
5137    def int_x86_avx512_broadcastmw_512 :
5138           GCCBuiltin<"__builtin_ia32_broadcastmw512">,
5139           Intrinsic<[llvm_v16i32_ty], [llvm_i16_ty], [IntrNoMem]>;
5140    def int_x86_avx512_broadcastmw_256 :
5141           GCCBuiltin<"__builtin_ia32_broadcastmw256">,
5142           Intrinsic<[llvm_v8i32_ty], [llvm_i16_ty], [IntrNoMem]>;
5143    def int_x86_avx512_broadcastmw_128 :
5144           GCCBuiltin<"__builtin_ia32_broadcastmw128">,
5145           Intrinsic<[llvm_v4i32_ty], [llvm_i16_ty], [IntrNoMem]>;
5146    def int_x86_avx512_broadcastmb_512 :
5147           GCCBuiltin<"__builtin_ia32_broadcastmb512">,
5148           Intrinsic<[llvm_v8i64_ty], [llvm_i8_ty], [IntrNoMem]>;
5149    def int_x86_avx512_broadcastmb_256 :
5150           GCCBuiltin<"__builtin_ia32_broadcastmb256">,
5151           Intrinsic<[llvm_v4i64_ty], [llvm_i8_ty], [IntrNoMem]>;
5152    def int_x86_avx512_broadcastmb_128 :
5153           GCCBuiltin<"__builtin_ia32_broadcastmb128">,
5154           Intrinsic<[llvm_v2i64_ty], [llvm_i8_ty], [IntrNoMem]>;
5155 }
5156
5157 // Vector sign and zero extend
5158 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
5159   def int_x86_avx512_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq512">,
5160               Intrinsic<[llvm_v8i64_ty], [llvm_v16i8_ty],
5161                         [IntrNoMem]>;
5162   def int_x86_avx512_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd512">,
5163               Intrinsic<[llvm_v16i32_ty], [llvm_v16i16_ty],
5164                         [IntrNoMem]>;
5165   def int_x86_avx512_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd512">,
5166               Intrinsic<[llvm_v16i32_ty], [llvm_v16i8_ty],
5167                         [IntrNoMem]>;
5168   def int_x86_avx512_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq512">,
5169               Intrinsic<[llvm_v8i64_ty], [llvm_v8i16_ty],
5170                         [IntrNoMem]>;
5171   def int_x86_avx512_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq512">,
5172               Intrinsic<[llvm_v8i64_ty], [llvm_v8i32_ty],
5173                         [IntrNoMem]>;
5174 }
5175 //Bitwise Ops
5176 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
5177   def int_x86_avx512_mask_pand_d_128 : GCCBuiltin<"__builtin_ia32_pandd128_mask">,
5178           Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5179                      llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5180   def int_x86_avx512_mask_pand_d_256 : GCCBuiltin<"__builtin_ia32_pandd256_mask">,
5181           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5182                      llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5183   def int_x86_avx512_mask_pand_d_512 : GCCBuiltin<"__builtin_ia32_pandd512_mask">,
5184           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5185                      llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5186   def int_x86_avx512_mask_pand_q_128 : GCCBuiltin<"__builtin_ia32_pandq128_mask">,
5187           Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5188                      llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5189   def int_x86_avx512_mask_pand_q_256 : GCCBuiltin<"__builtin_ia32_pandq256_mask">,
5190           Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5191                      llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5192   def int_x86_avx512_mask_pand_q_512 : GCCBuiltin<"__builtin_ia32_pandq512_mask">,
5193           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5194                      llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5195   def int_x86_avx512_mask_pandn_d_128 : GCCBuiltin<"__builtin_ia32_pandnd128_mask">,
5196           Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5197                      llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5198   def int_x86_avx512_mask_pandn_d_256 : GCCBuiltin<"__builtin_ia32_pandnd256_mask">,
5199           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5200                      llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5201   def int_x86_avx512_mask_pandn_d_512 : GCCBuiltin<"__builtin_ia32_pandnd512_mask">,
5202           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5203                      llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5204   def int_x86_avx512_mask_pandn_q_128 : GCCBuiltin<"__builtin_ia32_pandnq128_mask">,
5205           Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5206                      llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5207   def int_x86_avx512_mask_pandn_q_256 : GCCBuiltin<"__builtin_ia32_pandnq256_mask">,
5208           Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5209                      llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5210   def int_x86_avx512_mask_pandn_q_512 : GCCBuiltin<"__builtin_ia32_pandnq512_mask">,
5211           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5212                      llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5213   def int_x86_avx512_mask_por_d_128 : GCCBuiltin<"__builtin_ia32_pord128_mask">,
5214           Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5215                      llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5216   def int_x86_avx512_mask_por_d_256 : GCCBuiltin<"__builtin_ia32_pord256_mask">,
5217           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5218                      llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5219   def int_x86_avx512_mask_por_d_512 : GCCBuiltin<"__builtin_ia32_pord512_mask">,
5220           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5221                      llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5222   def int_x86_avx512_mask_por_q_128 : GCCBuiltin<"__builtin_ia32_porq128_mask">,
5223           Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5224                      llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5225   def int_x86_avx512_mask_por_q_256 : GCCBuiltin<"__builtin_ia32_porq256_mask">,
5226           Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5227                      llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5228   def int_x86_avx512_mask_por_q_512 : GCCBuiltin<"__builtin_ia32_porq512_mask">,
5229           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5230                      llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5231   def int_x86_avx512_mask_pxor_d_128 : GCCBuiltin<"__builtin_ia32_pxord128_mask">,
5232           Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5233                      llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5234   def int_x86_avx512_mask_pxor_d_256 : GCCBuiltin<"__builtin_ia32_pxord256_mask">,
5235           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5236                      llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5237   def int_x86_avx512_mask_pxor_d_512 : GCCBuiltin<"__builtin_ia32_pxord512_mask">,
5238           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5239                      llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5240   def int_x86_avx512_mask_pxor_q_128 : GCCBuiltin<"__builtin_ia32_pxorq128_mask">,
5241           Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5242                      llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5243   def int_x86_avx512_mask_pxor_q_256 : GCCBuiltin<"__builtin_ia32_pxorq256_mask">,
5244           Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5245                      llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5246   def int_x86_avx512_mask_pxor_q_512 : GCCBuiltin<"__builtin_ia32_pxorq512_mask">,
5247           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5248                      llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5249 }
5250 // Arithmetic ops
5251 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
5252
5253   def int_x86_avx512_mask_add_ps_128 : GCCBuiltin<"__builtin_ia32_addps128_mask">,
5254           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5255                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5256   def int_x86_avx512_mask_add_ps_256 : GCCBuiltin<"__builtin_ia32_addps256_mask">,
5257           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5258                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5259   def int_x86_avx512_mask_add_ps_512 : GCCBuiltin<"__builtin_ia32_addps512_mask">,
5260           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5261                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5262   def int_x86_avx512_mask_add_pd_128 : GCCBuiltin<"__builtin_ia32_addpd128_mask">,
5263           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5264                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5265   def int_x86_avx512_mask_add_pd_256 : GCCBuiltin<"__builtin_ia32_addpd256_mask">,
5266           Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5267                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5268   def int_x86_avx512_mask_add_pd_512 : GCCBuiltin<"__builtin_ia32_addpd512_mask">,
5269           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5270                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5271   def int_x86_avx512_mask_sub_ps_128 : GCCBuiltin<"__builtin_ia32_subps128_mask">,
5272           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5273                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5274   def int_x86_avx512_mask_sub_ps_256 : GCCBuiltin<"__builtin_ia32_subps256_mask">,
5275           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5276                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5277   def int_x86_avx512_mask_sub_ps_512 : GCCBuiltin<"__builtin_ia32_subps512_mask">,
5278           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5279                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5280   def int_x86_avx512_mask_sub_pd_128 : GCCBuiltin<"__builtin_ia32_subpd128_mask">,
5281           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5282                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5283   def int_x86_avx512_mask_sub_pd_256 : GCCBuiltin<"__builtin_ia32_subpd256_mask">,
5284           Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5285                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5286   def int_x86_avx512_mask_sub_pd_512 : GCCBuiltin<"__builtin_ia32_subpd512_mask">,
5287           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5288                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5289   def int_x86_avx512_mask_mul_ps_128 : GCCBuiltin<"__builtin_ia32_mulps_mask">,
5290           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5291                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5292   def int_x86_avx512_mask_mul_ps_256 : GCCBuiltin<"__builtin_ia32_mulps256_mask">,
5293           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5294                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5295   def int_x86_avx512_mask_mul_ps_512 : GCCBuiltin<"__builtin_ia32_mulps512_mask">,
5296           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5297                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5298   def int_x86_avx512_mask_mul_pd_128 : GCCBuiltin<"__builtin_ia32_mulpd_mask">,
5299           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5300                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5301   def int_x86_avx512_mask_mul_pd_256 : GCCBuiltin<"__builtin_ia32_mulpd256_mask">,
5302           Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5303                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5304   def int_x86_avx512_mask_mul_pd_512 : GCCBuiltin<"__builtin_ia32_mulpd512_mask">,
5305           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5306                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5307   def int_x86_avx512_mask_div_ps_128 : GCCBuiltin<"__builtin_ia32_divps_mask">,
5308           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5309                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5310   def int_x86_avx512_mask_div_ps_256 : GCCBuiltin<"__builtin_ia32_divps256_mask">,
5311           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5312                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5313   def int_x86_avx512_mask_div_ps_512 : GCCBuiltin<"__builtin_ia32_divps512_mask">,
5314           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5315                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5316   def int_x86_avx512_mask_div_pd_128 : GCCBuiltin<"__builtin_ia32_divpd_mask">,
5317           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5318                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5319   def int_x86_avx512_mask_div_pd_256 : GCCBuiltin<"__builtin_ia32_divpd256_mask">,
5320           Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5321                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5322   def int_x86_avx512_mask_div_pd_512 : GCCBuiltin<"__builtin_ia32_divpd512_mask">,
5323           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5324                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5325   def int_x86_avx512_mask_max_ps_128 : GCCBuiltin<"__builtin_ia32_maxps_mask">,
5326           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5327                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5328   def int_x86_avx512_mask_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256_mask">,
5329           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5330                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5331   def int_x86_avx512_mask_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512_mask">,
5332           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5333                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5334   def int_x86_avx512_mask_max_pd_128 : GCCBuiltin<"__builtin_ia32_maxpd_mask">,
5335           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5336                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5337   def int_x86_avx512_mask_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256_mask">,
5338           Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5339                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5340   def int_x86_avx512_mask_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512_mask">,
5341           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5342                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5343   def int_x86_avx512_mask_min_ps_128 : GCCBuiltin<"__builtin_ia32_minps_mask">,
5344           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5345                      llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5346   def int_x86_avx512_mask_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256_mask">,
5347           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5348                      llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5349   def int_x86_avx512_mask_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512_mask">,
5350           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5351                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5352   def int_x86_avx512_mask_min_pd_128 : GCCBuiltin<"__builtin_ia32_minpd_mask">,
5353           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5354                      llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5355   def int_x86_avx512_mask_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256_mask">,
5356           Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5357                      llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5358   def int_x86_avx512_mask_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512_mask">,
5359           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5360                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5361
5362   def int_x86_avx512_mask_add_ss_round : GCCBuiltin<"__builtin_ia32_addss_round">,
5363           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5364                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5365   def int_x86_avx512_mask_div_ss_round : GCCBuiltin<"__builtin_ia32_divss_round">,
5366           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5367                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5368   def int_x86_avx512_mask_mul_ss_round : GCCBuiltin<"__builtin_ia32_mulss_round">,
5369           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5370                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5371   def int_x86_avx512_mask_sub_ss_round : GCCBuiltin<"__builtin_ia32_subss_round">,
5372           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5373                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5374   def int_x86_avx512_mask_max_ss_round : GCCBuiltin<"__builtin_ia32_maxss_round">,
5375           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5376                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5377   def int_x86_avx512_mask_min_ss_round : GCCBuiltin<"__builtin_ia32_minss_round">,
5378           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5379                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5380   def int_x86_avx512_mask_add_sd_round : GCCBuiltin<"__builtin_ia32_addsd_round">,
5381           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5382                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5383   def int_x86_avx512_mask_div_sd_round : GCCBuiltin<"__builtin_ia32_divsd_round">,
5384           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5385                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5386   def int_x86_avx512_mask_mul_sd_round : GCCBuiltin<"__builtin_ia32_mulsd_round">,
5387           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5388                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5389   def int_x86_avx512_mask_sub_sd_round : GCCBuiltin<"__builtin_ia32_subsd_round">,
5390           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5391                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5392   def int_x86_avx512_mask_max_sd_round : GCCBuiltin<"__builtin_ia32_maxsd_round">,
5393           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5394                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5395   def int_x86_avx512_mask_min_sd_round : GCCBuiltin<"__builtin_ia32_minsd_round">,
5396           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5397                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5398
5399   def int_x86_avx512_mask_rndscale_ss : GCCBuiltin<"__builtin_ia32_rndscaless_round">,
5400           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5401                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5402                                      [IntrNoMem]>;
5403   def int_x86_avx512_mask_rndscale_sd : GCCBuiltin<"__builtin_ia32_rndscalesd_round">,
5404           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5405                                       llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5406                                      [IntrNoMem]>;
5407   def int_x86_avx512_mask_range_ss : GCCBuiltin<"__builtin_ia32_rangess128_round">,
5408           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5409                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5410                                      [IntrNoMem]>;
5411   def int_x86_avx512_mask_range_sd : GCCBuiltin<"__builtin_ia32_rangesd128_round">,
5412           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5413                                       llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5414                                      [IntrNoMem]>;
5415   def int_x86_avx512_mask_reduce_ss : GCCBuiltin<"__builtin_ia32_reducess">,
5416           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5417                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5418                                      [IntrNoMem]>;
5419   def int_x86_avx512_mask_reduce_sd : GCCBuiltin<"__builtin_ia32_reducesd">,
5420           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5421                                       llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
5422                                      [IntrNoMem]>;
5423   def int_x86_avx512_mask_scalef_sd : GCCBuiltin<"__builtin_ia32_scalefsd_round">,
5424           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 
5425                                       llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5426   def int_x86_avx512_mask_scalef_ss : GCCBuiltin<"__builtin_ia32_scalefss_round">,
5427           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 
5428                                       llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5429   def int_x86_avx512_mask_scalef_pd_128 : GCCBuiltin<"__builtin_ia32_scalefpd128_mask">,
5430           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, 
5431                     llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5432   def int_x86_avx512_mask_scalef_pd_256 : GCCBuiltin<"__builtin_ia32_scalefpd256_mask">,
5433           Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, 
5434                     llvm_v4f64_ty, llvm_i8_ty],[IntrNoMem]>;
5435   def int_x86_avx512_mask_scalef_pd_512 : GCCBuiltin<"__builtin_ia32_scalefpd512_mask">,
5436           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, 
5437                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5438   def int_x86_avx512_mask_scalef_ps_128 : GCCBuiltin<"__builtin_ia32_scalefps128_mask">,
5439           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, 
5440                     llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5441   def int_x86_avx512_mask_scalef_ps_256 : GCCBuiltin<"__builtin_ia32_scalefps256_mask">,
5442           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, 
5443                     llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5444   def int_x86_avx512_mask_scalef_ps_512 : GCCBuiltin<"__builtin_ia32_scalefps512_mask">,
5445           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, 
5446                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5447
5448   def int_x86_avx512_mask_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss_round">,
5449         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5450                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5451   def int_x86_avx512_mask_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtsd_round">,
5452         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5453                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5454
5455   def int_x86_avx512_mask_sqrt_pd_128 : GCCBuiltin<"__builtin_ia32_sqrtpd128_mask">,
5456         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5457                                     llvm_i8_ty], [IntrNoMem]>;
5458   def int_x86_avx512_mask_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256_mask">,
5459         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5460                                     llvm_i8_ty], [IntrNoMem]>;
5461   def int_x86_avx512_mask_sqrt_pd_512 : GCCBuiltin<"__builtin_ia32_sqrtpd512_mask">,
5462         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5463                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5464   def int_x86_avx512_mask_sqrt_ps_128 : GCCBuiltin<"__builtin_ia32_sqrtps128_mask">,
5465         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5466                                      llvm_i8_ty], [IntrNoMem]>;
5467   def int_x86_avx512_mask_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256_mask">,
5468         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5469                                      llvm_i8_ty], [IntrNoMem]>;
5470   def int_x86_avx512_mask_sqrt_ps_512 : GCCBuiltin<"__builtin_ia32_sqrtps512_mask">,
5471         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5472                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5473   def int_x86_avx512_mask_getexp_pd_128 : GCCBuiltin<"__builtin_ia32_getexppd128_mask">,
5474         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5475                                     llvm_i8_ty], [IntrNoMem]>;
5476   def int_x86_avx512_mask_getexp_pd_256 : GCCBuiltin<"__builtin_ia32_getexppd256_mask">,
5477         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5478                                     llvm_i8_ty], [IntrNoMem]>;
5479   def int_x86_avx512_mask_getexp_pd_512 : GCCBuiltin<"__builtin_ia32_getexppd512_mask">,
5480         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5481                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5482   def int_x86_avx512_mask_getexp_ps_128 : GCCBuiltin<"__builtin_ia32_getexpps128_mask">,
5483         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5484                                      llvm_i8_ty], [IntrNoMem]>;
5485   def int_x86_avx512_mask_getexp_ps_256 : GCCBuiltin<"__builtin_ia32_getexpps256_mask">,
5486         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5487                                      llvm_i8_ty], [IntrNoMem]>;
5488   def int_x86_avx512_mask_getexp_ps_512 : GCCBuiltin<"__builtin_ia32_getexpps512_mask">,
5489         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5490                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5491
5492   def int_x86_avx512_mask_getexp_ss : GCCBuiltin<"__builtin_ia32_getexpss_mask">,
5493         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5494                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5495   def int_x86_avx512_mask_getexp_sd : GCCBuiltin<"__builtin_ia32_getexpsd_mask">,
5496         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5497                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5498
5499   def int_x86_avx512_mask_getmant_pd_128 :
5500          GCCBuiltin<"__builtin_ia32_getmantpd128_mask">,
5501           Intrinsic<[llvm_v2f64_ty],
5502           [llvm_v2f64_ty,llvm_i32_ty, llvm_v2f64_ty,  llvm_i8_ty],
5503           [IntrNoMem]>;
5504
5505   def int_x86_avx512_mask_getmant_pd_256 :
5506          GCCBuiltin<"__builtin_ia32_getmantpd256_mask">,
5507           Intrinsic<[llvm_v4f64_ty],
5508           [llvm_v4f64_ty,llvm_i32_ty, llvm_v4f64_ty,  llvm_i8_ty],
5509           [IntrNoMem]>;
5510
5511   def int_x86_avx512_mask_getmant_pd_512 :
5512          GCCBuiltin<"__builtin_ia32_getmantpd512_mask">,
5513           Intrinsic<[llvm_v8f64_ty],
5514           [llvm_v8f64_ty,llvm_i32_ty, llvm_v8f64_ty,  llvm_i8_ty,llvm_i32_ty ],
5515           [IntrNoMem]>;
5516
5517   def int_x86_avx512_mask_getmant_ps_128 :
5518          GCCBuiltin<"__builtin_ia32_getmantps128_mask">,
5519           Intrinsic<[llvm_v4f32_ty],
5520           [llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
5521           [IntrNoMem]>;
5522
5523   def int_x86_avx512_mask_getmant_ps_256 :
5524          GCCBuiltin<"__builtin_ia32_getmantps256_mask">,
5525           Intrinsic<[llvm_v8f32_ty],
5526           [llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
5527           [IntrNoMem]>;
5528
5529   def int_x86_avx512_mask_getmant_ps_512 :
5530          GCCBuiltin<"__builtin_ia32_getmantps512_mask">,
5531           Intrinsic<[llvm_v16f32_ty],
5532           [llvm_v16f32_ty,llvm_i32_ty, llvm_v16f32_ty,llvm_i16_ty,llvm_i32_ty],
5533           [IntrNoMem]>;
5534
5535   def int_x86_avx512_mask_getmant_ss :
5536          GCCBuiltin<"__builtin_ia32_getmantss_round">,
5537           Intrinsic<[llvm_v4f32_ty],
5538           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty,
5539            llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5540
5541   def int_x86_avx512_mask_getmant_sd :
5542          GCCBuiltin<"__builtin_ia32_getmantsd_round">,
5543           Intrinsic<[llvm_v2f64_ty],
5544           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v2f64_ty,
5545            llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5546
5547   def int_x86_avx512_rsqrt14_ss : GCCBuiltin<"__builtin_ia32_rsqrt14ss">,
5548         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5549                                     llvm_i8_ty], [IntrNoMem]>;
5550   def int_x86_avx512_rsqrt14_sd : GCCBuiltin<"__builtin_ia32_rsqrt14sd">,
5551         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5552                                     llvm_i8_ty], [IntrNoMem]>;
5553
5554   def int_x86_avx512_rsqrt14_pd_128 : GCCBuiltin<"__builtin_ia32_rsqrt14pd128_mask">,
5555         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5556                                     llvm_i8_ty], [IntrNoMem]>;
5557   def int_x86_avx512_rsqrt14_pd_256 : GCCBuiltin<"__builtin_ia32_rsqrt14pd256_mask">,
5558         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5559                                     llvm_i8_ty], [IntrNoMem]>;
5560   def int_x86_avx512_rsqrt14_pd_512 : GCCBuiltin<"__builtin_ia32_rsqrt14pd512_mask">,
5561         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5562                                     llvm_i8_ty], [IntrNoMem]>;
5563   def int_x86_avx512_rsqrt14_ps_128 : GCCBuiltin<"__builtin_ia32_rsqrt14ps128_mask">,
5564         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5565                                      llvm_i8_ty], [IntrNoMem]>;
5566   def int_x86_avx512_rsqrt14_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrt14ps256_mask">,
5567           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5568                                      llvm_i8_ty], [IntrNoMem]>;
5569   def int_x86_avx512_rsqrt14_ps_512 : GCCBuiltin<"__builtin_ia32_rsqrt14ps512_mask">,
5570         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5571                                      llvm_i16_ty], [IntrNoMem]>;
5572   def int_x86_avx512_rcp14_ss : GCCBuiltin<"__builtin_ia32_rcp14ss">,
5573         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
5574                                     llvm_i8_ty], [IntrNoMem]>;
5575   def int_x86_avx512_rcp14_sd : GCCBuiltin<"__builtin_ia32_rcp14sd">,
5576         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
5577                                     llvm_i8_ty], [IntrNoMem]>;
5578
5579   def int_x86_avx512_rcp14_pd_128 : GCCBuiltin<"__builtin_ia32_rcp14pd128_mask">,
5580         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5581                                     llvm_i8_ty], [IntrNoMem]>;
5582   def int_x86_avx512_rcp14_pd_256 : GCCBuiltin<"__builtin_ia32_rcp14pd256_mask">,
5583         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5584                                     llvm_i8_ty], [IntrNoMem]>;
5585   def int_x86_avx512_rcp14_pd_512 : GCCBuiltin<"__builtin_ia32_rcp14pd512_mask">,
5586         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5587                                     llvm_i8_ty], [IntrNoMem]>;
5588   def int_x86_avx512_rcp14_ps_128 : GCCBuiltin<"__builtin_ia32_rcp14ps128_mask">,
5589         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5590                                      llvm_i8_ty], [IntrNoMem]>;
5591   def int_x86_avx512_rcp14_ps_256 : GCCBuiltin<"__builtin_ia32_rcp14ps256_mask">,
5592           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5593                                      llvm_i8_ty], [IntrNoMem]>;
5594   def int_x86_avx512_rcp14_ps_512 : GCCBuiltin<"__builtin_ia32_rcp14ps512_mask">,
5595         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5596                                      llvm_i16_ty], [IntrNoMem]>;
5597
5598   def int_x86_avx512_rcp28_ps : GCCBuiltin<"__builtin_ia32_rcp28ps_mask">,
5599             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5600                                          llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5601   def int_x86_avx512_rcp28_pd : GCCBuiltin<"__builtin_ia32_rcp28pd_mask">,
5602             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5603                                         llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5604   def int_x86_avx512_exp2_ps : GCCBuiltin<"__builtin_ia32_exp2ps_mask">,
5605             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5606                                          llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
5607   def int_x86_avx512_exp2_pd : GCCBuiltin<"__builtin_ia32_exp2pd_mask">,
5608             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5609                                         llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
5610
5611   def int_x86_avx512_rcp28_ss : GCCBuiltin<"__builtin_ia32_rcp28ss_round">,
5612             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5613                                         llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
5614                       [IntrNoMem]>;
5615   def int_x86_avx512_rcp28_sd : GCCBuiltin<"__builtin_ia32_rcp28sd_round">,
5616             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5617                                         llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
5618                       [IntrNoMem]>;
5619   def int_x86_avx512_rsqrt28_ps : GCCBuiltin<"__builtin_ia32_rsqrt28ps_mask">,
5620             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5621                                          llvm_i16_ty, llvm_i32_ty],
5622                       [IntrNoMem]>;
5623   def int_x86_avx512_rsqrt28_pd : GCCBuiltin<"__builtin_ia32_rsqrt28pd_mask">,
5624             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5625                                         llvm_i8_ty, llvm_i32_ty],
5626                       [IntrNoMem]>;
5627   def int_x86_avx512_rsqrt28_ss : GCCBuiltin<"__builtin_ia32_rsqrt28ss_round">,
5628             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5629                                         llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
5630                       [IntrNoMem]>;
5631   def int_x86_avx512_rsqrt28_sd : GCCBuiltin<"__builtin_ia32_rsqrt28sd_round">,
5632             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5633                                         llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
5634                       [IntrNoMem]>;
5635 def int_x86_avx512_psad_bw_512 : GCCBuiltin<"__builtin_ia32_psadbw512">,
5636             Intrinsic<[llvm_v8i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty],
5637                       [IntrNoMem]>;
5638 }
5639 // FP logical ops
5640 let TargetPrefix = "x86" in {
5641   def int_x86_avx512_mask_and_pd_128 : GCCBuiltin<"__builtin_ia32_andpd128_mask">,
5642             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5643                       llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5644   def int_x86_avx512_mask_and_pd_256 : GCCBuiltin<"__builtin_ia32_andpd256_mask">,
5645             Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5646                       llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5647   def int_x86_avx512_mask_and_pd_512 : GCCBuiltin<"__builtin_ia32_andpd512_mask">,
5648           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5649                     llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5650   def int_x86_avx512_mask_and_ps_128 : GCCBuiltin<"__builtin_ia32_andps128_mask">,
5651             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5652                       llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5653   def int_x86_avx512_mask_and_ps_256 : GCCBuiltin<"__builtin_ia32_andps256_mask">,
5654             Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5655                       llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5656   def int_x86_avx512_mask_and_ps_512 : GCCBuiltin<"__builtin_ia32_andps512_mask">,
5657           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5658                     llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5659   def int_x86_avx512_mask_andn_pd_128 : GCCBuiltin<"__builtin_ia32_andnpd128_mask">,
5660             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5661                       llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5662   def int_x86_avx512_mask_andn_pd_256 : GCCBuiltin<"__builtin_ia32_andnpd256_mask">,
5663             Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5664                       llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5665   def int_x86_avx512_mask_andn_pd_512 : GCCBuiltin<"__builtin_ia32_andnpd512_mask">,
5666           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5667                     llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5668   def int_x86_avx512_mask_andn_ps_128 : GCCBuiltin<"__builtin_ia32_andnps128_mask">,
5669             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5670                       llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5671   def int_x86_avx512_mask_andn_ps_256 : GCCBuiltin<"__builtin_ia32_andnps256_mask">,
5672             Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5673                       llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5674   def int_x86_avx512_mask_andn_ps_512 : GCCBuiltin<"__builtin_ia32_andnps512_mask">,
5675           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5676                     llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5677   def int_x86_avx512_mask_or_pd_128 : GCCBuiltin<"__builtin_ia32_orpd128_mask">,
5678             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5679                       llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5680   def int_x86_avx512_mask_or_pd_256 : GCCBuiltin<"__builtin_ia32_orpd256_mask">,
5681             Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5682                       llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5683   def int_x86_avx512_mask_or_pd_512 : GCCBuiltin<"__builtin_ia32_orpd512_mask">,
5684           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5685                     llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5686   def int_x86_avx512_mask_or_ps_128 : GCCBuiltin<"__builtin_ia32_orps128_mask">,
5687             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5688                       llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5689   def int_x86_avx512_mask_or_ps_256 : GCCBuiltin<"__builtin_ia32_orps256_mask">,
5690             Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5691                       llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5692   def int_x86_avx512_mask_or_ps_512 : GCCBuiltin<"__builtin_ia32_orps512_mask">,
5693           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5694                     llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
5695   
5696   def int_x86_avx512_mask_xor_pd_128 : GCCBuiltin<"__builtin_ia32_xorpd128_mask">,
5697             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
5698                       llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
5699   def int_x86_avx512_mask_xor_pd_256 : GCCBuiltin<"__builtin_ia32_xorpd256_mask">,
5700             Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
5701                       llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
5702   def int_x86_avx512_mask_xor_pd_512 : GCCBuiltin<"__builtin_ia32_xorpd512_mask">,
5703           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
5704                     llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
5705   def int_x86_avx512_mask_xor_ps_128 : GCCBuiltin<"__builtin_ia32_xorps128_mask">,
5706             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
5707                       llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
5708   def int_x86_avx512_mask_xor_ps_256 : GCCBuiltin<"__builtin_ia32_xorps256_mask">,
5709             Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
5710                       llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
5711   def int_x86_avx512_mask_xor_ps_512 : GCCBuiltin<"__builtin_ia32_xorps512_mask">,
5712           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
5713                     llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;      
5714 }
5715 // Integer arithmetic ops
5716 let TargetPrefix = "x86" in {
5717   def int_x86_avx512_mask_padd_b_128 : GCCBuiltin<"__builtin_ia32_paddb128_mask">,
5718           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5719                      llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5720   def int_x86_avx512_mask_padd_b_256 : GCCBuiltin<"__builtin_ia32_paddb256_mask">,
5721           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5722                      llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5723   def int_x86_avx512_mask_padd_b_512 : GCCBuiltin<"__builtin_ia32_paddb512_mask">,
5724           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5725                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5726   def int_x86_avx512_mask_padd_w_128 : GCCBuiltin<"__builtin_ia32_paddw128_mask">,
5727           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5728                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5729   def int_x86_avx512_mask_padd_w_256 : GCCBuiltin<"__builtin_ia32_paddw256_mask">,
5730           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5731                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5732   def int_x86_avx512_mask_padd_w_512 : GCCBuiltin<"__builtin_ia32_paddw512_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_padds_b_128 : GCCBuiltin<"__builtin_ia32_paddsb128_mask">,
5736           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5737                      llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5738   def int_x86_avx512_mask_padds_b_256 : GCCBuiltin<"__builtin_ia32_paddsb256_mask">,
5739           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5740                      llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5741   def int_x86_avx512_mask_padds_b_512 : GCCBuiltin<"__builtin_ia32_paddsb512_mask">,
5742           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5743                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5744   def int_x86_avx512_mask_padds_w_128 : GCCBuiltin<"__builtin_ia32_paddsw128_mask">,
5745           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5746                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5747   def int_x86_avx512_mask_padds_w_256 : GCCBuiltin<"__builtin_ia32_paddsw256_mask">,
5748           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5749                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5750   def int_x86_avx512_mask_padds_w_512 : GCCBuiltin<"__builtin_ia32_paddsw512_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_paddus_b_128 : GCCBuiltin<"__builtin_ia32_paddusb128_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_paddus_b_256 : GCCBuiltin<"__builtin_ia32_paddusb256_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_paddus_b_512 : GCCBuiltin<"__builtin_ia32_paddusb512_mask">,
5760           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5761                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5762   def int_x86_avx512_mask_paddus_w_128 : GCCBuiltin<"__builtin_ia32_paddusw128_mask">,
5763           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5764                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5765   def int_x86_avx512_mask_paddus_w_256 : GCCBuiltin<"__builtin_ia32_paddusw256_mask">,
5766           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5767                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5768   def int_x86_avx512_mask_paddus_w_512 : GCCBuiltin<"__builtin_ia32_paddusw512_mask">,
5769           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5770                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5771   def int_x86_avx512_mask_padd_d_128 : GCCBuiltin<"__builtin_ia32_paddd128_mask">,
5772           Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5773                      llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5774   def int_x86_avx512_mask_padd_d_256 : GCCBuiltin<"__builtin_ia32_paddd256_mask">,
5775           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5776                      llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5777   def int_x86_avx512_mask_padd_d_512 : GCCBuiltin<"__builtin_ia32_paddd512_mask">,
5778           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5779                      llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5780   def int_x86_avx512_mask_padd_q_128 : GCCBuiltin<"__builtin_ia32_paddq128_mask">,
5781           Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5782                      llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5783   def int_x86_avx512_mask_padd_q_256 : GCCBuiltin<"__builtin_ia32_paddq256_mask">,
5784           Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5785                      llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5786   def int_x86_avx512_mask_padd_q_512 : GCCBuiltin<"__builtin_ia32_paddq512_mask">,
5787           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5788                      llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5789   def int_x86_avx512_mask_psub_b_128 : GCCBuiltin<"__builtin_ia32_psubb128_mask">,
5790           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5791                      llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5792   def int_x86_avx512_mask_psub_b_256 : GCCBuiltin<"__builtin_ia32_psubb256_mask">,
5793           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5794                      llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5795   def int_x86_avx512_mask_psub_b_512 : GCCBuiltin<"__builtin_ia32_psubb512_mask">,
5796           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5797                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5798   def int_x86_avx512_mask_psub_w_128 : GCCBuiltin<"__builtin_ia32_psubw128_mask">,
5799           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5800                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5801   def int_x86_avx512_mask_psub_w_256 : GCCBuiltin<"__builtin_ia32_psubw256_mask">,
5802           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5803                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5804   def int_x86_avx512_mask_psub_w_512 : GCCBuiltin<"__builtin_ia32_psubw512_mask">,
5805           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5806                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5807   def int_x86_avx512_mask_psubs_b_128 : GCCBuiltin<"__builtin_ia32_psubsb128_mask">,
5808           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5809                      llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5810   def int_x86_avx512_mask_psubs_b_256 : GCCBuiltin<"__builtin_ia32_psubsb256_mask">,
5811           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5812                      llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5813   def int_x86_avx512_mask_psubs_b_512 : GCCBuiltin<"__builtin_ia32_psubsb512_mask">,
5814           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5815                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5816   def int_x86_avx512_mask_psubs_w_128 : GCCBuiltin<"__builtin_ia32_psubsw128_mask">,
5817           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5818                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5819   def int_x86_avx512_mask_psubs_w_256 : GCCBuiltin<"__builtin_ia32_psubsw256_mask">,
5820           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5821                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5822   def int_x86_avx512_mask_psubs_w_512 : GCCBuiltin<"__builtin_ia32_psubsw512_mask">,
5823           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5824                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5825   def int_x86_avx512_mask_psubus_b_128 : GCCBuiltin<"__builtin_ia32_psubusb128_mask">,
5826           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
5827                      llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5828   def int_x86_avx512_mask_psubus_b_256 : GCCBuiltin<"__builtin_ia32_psubusb256_mask">,
5829           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
5830                      llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5831   def int_x86_avx512_mask_psubus_b_512 : GCCBuiltin<"__builtin_ia32_psubusb512_mask">,
5832           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
5833                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5834   def int_x86_avx512_mask_psubus_w_128 : GCCBuiltin<"__builtin_ia32_psubusw128_mask">,
5835           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5836                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5837   def int_x86_avx512_mask_psubus_w_256 : GCCBuiltin<"__builtin_ia32_psubusw256_mask">,
5838           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5839                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5840   def int_x86_avx512_mask_psubus_w_512 : GCCBuiltin<"__builtin_ia32_psubusw512_mask">,
5841           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5842                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5843   def int_x86_avx512_mask_psub_d_128 : GCCBuiltin<"__builtin_ia32_psubd128_mask">,
5844           Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5845                      llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5846   def int_x86_avx512_mask_psub_d_256 : GCCBuiltin<"__builtin_ia32_psubd256_mask">,
5847           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5848                      llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5849   def int_x86_avx512_mask_psub_d_512 : GCCBuiltin<"__builtin_ia32_psubd512_mask">,
5850           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5851                      llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5852   def int_x86_avx512_mask_psub_q_128 : GCCBuiltin<"__builtin_ia32_psubq128_mask">,
5853           Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5854                      llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5855   def int_x86_avx512_mask_psub_q_256 : GCCBuiltin<"__builtin_ia32_psubq256_mask">,
5856           Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5857                      llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5858   def int_x86_avx512_mask_psub_q_512 : GCCBuiltin<"__builtin_ia32_psubq512_mask">,
5859           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5860                      llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5861   def int_x86_avx512_mask_pmulu_dq_128 : GCCBuiltin<"__builtin_ia32_pmuludq128_mask">,
5862               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5863                          llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5864   def int_x86_avx512_mask_pmul_dq_128 : GCCBuiltin<"__builtin_ia32_pmuldq128_mask">,
5865               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5866                          llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5867   def int_x86_avx512_mask_pmulu_dq_256 : GCCBuiltin<"__builtin_ia32_pmuludq256_mask">,
5868               Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5869                          llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5870   def int_x86_avx512_mask_pmul_dq_256 : GCCBuiltin<"__builtin_ia32_pmuldq256_mask">,
5871               Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5872                          llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5873   def int_x86_avx512_mask_pmulu_dq_512 : GCCBuiltin<"__builtin_ia32_pmuludq512_mask">,
5874               Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5875                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5876   def int_x86_avx512_mask_pmul_dq_512 : GCCBuiltin<"__builtin_ia32_pmuldq512_mask">,
5877               Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5878                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5879   def int_x86_avx512_mask_pmull_w_128 : GCCBuiltin<"__builtin_ia32_pmullw128_mask">,
5880               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
5881                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5882   def int_x86_avx512_mask_pmull_w_256 : GCCBuiltin<"__builtin_ia32_pmullw256_mask">,
5883               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
5884                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5885   def int_x86_avx512_mask_pmull_w_512 : GCCBuiltin<"__builtin_ia32_pmullw512_mask">,
5886               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5887                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5888   def int_x86_avx512_mask_pmull_d_128 : GCCBuiltin<"__builtin_ia32_pmulld128_mask">,
5889               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5890                      llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
5891   def int_x86_avx512_mask_pmull_d_256 : GCCBuiltin<"__builtin_ia32_pmulld256_mask">,
5892               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
5893                      llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
5894   def int_x86_avx512_mask_pmull_d_512 : GCCBuiltin<"__builtin_ia32_pmulld512_mask">,
5895               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
5896                      llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
5897   def int_x86_avx512_mask_pmull_q_128 : GCCBuiltin<"__builtin_ia32_pmullq128_mask">,
5898               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
5899                      llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
5900   def int_x86_avx512_mask_pmull_q_256 : GCCBuiltin<"__builtin_ia32_pmullq256_mask">,
5901               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
5902                      llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
5903   def int_x86_avx512_mask_pmull_q_512 : GCCBuiltin<"__builtin_ia32_pmullq512_mask">,
5904               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
5905                      llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
5906   def int_x86_avx512_mask_pmulhu_w_512 : GCCBuiltin<"__builtin_ia32_pmulhuw512_mask">,
5907               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5908                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5909   def int_x86_avx512_mask_pmulh_w_512 : GCCBuiltin<"__builtin_ia32_pmulhw512_mask">,
5910               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
5911                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5912   def int_x86_avx512_mask_pmulhu_w_128 : GCCBuiltin<"__builtin_ia32_pmulhuw128_mask">,
5913               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 
5914                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5915   def int_x86_avx512_mask_pmulhu_w_256 : GCCBuiltin<"__builtin_ia32_pmulhuw256_mask">,
5916               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 
5917                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5918   def int_x86_avx512_mask_pmulh_w_128 : GCCBuiltin<"__builtin_ia32_pmulhw128_mask">,
5919               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 
5920                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5921   def int_x86_avx512_mask_pmulh_w_256 : GCCBuiltin<"__builtin_ia32_pmulhw256_mask">,
5922               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 
5923                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5924   def int_x86_avx512_mask_pavg_b_512 : GCCBuiltin<"__builtin_ia32_pavgb512_mask">,
5925           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty, 
5926                     llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
5927   def int_x86_avx512_mask_pavg_w_512 : GCCBuiltin<"__builtin_ia32_pavgw512_mask">,
5928           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,  
5929                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
5930   def int_x86_avx512_mask_pavg_b_128 : GCCBuiltin<"__builtin_ia32_pavgb128_mask">,
5931           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,  
5932                     llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
5933   def int_x86_avx512_mask_pavg_b_256 : GCCBuiltin<"__builtin_ia32_pavgb256_mask">,
5934           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,  
5935                     llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
5936   def int_x86_avx512_mask_pavg_w_128 : GCCBuiltin<"__builtin_ia32_pavgw128_mask">,
5937           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,  
5938                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
5939   def int_x86_avx512_mask_pavg_w_256 : GCCBuiltin<"__builtin_ia32_pavgw256_mask">,
5940           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, 
5941                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
5942   def int_x86_avx512_mask_pmaddw_d_128 :
5943          GCCBuiltin<"__builtin_ia32_pmaddwd128_mask">,
5944           Intrinsic<[llvm_v4i32_ty],
5945           [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty,  llvm_i8_ty],
5946           [IntrNoMem]>;
5947   def int_x86_avx512_mask_pmaddw_d_256 :
5948          GCCBuiltin<"__builtin_ia32_pmaddwd256_mask">,
5949           Intrinsic<[llvm_v8i32_ty],
5950           [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v8i32_ty,  llvm_i8_ty],
5951           [IntrNoMem]>;
5952   def int_x86_avx512_mask_pmaddw_d_512 :
5953          GCCBuiltin<"__builtin_ia32_pmaddwd512_mask">,
5954           Intrinsic<[llvm_v16i32_ty],
5955           [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v16i32_ty,  llvm_i16_ty],
5956           [IntrNoMem]>;
5957   def int_x86_avx512_mask_pmaddubs_w_128 :
5958          GCCBuiltin<"__builtin_ia32_pmaddubsw128_mask">,
5959           Intrinsic<[llvm_v8i16_ty],
5960           [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v8i16_ty,  llvm_i8_ty],
5961           [IntrNoMem]>;
5962   def int_x86_avx512_mask_pmaddubs_w_256 :
5963          GCCBuiltin<"__builtin_ia32_pmaddubsw256_mask">,
5964           Intrinsic<[llvm_v16i16_ty],
5965           [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v16i16_ty,  llvm_i16_ty],
5966           [IntrNoMem]>;
5967   def int_x86_avx512_mask_pmaddubs_w_512 :
5968          GCCBuiltin<"__builtin_ia32_pmaddubsw512_mask">,
5969           Intrinsic<[llvm_v32i16_ty],
5970           [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v32i16_ty,  llvm_i32_ty],
5971           [IntrNoMem]>;
5972
5973   def int_x86_avx512_mask_dbpsadbw_128 :
5974          GCCBuiltin<"__builtin_ia32_dbpsadbw128_mask">,
5975           Intrinsic<[llvm_v8i16_ty],
5976           [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, llvm_v8i16_ty,
5977            llvm_i8_ty], [IntrNoMem]>;
5978
5979   def int_x86_avx512_mask_dbpsadbw_256 :
5980          GCCBuiltin<"__builtin_ia32_dbpsadbw256_mask">,
5981           Intrinsic<[llvm_v16i16_ty],
5982           [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty, llvm_v16i16_ty,
5983            llvm_i16_ty], [IntrNoMem]>;
5984
5985   def int_x86_avx512_mask_dbpsadbw_512 :
5986          GCCBuiltin<"__builtin_ia32_dbpsadbw512_mask">,
5987           Intrinsic<[llvm_v32i16_ty],
5988           [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty, llvm_v32i16_ty,
5989            llvm_i32_ty], [IntrNoMem]>;
5990 }
5991
5992 // Gather and Scatter ops
5993 let TargetPrefix = "x86" in {
5994   def int_x86_avx512_gather_dpd_512  : GCCBuiltin<"__builtin_ia32_gathersiv8df">,
5995           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
5996                      llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5997                     [IntrReadArgMem]>;
5998   def int_x86_avx512_gather_dps_512  : GCCBuiltin<"__builtin_ia32_gathersiv16sf">,
5999           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty,
6000                      llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
6001                     [IntrReadArgMem]>;
6002   def int_x86_avx512_gather_qpd_512  : GCCBuiltin<"__builtin_ia32_gatherdiv8df">,
6003           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
6004                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
6005                     [IntrReadArgMem]>;
6006   def int_x86_avx512_gather_qps_512  : GCCBuiltin<"__builtin_ia32_gatherdiv16sf">,
6007           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty,
6008                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
6009                     [IntrReadArgMem]>;
6010
6011
6012   def int_x86_avx512_gather_dpq_512  : GCCBuiltin<"__builtin_ia32_gathersiv8di">,
6013           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
6014                      llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
6015                     [IntrReadArgMem]>;
6016   def int_x86_avx512_gather_dpi_512  : GCCBuiltin<"__builtin_ia32_gathersiv16si">,
6017           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty,
6018                      llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
6019                     [IntrReadArgMem]>;
6020   def int_x86_avx512_gather_qpq_512  : GCCBuiltin<"__builtin_ia32_gatherdiv8di">,
6021           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
6022                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
6023                     [IntrReadArgMem]>;
6024   def int_x86_avx512_gather_qpi_512  : GCCBuiltin<"__builtin_ia32_gatherdiv16si">,
6025           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty,
6026                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
6027                     [IntrReadArgMem]>;
6028
6029   def int_x86_avx512_gather3div2_df : 
6030         GCCBuiltin<"__builtin_ia32_gather3div2df">,
6031           Intrinsic<[llvm_v2f64_ty],
6032           [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
6033           [IntrReadArgMem]>;
6034
6035   def int_x86_avx512_gather3div2_di : 
6036         GCCBuiltin<"__builtin_ia32_gather3div2di">,
6037           Intrinsic<[llvm_v4i32_ty],
6038           [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
6039           [IntrReadArgMem]>;
6040
6041   def int_x86_avx512_gather3div4_df : 
6042         GCCBuiltin<"__builtin_ia32_gather3div4df">,
6043           Intrinsic<[llvm_v4f64_ty],
6044           [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
6045           [IntrReadArgMem]>;
6046
6047   def int_x86_avx512_gather3div4_di : 
6048         GCCBuiltin<"__builtin_ia32_gather3div4di">,
6049           Intrinsic<[llvm_v8i32_ty],
6050           [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
6051           [IntrReadArgMem]>;
6052
6053   def int_x86_avx512_gather3div4_sf : 
6054         GCCBuiltin<"__builtin_ia32_gather3div4sf">,
6055           Intrinsic<[llvm_v4f32_ty],
6056           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
6057           [IntrReadArgMem]>;
6058
6059   def int_x86_avx512_gather3div4_si : 
6060         GCCBuiltin<"__builtin_ia32_gather3div4si">,
6061           Intrinsic<[llvm_v4i32_ty],
6062           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
6063           [IntrReadArgMem]>;
6064
6065   def int_x86_avx512_gather3div8_sf : 
6066         GCCBuiltin<"__builtin_ia32_gather3div8sf">,
6067           Intrinsic<[llvm_v4f32_ty],
6068           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
6069           [IntrReadArgMem]>;
6070
6071   def int_x86_avx512_gather3div8_si : 
6072         GCCBuiltin<"__builtin_ia32_gather3div8si">,
6073           Intrinsic<[llvm_v4i32_ty],
6074           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
6075           [IntrReadArgMem]>;
6076
6077   def int_x86_avx512_gather3siv2_df : 
6078         GCCBuiltin<"__builtin_ia32_gather3siv2df">,
6079           Intrinsic<[llvm_v2f64_ty],
6080           [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
6081           [IntrReadArgMem]>;
6082
6083   def int_x86_avx512_gather3siv2_di : 
6084         GCCBuiltin<"__builtin_ia32_gather3siv2di">,
6085           Intrinsic<[llvm_v4i32_ty],
6086           [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
6087           [IntrReadArgMem]>;
6088
6089   def int_x86_avx512_gather3siv4_df : 
6090         GCCBuiltin<"__builtin_ia32_gather3siv4df">,
6091           Intrinsic<[llvm_v4f64_ty],
6092           [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
6093           [IntrReadArgMem]>;
6094
6095   def int_x86_avx512_gather3siv4_di : 
6096         GCCBuiltin<"__builtin_ia32_gather3siv4di">,
6097           Intrinsic<[llvm_v8i32_ty],
6098           [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
6099           [IntrReadArgMem]>;
6100
6101   def int_x86_avx512_gather3siv4_sf : 
6102         GCCBuiltin<"__builtin_ia32_gather3siv4sf">,
6103           Intrinsic<[llvm_v4f32_ty],
6104           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
6105           [IntrReadArgMem]>;
6106
6107   def int_x86_avx512_gather3siv4_si : 
6108         GCCBuiltin<"__builtin_ia32_gather3siv4si">,
6109           Intrinsic<[llvm_v4i32_ty],
6110           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
6111           [IntrReadArgMem]>;
6112
6113   def int_x86_avx512_gather3siv8_sf : 
6114         GCCBuiltin<"__builtin_ia32_gather3siv8sf">,
6115           Intrinsic<[llvm_v8f32_ty],
6116           [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
6117           [IntrReadArgMem]>;
6118
6119   def int_x86_avx512_gather3siv8_si : 
6120         GCCBuiltin<"__builtin_ia32_gather3siv8si">,
6121           Intrinsic<[llvm_v8i32_ty],
6122           [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
6123           [IntrReadArgMem]>;
6124
6125 // scatter
6126   def int_x86_avx512_scatter_dpd_512  : GCCBuiltin<"__builtin_ia32_scattersiv8df">,
6127           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
6128                         llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty],
6129                     [IntrReadWriteArgMem]>;
6130   def int_x86_avx512_scatter_dps_512  : GCCBuiltin<"__builtin_ia32_scattersiv16sf">,
6131           Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
6132                        llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty],
6133                     [IntrReadWriteArgMem]>;
6134   def int_x86_avx512_scatter_qpd_512  : GCCBuiltin<"__builtin_ia32_scatterdiv8df">,
6135           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
6136                      llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty],
6137                     [IntrReadWriteArgMem]>;
6138   def int_x86_avx512_scatter_qps_512  : GCCBuiltin<"__builtin_ia32_scatterdiv16sf">,
6139           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
6140                      llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty],
6141                     [IntrReadWriteArgMem]>;
6142
6143
6144   def int_x86_avx512_scatter_dpq_512  : GCCBuiltin<"__builtin_ia32_scattersiv8di">,
6145           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
6146                          llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty],
6147                     [IntrReadWriteArgMem]>;
6148   def int_x86_avx512_scatter_dpi_512  : GCCBuiltin<"__builtin_ia32_scattersiv16si">,
6149           Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
6150                      llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty],
6151                     [IntrReadWriteArgMem]>;
6152   def int_x86_avx512_scatter_qpq_512  : GCCBuiltin<"__builtin_ia32_scatterdiv8di">,
6153           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,llvm_v8i64_ty, llvm_v8i64_ty,
6154                          llvm_i32_ty],
6155                     [IntrReadWriteArgMem]>;
6156   def int_x86_avx512_scatter_qpi_512  : GCCBuiltin<"__builtin_ia32_scatterdiv16si">,
6157           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8i32_ty, 
6158                          llvm_i32_ty],
6159                     [IntrReadWriteArgMem]>;
6160
6161   def int_x86_avx512_scatterdiv2_df : 
6162        GCCBuiltin<"__builtin_ia32_scatterdiv2df">,
6163         Intrinsic<[],
6164         [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty],
6165         [IntrReadWriteArgMem]>;
6166
6167   def int_x86_avx512_scatterdiv2_di : 
6168         GCCBuiltin<"__builtin_ia32_scatterdiv2di">,
6169           Intrinsic<[],
6170           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
6171           [IntrReadWriteArgMem]>;
6172
6173   def int_x86_avx512_scatterdiv4_df : 
6174         GCCBuiltin<"__builtin_ia32_scatterdiv4df">,
6175           Intrinsic<[],
6176           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty],
6177           [IntrReadWriteArgMem]>;
6178
6179   def int_x86_avx512_scatterdiv4_di : 
6180         GCCBuiltin<"__builtin_ia32_scatterdiv4di">,
6181           Intrinsic<[],
6182           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty],
6183           [IntrReadWriteArgMem]>;
6184
6185   def int_x86_avx512_scatterdiv4_sf : 
6186         GCCBuiltin<"__builtin_ia32_scatterdiv4sf">,
6187           Intrinsic<[],
6188           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty],
6189           [IntrReadWriteArgMem]>;
6190
6191   def int_x86_avx512_scatterdiv4_si : 
6192         GCCBuiltin<"__builtin_ia32_scatterdiv4si">,
6193           Intrinsic<[],
6194           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty],
6195           [IntrReadWriteArgMem]>;
6196
6197   def int_x86_avx512_scatterdiv8_sf : 
6198         GCCBuiltin<"__builtin_ia32_scatterdiv8sf">,
6199           Intrinsic<[],
6200           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty],
6201           [IntrReadWriteArgMem]>;
6202
6203   def int_x86_avx512_scatterdiv8_si : 
6204         GCCBuiltin<"__builtin_ia32_scatterdiv8si">,
6205           Intrinsic<[],
6206           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty],
6207           [IntrReadWriteArgMem]>;
6208
6209   def int_x86_avx512_scattersiv2_df : 
6210         GCCBuiltin<"__builtin_ia32_scattersiv2df">,
6211           Intrinsic<[],
6212           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty],
6213           [IntrReadWriteArgMem]>;
6214
6215   def int_x86_avx512_scattersiv2_di : 
6216         GCCBuiltin<"__builtin_ia32_scattersiv2di">,
6217           Intrinsic<[],
6218           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty],
6219           [IntrReadWriteArgMem]>;
6220
6221   def int_x86_avx512_scattersiv4_df : 
6222         GCCBuiltin<"__builtin_ia32_scattersiv4df">,
6223           Intrinsic<[],
6224           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty],
6225           [IntrReadWriteArgMem]>;
6226
6227   def int_x86_avx512_scattersiv4_di : 
6228         GCCBuiltin<"__builtin_ia32_scattersiv4di">,
6229           Intrinsic<[],
6230           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty],
6231           [IntrReadWriteArgMem]>;
6232
6233   def int_x86_avx512_scattersiv4_sf : 
6234         GCCBuiltin<"__builtin_ia32_scattersiv4sf">,
6235           Intrinsic<[],
6236           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty],
6237           [IntrReadWriteArgMem]>;
6238
6239   def int_x86_avx512_scattersiv4_si : 
6240         GCCBuiltin<"__builtin_ia32_scattersiv4si">,
6241           Intrinsic<[],
6242           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
6243           [IntrReadWriteArgMem]>;
6244
6245   def int_x86_avx512_scattersiv8_sf : 
6246         GCCBuiltin<"__builtin_ia32_scattersiv8sf">,
6247           Intrinsic<[],
6248           [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty],
6249           [IntrReadWriteArgMem]>;
6250
6251   def int_x86_avx512_scattersiv8_si : 
6252         GCCBuiltin<"__builtin_ia32_scattersiv8si">,
6253           Intrinsic<[],
6254           [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty],
6255           [IntrReadWriteArgMem]>;
6256
6257   // gather prefetch
6258   def int_x86_avx512_gatherpf_dpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfdpd">,
6259           Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
6260                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6261   def int_x86_avx512_gatherpf_dps_512  : GCCBuiltin<"__builtin_ia32_gatherpfdps">,
6262           Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
6263                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6264   def int_x86_avx512_gatherpf_qpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfqpd">,
6265           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
6266                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6267   def int_x86_avx512_gatherpf_qps_512  : GCCBuiltin<"__builtin_ia32_gatherpfqps">,
6268           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
6269                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6270
6271   // scatter prefetch
6272   def int_x86_avx512_scatterpf_dpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfdpd">,
6273           Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
6274                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6275   def int_x86_avx512_scatterpf_dps_512  : GCCBuiltin<"__builtin_ia32_scatterpfdps">,
6276           Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
6277                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6278   def int_x86_avx512_scatterpf_qpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfqpd">,
6279           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
6280                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6281   def int_x86_avx512_scatterpf_qps_512  : GCCBuiltin<"__builtin_ia32_scatterpfqps">,
6282           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
6283                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
6284 }
6285
6286 // AVX-512 conflict detection instruction
6287 // Instructions that count the number of leading zero bits
6288 let TargetPrefix = "x86" in {
6289   def int_x86_avx512_mask_conflict_d_128 :
6290           GCCBuiltin<"__builtin_ia32_vpconflictsi_128_mask">,
6291           Intrinsic<[llvm_v4i32_ty],
6292                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6293                     [IntrNoMem]>;
6294   def int_x86_avx512_mask_conflict_d_256 :
6295           GCCBuiltin<"__builtin_ia32_vpconflictsi_256_mask">,
6296           Intrinsic<[llvm_v8i32_ty],
6297                     [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6298                     [IntrNoMem]>;
6299   def int_x86_avx512_mask_conflict_d_512 :
6300           GCCBuiltin<"__builtin_ia32_vpconflictsi_512_mask">,
6301           Intrinsic<[llvm_v16i32_ty],
6302                     [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6303                     [IntrNoMem]>;
6304
6305   def int_x86_avx512_mask_conflict_q_128 :
6306           GCCBuiltin<"__builtin_ia32_vpconflictdi_128_mask">,
6307           Intrinsic<[llvm_v2i64_ty],
6308                     [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6309                     [IntrNoMem]>;
6310   def int_x86_avx512_mask_conflict_q_256 :
6311           GCCBuiltin<"__builtin_ia32_vpconflictdi_256_mask">,
6312           Intrinsic<[llvm_v4i64_ty],
6313                     [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6314                     [IntrNoMem]>;
6315   def int_x86_avx512_mask_conflict_q_512 :
6316           GCCBuiltin<"__builtin_ia32_vpconflictdi_512_mask">,
6317           Intrinsic<[llvm_v8i64_ty],
6318                     [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6319                     [IntrNoMem]>;
6320
6321   def int_x86_avx512_mask_lzcnt_d_128 :
6322           GCCBuiltin<"__builtin_ia32_vplzcntd_128_mask">,
6323           Intrinsic<[llvm_v4i32_ty],
6324                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6325                     [IntrNoMem]>;
6326   def int_x86_avx512_mask_lzcnt_d_256 :
6327           GCCBuiltin<"__builtin_ia32_vplzcntd_256_mask">,
6328           Intrinsic<[llvm_v8i32_ty],
6329                     [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6330                     [IntrNoMem]>;
6331   def int_x86_avx512_mask_lzcnt_d_512 :
6332           GCCBuiltin<"__builtin_ia32_vplzcntd_512_mask">,
6333           Intrinsic<[llvm_v16i32_ty],
6334                     [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6335                     [IntrNoMem]>;
6336
6337   def int_x86_avx512_mask_lzcnt_q_128 :
6338           GCCBuiltin<"__builtin_ia32_vplzcntq_128_mask">,
6339           Intrinsic<[llvm_v2i64_ty],
6340                     [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6341                     [IntrNoMem]>;
6342  def int_x86_avx512_mask_lzcnt_q_256 :
6343           GCCBuiltin<"__builtin_ia32_vplzcntq_256_mask">,
6344           Intrinsic<[llvm_v4i64_ty],
6345                     [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6346                     [IntrNoMem]>;
6347   def int_x86_avx512_mask_lzcnt_q_512 :
6348           GCCBuiltin<"__builtin_ia32_vplzcntq_512_mask">,
6349           Intrinsic<[llvm_v8i64_ty],
6350                     [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6351                     [IntrNoMem]>;
6352 }
6353
6354 // Vector blend
6355 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
6356   def int_x86_avx512_mask_blend_ps_512 : GCCBuiltin<"__builtin_ia32_blendmps_512_mask">,
6357         Intrinsic<[llvm_v16f32_ty],
6358                   [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
6359                   [IntrNoMem]>;
6360   def int_x86_avx512_mask_blend_ps_256 : GCCBuiltin<"__builtin_ia32_blendmps_256_mask">,
6361         Intrinsic<[llvm_v8f32_ty],
6362                   [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
6363                   [IntrNoMem]>;
6364   def int_x86_avx512_mask_blend_ps_128 : GCCBuiltin<"__builtin_ia32_blendmps_128_mask">,
6365         Intrinsic<[llvm_v4f32_ty],
6366                   [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
6367                   [IntrNoMem]>;
6368   def int_x86_avx512_mask_blend_pd_512 : GCCBuiltin<"__builtin_ia32_blendmpd_512_mask">,
6369         Intrinsic<[llvm_v8f64_ty],
6370                   [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
6371                   [IntrNoMem]>;
6372   def int_x86_avx512_mask_blend_pd_256 : GCCBuiltin<"__builtin_ia32_blendmpd_256_mask">,
6373         Intrinsic<[llvm_v4f64_ty],
6374                   [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
6375                   [IntrNoMem]>;
6376   def int_x86_avx512_mask_blend_pd_128 : GCCBuiltin<"__builtin_ia32_blendmpd_128_mask">,
6377         Intrinsic<[llvm_v2f64_ty],
6378                   [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
6379                   [IntrNoMem]>;
6380
6381   def int_x86_avx512_mask_blend_d_512 : GCCBuiltin<"__builtin_ia32_blendmd_512_mask">,
6382         Intrinsic<[llvm_v16i32_ty],
6383                   [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6384                   [IntrNoMem]>;
6385   def int_x86_avx512_mask_blend_q_512 : GCCBuiltin<"__builtin_ia32_blendmq_512_mask">,
6386         Intrinsic<[llvm_v8i64_ty],
6387                   [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6388                   [IntrNoMem]>;
6389   def int_x86_avx512_mask_blend_d_256 : GCCBuiltin<"__builtin_ia32_blendmd_256_mask">,
6390         Intrinsic<[llvm_v8i32_ty],
6391                   [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6392                   [IntrNoMem]>;
6393   def int_x86_avx512_mask_blend_q_256 : GCCBuiltin<"__builtin_ia32_blendmq_256_mask">,
6394         Intrinsic<[llvm_v4i64_ty],
6395                   [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6396                   [IntrNoMem]>;
6397   def int_x86_avx512_mask_blend_d_128 : GCCBuiltin<"__builtin_ia32_blendmd_128_mask">,
6398         Intrinsic<[llvm_v4i32_ty],
6399                   [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6400                   [IntrNoMem]>;
6401   def int_x86_avx512_mask_blend_q_128 : GCCBuiltin<"__builtin_ia32_blendmq_128_mask">,
6402         Intrinsic<[llvm_v2i64_ty],
6403                   [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6404                   [IntrNoMem]>;
6405
6406    def int_x86_avx512_mask_blend_w_512 : GCCBuiltin<"__builtin_ia32_blendmw_512_mask">,
6407         Intrinsic<[llvm_v32i16_ty],
6408                   [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
6409                   [IntrNoMem]>;
6410    def int_x86_avx512_mask_blend_w_256 : GCCBuiltin<"__builtin_ia32_blendmw_256_mask">,
6411         Intrinsic<[llvm_v16i16_ty],
6412                   [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
6413                   [IntrNoMem]>;
6414    def int_x86_avx512_mask_blend_w_128 : GCCBuiltin<"__builtin_ia32_blendmw_128_mask">,
6415         Intrinsic<[llvm_v8i16_ty],
6416                   [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
6417                   [IntrNoMem]>;
6418    def int_x86_avx512_mask_blend_b_512 : GCCBuiltin<"__builtin_ia32_blendmb_512_mask">,
6419         Intrinsic<[llvm_v64i8_ty],
6420                   [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
6421                   [IntrNoMem]>;
6422    def int_x86_avx512_mask_blend_b_256 : GCCBuiltin<"__builtin_ia32_blendmb_256_mask">,
6423         Intrinsic<[llvm_v32i8_ty],
6424                   [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
6425                   [IntrNoMem]>;
6426    def int_x86_avx512_mask_blend_b_128 : GCCBuiltin<"__builtin_ia32_blendmb_128_mask">,
6427         Intrinsic<[llvm_v16i8_ty],
6428                   [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
6429                   [IntrNoMem]>;
6430
6431 }
6432
6433 let TargetPrefix = "x86" in {
6434   def int_x86_avx512_mask_valign_q_512 :
6435         GCCBuiltin<"__builtin_ia32_alignq512_mask">,
6436         Intrinsic<[llvm_v8i64_ty],
6437                   [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_v8i64_ty,
6438                    llvm_i8_ty], [IntrNoMem]>;
6439
6440   def int_x86_avx512_mask_valign_d_512 :
6441         GCCBuiltin<"__builtin_ia32_alignd512_mask">,
6442         Intrinsic<[llvm_v16i32_ty],
6443                   [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty, llvm_v16i32_ty,
6444                    llvm_i16_ty], [IntrNoMem]>;
6445
6446   def int_x86_avx512_mask_valign_q_256 :
6447         GCCBuiltin<"__builtin_ia32_alignq256_mask">,
6448         Intrinsic<[llvm_v4i64_ty],
6449                   [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_v4i64_ty,
6450                    llvm_i8_ty], [IntrNoMem]>;
6451
6452   def int_x86_avx512_mask_valign_d_256 :
6453         GCCBuiltin<"__builtin_ia32_alignd256_mask">,
6454         Intrinsic<[llvm_v8i32_ty],
6455                   [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_v8i32_ty, 
6456                    llvm_i8_ty], [IntrNoMem]>;
6457
6458   def int_x86_avx512_mask_valign_q_128 :
6459         GCCBuiltin<"__builtin_ia32_alignq128_mask">,
6460         Intrinsic<[llvm_v2i64_ty],
6461                   [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_v2i64_ty, 
6462                    llvm_i8_ty], [IntrNoMem]>;
6463
6464   def int_x86_avx512_mask_valign_d_128 :
6465         GCCBuiltin<"__builtin_ia32_alignd128_mask">,
6466         Intrinsic<[llvm_v4i32_ty],
6467                   [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_v4i32_ty,
6468                    llvm_i8_ty], [IntrNoMem]>;
6469
6470   def int_x86_avx512_mask_palignr_128 :
6471         GCCBuiltin<"__builtin_ia32_palignr128_mask">,
6472         Intrinsic<[llvm_v16i8_ty],
6473                   [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty,
6474                    llvm_i16_ty], [IntrNoMem]>;
6475
6476   def int_x86_avx512_mask_palignr_256 :
6477         GCCBuiltin<"__builtin_ia32_palignr256_mask">,
6478         Intrinsic<[llvm_v32i8_ty],
6479                   [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty, llvm_v32i8_ty,
6480                    llvm_i32_ty], [IntrNoMem]>;
6481
6482   def int_x86_avx512_mask_palignr_512 :
6483         GCCBuiltin<"__builtin_ia32_palignr512_mask">,
6484         Intrinsic<[llvm_v64i8_ty],
6485                   [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty, llvm_v64i8_ty,
6486                    llvm_i64_ty], [IntrNoMem]>;
6487 }
6488
6489 // Compares
6490 let TargetPrefix = "x86" in {
6491   // 512-bit
6492   def int_x86_avx512_vcomi_sd : GCCBuiltin<"__builtin_ia32_vcomisd">,
6493               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
6494                          llvm_v2f64_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
6495   def int_x86_avx512_vcomi_ss : GCCBuiltin<"__builtin_ia32_vcomiss">,
6496               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
6497                          llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
6498   def int_x86_avx512_mask_pcmpeq_b_512 : GCCBuiltin<"__builtin_ia32_pcmpeqb512_mask">,
6499         Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
6500                   [IntrNoMem]>;
6501   def int_x86_avx512_mask_pcmpeq_w_512 : GCCBuiltin<"__builtin_ia32_pcmpeqw512_mask">,
6502         Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
6503                   [IntrNoMem]>;
6504   def int_x86_avx512_mask_pcmpeq_d_512 : GCCBuiltin<"__builtin_ia32_pcmpeqd512_mask">,
6505             Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6506                       [IntrNoMem]>;
6507   def int_x86_avx512_mask_pcmpeq_q_512 : GCCBuiltin<"__builtin_ia32_pcmpeqq512_mask">,
6508             Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6509                       [IntrNoMem]>;
6510
6511   def int_x86_avx512_mask_pcmpgt_b_512: GCCBuiltin<"__builtin_ia32_pcmpgtb512_mask">,
6512         Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
6513                   [IntrNoMem]>;
6514   def int_x86_avx512_mask_pcmpgt_w_512: GCCBuiltin<"__builtin_ia32_pcmpgtw512_mask">,
6515         Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
6516                   [IntrNoMem]>;
6517   def int_x86_avx512_mask_pcmpgt_d_512: GCCBuiltin<"__builtin_ia32_pcmpgtd512_mask">,
6518         Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
6519                   [IntrNoMem]>;
6520   def int_x86_avx512_mask_pcmpgt_q_512: GCCBuiltin<"__builtin_ia32_pcmpgtq512_mask">,
6521         Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
6522                   [IntrNoMem]>;
6523
6524   def int_x86_avx512_mask_cmp_b_512: GCCBuiltin<"__builtin_ia32_cmpb512_mask">,
6525         Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty,
6526                   llvm_i64_ty], [IntrNoMem]>;
6527   def int_x86_avx512_mask_cmp_w_512: GCCBuiltin<"__builtin_ia32_cmpw512_mask">,
6528         Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty,
6529                   llvm_i32_ty], [IntrNoMem]>;
6530   def int_x86_avx512_mask_cmp_d_512: GCCBuiltin<"__builtin_ia32_cmpd512_mask">,
6531         Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
6532                   llvm_i16_ty], [IntrNoMem ]>;
6533   def int_x86_avx512_mask_cmp_q_512: GCCBuiltin<"__builtin_ia32_cmpq512_mask">,
6534         Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
6535                   llvm_i8_ty], [IntrNoMem]>;
6536
6537   def int_x86_avx512_mask_ucmp_b_512: GCCBuiltin<"__builtin_ia32_ucmpb512_mask">,
6538         Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty,
6539                   llvm_i64_ty], [IntrNoMem]>;
6540   def int_x86_avx512_mask_ucmp_w_512: GCCBuiltin<"__builtin_ia32_ucmpw512_mask">,
6541         Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty,
6542                   llvm_i32_ty], [IntrNoMem]>;
6543   def int_x86_avx512_mask_ucmp_d_512: GCCBuiltin<"__builtin_ia32_ucmpd512_mask">,
6544         Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
6545                   llvm_i16_ty], [IntrNoMem]>;
6546   def int_x86_avx512_mask_ucmp_q_512: GCCBuiltin<"__builtin_ia32_ucmpq512_mask">,
6547         Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
6548                   llvm_i8_ty], [IntrNoMem]>;
6549
6550   // 256-bit
6551   def int_x86_avx512_mask_pcmpeq_b_256 : GCCBuiltin<"__builtin_ia32_pcmpeqb256_mask">,
6552         Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
6553                   [IntrNoMem]>;
6554   def int_x86_avx512_mask_pcmpeq_w_256 : GCCBuiltin<"__builtin_ia32_pcmpeqw256_mask">,
6555         Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
6556                   [IntrNoMem]>;
6557   def int_x86_avx512_mask_pcmpeq_d_256 : GCCBuiltin<"__builtin_ia32_pcmpeqd256_mask">,
6558         Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6559                   [IntrNoMem]>;
6560   def int_x86_avx512_mask_pcmpeq_q_256 : GCCBuiltin<"__builtin_ia32_pcmpeqq256_mask">,
6561         Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6562                   [IntrNoMem]>;
6563
6564   def int_x86_avx512_mask_pcmpgt_b_256: GCCBuiltin<"__builtin_ia32_pcmpgtb256_mask">,
6565         Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
6566                   [IntrNoMem]>;
6567   def int_x86_avx512_mask_pcmpgt_w_256: GCCBuiltin<"__builtin_ia32_pcmpgtw256_mask">,
6568         Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
6569                   [IntrNoMem]>;
6570   def int_x86_avx512_mask_pcmpgt_d_256: GCCBuiltin<"__builtin_ia32_pcmpgtd256_mask">,
6571         Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
6572                   [IntrNoMem]>;
6573   def int_x86_avx512_mask_pcmpgt_q_256: GCCBuiltin<"__builtin_ia32_pcmpgtq256_mask">,
6574         Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
6575                   [IntrNoMem]>;
6576
6577   def int_x86_avx512_mask_cmp_b_256: GCCBuiltin<"__builtin_ia32_cmpb256_mask">,
6578         Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty,
6579                   llvm_i32_ty], [IntrNoMem]>;
6580   def int_x86_avx512_mask_cmp_w_256: GCCBuiltin<"__builtin_ia32_cmpw256_mask">,
6581         Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty,
6582                   llvm_i16_ty], [IntrNoMem]>;
6583   def int_x86_avx512_mask_cmp_d_256: GCCBuiltin<"__builtin_ia32_cmpd256_mask">,
6584         Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
6585                   llvm_i8_ty], [IntrNoMem]>;
6586   def int_x86_avx512_mask_cmp_q_256: GCCBuiltin<"__builtin_ia32_cmpq256_mask">,
6587         Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
6588                   llvm_i8_ty], [IntrNoMem]>;
6589
6590   def int_x86_avx512_mask_ucmp_b_256: GCCBuiltin<"__builtin_ia32_ucmpb256_mask">,
6591         Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty,
6592                   llvm_i32_ty], [IntrNoMem]>;
6593   def int_x86_avx512_mask_ucmp_w_256: GCCBuiltin<"__builtin_ia32_ucmpw256_mask">,
6594         Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty,
6595                   llvm_i16_ty], [IntrNoMem]>;
6596   def int_x86_avx512_mask_ucmp_d_256: GCCBuiltin<"__builtin_ia32_ucmpd256_mask">,
6597         Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
6598                   llvm_i8_ty], [IntrNoMem]>;
6599   def int_x86_avx512_mask_ucmp_q_256: GCCBuiltin<"__builtin_ia32_ucmpq256_mask">,
6600         Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
6601                   llvm_i8_ty], [IntrNoMem]>;
6602
6603   // 128-bit
6604   def int_x86_avx512_mask_pcmpeq_b_128 : GCCBuiltin<"__builtin_ia32_pcmpeqb128_mask">,
6605         Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
6606                   [IntrNoMem]>;
6607   def int_x86_avx512_mask_pcmpeq_w_128 : GCCBuiltin<"__builtin_ia32_pcmpeqw128_mask">,
6608         Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
6609                   [IntrNoMem]>;
6610   def int_x86_avx512_mask_pcmpeq_d_128 : GCCBuiltin<"__builtin_ia32_pcmpeqd128_mask">,
6611         Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6612                   [IntrNoMem]>;
6613   def int_x86_avx512_mask_pcmpeq_q_128 : GCCBuiltin<"__builtin_ia32_pcmpeqq128_mask">,
6614         Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6615                   [IntrNoMem]>;
6616
6617   def int_x86_avx512_mask_pcmpgt_b_128: GCCBuiltin<"__builtin_ia32_pcmpgtb128_mask">,
6618         Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
6619                   [IntrNoMem]>;
6620   def int_x86_avx512_mask_pcmpgt_w_128: GCCBuiltin<"__builtin_ia32_pcmpgtw128_mask">,
6621         Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
6622                   [IntrNoMem]>;
6623   def int_x86_avx512_mask_pcmpgt_d_128: GCCBuiltin<"__builtin_ia32_pcmpgtd128_mask">,
6624         Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
6625                   [IntrNoMem]>;
6626   def int_x86_avx512_mask_pcmpgt_q_128: GCCBuiltin<"__builtin_ia32_pcmpgtq128_mask">,
6627         Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
6628                   [IntrNoMem]>;
6629
6630   def int_x86_avx512_mask_cmp_b_128: GCCBuiltin<"__builtin_ia32_cmpb128_mask">,
6631         Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
6632                   llvm_i16_ty], [IntrNoMem]>;
6633   def int_x86_avx512_mask_cmp_w_128: GCCBuiltin<"__builtin_ia32_cmpw128_mask">,
6634         Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty,
6635                   llvm_i8_ty], [IntrNoMem]>;
6636   def int_x86_avx512_mask_cmp_d_128: GCCBuiltin<"__builtin_ia32_cmpd128_mask">,
6637         Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
6638                   llvm_i8_ty], [IntrNoMem]>;
6639   def int_x86_avx512_mask_cmp_q_128: GCCBuiltin<"__builtin_ia32_cmpq128_mask">,
6640         Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
6641                   llvm_i8_ty], [IntrNoMem]>;
6642
6643   def int_x86_avx512_mask_ucmp_b_128: GCCBuiltin<"__builtin_ia32_ucmpb128_mask">,
6644         Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
6645                   llvm_i16_ty], [IntrNoMem]>;
6646   def int_x86_avx512_mask_ucmp_w_128: GCCBuiltin<"__builtin_ia32_ucmpw128_mask">,
6647         Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty,
6648                   llvm_i8_ty], [IntrNoMem]>;
6649   def int_x86_avx512_mask_ucmp_d_128: GCCBuiltin<"__builtin_ia32_ucmpd128_mask">,
6650         Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
6651                   llvm_i8_ty], [IntrNoMem]>;
6652   def int_x86_avx512_mask_ucmp_q_128: GCCBuiltin<"__builtin_ia32_ucmpq128_mask">,
6653         Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
6654                   llvm_i8_ty], [IntrNoMem]>;
6655 }
6656
6657 // Compress, Expand
6658 let TargetPrefix = "x86" in {
6659   def int_x86_avx512_mask_compress_ps_512 :
6660                              GCCBuiltin<"__builtin_ia32_compresssf512_mask">,
6661         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
6662                    llvm_i16_ty], [IntrNoMem]>;
6663   def int_x86_avx512_mask_compress_pd_512 :
6664                              GCCBuiltin<"__builtin_ia32_compressdf512_mask">,
6665         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
6666                    llvm_i8_ty], [IntrNoMem]>;
6667   def int_x86_avx512_mask_compress_ps_256 :
6668                              GCCBuiltin<"__builtin_ia32_compresssf256_mask">,
6669         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
6670                    llvm_i8_ty], [IntrNoMem]>;
6671   def int_x86_avx512_mask_compress_pd_256 :
6672                              GCCBuiltin<"__builtin_ia32_compressdf256_mask">,
6673         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
6674                    llvm_i8_ty], [IntrNoMem]>;
6675   def int_x86_avx512_mask_compress_ps_128 :
6676                              GCCBuiltin<"__builtin_ia32_compresssf128_mask">,
6677         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
6678                    llvm_i8_ty], [IntrNoMem]>;
6679   def int_x86_avx512_mask_compress_pd_128 :
6680                              GCCBuiltin<"__builtin_ia32_compressdf128_mask">,
6681         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
6682                    llvm_i8_ty], [IntrNoMem]>;
6683
6684   def int_x86_avx512_mask_compress_store_ps_512 :
6685                             GCCBuiltin<"__builtin_ia32_compressstoresf512_mask">,
6686         Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty,
6687                    llvm_i16_ty], [IntrReadWriteArgMem]>;
6688   def int_x86_avx512_mask_compress_store_pd_512 :
6689                             GCCBuiltin<"__builtin_ia32_compressstoredf512_mask">,
6690         Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty,
6691                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6692   def int_x86_avx512_mask_compress_store_ps_256 :
6693                             GCCBuiltin<"__builtin_ia32_compressstoresf256_mask">,
6694         Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty,
6695                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6696   def int_x86_avx512_mask_compress_store_pd_256 :
6697                             GCCBuiltin<"__builtin_ia32_compressstoredf256_mask">,
6698         Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty,
6699                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6700   def int_x86_avx512_mask_compress_store_ps_128 :
6701                             GCCBuiltin<"__builtin_ia32_compressstoresf128_mask">,
6702         Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty,
6703                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6704   def int_x86_avx512_mask_compress_store_pd_128 :
6705                             GCCBuiltin<"__builtin_ia32_compressstoredf128_mask">,
6706         Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty,
6707                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6708
6709   def int_x86_avx512_mask_compress_d_512 :
6710                              GCCBuiltin<"__builtin_ia32_compresssi512_mask">,
6711         Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
6712                    llvm_i16_ty], [IntrNoMem]>;
6713   def int_x86_avx512_mask_compress_q_512 :
6714                              GCCBuiltin<"__builtin_ia32_compressdi512_mask">,
6715         Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
6716                    llvm_i8_ty], [IntrNoMem]>;
6717   def int_x86_avx512_mask_compress_d_256 :
6718                              GCCBuiltin<"__builtin_ia32_compresssi256_mask">,
6719         Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
6720                    llvm_i8_ty], [IntrNoMem]>;
6721   def int_x86_avx512_mask_compress_q_256 :
6722                              GCCBuiltin<"__builtin_ia32_compressdi256_mask">,
6723         Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
6724                    llvm_i8_ty], [IntrNoMem]>;
6725   def int_x86_avx512_mask_compress_d_128 :
6726                              GCCBuiltin<"__builtin_ia32_compresssi128_mask">,
6727         Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
6728                    llvm_i8_ty], [IntrNoMem]>;
6729   def int_x86_avx512_mask_compress_q_128 :
6730                              GCCBuiltin<"__builtin_ia32_compressdi128_mask">,
6731         Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
6732                    llvm_i8_ty], [IntrNoMem]>;
6733
6734   def int_x86_avx512_mask_compress_store_d_512 :
6735                             GCCBuiltin<"__builtin_ia32_compressstoresi512_mask">,
6736         Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty,
6737                    llvm_i16_ty], [IntrReadWriteArgMem]>;
6738   def int_x86_avx512_mask_compress_store_q_512 :
6739                             GCCBuiltin<"__builtin_ia32_compressstoredi512_mask">,
6740         Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty,
6741                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6742   def int_x86_avx512_mask_compress_store_d_256 :
6743                             GCCBuiltin<"__builtin_ia32_compressstoresi256_mask">,
6744         Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty,
6745                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6746   def int_x86_avx512_mask_compress_store_q_256 :
6747                             GCCBuiltin<"__builtin_ia32_compressstoredi256_mask">,
6748         Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty,
6749                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6750   def int_x86_avx512_mask_compress_store_d_128 :
6751                             GCCBuiltin<"__builtin_ia32_compressstoresi128_mask">,
6752         Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty,
6753                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6754   def int_x86_avx512_mask_compress_store_q_128 :
6755                             GCCBuiltin<"__builtin_ia32_compressstoredi128_mask">,
6756         Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty,
6757                    llvm_i8_ty], [IntrReadWriteArgMem]>;
6758
6759 // expand
6760   def int_x86_avx512_mask_expand_ps_512 :
6761                              GCCBuiltin<"__builtin_ia32_expandsf512_mask">,
6762         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
6763                    llvm_i16_ty], [IntrNoMem]>;
6764   def int_x86_avx512_mask_expand_pd_512 :
6765                              GCCBuiltin<"__builtin_ia32_expanddf512_mask">,
6766         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
6767                    llvm_i8_ty], [IntrNoMem]>;
6768   def int_x86_avx512_mask_expand_ps_256 :
6769                              GCCBuiltin<"__builtin_ia32_expandsf256_mask">,
6770         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
6771                    llvm_i8_ty], [IntrNoMem]>;
6772   def int_x86_avx512_mask_expand_pd_256 :
6773                              GCCBuiltin<"__builtin_ia32_expanddf256_mask">,
6774         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
6775                    llvm_i8_ty], [IntrNoMem]>;
6776   def int_x86_avx512_mask_expand_ps_128 :
6777                              GCCBuiltin<"__builtin_ia32_expandsf128_mask">,
6778         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
6779                    llvm_i8_ty], [IntrNoMem]>;
6780   def int_x86_avx512_mask_expand_pd_128 :
6781                              GCCBuiltin<"__builtin_ia32_expanddf128_mask">,
6782         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
6783                    llvm_i8_ty], [IntrNoMem]>;
6784
6785   def int_x86_avx512_mask_expand_load_ps_512 :
6786                             GCCBuiltin<"__builtin_ia32_expandloadsf512_mask">,
6787         Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty,
6788                    llvm_i16_ty], [IntrReadArgMem]>;
6789   def int_x86_avx512_mask_expand_load_pd_512 :
6790                             GCCBuiltin<"__builtin_ia32_expandloaddf512_mask">,
6791         Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty,
6792                    llvm_i8_ty], [IntrReadArgMem]>;
6793   def int_x86_avx512_mask_expand_load_ps_256 :
6794                             GCCBuiltin<"__builtin_ia32_expandloadsf256_mask">,
6795         Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8f32_ty,
6796                    llvm_i8_ty], [IntrReadArgMem]>;
6797   def int_x86_avx512_mask_expand_load_pd_256 :
6798                             GCCBuiltin<"__builtin_ia32_expandloaddf256_mask">,
6799         Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4f64_ty,
6800                    llvm_i8_ty], [IntrReadArgMem]>;
6801   def int_x86_avx512_mask_expand_load_ps_128 :
6802                             GCCBuiltin<"__builtin_ia32_expandloadsf128_mask">,
6803         Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4f32_ty,
6804                    llvm_i8_ty], [IntrReadArgMem]>;
6805   def int_x86_avx512_mask_expand_load_pd_128 :
6806                             GCCBuiltin<"__builtin_ia32_expandloaddf128_mask">,
6807         Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2f64_ty,
6808                    llvm_i8_ty], [IntrReadArgMem]>;
6809
6810   def int_x86_avx512_mask_expand_d_512 :
6811                              GCCBuiltin<"__builtin_ia32_expandsi512_mask">,
6812         Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
6813                    llvm_i16_ty], [IntrNoMem]>;
6814   def int_x86_avx512_mask_expand_q_512 :
6815                              GCCBuiltin<"__builtin_ia32_expanddi512_mask">,
6816         Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
6817                    llvm_i8_ty], [IntrNoMem]>;
6818   def int_x86_avx512_mask_expand_d_256 :
6819                              GCCBuiltin<"__builtin_ia32_expandsi256_mask">,
6820         Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
6821                    llvm_i8_ty], [IntrNoMem]>;
6822   def int_x86_avx512_mask_expand_q_256 :
6823                              GCCBuiltin<"__builtin_ia32_expanddi256_mask">,
6824         Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
6825                    llvm_i8_ty], [IntrNoMem]>;
6826   def int_x86_avx512_mask_expand_d_128 :
6827                              GCCBuiltin<"__builtin_ia32_expandsi128_mask">,
6828         Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
6829                    llvm_i8_ty], [IntrNoMem]>;
6830   def int_x86_avx512_mask_expand_q_128 :
6831                              GCCBuiltin<"__builtin_ia32_expanddi128_mask">,
6832         Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
6833                    llvm_i8_ty], [IntrNoMem]>;
6834
6835   def int_x86_avx512_mask_expand_load_d_512 :
6836                             GCCBuiltin<"__builtin_ia32_expandloadsi512_mask">,
6837         Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty,
6838                    llvm_i16_ty], [IntrReadArgMem]>;
6839   def int_x86_avx512_mask_expand_load_q_512 :
6840                             GCCBuiltin<"__builtin_ia32_expandloaddi512_mask">,
6841         Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty,
6842                    llvm_i8_ty], [IntrReadArgMem]>;
6843   def int_x86_avx512_mask_expand_load_d_256 :
6844                             GCCBuiltin<"__builtin_ia32_expandloadsi256_mask">,
6845         Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty,
6846                    llvm_i8_ty], [IntrReadArgMem]>;
6847   def int_x86_avx512_mask_expand_load_q_256 :
6848                             GCCBuiltin<"__builtin_ia32_expandloaddi256_mask">,
6849         Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty,
6850                    llvm_i8_ty], [IntrReadArgMem]>;
6851   def int_x86_avx512_mask_expand_load_d_128 :
6852                             GCCBuiltin<"__builtin_ia32_expandloadsi128_mask">,
6853         Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty,
6854                    llvm_i8_ty], [IntrReadArgMem]>;
6855   def int_x86_avx512_mask_expand_load_q_128 :
6856                             GCCBuiltin<"__builtin_ia32_expandloaddi128_mask">,
6857         Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty,
6858                    llvm_i8_ty], [IntrReadArgMem]>;
6859
6860 }
6861
6862 // truncate
6863 let TargetPrefix = "x86" in {
6864   def int_x86_avx512_mask_pmov_qb_128 :
6865           GCCBuiltin<"__builtin_ia32_pmovqb128_mask">,
6866           Intrinsic<[llvm_v16i8_ty],
6867                     [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6868                     [IntrNoMem]>;
6869   def int_x86_avx512_mask_pmov_qb_mem_128 :
6870           GCCBuiltin<"__builtin_ia32_pmovqb128mem_mask">,
6871           Intrinsic<[],
6872                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6873                     [IntrReadWriteArgMem]>;
6874   def int_x86_avx512_mask_pmovs_qb_128 :
6875           GCCBuiltin<"__builtin_ia32_pmovsqb128_mask">,
6876           Intrinsic<[llvm_v16i8_ty],
6877                     [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6878                     [IntrNoMem]>;
6879   def int_x86_avx512_mask_pmovs_qb_mem_128 :
6880           GCCBuiltin<"__builtin_ia32_pmovsqb128mem_mask">,
6881           Intrinsic<[],
6882                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6883                     [IntrReadWriteArgMem]>;
6884   def int_x86_avx512_mask_pmovus_qb_128 :
6885           GCCBuiltin<"__builtin_ia32_pmovusqb128_mask">,
6886           Intrinsic<[llvm_v16i8_ty],
6887                     [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6888                     [IntrNoMem]>;
6889   def int_x86_avx512_mask_pmovus_qb_mem_128 :
6890           GCCBuiltin<"__builtin_ia32_pmovusqb128mem_mask">,
6891           Intrinsic<[],
6892                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6893                     [IntrReadWriteArgMem]>;
6894   def int_x86_avx512_mask_pmov_qb_256 :
6895           GCCBuiltin<"__builtin_ia32_pmovqb256_mask">,
6896           Intrinsic<[llvm_v16i8_ty],
6897                     [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6898                     [IntrNoMem]>;
6899   def int_x86_avx512_mask_pmov_qb_mem_256 :
6900           GCCBuiltin<"__builtin_ia32_pmovqb256mem_mask">,
6901           Intrinsic<[],
6902                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6903                     [IntrReadWriteArgMem]>;
6904   def int_x86_avx512_mask_pmovs_qb_256 :
6905           GCCBuiltin<"__builtin_ia32_pmovsqb256_mask">,
6906           Intrinsic<[llvm_v16i8_ty],
6907                     [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6908                     [IntrNoMem]>;
6909   def int_x86_avx512_mask_pmovs_qb_mem_256 :
6910           GCCBuiltin<"__builtin_ia32_pmovsqb256mem_mask">,
6911           Intrinsic<[],
6912                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6913                     [IntrReadWriteArgMem]>;
6914   def int_x86_avx512_mask_pmovus_qb_256 :
6915           GCCBuiltin<"__builtin_ia32_pmovusqb256_mask">,
6916           Intrinsic<[llvm_v16i8_ty],
6917                     [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6918                     [IntrNoMem]>;
6919   def int_x86_avx512_mask_pmovus_qb_mem_256 :
6920           GCCBuiltin<"__builtin_ia32_pmovusqb256mem_mask">,
6921           Intrinsic<[],
6922                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6923                     [IntrReadWriteArgMem]>;
6924   def int_x86_avx512_mask_pmov_qb_512 :
6925           GCCBuiltin<"__builtin_ia32_pmovqb512_mask">,
6926           Intrinsic<[llvm_v16i8_ty],
6927                     [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6928                     [IntrNoMem]>;
6929   def int_x86_avx512_mask_pmov_qb_mem_512 :
6930           GCCBuiltin<"__builtin_ia32_pmovqb512mem_mask">,
6931           Intrinsic<[],
6932                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6933                     [IntrReadWriteArgMem]>;
6934   def int_x86_avx512_mask_pmovs_qb_512 :
6935           GCCBuiltin<"__builtin_ia32_pmovsqb512_mask">,
6936           Intrinsic<[llvm_v16i8_ty],
6937                     [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6938                     [IntrNoMem]>;
6939   def int_x86_avx512_mask_pmovs_qb_mem_512 :
6940           GCCBuiltin<"__builtin_ia32_pmovsqb512mem_mask">,
6941           Intrinsic<[],
6942                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6943                     [IntrReadWriteArgMem]>;
6944   def int_x86_avx512_mask_pmovus_qb_512 :
6945           GCCBuiltin<"__builtin_ia32_pmovusqb512_mask">,
6946           Intrinsic<[llvm_v16i8_ty],
6947                     [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty],
6948                     [IntrNoMem]>;
6949   def int_x86_avx512_mask_pmovus_qb_mem_512 :
6950           GCCBuiltin<"__builtin_ia32_pmovusqb512mem_mask">,
6951           Intrinsic<[],
6952                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
6953                     [IntrReadWriteArgMem]>;
6954   def int_x86_avx512_mask_pmov_qw_128 :
6955           GCCBuiltin<"__builtin_ia32_pmovqw128_mask">,
6956           Intrinsic<[llvm_v8i16_ty],
6957                     [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6958                     [IntrNoMem]>;
6959   def int_x86_avx512_mask_pmov_qw_mem_128 :
6960           GCCBuiltin<"__builtin_ia32_pmovqw128mem_mask">,
6961           Intrinsic<[],
6962                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6963                     [IntrReadWriteArgMem]>;
6964   def int_x86_avx512_mask_pmovs_qw_128 :
6965           GCCBuiltin<"__builtin_ia32_pmovsqw128_mask">,
6966           Intrinsic<[llvm_v8i16_ty],
6967                     [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6968                     [IntrNoMem]>;
6969   def int_x86_avx512_mask_pmovs_qw_mem_128 :
6970           GCCBuiltin<"__builtin_ia32_pmovsqw128mem_mask">,
6971           Intrinsic<[],
6972                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6973                     [IntrReadWriteArgMem]>;
6974   def int_x86_avx512_mask_pmovus_qw_128 :
6975           GCCBuiltin<"__builtin_ia32_pmovusqw128_mask">,
6976           Intrinsic<[llvm_v8i16_ty],
6977                     [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6978                     [IntrNoMem]>;
6979   def int_x86_avx512_mask_pmovus_qw_mem_128 :
6980           GCCBuiltin<"__builtin_ia32_pmovusqw128mem_mask">,
6981           Intrinsic<[],
6982                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
6983                     [IntrReadWriteArgMem]>;
6984   def int_x86_avx512_mask_pmov_qw_256 :
6985           GCCBuiltin<"__builtin_ia32_pmovqw256_mask">,
6986           Intrinsic<[llvm_v8i16_ty],
6987                     [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6988                     [IntrNoMem]>;
6989   def int_x86_avx512_mask_pmov_qw_mem_256 :
6990           GCCBuiltin<"__builtin_ia32_pmovqw256mem_mask">,
6991           Intrinsic<[],
6992                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
6993                     [IntrReadWriteArgMem]>;
6994   def int_x86_avx512_mask_pmovs_qw_256 :
6995           GCCBuiltin<"__builtin_ia32_pmovsqw256_mask">,
6996           Intrinsic<[llvm_v8i16_ty],
6997                     [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty],
6998                     [IntrNoMem]>;
6999   def int_x86_avx512_mask_pmovs_qw_mem_256 :
7000           GCCBuiltin<"__builtin_ia32_pmovsqw256mem_mask">,
7001           Intrinsic<[],
7002                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
7003                     [IntrReadWriteArgMem]>;
7004   def int_x86_avx512_mask_pmovus_qw_256 :
7005           GCCBuiltin<"__builtin_ia32_pmovusqw256_mask">,
7006           Intrinsic<[llvm_v8i16_ty],
7007                     [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty],
7008                     [IntrNoMem]>;
7009   def int_x86_avx512_mask_pmovus_qw_mem_256 :
7010           GCCBuiltin<"__builtin_ia32_pmovusqw256mem_mask">,
7011           Intrinsic<[],
7012                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
7013                     [IntrReadWriteArgMem]>;
7014   def int_x86_avx512_mask_pmov_qw_512 :
7015           GCCBuiltin<"__builtin_ia32_pmovqw512_mask">,
7016           Intrinsic<[llvm_v8i16_ty],
7017                     [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
7018                     [IntrNoMem]>;
7019   def int_x86_avx512_mask_pmov_qw_mem_512 :
7020           GCCBuiltin<"__builtin_ia32_pmovqw512mem_mask">,
7021           Intrinsic<[],
7022                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
7023                     [IntrReadWriteArgMem]>;
7024   def int_x86_avx512_mask_pmovs_qw_512 :
7025           GCCBuiltin<"__builtin_ia32_pmovsqw512_mask">,
7026           Intrinsic<[llvm_v8i16_ty],
7027                     [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
7028                     [IntrNoMem]>;
7029   def int_x86_avx512_mask_pmovs_qw_mem_512 :
7030           GCCBuiltin<"__builtin_ia32_pmovsqw512mem_mask">,
7031           Intrinsic<[],
7032                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
7033                     [IntrReadWriteArgMem]>;
7034   def int_x86_avx512_mask_pmovus_qw_512 :
7035           GCCBuiltin<"__builtin_ia32_pmovusqw512_mask">,
7036           Intrinsic<[llvm_v8i16_ty],
7037                     [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
7038                     [IntrNoMem]>;
7039   def int_x86_avx512_mask_pmovus_qw_mem_512 :
7040           GCCBuiltin<"__builtin_ia32_pmovusqw512mem_mask">,
7041           Intrinsic<[],
7042                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
7043                     [IntrReadWriteArgMem]>;
7044   def int_x86_avx512_mask_pmov_qd_128 :
7045           GCCBuiltin<"__builtin_ia32_pmovqd128_mask">,
7046           Intrinsic<[llvm_v4i32_ty],
7047                     [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
7048                     [IntrNoMem]>;
7049   def int_x86_avx512_mask_pmov_qd_mem_128 :
7050           GCCBuiltin<"__builtin_ia32_pmovqd128mem_mask">,
7051           Intrinsic<[],
7052                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
7053                     [IntrReadWriteArgMem]>;
7054   def int_x86_avx512_mask_pmovs_qd_128 :
7055           GCCBuiltin<"__builtin_ia32_pmovsqd128_mask">,
7056           Intrinsic<[llvm_v4i32_ty],
7057                     [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
7058                     [IntrNoMem]>;
7059   def int_x86_avx512_mask_pmovs_qd_mem_128 :
7060           GCCBuiltin<"__builtin_ia32_pmovsqd128mem_mask">,
7061           Intrinsic<[],
7062                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
7063                     [IntrReadWriteArgMem]>;
7064   def int_x86_avx512_mask_pmovus_qd_128 :
7065           GCCBuiltin<"__builtin_ia32_pmovusqd128_mask">,
7066           Intrinsic<[llvm_v4i32_ty],
7067                     [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
7068                     [IntrNoMem]>;
7069   def int_x86_avx512_mask_pmovus_qd_mem_128 :
7070           GCCBuiltin<"__builtin_ia32_pmovusqd128mem_mask">,
7071           Intrinsic<[],
7072                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
7073                     [IntrReadWriteArgMem]>;
7074   def int_x86_avx512_mask_pmov_qd_256 :
7075           GCCBuiltin<"__builtin_ia32_pmovqd256_mask">,
7076           Intrinsic<[llvm_v4i32_ty],
7077                     [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
7078                     [IntrNoMem]>;
7079   def int_x86_avx512_mask_pmov_qd_mem_256 :
7080           GCCBuiltin<"__builtin_ia32_pmovqd256mem_mask">,
7081           Intrinsic<[],
7082                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
7083                     [IntrReadWriteArgMem]>;
7084   def int_x86_avx512_mask_pmovs_qd_256 :
7085           GCCBuiltin<"__builtin_ia32_pmovsqd256_mask">,
7086           Intrinsic<[llvm_v4i32_ty],
7087                     [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
7088                     [IntrNoMem]>;
7089   def int_x86_avx512_mask_pmovs_qd_mem_256 :
7090           GCCBuiltin<"__builtin_ia32_pmovsqd256mem_mask">,
7091           Intrinsic<[],
7092                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
7093                     [IntrReadWriteArgMem]>;
7094   def int_x86_avx512_mask_pmovus_qd_256 :
7095           GCCBuiltin<"__builtin_ia32_pmovusqd256_mask">,
7096           Intrinsic<[llvm_v4i32_ty],
7097                     [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
7098                     [IntrNoMem]>;
7099   def int_x86_avx512_mask_pmovus_qd_mem_256 :
7100           GCCBuiltin<"__builtin_ia32_pmovusqd256mem_mask">,
7101           Intrinsic<[],
7102                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
7103                     [IntrReadWriteArgMem]>;
7104   def int_x86_avx512_mask_pmov_qd_512 :
7105           GCCBuiltin<"__builtin_ia32_pmovqd512_mask">,
7106           Intrinsic<[llvm_v8i32_ty],
7107                     [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
7108                     [IntrNoMem]>;
7109   def int_x86_avx512_mask_pmov_qd_mem_512 :
7110           GCCBuiltin<"__builtin_ia32_pmovqd512mem_mask">,
7111           Intrinsic<[],
7112                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
7113                     [IntrReadWriteArgMem]>;
7114   def int_x86_avx512_mask_pmovs_qd_512 :
7115           GCCBuiltin<"__builtin_ia32_pmovsqd512_mask">,
7116           Intrinsic<[llvm_v8i32_ty],
7117                     [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
7118                     [IntrNoMem]>;
7119   def int_x86_avx512_mask_pmovs_qd_mem_512 :
7120           GCCBuiltin<"__builtin_ia32_pmovsqd512mem_mask">,
7121           Intrinsic<[],
7122                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
7123                     [IntrReadWriteArgMem]>;
7124   def int_x86_avx512_mask_pmovus_qd_512 :
7125           GCCBuiltin<"__builtin_ia32_pmovusqd512_mask">,
7126           Intrinsic<[llvm_v8i32_ty],
7127                     [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
7128                     [IntrNoMem]>;
7129   def int_x86_avx512_mask_pmovus_qd_mem_512 :
7130           GCCBuiltin<"__builtin_ia32_pmovusqd512mem_mask">,
7131           Intrinsic<[],
7132                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
7133                     [IntrReadWriteArgMem]>;
7134   def int_x86_avx512_mask_pmov_db_128 :
7135           GCCBuiltin<"__builtin_ia32_pmovdb128_mask">,
7136           Intrinsic<[llvm_v16i8_ty],
7137                     [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty],
7138                     [IntrNoMem]>;
7139   def int_x86_avx512_mask_pmov_db_mem_128 :
7140           GCCBuiltin<"__builtin_ia32_pmovdb128mem_mask">,
7141           Intrinsic<[],
7142                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
7143                     [IntrReadWriteArgMem]>;
7144   def int_x86_avx512_mask_pmovs_db_128 :
7145           GCCBuiltin<"__builtin_ia32_pmovsdb128_mask">,
7146           Intrinsic<[llvm_v16i8_ty],
7147                     [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty],
7148                     [IntrNoMem]>;
7149   def int_x86_avx512_mask_pmovs_db_mem_128 :
7150           GCCBuiltin<"__builtin_ia32_pmovsdb128mem_mask">,
7151           Intrinsic<[],
7152                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
7153                     [IntrReadWriteArgMem]>;
7154   def int_x86_avx512_mask_pmovus_db_128 :
7155           GCCBuiltin<"__builtin_ia32_pmovusdb128_mask">,
7156           Intrinsic<[llvm_v16i8_ty],
7157                     [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty],
7158                     [IntrNoMem]>;
7159   def int_x86_avx512_mask_pmovus_db_mem_128 :
7160           GCCBuiltin<"__builtin_ia32_pmovusdb128mem_mask">,
7161           Intrinsic<[],
7162                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
7163                     [IntrReadWriteArgMem]>;
7164   def int_x86_avx512_mask_pmov_db_256 :
7165           GCCBuiltin<"__builtin_ia32_pmovdb256_mask">,
7166           Intrinsic<[llvm_v16i8_ty],
7167                     [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty],
7168                     [IntrNoMem]>;
7169   def int_x86_avx512_mask_pmov_db_mem_256 :
7170           GCCBuiltin<"__builtin_ia32_pmovdb256mem_mask">,
7171           Intrinsic<[],
7172                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7173                     [IntrReadWriteArgMem]>;
7174   def int_x86_avx512_mask_pmovs_db_256 :
7175           GCCBuiltin<"__builtin_ia32_pmovsdb256_mask">,
7176           Intrinsic<[llvm_v16i8_ty],
7177                     [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty],
7178                     [IntrNoMem]>;
7179   def int_x86_avx512_mask_pmovs_db_mem_256 :
7180           GCCBuiltin<"__builtin_ia32_pmovsdb256mem_mask">,
7181           Intrinsic<[],
7182                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7183                     [IntrReadWriteArgMem]>;
7184   def int_x86_avx512_mask_pmovus_db_256 :
7185           GCCBuiltin<"__builtin_ia32_pmovusdb256_mask">,
7186           Intrinsic<[llvm_v16i8_ty],
7187                     [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty],
7188                     [IntrNoMem]>;
7189   def int_x86_avx512_mask_pmovus_db_mem_256 :
7190           GCCBuiltin<"__builtin_ia32_pmovusdb256mem_mask">,
7191           Intrinsic<[],
7192                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7193                     [IntrReadWriteArgMem]>;
7194   def int_x86_avx512_mask_pmov_db_512 :
7195           GCCBuiltin<"__builtin_ia32_pmovdb512_mask">,
7196           Intrinsic<[llvm_v16i8_ty],
7197                     [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
7198                     [IntrNoMem]>;
7199   def int_x86_avx512_mask_pmov_db_mem_512 :
7200           GCCBuiltin<"__builtin_ia32_pmovdb512mem_mask">,
7201           Intrinsic<[],
7202                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7203                     [IntrReadWriteArgMem]>;
7204   def int_x86_avx512_mask_pmovs_db_512 :
7205           GCCBuiltin<"__builtin_ia32_pmovsdb512_mask">,
7206           Intrinsic<[llvm_v16i8_ty],
7207                     [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
7208                     [IntrNoMem]>;
7209   def int_x86_avx512_mask_pmovs_db_mem_512 :
7210           GCCBuiltin<"__builtin_ia32_pmovsdb512mem_mask">,
7211           Intrinsic<[],
7212                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7213                     [IntrReadWriteArgMem]>;
7214   def int_x86_avx512_mask_pmovus_db_512 :
7215           GCCBuiltin<"__builtin_ia32_pmovusdb512_mask">,
7216           Intrinsic<[llvm_v16i8_ty],
7217                     [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
7218                     [IntrNoMem]>;
7219   def int_x86_avx512_mask_pmovus_db_mem_512 :
7220           GCCBuiltin<"__builtin_ia32_pmovusdb512mem_mask">,
7221           Intrinsic<[],
7222                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7223                     [IntrReadWriteArgMem]>;
7224   def int_x86_avx512_mask_pmov_dw_128 :
7225           GCCBuiltin<"__builtin_ia32_pmovdw128_mask">,
7226           Intrinsic<[llvm_v8i16_ty],
7227                     [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7228                     [IntrNoMem]>;
7229   def int_x86_avx512_mask_pmov_dw_mem_128 :
7230           GCCBuiltin<"__builtin_ia32_pmovdw128mem_mask">,
7231           Intrinsic<[],
7232                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
7233                     [IntrReadWriteArgMem]>;
7234   def int_x86_avx512_mask_pmovs_dw_128 :
7235           GCCBuiltin<"__builtin_ia32_pmovsdw128_mask">,
7236           Intrinsic<[llvm_v8i16_ty],
7237                     [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7238                     [IntrNoMem]>;
7239   def int_x86_avx512_mask_pmovs_dw_mem_128 :
7240           GCCBuiltin<"__builtin_ia32_pmovsdw128mem_mask">,
7241           Intrinsic<[],
7242                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
7243                     [IntrReadWriteArgMem]>;
7244   def int_x86_avx512_mask_pmovus_dw_128 :
7245           GCCBuiltin<"__builtin_ia32_pmovusdw128_mask">,
7246           Intrinsic<[llvm_v8i16_ty],
7247                     [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7248                     [IntrNoMem]>;
7249   def int_x86_avx512_mask_pmovus_dw_mem_128 :
7250           GCCBuiltin<"__builtin_ia32_pmovusdw128mem_mask">,
7251           Intrinsic<[],
7252                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
7253                     [IntrReadWriteArgMem]>;
7254   def int_x86_avx512_mask_pmov_dw_256 :
7255           GCCBuiltin<"__builtin_ia32_pmovdw256_mask">,
7256           Intrinsic<[llvm_v8i16_ty],
7257                     [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7258                     [IntrNoMem]>;
7259   def int_x86_avx512_mask_pmov_dw_mem_256 :
7260           GCCBuiltin<"__builtin_ia32_pmovdw256mem_mask">,
7261           Intrinsic<[],
7262                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7263                     [IntrReadWriteArgMem]>;
7264   def int_x86_avx512_mask_pmovs_dw_256 :
7265           GCCBuiltin<"__builtin_ia32_pmovsdw256_mask">,
7266           Intrinsic<[llvm_v8i16_ty],
7267                     [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7268                     [IntrNoMem]>;
7269   def int_x86_avx512_mask_pmovs_dw_mem_256 :
7270           GCCBuiltin<"__builtin_ia32_pmovsdw256mem_mask">,
7271           Intrinsic<[],
7272                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7273                     [IntrReadWriteArgMem]>;
7274   def int_x86_avx512_mask_pmovus_dw_256 :
7275           GCCBuiltin<"__builtin_ia32_pmovusdw256_mask">,
7276           Intrinsic<[llvm_v8i16_ty],
7277                     [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty],
7278                     [IntrNoMem]>;
7279   def int_x86_avx512_mask_pmovus_dw_mem_256 :
7280           GCCBuiltin<"__builtin_ia32_pmovusdw256mem_mask">,
7281           Intrinsic<[],
7282                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
7283                     [IntrReadWriteArgMem]>;
7284   def int_x86_avx512_mask_pmov_dw_512 :
7285           GCCBuiltin<"__builtin_ia32_pmovdw512_mask">,
7286           Intrinsic<[llvm_v16i16_ty],
7287                     [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
7288                     [IntrNoMem]>;
7289   def int_x86_avx512_mask_pmov_dw_mem_512 :
7290           GCCBuiltin<"__builtin_ia32_pmovdw512mem_mask">,
7291           Intrinsic<[],
7292                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7293                     [IntrReadWriteArgMem]>;
7294   def int_x86_avx512_mask_pmovs_dw_512 :
7295           GCCBuiltin<"__builtin_ia32_pmovsdw512_mask">,
7296           Intrinsic<[llvm_v16i16_ty],
7297                     [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
7298                     [IntrNoMem]>;
7299   def int_x86_avx512_mask_pmovs_dw_mem_512 :
7300           GCCBuiltin<"__builtin_ia32_pmovsdw512mem_mask">,
7301           Intrinsic<[],
7302                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7303                     [IntrReadWriteArgMem]>;
7304   def int_x86_avx512_mask_pmovus_dw_512 :
7305           GCCBuiltin<"__builtin_ia32_pmovusdw512_mask">,
7306           Intrinsic<[llvm_v16i16_ty],
7307                     [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
7308                     [IntrNoMem]>;
7309   def int_x86_avx512_mask_pmovus_dw_mem_512 :
7310           GCCBuiltin<"__builtin_ia32_pmovusdw512mem_mask">,
7311           Intrinsic<[],
7312                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
7313                     [IntrReadWriteArgMem]>;
7314   def int_x86_avx512_mask_pmov_wb_128 :
7315           GCCBuiltin<"__builtin_ia32_pmovwb128_mask">,
7316           Intrinsic<[llvm_v16i8_ty],
7317                     [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty],
7318                     [IntrNoMem]>;
7319   def int_x86_avx512_mask_pmov_wb_mem_128 :
7320           GCCBuiltin<"__builtin_ia32_pmovwb128mem_mask">,
7321           Intrinsic<[],
7322                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
7323                     [IntrReadWriteArgMem]>;
7324   def int_x86_avx512_mask_pmovs_wb_128 :
7325           GCCBuiltin<"__builtin_ia32_pmovswb128_mask">,
7326           Intrinsic<[llvm_v16i8_ty],
7327                     [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty],
7328                     [IntrNoMem]>;
7329   def int_x86_avx512_mask_pmovs_wb_mem_128 :
7330           GCCBuiltin<"__builtin_ia32_pmovswb128mem_mask">,
7331           Intrinsic<[],
7332                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
7333                     [IntrReadWriteArgMem]>;
7334   def int_x86_avx512_mask_pmovus_wb_128 :
7335           GCCBuiltin<"__builtin_ia32_pmovuswb128_mask">,
7336           Intrinsic<[llvm_v16i8_ty],
7337                     [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty],
7338                     [IntrNoMem]>;
7339   def int_x86_avx512_mask_pmovus_wb_mem_128 :
7340           GCCBuiltin<"__builtin_ia32_pmovuswb128mem_mask">,
7341           Intrinsic<[],
7342                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
7343                     [IntrReadWriteArgMem]>;
7344   def int_x86_avx512_mask_pmov_wb_256 :
7345           GCCBuiltin<"__builtin_ia32_pmovwb256_mask">,
7346           Intrinsic<[llvm_v16i8_ty],
7347                     [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
7348                     [IntrNoMem]>;
7349   def int_x86_avx512_mask_pmov_wb_mem_256 :
7350           GCCBuiltin<"__builtin_ia32_pmovwb256mem_mask">,
7351           Intrinsic<[],
7352                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
7353                     [IntrReadWriteArgMem]>;
7354   def int_x86_avx512_mask_pmovs_wb_256 :
7355           GCCBuiltin<"__builtin_ia32_pmovswb256_mask">,
7356           Intrinsic<[llvm_v16i8_ty],
7357                     [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
7358                     [IntrNoMem]>;
7359   def int_x86_avx512_mask_pmovs_wb_mem_256 :
7360           GCCBuiltin<"__builtin_ia32_pmovswb256mem_mask">,
7361           Intrinsic<[],
7362                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
7363                     [IntrReadWriteArgMem]>;
7364   def int_x86_avx512_mask_pmovus_wb_256 :
7365           GCCBuiltin<"__builtin_ia32_pmovuswb256_mask">,
7366           Intrinsic<[llvm_v16i8_ty],
7367                     [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
7368                     [IntrNoMem]>;
7369   def int_x86_avx512_mask_pmovus_wb_mem_256 :
7370           GCCBuiltin<"__builtin_ia32_pmovuswb256mem_mask">,
7371           Intrinsic<[],
7372                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
7373                     [IntrReadWriteArgMem]>;
7374   def int_x86_avx512_mask_pmov_wb_512 :
7375           GCCBuiltin<"__builtin_ia32_pmovwb512_mask">,
7376           Intrinsic<[llvm_v32i8_ty],
7377                     [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
7378                     [IntrNoMem]>;
7379   def int_x86_avx512_mask_pmov_wb_mem_512 :
7380           GCCBuiltin<"__builtin_ia32_pmovwb512mem_mask">,
7381           Intrinsic<[],
7382                     [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
7383                     [IntrReadWriteArgMem]>;
7384   def int_x86_avx512_mask_pmovs_wb_512 :
7385           GCCBuiltin<"__builtin_ia32_pmovswb512_mask">,
7386           Intrinsic<[llvm_v32i8_ty],
7387                     [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
7388                     [IntrNoMem]>;
7389   def int_x86_avx512_mask_pmovs_wb_mem_512 :
7390           GCCBuiltin<"__builtin_ia32_pmovswb512mem_mask">,
7391           Intrinsic<[],
7392                     [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
7393                     [IntrReadWriteArgMem]>;
7394   def int_x86_avx512_mask_pmovus_wb_512 :
7395           GCCBuiltin<"__builtin_ia32_pmovuswb512_mask">,
7396           Intrinsic<[llvm_v32i8_ty],
7397                     [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
7398                     [IntrNoMem]>;
7399   def int_x86_avx512_mask_pmovus_wb_mem_512 :
7400           GCCBuiltin<"__builtin_ia32_pmovuswb512mem_mask">,
7401           Intrinsic<[],
7402                     [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
7403                     [IntrReadWriteArgMem]>;
7404 }
7405
7406 // Bitwise ternary logic
7407 let TargetPrefix = "x86" in {
7408   def int_x86_avx512_mask_pternlog_d_128 :
7409           GCCBuiltin<"__builtin_ia32_pternlogd128_mask">,
7410           Intrinsic<[llvm_v4i32_ty],
7411                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
7412                      llvm_i8_ty], [IntrNoMem]>;
7413
7414   def int_x86_avx512_maskz_pternlog_d_128 :
7415           GCCBuiltin<"__builtin_ia32_pternlogd128_maskz">,
7416           Intrinsic<[llvm_v4i32_ty],
7417                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
7418                      llvm_i8_ty], [IntrNoMem]>;
7419
7420   def int_x86_avx512_mask_pternlog_d_256 :
7421           GCCBuiltin<"__builtin_ia32_pternlogd256_mask">,
7422           Intrinsic<[llvm_v8i32_ty],
7423                     [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
7424                      llvm_i8_ty], [IntrNoMem]>;
7425
7426   def int_x86_avx512_maskz_pternlog_d_256 :
7427           GCCBuiltin<"__builtin_ia32_pternlogd256_maskz">,
7428           Intrinsic<[llvm_v8i32_ty],
7429                     [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
7430                      llvm_i8_ty], [IntrNoMem]>;
7431
7432   def int_x86_avx512_mask_pternlog_d_512 :
7433           GCCBuiltin<"__builtin_ia32_pternlogd512_mask">,
7434           Intrinsic<[llvm_v16i32_ty],
7435                     [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
7436                      llvm_i16_ty], [IntrNoMem]>;
7437
7438   def int_x86_avx512_maskz_pternlog_d_512 :
7439           GCCBuiltin<"__builtin_ia32_pternlogd512_maskz">,
7440           Intrinsic<[llvm_v16i32_ty],
7441                     [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
7442                      llvm_i16_ty], [IntrNoMem]>;
7443
7444   def int_x86_avx512_mask_pternlog_q_128 :
7445           GCCBuiltin<"__builtin_ia32_pternlogq128_mask">,
7446           Intrinsic<[llvm_v2i64_ty],
7447                     [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
7448                      llvm_i8_ty], [IntrNoMem]>;
7449
7450   def int_x86_avx512_maskz_pternlog_q_128 :
7451           GCCBuiltin<"__builtin_ia32_pternlogq128_maskz">,
7452           Intrinsic<[llvm_v2i64_ty],
7453                     [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
7454                      llvm_i8_ty], [IntrNoMem]>;
7455
7456   def int_x86_avx512_mask_pternlog_q_256 :
7457           GCCBuiltin<"__builtin_ia32_pternlogq256_mask">,
7458           Intrinsic<[llvm_v4i64_ty],
7459                     [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
7460                      llvm_i8_ty], [IntrNoMem]>;
7461
7462   def int_x86_avx512_maskz_pternlog_q_256 :
7463           GCCBuiltin<"__builtin_ia32_pternlogq256_maskz">,
7464           Intrinsic<[llvm_v4i64_ty],
7465                     [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
7466                      llvm_i8_ty], [IntrNoMem]>;
7467
7468   def int_x86_avx512_mask_pternlog_q_512 :
7469           GCCBuiltin<"__builtin_ia32_pternlogq512_mask">,
7470           Intrinsic<[llvm_v8i64_ty],
7471                     [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
7472                      llvm_i8_ty], [IntrNoMem]>;
7473
7474   def int_x86_avx512_maskz_pternlog_q_512 :
7475           GCCBuiltin<"__builtin_ia32_pternlogq512_maskz">,
7476           Intrinsic<[llvm_v8i64_ty],
7477                     [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
7478                      llvm_i8_ty], [IntrNoMem]>;
7479 }
7480
7481 // Misc.
7482 let TargetPrefix = "x86" in {
7483   def int_x86_avx512_mask_cmp_ps_512 :
7484         GCCBuiltin<"__builtin_ia32_cmpps512_mask">,
7485               Intrinsic<[llvm_i16_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
7486                          llvm_i32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
7487   def int_x86_avx512_mask_cmp_pd_512 :
7488         GCCBuiltin<"__builtin_ia32_cmppd512_mask">,
7489               Intrinsic<[llvm_i8_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
7490                          llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
7491   def int_x86_avx512_mask_cmp_ps_256 :
7492         GCCBuiltin<"__builtin_ia32_cmpps256_mask">,
7493               Intrinsic<[llvm_i8_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
7494                          llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
7495   def int_x86_avx512_mask_cmp_pd_256 :
7496         GCCBuiltin<"__builtin_ia32_cmppd256_mask">,
7497               Intrinsic<[llvm_i8_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
7498                          llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
7499   def int_x86_avx512_mask_cmp_ps_128 :
7500         GCCBuiltin<"__builtin_ia32_cmpps128_mask">,
7501             Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
7502                        llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
7503   def int_x86_avx512_mask_cmp_pd_128 :
7504         GCCBuiltin<"__builtin_ia32_cmppd128_mask">,
7505             Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
7506                        llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
7507   def int_x86_avx512_mask_cmp_ss :
7508         GCCBuiltin<"__builtin_ia32_cmpss_mask">,
7509               Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
7510                          llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
7511   def int_x86_avx512_mask_cmp_sd :
7512         GCCBuiltin<"__builtin_ia32_cmpsd_mask">,
7513               Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
7514                          llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
7515
7516   def int_x86_avx512_movntdqa :
7517         GCCBuiltin<"__builtin_ia32_movntdqa512">,
7518             Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
7519 }
7520
7521 //===----------------------------------------------------------------------===//
7522 // SHA intrinsics
7523 let TargetPrefix = "x86" in {
7524   def int_x86_sha1rnds4 : GCCBuiltin<"__builtin_ia32_sha1rnds4">,
7525         Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
7526                   [IntrNoMem]>;
7527   def int_x86_sha1nexte : GCCBuiltin<"__builtin_ia32_sha1nexte">,
7528       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7529   def int_x86_sha1msg1 : GCCBuiltin<"__builtin_ia32_sha1msg1">,
7530       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7531   def int_x86_sha1msg2 : GCCBuiltin<"__builtin_ia32_sha1msg2">,
7532       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7533   def int_x86_sha256rnds2 : GCCBuiltin<"__builtin_ia32_sha256rnds2">,
7534       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
7535                 [IntrNoMem]>;
7536   def int_x86_sha256msg1 : GCCBuiltin<"__builtin_ia32_sha256msg1">,
7537       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7538   def int_x86_sha256msg2 : GCCBuiltin<"__builtin_ia32_sha256msg2">,
7539       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
7540 }