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