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