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