xref: /llvm-project/llvm/include/llvm/IR/IntrinsicsX86.td (revision ee2722fc882ed5dbc7609686bd998b023c6645b2)
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 :
226      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
227  def int_x86_sse_cvttps2pi:
228      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
229  def int_x86_sse_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 :
430      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
431  def int_x86_sse_cvttpd2pi:
432      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
433  def int_x86_sse_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         :
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         :
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        :
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         :
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         :
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        :
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     :
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      :
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         :
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           :
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         :
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         :
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         :
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     :
615      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
616
617  def int_x86_ssse3_pabs_w     :
618      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
619
620  def int_x86_ssse3_pabs_d     :
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 :
2264      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2265                            [IntrNoMem, Commutative]>;
2266  def int_x86_mmx_padd_w :
2267      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2268                            [IntrNoMem, Commutative]>;
2269  def int_x86_mmx_padd_d :
2270      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2271                            [IntrNoMem, Commutative]>;
2272  def int_x86_mmx_padd_q :
2273      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2274                            [IntrNoMem, Commutative]>;
2275
2276  def int_x86_mmx_padds_b :
2277      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2278                            [IntrNoMem, Commutative]>;
2279  def int_x86_mmx_padds_w :
2280      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2281                            [IntrNoMem, Commutative]>;
2282
2283  def int_x86_mmx_paddus_b :
2284      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2285                            [IntrNoMem, Commutative]>;
2286  def int_x86_mmx_paddus_w :
2287      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2288                            [IntrNoMem, Commutative]>;
2289
2290  // Subtraction
2291  def int_x86_mmx_psub_b :
2292      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2293                            [IntrNoMem]>;
2294  def int_x86_mmx_psub_w :
2295      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2296                            [IntrNoMem]>;
2297  def int_x86_mmx_psub_d :
2298      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2299                            [IntrNoMem]>;
2300  def int_x86_mmx_psub_q :
2301      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2302                            [IntrNoMem]>;
2303
2304  def int_x86_mmx_psubs_b :
2305      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2306                            [IntrNoMem]>;
2307  def int_x86_mmx_psubs_w :
2308      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2309                            [IntrNoMem]>;
2310
2311  def int_x86_mmx_psubus_b :
2312      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2313                            [IntrNoMem]>;
2314  def int_x86_mmx_psubus_w :
2315      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2316                            [IntrNoMem]>;
2317
2318  // Multiplication
2319  def int_x86_mmx_pmulh_w :
2320      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2321                            [IntrNoMem, Commutative]>;
2322  def int_x86_mmx_pmull_w :
2323      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2324                            [IntrNoMem, Commutative]>;
2325  def int_x86_mmx_pmulhu_w :
2326      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2327                            [IntrNoMem, Commutative]>;
2328  def int_x86_mmx_pmulu_dq :
2329      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2330                            [IntrNoMem, Commutative]>;
2331  def int_x86_mmx_pmadd_wd :
2332      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2333                            [IntrNoMem, Commutative]>;
2334
2335  // Bitwise operations
2336  def int_x86_mmx_pand :
2337      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2338                            [IntrNoMem, Commutative]>;
2339  def int_x86_mmx_pandn :
2340      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2341                            [IntrNoMem]>;
2342  def int_x86_mmx_por :
2343      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2344                            [IntrNoMem, Commutative]>;
2345  def int_x86_mmx_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 :
2351      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2352                            [IntrNoMem, Commutative]>;
2353  def int_x86_mmx_pavg_w :
2354      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2355                            [IntrNoMem, Commutative]>;
2356
2357  // Maximum
2358  def int_x86_mmx_pmaxu_b :
2359      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2360                            [IntrNoMem, Commutative]>;
2361  def int_x86_mmx_pmaxs_w :
2362      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2363                            [IntrNoMem, Commutative]>;
2364
2365  // Minimum
2366  def int_x86_mmx_pminu_b :
2367      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2368                            [IntrNoMem, Commutative]>;
2369  def int_x86_mmx_pmins_w :
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 :
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 :
2383      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2384                            [IntrNoMem]>;
2385  def int_x86_mmx_psll_d :
2386      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2387                            [IntrNoMem]>;
2388  def int_x86_mmx_psll_q :
2389      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2390                            [IntrNoMem]>;
2391
2392  def int_x86_mmx_psrl_w :
2393      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2394                            [IntrNoMem]>;
2395  def int_x86_mmx_psrl_d :
2396      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2397                            [IntrNoMem]>;
2398  def int_x86_mmx_psrl_q :
2399      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2400                            [IntrNoMem]>;
2401
2402  def int_x86_mmx_psra_w :
2403      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2404                            [IntrNoMem]>;
2405  def int_x86_mmx_psra_d :
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 :
2411      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i32_ty],
2412                            [IntrNoMem]>;
2413  def int_x86_mmx_pslli_d :
2414      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i32_ty],
2415                            [IntrNoMem]>;
2416  def int_x86_mmx_pslli_q :
2417      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i32_ty],
2418                            [IntrNoMem]>;
2419
2420  def int_x86_mmx_psrli_w :
2421      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i32_ty],
2422                            [IntrNoMem]>;
2423  def int_x86_mmx_psrli_d :
2424      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i32_ty],
2425                            [IntrNoMem]>;
2426  def int_x86_mmx_psrli_q :
2427      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i32_ty],
2428                            [IntrNoMem]>;
2429
2430  def int_x86_mmx_psrai_w :
2431      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i32_ty],
2432                            [IntrNoMem]>;
2433  def int_x86_mmx_psrai_d :
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 :
2479      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2480                            [IntrNoMem]>;
2481  def int_x86_mmx_packssdw :
2482      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2483                            [IntrNoMem]>;
2484  def int_x86_mmx_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 :
2492      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2493                            [IntrNoMem]>;
2494  def int_x86_mmx_punpckhwd :
2495      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2496                            [IntrNoMem]>;
2497  def int_x86_mmx_punpckhdq :
2498      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2499                            [IntrNoMem]>;
2500  def int_x86_mmx_punpcklbw :
2501      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2502                            [IntrNoMem]>;
2503  def int_x86_mmx_punpcklwd :
2504      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2505                            [IntrNoMem]>;
2506  def int_x86_mmx_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 :
2514      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2515                            [IntrNoMem, Commutative]>;
2516  def int_x86_mmx_pcmpeq_w :
2517      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2518                            [IntrNoMem, Commutative]>;
2519  def int_x86_mmx_pcmpeq_d :
2520      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2521                            [IntrNoMem, Commutative]>;
2522
2523  def int_x86_mmx_pcmpgt_b :
2524      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2525                            [IntrNoMem]>;
2526  def int_x86_mmx_pcmpgt_w :
2527      DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
2528                            [IntrNoMem]>;
2529  def int_x86_mmx_pcmpgt_d :
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 :
2537              Intrinsic<[], [llvm_x86mmx_ty, llvm_x86mmx_ty, llvm_ptr_ty], []>;
2538
2539  def int_x86_mmx_pmovmskb :
2540      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
2541
2542  def int_x86_mmx_movnt_dq :
2543              Intrinsic<[], [llvm_ptr_ty, llvm_x86mmx_ty], []>;
2544
2545  def int_x86_mmx_palignr_b :
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 :
2551      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty],
2552                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
2553
2554  def int_x86_mmx_pinsr_w :
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// AVX10.2 intrinsics
4982let TargetPrefix = "x86" in {
4983  // VNNI FP16
4984  def int_x86_avx10_vdpphps_128 :
4985      ClangBuiltin<"__builtin_ia32_vdpphps128">,
4986      DefaultAttrsIntrinsic<[llvm_v4f32_ty],
4987                            [llvm_v4f32_ty, llvm_v8f16_ty, llvm_v8f16_ty],
4988                            [IntrNoMem]>;
4989  def int_x86_avx10_vdpphps_256 :
4990      ClangBuiltin<"__builtin_ia32_vdpphps256">,
4991      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
4992                            [llvm_v8f32_ty, llvm_v16f16_ty, llvm_v16f16_ty],
4993                            [IntrNoMem]>;
4994  def int_x86_avx10_vdpphps_512 :
4995      ClangBuiltin<"__builtin_ia32_vdpphps512">,
4996      DefaultAttrsIntrinsic<[llvm_v16f32_ty],
4997                            [llvm_v16f32_ty, llvm_v32f16_ty, llvm_v32f16_ty],
4998                            [IntrNoMem]>;
4999  // VNNI INT8
5000  def int_x86_avx10_vpdpbssd_512 :
5001      ClangBuiltin<"__builtin_ia32_vpdpbssd512">,
5002      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5003                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5004                            [IntrNoMem]>;
5005  def int_x86_avx10_vpdpbssds_512 :
5006      ClangBuiltin<"__builtin_ia32_vpdpbssds512">,
5007      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5008                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5009                            [IntrNoMem]>;
5010  def int_x86_avx10_vpdpbsud_512 :
5011      ClangBuiltin<"__builtin_ia32_vpdpbsud512">,
5012      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5013                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5014                            [IntrNoMem]>;
5015  def int_x86_avx10_vpdpbsuds_512 :
5016      ClangBuiltin<"__builtin_ia32_vpdpbsuds512">,
5017      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5018                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5019                            [IntrNoMem]>;
5020  def int_x86_avx10_vpdpbuud_512 :
5021      ClangBuiltin<"__builtin_ia32_vpdpbuud512">,
5022      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5023                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5024                            [IntrNoMem]>;
5025  def int_x86_avx10_vpdpbuuds_512 :
5026      ClangBuiltin<"__builtin_ia32_vpdpbuuds512">,
5027      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5028                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5029                            [IntrNoMem]>;
5030  // VNNI INT16
5031  def int_x86_avx10_vpdpwsud_512 :
5032      ClangBuiltin<"__builtin_ia32_vpdpwsud512">,
5033      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5034                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5035                            [IntrNoMem]>;
5036  def int_x86_avx10_vpdpwsuds_512 :
5037      ClangBuiltin<"__builtin_ia32_vpdpwsuds512">,
5038      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5039                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5040                            [IntrNoMem]>;
5041  def int_x86_avx10_vpdpwusd_512 :
5042      ClangBuiltin<"__builtin_ia32_vpdpwusd512">,
5043      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5044                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5045                            [IntrNoMem]>;
5046  def int_x86_avx10_vpdpwusds_512 :
5047      ClangBuiltin<"__builtin_ia32_vpdpwusds512">,
5048      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5049                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5050                            [IntrNoMem]>;
5051  def int_x86_avx10_vpdpwuud_512 :
5052      ClangBuiltin<"__builtin_ia32_vpdpwuud512">,
5053      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5054                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5055                            [IntrNoMem]>;
5056  def int_x86_avx10_vpdpwuuds_512 :
5057      ClangBuiltin<"__builtin_ia32_vpdpwuuds512">,
5058      DefaultAttrsIntrinsic<[llvm_v16i32_ty],
5059                            [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
5060                            [IntrNoMem]>;
5061
5062  // VMPSADBW
5063  def int_x86_avx10_vmpsadbw_512 :
5064      ClangBuiltin<"__builtin_ia32_mpsadbw512">,
5065      DefaultAttrsIntrinsic<[llvm_v32i16_ty],
5066                            [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i8_ty],
5067                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5068
5069  // YMM Rounding
5070  def int_x86_avx10_vaddpd256 :
5071      ClangBuiltin<"__builtin_ia32_vaddpd256_round">,
5072      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5073                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
5074                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5075  def int_x86_avx10_vaddph256 :
5076      ClangBuiltin<"__builtin_ia32_vaddph256_round">,
5077      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5078                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty],
5079                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5080  def int_x86_avx10_vaddps256 :
5081      ClangBuiltin<"__builtin_ia32_vaddps256_round">,
5082      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5083                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty],
5084                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5085  def int_x86_avx10_mask_vcmppd256 :
5086      DefaultAttrsIntrinsic<[llvm_v4i1_ty],
5087                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty, llvm_v4i1_ty, llvm_i32_ty],
5088                            [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<4>>]>;
5089  def int_x86_avx10_mask_vcmpph256 :
5090      DefaultAttrsIntrinsic<[llvm_v16i1_ty],
5091                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty, llvm_v16i1_ty, llvm_i32_ty],
5092                            [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<4>>]>;
5093  def int_x86_avx10_mask_vcmpps256 :
5094      DefaultAttrsIntrinsic<[llvm_v8i1_ty],
5095                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty, llvm_v8i1_ty, llvm_i32_ty],
5096                            [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<4>>]>;
5097  def int_x86_avx10_mask_vcvtpd2dq256 :
5098      ClangBuiltin<"__builtin_ia32_vcvtpd2dq256_round_mask">,
5099      DefaultAttrsIntrinsic<[llvm_v4i32_ty],
5100                            [llvm_v4f64_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5101                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5102  def int_x86_avx10_mask_vcvtpd2ph256 :
5103      ClangBuiltin<"__builtin_ia32_vcvtpd2ph256_round_mask">,
5104      DefaultAttrsIntrinsic<[llvm_v8f16_ty],
5105                            [llvm_v4f64_ty, llvm_v8f16_ty, llvm_i8_ty, llvm_i32_ty],
5106                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5107  def int_x86_avx10_mask_vcvtpd2ps256 :
5108      ClangBuiltin<"__builtin_ia32_vcvtpd2ps256_round_mask">,
5109      DefaultAttrsIntrinsic<[llvm_v4f32_ty],
5110                            [llvm_v4f64_ty, llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
5111                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5112  def int_x86_avx10_mask_vcvtpd2qq256 :
5113      ClangBuiltin<"__builtin_ia32_vcvtpd2qq256_round_mask">,
5114      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5115                            [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5116                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5117  def int_x86_avx10_mask_vcvtpd2udq256 :
5118      ClangBuiltin<"__builtin_ia32_vcvtpd2udq256_round_mask">,
5119      DefaultAttrsIntrinsic<[llvm_v4i32_ty],
5120                            [llvm_v4f64_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5121                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5122  def int_x86_avx10_mask_vcvtpd2uqq256 :
5123      ClangBuiltin<"__builtin_ia32_vcvtpd2uqq256_round_mask">,
5124      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5125                            [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5126                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5127  def int_x86_avx10_mask_vcvtph2dq256 :
5128      ClangBuiltin<"__builtin_ia32_vcvtph2dq256_round_mask">,
5129      DefaultAttrsIntrinsic<[llvm_v8i32_ty],
5130                            [llvm_v8f16_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5131                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5132  def int_x86_avx10_mask_vcvtph2pd256 :
5133      ClangBuiltin<"__builtin_ia32_vcvtph2pd256_round_mask">,
5134      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5135                            [llvm_v8f16_ty, llvm_v4f64_ty, llvm_i8_ty, llvm_i32_ty],
5136                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5137  def int_x86_avx10_mask_vcvtph2psx256 :
5138      ClangBuiltin<"__builtin_ia32_vcvtph2psx256_round_mask">,
5139      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5140                            [llvm_v8f16_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5141                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5142  def int_x86_avx10_mask_vcvtph2qq256 :
5143      ClangBuiltin<"__builtin_ia32_vcvtph2qq256_round_mask">,
5144      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5145                            [llvm_v8f16_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5146                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5147  def int_x86_avx10_mask_vcvtph2udq256 :
5148      ClangBuiltin<"__builtin_ia32_vcvtph2udq256_round_mask">,
5149      DefaultAttrsIntrinsic<[llvm_v8i32_ty],
5150                            [llvm_v8f16_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5151                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5152  def int_x86_avx10_mask_vcvtph2uqq256 :
5153      ClangBuiltin<"__builtin_ia32_vcvtph2uqq256_round_mask">,
5154      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5155                            [llvm_v8f16_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5156                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5157  def int_x86_avx10_mask_vcvtph2uw256 :
5158      ClangBuiltin<"__builtin_ia32_vcvtph2uw256_round_mask">,
5159      DefaultAttrsIntrinsic<[llvm_v16i16_ty],
5160                            [llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty, llvm_i32_ty],
5161                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5162  def int_x86_avx10_mask_vcvtph2w256 :
5163      ClangBuiltin<"__builtin_ia32_vcvtph2w256_round_mask">,
5164      DefaultAttrsIntrinsic<[llvm_v16i16_ty],
5165                            [llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty, llvm_i32_ty],
5166                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5167  def int_x86_avx10_mask_vcvtps2dq256 :
5168      ClangBuiltin<"__builtin_ia32_vcvtps2dq256_round_mask">,
5169      DefaultAttrsIntrinsic<[llvm_v8i32_ty],
5170                            [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5171                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5172  def int_x86_avx10_mask_vcvtps2pd256 :
5173      ClangBuiltin<"__builtin_ia32_vcvtps2pd256_round_mask">,
5174      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5175                            [llvm_v4f32_ty, llvm_v4f64_ty, llvm_i8_ty, llvm_i32_ty],
5176                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5177  def int_x86_avx10_mask_vcvtps2ph256 :
5178      ClangBuiltin<"__builtin_ia32_vcvtps2ph256_round_mask">,
5179      DefaultAttrsIntrinsic<[llvm_v8i16_ty],
5180                            [llvm_v8f32_ty, llvm_i32_ty, llvm_v8i16_ty, llvm_i8_ty],
5181                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5182  def int_x86_avx10_mask_vcvtps2phx256 :
5183      ClangBuiltin<"__builtin_ia32_vcvtps2phx256_round_mask">,
5184      DefaultAttrsIntrinsic<[llvm_v8f16_ty],
5185                            [llvm_v8f32_ty, llvm_v8f16_ty, llvm_i8_ty, llvm_i32_ty],
5186                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5187  def int_x86_avx10_mask_vcvtps2qq256 :
5188      ClangBuiltin<"__builtin_ia32_vcvtps2qq256_round_mask">,
5189      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5190                            [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5191                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5192  def int_x86_avx10_mask_vcvtps2udq256 :
5193      ClangBuiltin<"__builtin_ia32_vcvtps2udq256_round_mask">,
5194      DefaultAttrsIntrinsic<[llvm_v8i32_ty],
5195                            [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5196                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5197  def int_x86_avx10_mask_vcvtps2uqq256 :
5198      ClangBuiltin<"__builtin_ia32_vcvtps2uqq256_round_mask">,
5199      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5200                            [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5201                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5202  def int_x86_avx10_mask_vcvttpd2dq256 :
5203      ClangBuiltin<"__builtin_ia32_vcvttpd2dq256_round_mask">,
5204      DefaultAttrsIntrinsic<[llvm_v4i32_ty],
5205                            [llvm_v4f64_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5206                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5207  def int_x86_avx10_mask_vcvttpd2qq256 :
5208      ClangBuiltin<"__builtin_ia32_vcvttpd2qq256_round_mask">,
5209      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5210                            [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5211                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5212  def int_x86_avx10_mask_vcvttpd2udq256 :
5213      ClangBuiltin<"__builtin_ia32_vcvttpd2udq256_round_mask">,
5214      DefaultAttrsIntrinsic<[llvm_v4i32_ty],
5215                            [llvm_v4f64_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5216                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5217  def int_x86_avx10_mask_vcvttpd2uqq256 :
5218      ClangBuiltin<"__builtin_ia32_vcvttpd2uqq256_round_mask">,
5219      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5220                            [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5221                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5222  def int_x86_avx10_mask_vcvttph2dq256 :
5223      ClangBuiltin<"__builtin_ia32_vcvttph2dq256_round_mask">,
5224      DefaultAttrsIntrinsic<[llvm_v8i32_ty],
5225                            [llvm_v8f16_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5226                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5227  def int_x86_avx10_mask_vcvttph2qq256 :
5228      ClangBuiltin<"__builtin_ia32_vcvttph2qq256_round_mask">,
5229      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5230                            [llvm_v8f16_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5231                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5232  def int_x86_avx10_mask_vcvttph2udq256 :
5233      ClangBuiltin<"__builtin_ia32_vcvttph2udq256_round_mask">,
5234      DefaultAttrsIntrinsic<[llvm_v8i32_ty],
5235                            [llvm_v8f16_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5236                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5237  def int_x86_avx10_mask_vcvttph2uqq256 :
5238      ClangBuiltin<"__builtin_ia32_vcvttph2uqq256_round_mask">,
5239      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5240                            [llvm_v8f16_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5241                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5242  def int_x86_avx10_mask_vcvttph2uw256 :
5243      ClangBuiltin<"__builtin_ia32_vcvttph2uw256_round_mask">,
5244      DefaultAttrsIntrinsic<[llvm_v16i16_ty],
5245                            [llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty, llvm_i32_ty],
5246                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5247  def int_x86_avx10_mask_vcvttph2w256 :
5248      ClangBuiltin<"__builtin_ia32_vcvttph2w256_round_mask">,
5249      DefaultAttrsIntrinsic<[llvm_v16i16_ty],
5250                            [llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty, llvm_i32_ty],
5251                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5252  def int_x86_avx10_mask_vcvttps2dq256 :
5253      ClangBuiltin<"__builtin_ia32_vcvttps2dq256_round_mask">,
5254      DefaultAttrsIntrinsic<[llvm_v8i32_ty],
5255                            [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5256                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5257  def int_x86_avx10_mask_vcvttps2qq256 :
5258      ClangBuiltin<"__builtin_ia32_vcvttps2qq256_round_mask">,
5259      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5260                            [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5261                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5262  def int_x86_avx10_mask_vcvttps2udq256 :
5263      ClangBuiltin<"__builtin_ia32_vcvttps2udq256_round_mask">,
5264      DefaultAttrsIntrinsic<[llvm_v8i32_ty],
5265                            [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5266                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5267  def int_x86_avx10_mask_vcvttps2uqq256 :
5268      ClangBuiltin<"__builtin_ia32_vcvttps2uqq256_round_mask">,
5269      DefaultAttrsIntrinsic<[llvm_v4i64_ty],
5270                            [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5271                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5272  def int_x86_avx10_vdivpd256 :
5273      ClangBuiltin<"__builtin_ia32_vdivpd256_round">,
5274      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5275                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
5276                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5277  def int_x86_avx10_vdivph256 :
5278      ClangBuiltin<"__builtin_ia32_vdivph256_round">,
5279      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5280                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty],
5281                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5282  def int_x86_avx10_vdivps256 :
5283      ClangBuiltin<"__builtin_ia32_vdivps256_round">,
5284      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5285                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty],
5286                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5287  def int_x86_avx10_mask_vfcmaddcph256 :
5288      ClangBuiltin<"__builtin_ia32_vfcmaddcph256_round_mask3">,
5289      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5290                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5291                            [IntrNoMem, ImmArg<ArgIndex<4>>]>;
5292  def int_x86_avx10_maskz_vfcmaddcph256 :
5293      ClangBuiltin<"__builtin_ia32_vfcmaddcph256_round_maskz">,
5294      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5295                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5296                            [IntrNoMem, ImmArg<ArgIndex<4>>]>;
5297  def int_x86_avx10_mask_vfcmulcph256 :
5298      ClangBuiltin<"__builtin_ia32_vfcmulcph256_round_mask">,
5299      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5300                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5301                            [IntrNoMem, ImmArg<ArgIndex<4>>]>;
5302  def int_x86_avx10_mask_vfixupimmpd256 :
5303      ClangBuiltin<"__builtin_ia32_vfixupimmpd256_round_mask">,
5304      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5305                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_i8_ty, llvm_i32_ty],
5306                            [IntrNoMem, ImmArg<ArgIndex<3>>, ImmArg<ArgIndex<5>>]>;
5307  def int_x86_avx10_maskz_vfixupimmpd256 :
5308      ClangBuiltin<"__builtin_ia32_vfixupimmpd256_round_maskz">,
5309      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5310                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_i8_ty, llvm_i32_ty],
5311                            [IntrNoMem, ImmArg<ArgIndex<3>>, ImmArg<ArgIndex<5>>]>;
5312  def int_x86_avx10_mask_vfixupimmps256 :
5313      ClangBuiltin<"__builtin_ia32_vfixupimmps256_round_mask">,
5314      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5315                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_i8_ty, llvm_i32_ty],
5316                            [IntrNoMem, ImmArg<ArgIndex<3>>, ImmArg<ArgIndex<5>>]>;
5317  def int_x86_avx10_maskz_vfixupimmps256 :
5318      ClangBuiltin<"__builtin_ia32_vfixupimmps256_round_maskz">,
5319      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5320                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_i8_ty, llvm_i32_ty],
5321                            [IntrNoMem, ImmArg<ArgIndex<3>>, ImmArg<ArgIndex<5>>]>;
5322  def int_x86_avx10_vfmaddpd256 :
5323      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5324                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
5325                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5326  def int_x86_avx10_vfmaddph256 :
5327      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5328                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty],
5329                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5330  def int_x86_avx10_vfmaddps256 :
5331      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5332                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty],
5333                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5334  def int_x86_avx10_mask_vfmaddcph256 :
5335      ClangBuiltin<"__builtin_ia32_vfmaddcph256_round_mask3">,
5336      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5337                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5338                            [IntrNoMem, ImmArg<ArgIndex<4>>]>;
5339  def int_x86_avx10_maskz_vfmaddcph256 :
5340      ClangBuiltin<"__builtin_ia32_vfmaddcph256_round_maskz">,
5341      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5342                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5343                            [IntrNoMem, ImmArg<ArgIndex<4>>]>;
5344  def int_x86_avx10_vfmaddsubpd256 :
5345      ClangBuiltin<"__builtin_ia32_vfmaddsubpd256_round">,
5346      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5347                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
5348                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5349  def int_x86_avx10_vfmaddsubph256 :
5350      ClangBuiltin<"__builtin_ia32_vfmaddsubph256_round">,
5351      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5352                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty],
5353                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5354  def int_x86_avx10_vfmaddsubps256 :
5355      ClangBuiltin<"__builtin_ia32_vfmaddsubps256_round">,
5356      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5357                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty],
5358                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5359  def int_x86_avx10_mask_vfmulcph256 :
5360      ClangBuiltin<"__builtin_ia32_vfmulcph256_round_mask">,
5361      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5362                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5363                            [IntrNoMem, ImmArg<ArgIndex<4>>]>;
5364  def int_x86_avx10_mask_vgetexppd256 :
5365      ClangBuiltin<"__builtin_ia32_vgetexppd256_round_mask">,
5366      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5367                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty, llvm_i32_ty],
5368                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5369  def int_x86_avx10_mask_vgetexpph256 :
5370      ClangBuiltin<"__builtin_ia32_vgetexpph256_round_mask">,
5371      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5372                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i16_ty, llvm_i32_ty],
5373                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5374  def int_x86_avx10_mask_vgetexpps256 :
5375      ClangBuiltin<"__builtin_ia32_vgetexpps256_round_mask">,
5376      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5377                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5378                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5379  def int_x86_avx10_mask_vgetmantpd256 :
5380      ClangBuiltin<"__builtin_ia32_vgetmantpd256_round_mask">,
5381      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5382                            [llvm_v4f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty, llvm_i32_ty],
5383                            [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<4>>]>;
5384  def int_x86_avx10_mask_vgetmantph256 :
5385      ClangBuiltin<"__builtin_ia32_vgetmantph256_round_mask">,
5386      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5387                            [llvm_v16f16_ty, llvm_i32_ty, llvm_v16f16_ty, llvm_i16_ty, llvm_i32_ty],
5388                            [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<4>>]>;
5389  def int_x86_avx10_mask_vgetmantps256 :
5390      ClangBuiltin<"__builtin_ia32_vgetmantps256_round_mask">,
5391      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5392                            [llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5393                            [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<4>>]>;
5394  def int_x86_avx10_vmaxpd256 :
5395      ClangBuiltin<"__builtin_ia32_vmaxpd256_round">,
5396      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5397                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
5398                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5399  def int_x86_avx10_vmaxph256 :
5400      ClangBuiltin<"__builtin_ia32_vmaxph256_round">,
5401      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5402                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty],
5403                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5404  def int_x86_avx10_vmaxps256 :
5405      ClangBuiltin<"__builtin_ia32_vmaxps256_round">,
5406      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5407                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty],
5408                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5409  def int_x86_avx10_vminpd256 :
5410      ClangBuiltin<"__builtin_ia32_vminpd256_round">,
5411      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5412                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
5413                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5414  def int_x86_avx10_vminph256 :
5415      ClangBuiltin<"__builtin_ia32_vminph256_round">,
5416      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5417                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty],
5418                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5419  def int_x86_avx10_vminps256 :
5420      ClangBuiltin<"__builtin_ia32_vminps256_round">,
5421      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5422                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty],
5423                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5424  def int_x86_avx10_vmulpd256 :
5425      ClangBuiltin<"__builtin_ia32_vmulpd256_round">,
5426      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5427                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
5428                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5429  def int_x86_avx10_vmulph256 :
5430      ClangBuiltin<"__builtin_ia32_vmulph256_round">,
5431      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5432                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty],
5433                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5434  def int_x86_avx10_vmulps256 :
5435      ClangBuiltin<"__builtin_ia32_vmulps256_round">,
5436      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5437                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty],
5438                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5439  def int_x86_avx10_mask_vrangepd256 :
5440      ClangBuiltin<"__builtin_ia32_vrangepd256_round_mask">,
5441      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5442                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty, llvm_i32_ty],
5443                            [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
5444  def int_x86_avx10_mask_vrangeps256 :
5445      ClangBuiltin<"__builtin_ia32_vrangeps256_round_mask">,
5446      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5447                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5448                            [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
5449  def int_x86_avx10_mask_vreducepd256 :
5450      ClangBuiltin<"__builtin_ia32_vreducepd256_round_mask">,
5451      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5452                            [llvm_v4f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty, llvm_i32_ty],
5453                            [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<4>>]>;
5454  def int_x86_avx10_mask_vreduceph256 :
5455      ClangBuiltin<"__builtin_ia32_vreduceph256_round_mask">,
5456      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5457                            [llvm_v16f16_ty, llvm_i32_ty, llvm_v16f16_ty, llvm_i16_ty, llvm_i32_ty],
5458                            [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<4>>]>;
5459  def int_x86_avx10_mask_vreduceps256 :
5460      ClangBuiltin<"__builtin_ia32_vreduceps256_round_mask">,
5461      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5462                            [llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5463                            [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<4>>]>;
5464  def int_x86_avx10_mask_vrndscalepd256 :
5465      ClangBuiltin<"__builtin_ia32_vrndscalepd256_round_mask">,
5466      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5467                            [llvm_v4f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty, llvm_i32_ty],
5468                            [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<4>>]>;
5469  def int_x86_avx10_mask_vrndscaleph256 :
5470      ClangBuiltin<"__builtin_ia32_vrndscaleph256_round_mask">,
5471      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5472                            [llvm_v16f16_ty, llvm_i32_ty, llvm_v16f16_ty, llvm_i16_ty, llvm_i32_ty],
5473                            [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<4>>]>;
5474  def int_x86_avx10_mask_vrndscaleps256 :
5475      ClangBuiltin<"__builtin_ia32_vrndscaleps256_round_mask">,
5476      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5477                            [llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5478                            [IntrNoMem, ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<4>>]>;
5479  def int_x86_avx10_mask_vscalefpd256 :
5480      ClangBuiltin<"__builtin_ia32_vscalefpd256_round_mask">,
5481      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5482                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty, llvm_i32_ty],
5483                            [IntrNoMem, ImmArg<ArgIndex<4>>]>;
5484  def int_x86_avx10_mask_vscalefph256 :
5485      ClangBuiltin<"__builtin_ia32_vscalefph256_round_mask">,
5486      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5487                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_v16f16_ty, llvm_i16_ty, llvm_i32_ty],
5488                            [IntrNoMem, ImmArg<ArgIndex<4>>]>;
5489  def int_x86_avx10_mask_vscalefps256 :
5490      ClangBuiltin<"__builtin_ia32_vscalefps256_round_mask">,
5491      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5492                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
5493                            [IntrNoMem, ImmArg<ArgIndex<4>>]>;
5494  def int_x86_avx10_vsqrtpd256 : ClangBuiltin<"__builtin_ia32_vsqrtpd256_round">,
5495      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5496                            [llvm_v4f64_ty, llvm_i32_ty],
5497                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5498  def int_x86_avx10_vsqrtph256 : ClangBuiltin<"__builtin_ia32_vsqrtph256_round">,
5499      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5500                            [llvm_v16f16_ty, llvm_i32_ty],
5501                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5502  def int_x86_avx10_vsqrtps256 : ClangBuiltin<"__builtin_ia32_vsqrtps256_round">,
5503      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5504                            [llvm_v8f32_ty, llvm_i32_ty],
5505                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5506  def int_x86_avx10_vsubpd256 :
5507      ClangBuiltin<"__builtin_ia32_vsubpd256_round">,
5508      DefaultAttrsIntrinsic<[llvm_v4f64_ty],
5509                            [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
5510                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5511  def int_x86_avx10_vsubph256 :
5512      ClangBuiltin<"__builtin_ia32_vsubph256_round">,
5513      DefaultAttrsIntrinsic<[llvm_v16f16_ty],
5514                            [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty],
5515                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5516  def int_x86_avx10_vsubps256 :
5517      ClangBuiltin<"__builtin_ia32_vsubps256_round">,
5518      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5519                            [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty],
5520                            [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5521}
5522
5523// conversion with saturation
5524let TargetPrefix = "x86" in {
5525  def int_x86_avx10_vcvttss2sis : ClangBuiltin<"__builtin_ia32_vcvttss2sis32">,
5526      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
5527                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5528  def int_x86_avx10_vcvttss2sis64 : ClangBuiltin<"__builtin_ia32_vcvttss2sis64">,
5529      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty],
5530                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5531  def int_x86_avx10_vcvttss2usis : ClangBuiltin<"__builtin_ia32_vcvttss2usis32">,
5532      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
5533                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5534  def int_x86_avx10_vcvttss2usis64 : ClangBuiltin<"__builtin_ia32_vcvttss2usis64">,
5535      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty],
5536                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5537  def int_x86_avx10_vcvttsd2sis : ClangBuiltin<"__builtin_ia32_vcvttsd2sis32">,
5538      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty],
5539                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5540  def int_x86_avx10_vcvttsd2sis64 : ClangBuiltin<"__builtin_ia32_vcvttsd2sis64">,
5541      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty],
5542                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5543  def int_x86_avx10_vcvttsd2usis : ClangBuiltin<"__builtin_ia32_vcvttsd2usis32">,
5544      DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty],
5545                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5546  def int_x86_avx10_vcvttsd2usis64 : ClangBuiltin<"__builtin_ia32_vcvttsd2usis64">,
5547      DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty],
5548                            [IntrNoMem, ImmArg<ArgIndex<1>>]>;
5549  def int_x86_avx10_mask_vcvttpd2dqs_128 : ClangBuiltin<"__builtin_ia32_vcvttpd2dqs128_mask">,
5550      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty, llvm_v4i32_ty, llvm_i8_ty],
5551                            [IntrNoMem]>;
5552  def int_x86_avx10_mask_vcvttpd2dqs_round_256: ClangBuiltin<"__builtin_ia32_vcvttpd2dqs256_round_mask">,
5553      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5554                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5555  def int_x86_avx10_mask_vcvttpd2dqs_round_512 : ClangBuiltin<"__builtin_ia32_vcvttpd2dqs512_round_mask">,
5556      DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5557                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5558  def int_x86_avx10_mask_vcvttpd2udqs_128 : ClangBuiltin<"__builtin_ia32_vcvttpd2udqs128_mask">,
5559      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty,llvm_v4i32_ty, llvm_i8_ty],
5560                                        [IntrNoMem]>;
5561  def int_x86_avx10_mask_vcvttpd2udqs_round_256: ClangBuiltin<"__builtin_ia32_vcvttpd2udqs256_round_mask">,
5562      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
5563                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5564  def int_x86_avx10_mask_vcvttpd2udqs_round_512 : ClangBuiltin<"__builtin_ia32_vcvttpd2udqs512_round_mask">,
5565      DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5566                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5567  def int_x86_avx10_mask_vcvttpd2qqs_128 : ClangBuiltin<"__builtin_ia32_vcvttpd2qqs128_mask">,
5568      DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty,llvm_v2i64_ty, llvm_i8_ty],
5569                            [IntrNoMem]>;
5570  def int_x86_avx10_mask_vcvttpd2qqs_round_256: ClangBuiltin<"__builtin_ia32_vcvttpd2qqs256_round_mask">,
5571      DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5572                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5573  def int_x86_avx10_mask_vcvttpd2qqs_round_512 : ClangBuiltin<"__builtin_ia32_vcvttpd2qqs512_round_mask">,
5574      DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_v8f64_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
5575                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5576  def int_x86_avx10_mask_vcvttpd2uqqs_128 : ClangBuiltin<"__builtin_ia32_vcvttpd2uqqs128_mask">,
5577      DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2f64_ty,llvm_v2i64_ty, llvm_i8_ty],
5578                            [IntrNoMem]>;
5579  def int_x86_avx10_mask_vcvttpd2uqqs_round_256: ClangBuiltin<"__builtin_ia32_vcvttpd2uqqs256_round_mask">,
5580      DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4f64_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5581                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5582  def int_x86_avx10_mask_vcvttpd2uqqs_round_512 : ClangBuiltin<"__builtin_ia32_vcvttpd2uqqs512_round_mask">,
5583      DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_v8f64_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
5584                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5585  def int_x86_avx10_mask_vcvttps2dqs_128 : ClangBuiltin<"__builtin_ia32_vcvttps2dqs128_mask">,
5586      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4i32_ty, llvm_i8_ty],
5587                            [IntrNoMem]>;
5588  def int_x86_avx10_mask_vcvttps2dqs_round_256: ClangBuiltin<"__builtin_ia32_vcvttps2dqs256_round_mask">,
5589      DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5590                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5591  def int_x86_avx10_mask_vcvttps2dqs_round_512 : ClangBuiltin<"__builtin_ia32_vcvttps2dqs512_round_mask">,
5592      DefaultAttrsIntrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
5593                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5594  def int_x86_avx10_mask_vcvttps2udqs_128 : ClangBuiltin<"__builtin_ia32_vcvttps2udqs128_mask">,
5595      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4i32_ty, llvm_i8_ty],
5596                            [IntrNoMem]>;
5597  def int_x86_avx10_mask_vcvttps2udqs_round_256: ClangBuiltin<"__builtin_ia32_vcvttps2udqs256_round_mask">,
5598      DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
5599                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5600  def int_x86_avx10_mask_vcvttps2udqs_round_512 : ClangBuiltin<"__builtin_ia32_vcvttps2udqs512_round_mask">,
5601      DefaultAttrsIntrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
5602                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5603  def int_x86_avx10_mask_vcvttps2qqs_128 : ClangBuiltin<"__builtin_ia32_vcvttps2qqs128_mask">,
5604      DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v4f32_ty, llvm_v2i64_ty, llvm_i8_ty],
5605                            [IntrNoMem]>;
5606  def int_x86_avx10_mask_vcvttps2qqs_round_256: ClangBuiltin<"__builtin_ia32_vcvttps2qqs256_round_mask">,
5607      DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5608                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5609  def int_x86_avx10_mask_vcvttps2qqs_round_512 : ClangBuiltin<"__builtin_ia32_vcvttps2qqs512_round_mask">,
5610      DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_v8f32_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
5611                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5612  def int_x86_avx10_mask_vcvttps2uqqs_128 : ClangBuiltin<"__builtin_ia32_vcvttps2uqqs128_mask">,
5613      DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v4f32_ty,llvm_v2i64_ty, llvm_i8_ty],
5614                            [IntrNoMem]>;
5615  def int_x86_avx10_mask_vcvttps2uqqs_round_256: ClangBuiltin<"__builtin_ia32_vcvttps2uqqs256_round_mask">,
5616      DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4f32_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
5617                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5618  def int_x86_avx10_mask_vcvttps2uqqs_round_512 : ClangBuiltin<"__builtin_ia32_vcvttps2uqqs512_round_mask">,
5619      DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_v8f32_ty, llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
5620                            [IntrNoMem, ImmArg<ArgIndex<3>>]>;
5621}
5622
5623//===----------------------------------------------------------------------===//
5624// SHA intrinsics
5625let TargetPrefix = "x86" in {
5626  def int_x86_sha1rnds4 : ClangBuiltin<"__builtin_ia32_sha1rnds4">,
5627      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5628                             llvm_i8_ty], [IntrNoMem, ImmArg<ArgIndex<2>>]>;
5629  def int_x86_sha1nexte : ClangBuiltin<"__builtin_ia32_sha1nexte">,
5630      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
5631                            [IntrNoMem]>;
5632  def int_x86_sha1msg1 : ClangBuiltin<"__builtin_ia32_sha1msg1">,
5633      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
5634                            [IntrNoMem]>;
5635  def int_x86_sha1msg2 : ClangBuiltin<"__builtin_ia32_sha1msg2">,
5636      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
5637                            [IntrNoMem]>;
5638  def int_x86_sha256rnds2 : ClangBuiltin<"__builtin_ia32_sha256rnds2">,
5639      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
5640                             llvm_v4i32_ty], [IntrNoMem]>;
5641  def int_x86_sha256msg1 : ClangBuiltin<"__builtin_ia32_sha256msg1">,
5642      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
5643                            [IntrNoMem]>;
5644  def int_x86_sha256msg2 : ClangBuiltin<"__builtin_ia32_sha256msg2">,
5645      DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
5646                            [IntrNoMem]>;
5647}
5648
5649//===----------------------------------------------------------------------===//
5650// SHA512 intrinsics
5651let TargetPrefix = "x86" in {
5652def int_x86_vsha512msg1 : ClangBuiltin<"__builtin_ia32_vsha512msg1">,
5653    DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v2i64_ty],
5654                          [IntrNoMem]>;
5655def int_x86_vsha512msg2 : ClangBuiltin<"__builtin_ia32_vsha512msg2">,
5656    DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
5657                          [IntrNoMem]>;
5658def int_x86_vsha512rnds2 : ClangBuiltin<"__builtin_ia32_vsha512rnds2">,
5659    DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v2i64_ty],
5660                          [IntrNoMem]>;
5661}
5662
5663//===----------------------------------------------------------------------===//
5664// Thread synchronization ops with timer.
5665let TargetPrefix = "x86" in {
5666  def int_x86_monitorx
5667      : ClangBuiltin<"__builtin_ia32_monitorx">,
5668        Intrinsic<[], [ llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty ], []>;
5669  def int_x86_mwaitx
5670      : ClangBuiltin<"__builtin_ia32_mwaitx">,
5671        Intrinsic<[], [ llvm_i32_ty, llvm_i32_ty, llvm_i32_ty ], []>;
5672}
5673
5674//===----------------------------------------------------------------------===//
5675// Cache-line zero
5676let TargetPrefix = "x86" in {
5677  def int_x86_clzero : ClangBuiltin<"__builtin_ia32_clzero">,
5678      Intrinsic<[], [llvm_ptr_ty], []>;
5679}
5680
5681//===----------------------------------------------------------------------===//
5682// Cache write back intrinsics
5683
5684let TargetPrefix = "x86" in {
5685  // Write back and invalidate
5686  def int_x86_wbinvd : ClangBuiltin<"__builtin_ia32_wbinvd">,
5687      Intrinsic<[], [], []>;
5688
5689  // Write back no-invalidate
5690  def int_x86_wbnoinvd : ClangBuiltin<"__builtin_ia32_wbnoinvd">,
5691      Intrinsic<[], [], []>;
5692}
5693
5694//===----------------------------------------------------------------------===//
5695// Cache-line demote
5696
5697let TargetPrefix = "x86" in {
5698  def int_x86_cldemote : ClangBuiltin<"__builtin_ia32_cldemote">,
5699      Intrinsic<[], [llvm_ptr_ty], []>;
5700}
5701
5702//===----------------------------------------------------------------------===//
5703// Wait and pause enhancements
5704let TargetPrefix = "x86" in {
5705  def int_x86_umonitor : ClangBuiltin<"__builtin_ia32_umonitor">,
5706              Intrinsic<[], [llvm_ptr_ty], []>;
5707  def int_x86_umwait : ClangBuiltin<"__builtin_ia32_umwait">,
5708              Intrinsic<[llvm_i8_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
5709  def int_x86_tpause : ClangBuiltin<"__builtin_ia32_tpause">,
5710              Intrinsic<[llvm_i8_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
5711}
5712
5713//===----------------------------------------------------------------------===//
5714// Direct Move Instructions
5715
5716let TargetPrefix = "x86" in {
5717  def int_x86_directstore32 : ClangBuiltin<"__builtin_ia32_directstore_u32">,
5718      Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], []>;
5719  def int_x86_directstore64 : ClangBuiltin<"__builtin_ia32_directstore_u64">,
5720      Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
5721  def int_x86_movdir64b : ClangBuiltin<"__builtin_ia32_movdir64b">,
5722      Intrinsic<[], [llvm_ptr_ty, llvm_ptr_ty], []>;
5723}
5724
5725//===----------------------------------------------------------------------===//
5726// PTWrite - Write data to processor trace pocket
5727
5728let TargetPrefix = "x86" in {
5729  def int_x86_ptwrite32 : ClangBuiltin<"__builtin_ia32_ptwrite32">,
5730              Intrinsic<[], [llvm_i32_ty], []>;
5731  def int_x86_ptwrite64 : ClangBuiltin<"__builtin_ia32_ptwrite64">,
5732              Intrinsic<[], [llvm_i64_ty], []>;
5733}
5734
5735//===----------------------------------------------------------------------===//
5736// INVPCID - Invalidate Process-Context Identifier
5737
5738let TargetPrefix = "x86" in {
5739  def int_x86_invpcid : ClangBuiltin<"__builtin_ia32_invpcid">,
5740              Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], []>;
5741}
5742
5743let TargetPrefix = "x86" in {
5744  def int_x86_avx512bf16_cvtne2ps2bf16_128:
5745      ClangBuiltin<"__builtin_ia32_cvtne2ps2bf16_128">,
5746      DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
5747                            [IntrNoMem]>;
5748  def int_x86_avx512bf16_cvtne2ps2bf16_256:
5749      ClangBuiltin<"__builtin_ia32_cvtne2ps2bf16_256">,
5750      DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v8f32_ty, llvm_v8f32_ty],
5751                            [IntrNoMem]>;
5752  def int_x86_avx512bf16_cvtne2ps2bf16_512:
5753      ClangBuiltin<"__builtin_ia32_cvtne2ps2bf16_512">,
5754      DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v16f32_ty, llvm_v16f32_ty],
5755                            [IntrNoMem]>;
5756  // Intrinsic must be masked due to it producing less than 128 bits of results.
5757  def int_x86_avx512bf16_mask_cvtneps2bf16_128:
5758      DefaultAttrsIntrinsic<[llvm_v8bf16_ty],
5759                            [llvm_v4f32_ty, llvm_v8bf16_ty, llvm_v4i1_ty],
5760                            [IntrNoMem]>;
5761  def int_x86_avx512bf16_cvtneps2bf16_256:
5762      ClangBuiltin<"__builtin_ia32_cvtneps2bf16_256">,
5763      DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8f32_ty], [IntrNoMem]>;
5764  def int_x86_avx512bf16_cvtneps2bf16_512:
5765      ClangBuiltin<"__builtin_ia32_cvtneps2bf16_512">,
5766      DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16f32_ty], [IntrNoMem]>;
5767  def int_x86_avx512bf16_dpbf16ps_128:
5768      ClangBuiltin<"__builtin_ia32_dpbf16ps_128">,
5769      DefaultAttrsIntrinsic<[llvm_v4f32_ty],
5770                            [llvm_v4f32_ty, llvm_v8bf16_ty, llvm_v8bf16_ty],
5771                            [IntrNoMem]>;
5772  def int_x86_avx512bf16_dpbf16ps_256:
5773      ClangBuiltin<"__builtin_ia32_dpbf16ps_256">,
5774      DefaultAttrsIntrinsic<[llvm_v8f32_ty],
5775                            [llvm_v8f32_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
5776                            [IntrNoMem]>;
5777  def int_x86_avx512bf16_dpbf16ps_512:
5778      ClangBuiltin<"__builtin_ia32_dpbf16ps_512">,
5779      DefaultAttrsIntrinsic<[llvm_v16f32_ty],
5780                            [llvm_v16f32_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
5781                            [IntrNoMem]>;
5782}
5783
5784//===----------------------------------------------------------------------===//
5785// ENQCMD - Enqueue Stores Instructions
5786
5787let TargetPrefix = "x86" in {
5788  def int_x86_enqcmd : ClangBuiltin<"__builtin_ia32_enqcmd">,
5789              Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_ptr_ty], []>;
5790  def int_x86_enqcmds : ClangBuiltin<"__builtin_ia32_enqcmds">,
5791              Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_ptr_ty], []>;
5792}
5793
5794//===----------------------------------------------------------------------===//
5795// SERIALIZE - Serialize instruction fetch and execution
5796
5797let TargetPrefix = "x86" in {
5798  def int_x86_serialize : ClangBuiltin<"__builtin_ia32_serialize">,
5799              Intrinsic<[], [], []>;
5800}
5801
5802//===----------------------------------------------------------------------===//
5803// TSXLDTRK - TSX Suspend Load Address Tracking
5804
5805let TargetPrefix = "x86" in {
5806  def int_x86_xsusldtrk : ClangBuiltin<"__builtin_ia32_xsusldtrk">,
5807              Intrinsic<[], [], []>;
5808  def int_x86_xresldtrk : ClangBuiltin<"__builtin_ia32_xresldtrk">,
5809              Intrinsic<[], [], []>;
5810}
5811
5812//===----------------------------------------------------------------------===//
5813// Key Locker
5814let TargetPrefix = "x86" in {
5815  def int_x86_loadiwkey : ClangBuiltin<"__builtin_ia32_loadiwkey">,
5816      Intrinsic<[], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
5817                []>;
5818  def int_x86_encodekey128 :
5819      Intrinsic<[llvm_i32_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5820                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
5821                [llvm_i32_ty, llvm_v2i64_ty], []>;
5822  def int_x86_encodekey256 :
5823      Intrinsic<[llvm_i32_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5824                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
5825                [llvm_i32_ty, llvm_v2i64_ty, llvm_v2i64_ty], []>;
5826  def int_x86_aesenc128kl :
5827      Intrinsic<[llvm_i8_ty, llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty], []>;
5828  def int_x86_aesdec128kl :
5829      Intrinsic<[llvm_i8_ty, llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty], []>;
5830  def int_x86_aesenc256kl :
5831      Intrinsic<[llvm_i8_ty, llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty], []>;
5832  def int_x86_aesdec256kl :
5833      Intrinsic<[llvm_i8_ty, llvm_v2i64_ty], [llvm_v2i64_ty, llvm_ptr_ty], []>;
5834  def int_x86_aesencwide128kl :
5835      Intrinsic<[llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5836                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5837                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
5838                [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5839                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5840                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], []>;
5841  def int_x86_aesdecwide128kl :
5842      Intrinsic<[llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5843                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5844                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
5845                [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5846                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5847                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], []>;
5848  def int_x86_aesencwide256kl :
5849      Intrinsic<[llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5850                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5851                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
5852                [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5853                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5854                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], []>;
5855  def int_x86_aesdecwide256kl :
5856      Intrinsic<[llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5857                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5858                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
5859                [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5860                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty,
5861                 llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], []>;
5862}
5863
5864//===----------------------------------------------------------------------===//
5865// AMX - Intel AMX extensions
5866
5867let TargetPrefix = "x86" in {
5868  def int_x86_ldtilecfg : ClangBuiltin<"__builtin_ia32_tile_loadconfig">,
5869              Intrinsic<[], [llvm_ptr_ty], []>;
5870  def int_x86_sttilecfg : ClangBuiltin<"__builtin_ia32_tile_storeconfig">,
5871              Intrinsic<[], [llvm_ptr_ty], []>;
5872  def int_x86_tilerelease : ClangBuiltin<"__builtin_ia32_tilerelease">,
5873              Intrinsic<[], [], []>;
5874  def int_x86_tilezero : ClangBuiltin<"__builtin_ia32_tilezero">,
5875              Intrinsic<[], [llvm_i8_ty], [ImmArg<ArgIndex<0>>]>;
5876  def int_x86_tileloadd64 : ClangBuiltin<"__builtin_ia32_tileloadd64">,
5877              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5878                        [ImmArg<ArgIndex<0>>]>;
5879  def int_x86_tileloaddt164 : ClangBuiltin<"__builtin_ia32_tileloaddt164">,
5880              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5881                        [ImmArg<ArgIndex<0>>]>;
5882  def int_x86_tilestored64 : ClangBuiltin<"__builtin_ia32_tilestored64">,
5883              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5884                        [ImmArg<ArgIndex<0>>]>;
5885  def int_x86_tileloaddrs64 : ClangBuiltin<"__builtin_ia32_tileloaddrs64">,
5886              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5887                        [ImmArg<ArgIndex<0>>]>;
5888  def int_x86_tileloaddrst164 : ClangBuiltin<"__builtin_ia32_tileloaddrst164">,
5889              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5890                        [ImmArg<ArgIndex<0>>]>;
5891  def int_x86_tdpbssd : ClangBuiltin<"__builtin_ia32_tdpbssd">,
5892              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5893                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5894                         ImmArg<ArgIndex<2>>]>;
5895  def int_x86_tdpbsud : ClangBuiltin<"__builtin_ia32_tdpbsud">,
5896              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5897                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5898                         ImmArg<ArgIndex<2>>]>;
5899  def int_x86_tdpbusd : ClangBuiltin<"__builtin_ia32_tdpbusd">,
5900              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5901                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5902                         ImmArg<ArgIndex<2>>]>;
5903  def int_x86_tdpbuud : ClangBuiltin<"__builtin_ia32_tdpbuud">,
5904              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5905                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5906                         ImmArg<ArgIndex<2>>]>;
5907  def int_x86_tdpbf16ps : ClangBuiltin<"__builtin_ia32_tdpbf16ps">,
5908              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5909                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5910                         ImmArg<ArgIndex<2>>]>;
5911  // AMX-FP16 - Intel FP16 AMX extensions
5912  def int_x86_tdpfp16ps : ClangBuiltin<"__builtin_ia32_tdpfp16ps">,
5913              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5914                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5915                         ImmArg<ArgIndex<2>>]>;
5916  // AMX-COMPLEX
5917  def int_x86_tcmmimfp16ps : ClangBuiltin<"__builtin_ia32_tcmmimfp16ps">,
5918              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5919                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5920                         ImmArg<ArgIndex<2>>]>;
5921  def int_x86_tcmmrlfp16ps : ClangBuiltin<"__builtin_ia32_tcmmrlfp16ps">,
5922              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5923                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5924                         ImmArg<ArgIndex<2>>]>;
5925
5926  // AMX-FP8
5927  def int_x86_tdpbf8ps : ClangBuiltin<"__builtin_ia32_tdpbf8ps">,
5928              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5929                        [ImmArg<ArgIndex<0>>,
5930                         ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>;
5931  def int_x86_tdpbhf8ps : ClangBuiltin<"__builtin_ia32_tdpbhf8ps">,
5932              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5933                        [ImmArg<ArgIndex<0>>,
5934                         ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>;
5935  def int_x86_tdphbf8ps : ClangBuiltin<"__builtin_ia32_tdphbf8ps">,
5936              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5937                        [ImmArg<ArgIndex<0>>,
5938                         ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>;
5939  def int_x86_tdphf8ps : ClangBuiltin<"__builtin_ia32_tdphf8ps">,
5940              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5941                        [ImmArg<ArgIndex<0>>,
5942                        ImmArg<ArgIndex<1>>, ImmArg<ArgIndex<2>>]>;
5943
5944  // AMX-TRANSPOSE
5945  def int_x86_t2rpntlvwz0 : ClangBuiltin<"__builtin_ia32_t2rpntlvwz0">,
5946              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5947                        [ImmArg<ArgIndex<0>>]>;
5948  def int_x86_t2rpntlvwz0t1 : ClangBuiltin<"__builtin_ia32_t2rpntlvwz0t1">,
5949              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5950                        [ImmArg<ArgIndex<0>>]>;
5951  def int_x86_t2rpntlvwz1 : ClangBuiltin<"__builtin_ia32_t2rpntlvwz1">,
5952              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5953                        [ImmArg<ArgIndex<0>>]>;
5954  def int_x86_t2rpntlvwz1t1 : ClangBuiltin<"__builtin_ia32_t2rpntlvwz1t1">,
5955              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5956                        [ImmArg<ArgIndex<0>>]>;
5957  def int_x86_ttransposed : ClangBuiltin<"__builtin_ia32_ttransposed">,
5958              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty],
5959                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>]>;
5960  def int_x86_ttdpbf16ps : ClangBuiltin<"__builtin_ia32_ttdpbf16ps">,
5961              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5962                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5963                         ImmArg<ArgIndex<2>>]>;
5964  def int_x86_ttdpfp16ps : ClangBuiltin<"__builtin_ia32_ttdpfp16ps">,
5965              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5966                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5967                         ImmArg<ArgIndex<2>>]>;
5968  def int_x86_ttcmmimfp16ps : ClangBuiltin<"__builtin_ia32_ttcmmimfp16ps">,
5969              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5970                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5971                         ImmArg<ArgIndex<2>>]>;
5972  def int_x86_ttcmmrlfp16ps : ClangBuiltin<"__builtin_ia32_ttcmmrlfp16ps">,
5973              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5974                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5975                         ImmArg<ArgIndex<2>>]>;
5976  def int_x86_tconjtcmmimfp16ps : ClangBuiltin<"__builtin_ia32_tconjtcmmimfp16ps">,
5977              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
5978                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
5979                         ImmArg<ArgIndex<2>>]>;
5980  def int_x86_tconjtfp16 : ClangBuiltin<"__builtin_ia32_tconjtfp16">,
5981              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty],
5982                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>]>;
5983
5984  // AMX-MORVS, AMX-TRANSPOSE
5985  def int_x86_t2rpntlvwz0rs : ClangBuiltin<"__builtin_ia32_t2rpntlvwz0rs">,
5986              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5987                        [ImmArg<ArgIndex<0>>]>;
5988  def int_x86_t2rpntlvwz0rst1 : ClangBuiltin<"__builtin_ia32_t2rpntlvwz0rst1">,
5989              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5990                        [ImmArg<ArgIndex<0>>]>;
5991  def int_x86_t2rpntlvwz1rs : ClangBuiltin<"__builtin_ia32_t2rpntlvwz1rs">,
5992              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5993                        [ImmArg<ArgIndex<0>>]>;
5994  def int_x86_t2rpntlvwz1rst1 : ClangBuiltin<"__builtin_ia32_t2rpntlvwz1rst1">,
5995              Intrinsic<[], [llvm_i8_ty, llvm_ptr_ty, llvm_i64_ty],
5996                        [ImmArg<ArgIndex<0>>]>;
5997
5998  // AMX-AVX512
5999  def int_x86_tcvtrowd2ps : ClangBuiltin<"__builtin_ia32_tcvtrowd2ps">,
6000              Intrinsic<[llvm_v16f32_ty], [llvm_i8_ty, llvm_i32_ty],
6001                        [ImmArg<ArgIndex<0>>]>;
6002  def int_x86_tcvtrowps2bf16h : ClangBuiltin<"__builtin_ia32_tcvtrowps2bf16h">,
6003              Intrinsic<[llvm_v32bf16_ty], [llvm_i8_ty, llvm_i32_ty],
6004                        [ImmArg<ArgIndex<0>>]>;
6005  def int_x86_tcvtrowps2bf16l : ClangBuiltin<"__builtin_ia32_tcvtrowps2bf16l">,
6006              Intrinsic<[llvm_v32bf16_ty], [llvm_i8_ty, llvm_i32_ty],
6007                        [ImmArg<ArgIndex<0>>]>;
6008  def int_x86_tcvtrowps2phh : ClangBuiltin<"__builtin_ia32_tcvtrowps2phh">,
6009              Intrinsic<[llvm_v32f16_ty], [llvm_i8_ty, llvm_i32_ty],
6010                        [ImmArg<ArgIndex<0>>]>;
6011  def int_x86_tcvtrowps2phl : ClangBuiltin<"__builtin_ia32_tcvtrowps2phl">,
6012              Intrinsic<[llvm_v32f16_ty], [llvm_i8_ty, llvm_i32_ty],
6013                        [ImmArg<ArgIndex<0>>]>;
6014  def int_x86_tilemovrow : ClangBuiltin<"__builtin_ia32_tilemovrow">,
6015              Intrinsic<[llvm_v16i32_ty], [llvm_i8_ty, llvm_i32_ty],
6016                        [ImmArg<ArgIndex<0>>]>;
6017
6018  // AMX - internal intrinsics
6019  def int_x86_ldtilecfg_internal :
6020              ClangBuiltin<"__builtin_ia32_tile_loadconfig_internal">,
6021              Intrinsic<[], [llvm_ptr_ty], []>;
6022  def int_x86_tileloadd64_internal :
6023              ClangBuiltin<"__builtin_ia32_tileloadd64_internal">,
6024              Intrinsic<[llvm_x86amx_ty],
6025                        [llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6026                        []>;
6027  def int_x86_tileloaddt164_internal :
6028              ClangBuiltin<"__builtin_ia32_tileloaddt164_internal">,
6029              Intrinsic<[llvm_x86amx_ty],
6030                        [llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6031                        []>;
6032  def int_x86_tileloaddrs64_internal :
6033              ClangBuiltin<"__builtin_ia32_tileloaddrs64_internal">,
6034              Intrinsic<[llvm_x86amx_ty],
6035                        [llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6036                        []>;
6037  def int_x86_tileloaddrst164_internal :
6038              ClangBuiltin<"__builtin_ia32_tileloaddrst164_internal">,
6039              Intrinsic<[llvm_x86amx_ty],
6040                        [llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6041                        []>;
6042  def int_x86_tdpbssd_internal :
6043              ClangBuiltin<"__builtin_ia32_tdpbssd_internal">,
6044              Intrinsic<[llvm_x86amx_ty],
6045                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6046                         llvm_x86amx_ty, llvm_x86amx_ty,
6047                         llvm_x86amx_ty], []>;
6048  def int_x86_tdpbsud_internal :
6049              ClangBuiltin<"__builtin_ia32_tdpbsud_internal">,
6050              Intrinsic<[llvm_x86amx_ty],
6051                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6052                         llvm_x86amx_ty, llvm_x86amx_ty,
6053                         llvm_x86amx_ty], []>;
6054  def int_x86_tdpbusd_internal :
6055              ClangBuiltin<"__builtin_ia32_tdpbusd_internal">,
6056              Intrinsic<[llvm_x86amx_ty],
6057                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6058                         llvm_x86amx_ty, llvm_x86amx_ty,
6059                         llvm_x86amx_ty], []>;
6060  def int_x86_tdpbuud_internal :
6061              ClangBuiltin<"__builtin_ia32_tdpbuud_internal">,
6062              Intrinsic<[llvm_x86amx_ty],
6063                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6064                         llvm_x86amx_ty, llvm_x86amx_ty,
6065                         llvm_x86amx_ty], []>;
6066  def int_x86_tilestored64_internal :
6067              ClangBuiltin<"__builtin_ia32_tilestored64_internal">,
6068              Intrinsic<[], [llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty,
6069                             llvm_i64_ty, llvm_x86amx_ty], []>;
6070  def int_x86_tilezero_internal :
6071              ClangBuiltin<"__builtin_ia32_tilezero_internal">,
6072              Intrinsic<[llvm_x86amx_ty], [llvm_i16_ty, llvm_i16_ty],
6073                        []>;
6074  def int_x86_tdpbf16ps_internal :
6075              ClangBuiltin<"__builtin_ia32_tdpbf16ps_internal">,
6076              Intrinsic<[llvm_x86amx_ty],
6077                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6078                         llvm_x86amx_ty, llvm_x86amx_ty,
6079                         llvm_x86amx_ty], []>;
6080  def int_x86_tdpfp16ps_internal :
6081              ClangBuiltin<"__builtin_ia32_tdpfp16ps_internal">,
6082              Intrinsic<[llvm_x86amx_ty],
6083                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6084                         llvm_x86amx_ty, llvm_x86amx_ty,
6085                         llvm_x86amx_ty], []>;
6086  // the vector size can be smaller than AMX register size (1024 bytes)
6087  def int_x86_cast_vector_to_tile:
6088      DefaultAttrsIntrinsic<[llvm_x86amx_ty], [llvm_anyvector_ty], [IntrNoMem]>;
6089  // the vector size can be smaller than AMX register size (1024 bytes)
6090  def int_x86_cast_tile_to_vector:
6091      DefaultAttrsIntrinsic<[llvm_anyvector_ty], [llvm_x86amx_ty], [IntrNoMem]>;
6092
6093  def int_x86_tcmmimfp16ps_internal :
6094              ClangBuiltin<"__builtin_ia32_tcmmimfp16ps_internal">,
6095              Intrinsic<[llvm_x86amx_ty],
6096                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6097                         llvm_x86amx_ty, llvm_x86amx_ty,
6098                         llvm_x86amx_ty], []>;
6099  def int_x86_tcmmrlfp16ps_internal :
6100              ClangBuiltin<"__builtin_ia32_tcmmrlfp16ps_internal">,
6101              Intrinsic<[llvm_x86amx_ty],
6102                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6103                         llvm_x86amx_ty, llvm_x86amx_ty,
6104                         llvm_x86amx_ty], []>;
6105
6106  // AMX-MORVS, AMX-TRANSPOSE - internal intrinsics
6107  def int_x86_t2rpntlvwz0rs_internal :
6108              Intrinsic<[llvm_x86amx_ty, llvm_x86amx_ty],
6109                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6110                        [IntrArgMemOnly, IntrReadMem]>;
6111  def int_x86_t2rpntlvwz0rst1_internal :
6112              Intrinsic<[llvm_x86amx_ty, llvm_x86amx_ty],
6113                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6114                        [IntrArgMemOnly]>;
6115  def int_x86_t2rpntlvwz1rs_internal :
6116              Intrinsic<[llvm_x86amx_ty, llvm_x86amx_ty],
6117                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6118                        [IntrArgMemOnly]>;
6119  def int_x86_t2rpntlvwz1rst1_internal :
6120              Intrinsic<[llvm_x86amx_ty, llvm_x86amx_ty],
6121                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6122                        [IntrArgMemOnly]>;
6123
6124  def int_x86_t2rpntlvwz0_internal :
6125              Intrinsic<[llvm_x86amx_ty, llvm_x86amx_ty],
6126                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6127                        []>;
6128  def int_x86_t2rpntlvwz0t1_internal :
6129              Intrinsic<[llvm_x86amx_ty, llvm_x86amx_ty],
6130                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6131                        []>;
6132  def int_x86_t2rpntlvwz1_internal :
6133              Intrinsic<[llvm_x86amx_ty, llvm_x86amx_ty],
6134                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6135                        []>;
6136  def int_x86_t2rpntlvwz1t1_internal :
6137              Intrinsic<[llvm_x86amx_ty, llvm_x86amx_ty],
6138                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_ptr_ty, llvm_i64_ty],
6139                        []>;
6140  def int_x86_ttransposed_internal :
6141              ClangBuiltin<"__builtin_ia32_ttransposed_internal">,
6142              Intrinsic<[llvm_x86amx_ty],
6143                        [llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty], []>;
6144  def int_x86_ttdpbf16ps_internal :
6145              ClangBuiltin<"__builtin_ia32_ttdpbf16ps_internal">,
6146              Intrinsic<[llvm_x86amx_ty],
6147                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6148                         llvm_x86amx_ty, llvm_x86amx_ty,
6149                         llvm_x86amx_ty], []>;
6150  def int_x86_ttdpfp16ps_internal :
6151              ClangBuiltin<"__builtin_ia32_ttdpfp16ps_internal">,
6152              Intrinsic<[llvm_x86amx_ty],
6153                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6154                         llvm_x86amx_ty, llvm_x86amx_ty,
6155                         llvm_x86amx_ty], []>;
6156  def int_x86_ttcmmimfp16ps_internal :
6157              ClangBuiltin<"__builtin_ia32_ttcmmimfp16ps_internal">,
6158              Intrinsic<[llvm_x86amx_ty],
6159                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6160                         llvm_x86amx_ty, llvm_x86amx_ty,
6161                         llvm_x86amx_ty], []>;
6162  def int_x86_ttcmmrlfp16ps_internal :
6163              ClangBuiltin<"__builtin_ia32_ttcmmrlfp16ps_internal">,
6164              Intrinsic<[llvm_x86amx_ty],
6165                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6166                         llvm_x86amx_ty, llvm_x86amx_ty,
6167                         llvm_x86amx_ty], []>;
6168  def int_x86_tconjtcmmimfp16ps_internal :
6169              ClangBuiltin<"__builtin_ia32_tconjtcmmimfp16ps_internal">,
6170              Intrinsic<[llvm_x86amx_ty],
6171                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6172                         llvm_x86amx_ty, llvm_x86amx_ty,
6173                         llvm_x86amx_ty], []>;
6174  def int_x86_tconjtfp16_internal :
6175              ClangBuiltin<"__builtin_ia32_tconjtfp16_internal">,
6176              Intrinsic<[llvm_x86amx_ty],
6177                        [llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty], []>;
6178
6179  def int_x86_tcvtrowd2ps_internal :
6180              ClangBuiltin<"__builtin_ia32_tcvtrowd2ps_internal">,
6181              Intrinsic<[llvm_v16f32_ty],
6182                        [llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty, llvm_i32_ty],
6183                        []>;
6184  def int_x86_tcvtrowps2bf16h_internal :
6185              ClangBuiltin<"__builtin_ia32_tcvtrowps2bf16h_internal">,
6186              Intrinsic<[llvm_v32bf16_ty],
6187                        [llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty, llvm_i32_ty],
6188                        []>;
6189  def int_x86_tcvtrowps2bf16l_internal :
6190              ClangBuiltin<"__builtin_ia32_tcvtrowps2bf16l_internal">,
6191              Intrinsic<[llvm_v32bf16_ty],
6192                        [llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty, llvm_i32_ty],
6193                        []>;
6194  def int_x86_tcvtrowps2phh_internal :
6195              ClangBuiltin<"__builtin_ia32_tcvtrowps2phh_internal">,
6196              Intrinsic<[llvm_v32f16_ty],
6197                        [llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty, llvm_i32_ty],
6198                        []>;
6199  def int_x86_tcvtrowps2phl_internal :
6200              ClangBuiltin<"__builtin_ia32_tcvtrowps2phl_internal">,
6201              Intrinsic<[llvm_v32f16_ty],
6202                        [llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty, llvm_i32_ty],
6203                        []>;
6204  def int_x86_tilemovrow_internal :
6205              ClangBuiltin<"__builtin_ia32_tilemovrow_internal">,
6206              Intrinsic<[llvm_v16i32_ty],
6207                        [llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty, llvm_i32_ty],
6208                        []>;
6209
6210  def int_x86_tmmultf32ps : ClangBuiltin<"__builtin_ia32_tmmultf32ps">,
6211              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
6212                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
6213                         ImmArg<ArgIndex<2>>]>;
6214  def int_x86_ttmmultf32ps : ClangBuiltin<"__builtin_ia32_ttmmultf32ps">,
6215              Intrinsic<[], [llvm_i8_ty, llvm_i8_ty, llvm_i8_ty],
6216                        [ImmArg<ArgIndex<0>>, ImmArg<ArgIndex<1>>,
6217                         ImmArg<ArgIndex<2>>]>;
6218  def int_x86_tmmultf32ps_internal :
6219              ClangBuiltin<"__builtin_ia32_tmmultf32ps_internal">,
6220              Intrinsic<[llvm_x86amx_ty],
6221                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty,
6222                         llvm_x86amx_ty, llvm_x86amx_ty], []>;
6223  def int_x86_ttmmultf32ps_internal :
6224              ClangBuiltin<"__builtin_ia32_ttmmultf32ps_internal">,
6225              Intrinsic<[llvm_x86amx_ty],
6226                        [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty, llvm_x86amx_ty,
6227                         llvm_x86amx_ty, llvm_x86amx_ty], []>;
6228
6229  def int_x86_tdpbf8ps_internal :
6230                ClangBuiltin<"__builtin_ia32_tdpbf8ps_internal">,
6231                Intrinsic<[llvm_x86amx_ty],
6232                          [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6233                           llvm_x86amx_ty, llvm_x86amx_ty, llvm_x86amx_ty],
6234                          []>;
6235  def int_x86_tdpbhf8ps_internal :
6236                ClangBuiltin<"__builtin_ia32_tdpbhf8ps_internal">,
6237                Intrinsic<[llvm_x86amx_ty],
6238                          [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6239                           llvm_x86amx_ty, llvm_x86amx_ty, llvm_x86amx_ty],
6240                          []>;
6241  def int_x86_tdphbf8ps_internal :
6242                ClangBuiltin<"__builtin_ia32_tdphbf8ps_internal">,
6243                Intrinsic<[llvm_x86amx_ty],
6244                          [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6245                           llvm_x86amx_ty, llvm_x86amx_ty, llvm_x86amx_ty],
6246                          []>;
6247  def int_x86_tdphf8ps_internal :
6248                ClangBuiltin<"__builtin_ia32_tdphf8ps_internal">,
6249                Intrinsic<[llvm_x86amx_ty],
6250                          [llvm_i16_ty, llvm_i16_ty, llvm_i16_ty,
6251                           llvm_x86amx_ty, llvm_x86amx_ty, llvm_x86amx_ty],
6252                          []>;
6253}
6254
6255//===----------------------------------------------------------------------===//
6256let TargetPrefix = "x86" in {
6257// CMPCCXADD
6258def int_x86_cmpccxadd32
6259    : ClangBuiltin<"__builtin_ia32_cmpccxadd32">,
6260      Intrinsic<[llvm_i32_ty],
6261                [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty],
6262                [IntrArgMemOnly, ImmArg<ArgIndex<3>>]>;
6263
6264def int_x86_cmpccxadd64
6265    : ClangBuiltin<"__builtin_ia32_cmpccxadd64">,
6266      Intrinsic<[llvm_i64_ty],
6267                [llvm_ptr_ty, llvm_i64_ty, llvm_i64_ty, llvm_i32_ty],
6268                [IntrArgMemOnly, ImmArg<ArgIndex<3>>]>;
6269
6270// AVX-NE-CONVERT
6271def int_x86_vbcstnebf162ps128
6272    : ClangBuiltin<"__builtin_ia32_vbcstnebf162ps128">,
6273      DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6274                            [IntrReadMem, IntrArgMemOnly]>;
6275def int_x86_vbcstnebf162ps256
6276    : ClangBuiltin<"__builtin_ia32_vbcstnebf162ps256">,
6277      DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6278                            [IntrReadMem, IntrArgMemOnly]>;
6279def int_x86_vbcstnesh2ps128
6280    : ClangBuiltin<"__builtin_ia32_vbcstnesh2ps128">,
6281      DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6282                            [IntrReadMem, IntrArgMemOnly]>;
6283def int_x86_vbcstnesh2ps256
6284    : ClangBuiltin<"__builtin_ia32_vbcstnesh2ps256">,
6285      DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6286                            [IntrReadMem, IntrArgMemOnly]>;
6287def int_x86_vcvtneebf162ps128
6288    : ClangBuiltin<"__builtin_ia32_vcvtneebf162ps128">,
6289      DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6290                            [IntrReadMem, IntrArgMemOnly]>;
6291def int_x86_vcvtneebf162ps256
6292    : ClangBuiltin<"__builtin_ia32_vcvtneebf162ps256">,
6293      DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6294                            [IntrReadMem, IntrArgMemOnly]>;
6295def int_x86_vcvtneeph2ps128
6296    : ClangBuiltin<"__builtin_ia32_vcvtneeph2ps128">,
6297      DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6298                            [IntrReadMem, IntrArgMemOnly]>;
6299def int_x86_vcvtneeph2ps256
6300    : ClangBuiltin<"__builtin_ia32_vcvtneeph2ps256">,
6301      DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6302                            [IntrReadMem, IntrArgMemOnly]>;
6303def int_x86_vcvtneobf162ps128
6304    : ClangBuiltin<"__builtin_ia32_vcvtneobf162ps128">,
6305      DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6306                            [IntrReadMem, IntrArgMemOnly]>;
6307def int_x86_vcvtneobf162ps256
6308    : ClangBuiltin<"__builtin_ia32_vcvtneobf162ps256">,
6309      DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6310                            [IntrReadMem, IntrArgMemOnly]>;
6311def int_x86_vcvtneoph2ps128
6312    : ClangBuiltin<"__builtin_ia32_vcvtneoph2ps128">,
6313      DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6314                            [IntrReadMem, IntrArgMemOnly]>;
6315def int_x86_vcvtneoph2ps256
6316    : ClangBuiltin<"__builtin_ia32_vcvtneoph2ps256">,
6317      DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6318                            [IntrReadMem, IntrArgMemOnly]>;
6319def int_x86_vcvtneps2bf16128
6320    : ClangBuiltin<"__builtin_ia32_vcvtneps2bf16128">,
6321      DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v4f32_ty], [IntrNoMem]>;
6322def int_x86_vcvtneps2bf16256
6323    : ClangBuiltin<"__builtin_ia32_vcvtneps2bf16256">,
6324      DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8f32_ty], [IntrNoMem]>;
6325}
6326//===----------------------------------------------------------------------===//
6327// SM3 intrinsics
6328let TargetPrefix = "x86" in {
6329  def int_x86_vsm3msg1
6330      : ClangBuiltin<"__builtin_ia32_vsm3msg1">,
6331        DefaultAttrsIntrinsic<[llvm_v4i32_ty],
6332        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
6333        [IntrNoMem]>;
6334  def int_x86_vsm3msg2
6335      : ClangBuiltin<"__builtin_ia32_vsm3msg2">,
6336        DefaultAttrsIntrinsic<[llvm_v4i32_ty],
6337        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
6338        [IntrNoMem]>;
6339  def int_x86_vsm3rnds2
6340      : ClangBuiltin<"__builtin_ia32_vsm3rnds2">,
6341        DefaultAttrsIntrinsic<[llvm_v4i32_ty],
6342        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
6343        [ImmArg<ArgIndex<3>>, IntrNoMem]>;
6344}
6345//===----------------------------------------------------------------------===//
6346// SM4 intrinsics
6347let TargetPrefix = "x86" in {
6348  def int_x86_vsm4key4128
6349      : ClangBuiltin<"__builtin_ia32_vsm4key4128">,
6350        DefaultAttrsIntrinsic<[llvm_v4i32_ty],
6351        [llvm_v4i32_ty, llvm_v4i32_ty],
6352        [IntrNoMem]>;
6353  def int_x86_vsm4key4256
6354      : ClangBuiltin<"__builtin_ia32_vsm4key4256">,
6355        DefaultAttrsIntrinsic<[llvm_v8i32_ty],
6356        [llvm_v8i32_ty, llvm_v8i32_ty],
6357        [IntrNoMem]>;
6358  def int_x86_vsm4key4512
6359      : ClangBuiltin<"__builtin_ia32_vsm4key4512">,
6360        DefaultAttrsIntrinsic<[llvm_v16i32_ty],
6361        [llvm_v16i32_ty, llvm_v16i32_ty],
6362        [IntrNoMem]>;
6363  def int_x86_vsm4rnds4128
6364      : ClangBuiltin<"__builtin_ia32_vsm4rnds4128">,
6365        DefaultAttrsIntrinsic<[llvm_v4i32_ty],
6366        [llvm_v4i32_ty, llvm_v4i32_ty],
6367        [IntrNoMem]>;
6368  def int_x86_vsm4rnds4256
6369      : ClangBuiltin<"__builtin_ia32_vsm4rnds4256">,
6370        DefaultAttrsIntrinsic<[llvm_v8i32_ty],
6371        [llvm_v8i32_ty, llvm_v8i32_ty],
6372        [IntrNoMem]>;
6373  def int_x86_vsm4rnds4512
6374      : ClangBuiltin<"__builtin_ia32_vsm4rnds4512">,
6375        DefaultAttrsIntrinsic<[llvm_v16i32_ty],
6376        [llvm_v16i32_ty, llvm_v16i32_ty],
6377        [IntrNoMem]>;
6378}
6379//===----------------------------------------------------------------------===//
6380// RAO-INT intrinsics
6381let TargetPrefix = "x86" in {
6382  def int_x86_aadd32
6383      : ClangBuiltin<"__builtin_ia32_aadd32">,
6384        Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], [IntrArgMemOnly]>;
6385  def int_x86_aadd64
6386      : ClangBuiltin<"__builtin_ia32_aadd64">,
6387        Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], [IntrArgMemOnly]>;
6388  def int_x86_aand32
6389      : ClangBuiltin<"__builtin_ia32_aand32">,
6390        Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], [IntrArgMemOnly]>;
6391  def int_x86_aand64
6392      : ClangBuiltin<"__builtin_ia32_aand64">,
6393        Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], [IntrArgMemOnly]>;
6394  def int_x86_aor32
6395      : ClangBuiltin<"__builtin_ia32_aor32">,
6396        Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], [IntrArgMemOnly]>;
6397  def int_x86_aor64
6398      : ClangBuiltin<"__builtin_ia32_aor64">,
6399        Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], [IntrArgMemOnly]>;
6400  def int_x86_axor32
6401      : ClangBuiltin<"__builtin_ia32_axor32">,
6402        Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], [IntrArgMemOnly]>;
6403  def int_x86_axor64
6404      : ClangBuiltin<"__builtin_ia32_axor64">,
6405        Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], [IntrArgMemOnly]>;
6406}
6407
6408//===----------------------------------------------------------------------===//
6409// UINTR - User Level Interrupt
6410
6411let TargetPrefix = "x86" in {
6412  def int_x86_clui : ClangBuiltin<"__builtin_ia32_clui">,
6413              Intrinsic<[], [], []>;
6414  def int_x86_stui : ClangBuiltin<"__builtin_ia32_stui">,
6415              Intrinsic<[], [], []>;
6416  def int_x86_testui : ClangBuiltin<"__builtin_ia32_testui">,
6417              Intrinsic<[llvm_i8_ty], [], []>;
6418  def int_x86_senduipi : ClangBuiltin<"__builtin_ia32_senduipi">,
6419              Intrinsic<[], [llvm_i64_ty], []>;
6420}
6421
6422let TargetPrefix = "x86" in {
6423def int_x86_urdmsr : ClangBuiltin<"__builtin_ia32_urdmsr">,
6424        Intrinsic<[llvm_i64_ty], [llvm_i64_ty],
6425                  [IntrInaccessibleMemOnly]>;
6426def int_x86_uwrmsr : ClangBuiltin<"__builtin_ia32_uwrmsr">,
6427        Intrinsic<[], [llvm_i64_ty, llvm_i64_ty],
6428                  [IntrInaccessibleMemOnly]>;
6429}
6430
6431//===----------------------------------------------------------------------===//
6432let TargetPrefix = "x86" in {
6433  def int_x86_avx512fp16_add_ph_512
6434      : ClangBuiltin<"__builtin_ia32_addph512">,
6435        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6436                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty ],
6437                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6438  def int_x86_avx512fp16_sub_ph_512
6439      : ClangBuiltin<"__builtin_ia32_subph512">,
6440        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6441                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty ],
6442                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6443  def int_x86_avx512fp16_mul_ph_512
6444      : ClangBuiltin<"__builtin_ia32_mulph512">,
6445        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6446                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty ],
6447                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6448  def int_x86_avx512fp16_div_ph_512
6449      : ClangBuiltin<"__builtin_ia32_divph512">,
6450        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6451                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty ],
6452                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6453  def int_x86_avx512fp16_max_ph_128
6454      : ClangBuiltin<"__builtin_ia32_maxph128">,
6455        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6456                              [ llvm_v8f16_ty, llvm_v8f16_ty ], [ IntrNoMem ]>;
6457  def int_x86_avx512fp16_max_ph_256
6458      : ClangBuiltin<"__builtin_ia32_maxph256">,
6459        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
6460                              [ llvm_v16f16_ty, llvm_v16f16_ty ],
6461                              [ IntrNoMem ]>;
6462  def int_x86_avx512fp16_max_ph_512
6463      : ClangBuiltin<"__builtin_ia32_maxph512">,
6464        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6465                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty ],
6466                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6467  def int_x86_avx512fp16_min_ph_128
6468      : ClangBuiltin<"__builtin_ia32_minph128">,
6469        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6470                              [ llvm_v8f16_ty, llvm_v8f16_ty ], [ IntrNoMem ]>;
6471  def int_x86_avx512fp16_min_ph_256
6472      : ClangBuiltin<"__builtin_ia32_minph256">,
6473        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
6474                              [ llvm_v16f16_ty, llvm_v16f16_ty ],
6475                              [ IntrNoMem ]>;
6476  def int_x86_avx512fp16_min_ph_512
6477      : ClangBuiltin<"__builtin_ia32_minph512">,
6478        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6479                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty ],
6480                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6481
6482  def int_x86_avx512fp16_mask_cmp_ph_512
6483      : DefaultAttrsIntrinsic<[ llvm_v32i1_ty ],
6484                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty,
6485                                llvm_v32i1_ty, llvm_i32_ty ],
6486                              [ IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<4>> ]>;
6487  def int_x86_avx512fp16_mask_cmp_ph_256
6488      : DefaultAttrsIntrinsic<[ llvm_v16i1_ty ],
6489                              [ llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty,
6490                                llvm_v16i1_ty ],
6491                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6492  def int_x86_avx512fp16_mask_cmp_ph_128
6493      : DefaultAttrsIntrinsic<[ llvm_v8i1_ty ],
6494                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_i32_ty,
6495                                llvm_v8i1_ty ],
6496                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6497
6498  def int_x86_avx512fp16_mask_add_sh_round
6499      : ClangBuiltin<"__builtin_ia32_addsh_round_mask">,
6500        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6501                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6502                                llvm_i8_ty, llvm_i32_ty ],
6503                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6504  def int_x86_avx512fp16_mask_sub_sh_round
6505      : ClangBuiltin<"__builtin_ia32_subsh_round_mask">,
6506        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6507                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6508                                llvm_i8_ty, llvm_i32_ty ],
6509                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6510  def int_x86_avx512fp16_mask_mul_sh_round
6511      : ClangBuiltin<"__builtin_ia32_mulsh_round_mask">,
6512        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6513                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6514                                llvm_i8_ty, llvm_i32_ty ],
6515                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6516  def int_x86_avx512fp16_mask_div_sh_round
6517      : ClangBuiltin<"__builtin_ia32_divsh_round_mask">,
6518        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6519                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6520                                llvm_i8_ty, llvm_i32_ty ],
6521                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6522  def int_x86_avx512fp16_mask_min_sh_round
6523      : ClangBuiltin<"__builtin_ia32_minsh_round_mask">,
6524        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6525                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6526                                llvm_i8_ty, llvm_i32_ty ],
6527                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6528  def int_x86_avx512fp16_mask_max_sh_round
6529      : ClangBuiltin<"__builtin_ia32_maxsh_round_mask">,
6530        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6531                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6532                                llvm_i8_ty, llvm_i32_ty ],
6533                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6534  def int_x86_avx512fp16_mask_cmp_sh
6535      : ClangBuiltin<"__builtin_ia32_cmpsh_mask">,
6536        DefaultAttrsIntrinsic<[ llvm_i8_ty ],
6537                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_i32_ty,
6538                                llvm_i8_ty, llvm_i32_ty ],
6539                              [ IntrNoMem, ImmArg<ArgIndex<2>>,
6540                                ImmArg<ArgIndex<4>> ]>;
6541  def int_x86_avx512fp16_vcomi_sh
6542      : ClangBuiltin<"__builtin_ia32_vcomish">,
6543        DefaultAttrsIntrinsic<[ llvm_i32_ty ],
6544                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_i32_ty,
6545                                llvm_i32_ty ],
6546                              [ IntrNoMem, ImmArg<ArgIndex<2>>,
6547                                ImmArg<ArgIndex<3>> ]>;
6548
6549  def int_x86_avx512fp16_mask_vcvtph2psx_128
6550      : ClangBuiltin<"__builtin_ia32_vcvtph2psx128_mask">,
6551        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
6552                              [ llvm_v8f16_ty, llvm_v4f32_ty, llvm_i8_ty ],
6553                              [ IntrNoMem ]>;
6554  def int_x86_avx512fp16_mask_vcvtph2psx_256
6555      : ClangBuiltin<"__builtin_ia32_vcvtph2psx256_mask">,
6556        DefaultAttrsIntrinsic<[ llvm_v8f32_ty ],
6557                              [ llvm_v8f16_ty, llvm_v8f32_ty, llvm_i8_ty ],
6558                              [ IntrNoMem ]>;
6559  def int_x86_avx512fp16_mask_vcvtph2psx_512
6560      : ClangBuiltin<"__builtin_ia32_vcvtph2psx512_mask">,
6561        DefaultAttrsIntrinsic<[ llvm_v16f32_ty ],
6562                              [ llvm_v16f16_ty, llvm_v16f32_ty, llvm_i16_ty,
6563                                llvm_i32_ty ],
6564                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6565  def int_x86_avx512fp16_mask_vcvtps2phx_128
6566      : ClangBuiltin<"__builtin_ia32_vcvtps2phx128_mask">,
6567        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6568                              [ llvm_v4f32_ty, llvm_v8f16_ty, llvm_i8_ty ],
6569                              [ IntrNoMem ]>;
6570  def int_x86_avx512fp16_mask_vcvtps2phx_256
6571      : ClangBuiltin<"__builtin_ia32_vcvtps2phx256_mask">,
6572        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6573                              [ llvm_v8f32_ty, llvm_v8f16_ty, llvm_i8_ty ],
6574                              [ IntrNoMem ]>;
6575  def int_x86_avx512fp16_mask_vcvtps2phx_512
6576      : ClangBuiltin<"__builtin_ia32_vcvtps2phx512_mask">,
6577        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
6578                              [ llvm_v16f32_ty, llvm_v16f16_ty, llvm_i16_ty,
6579                                llvm_i32_ty ],
6580                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6581  def int_x86_avx512fp16_mask_vcvtpd2ph_128
6582      : ClangBuiltin<"__builtin_ia32_vcvtpd2ph128_mask">,
6583        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6584                              [ llvm_v2f64_ty, llvm_v8f16_ty, llvm_i8_ty ],
6585                              [ IntrNoMem ]>;
6586  def int_x86_avx512fp16_mask_vcvtpd2ph_256
6587      : ClangBuiltin<"__builtin_ia32_vcvtpd2ph256_mask">,
6588        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6589                              [ llvm_v4f64_ty, llvm_v8f16_ty, llvm_i8_ty ],
6590                              [ IntrNoMem ]>;
6591  def int_x86_avx512fp16_mask_vcvtpd2ph_512
6592      : ClangBuiltin<"__builtin_ia32_vcvtpd2ph512_mask">,
6593        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6594                              [ llvm_v8f64_ty, llvm_v8f16_ty, llvm_i8_ty,
6595                                llvm_i32_ty ],
6596                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6597  def int_x86_avx512fp16_mask_vcvtph2pd_128
6598      : ClangBuiltin<"__builtin_ia32_vcvtph2pd128_mask">,
6599        DefaultAttrsIntrinsic<[ llvm_v2f64_ty ],
6600                              [ llvm_v8f16_ty, llvm_v2f64_ty, llvm_i8_ty ],
6601                              [ IntrNoMem ]>;
6602  def int_x86_avx512fp16_mask_vcvtph2pd_256
6603      : ClangBuiltin<"__builtin_ia32_vcvtph2pd256_mask">,
6604        DefaultAttrsIntrinsic<[ llvm_v4f64_ty ],
6605                              [ llvm_v8f16_ty, llvm_v4f64_ty, llvm_i8_ty ],
6606                              [ IntrNoMem ]>;
6607  def int_x86_avx512fp16_mask_vcvtph2pd_512
6608      : ClangBuiltin<"__builtin_ia32_vcvtph2pd512_mask">,
6609        DefaultAttrsIntrinsic<[ llvm_v8f64_ty ],
6610                              [ llvm_v8f16_ty, llvm_v8f64_ty, llvm_i8_ty,
6611                                llvm_i32_ty ],
6612                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6613  def int_x86_avx512fp16_mask_vcvtsh2ss_round
6614      : ClangBuiltin<"__builtin_ia32_vcvtsh2ss_round_mask">,
6615        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
6616                              [ llvm_v4f32_ty, llvm_v8f16_ty, llvm_v4f32_ty,
6617                                llvm_i8_ty, llvm_i32_ty ],
6618                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6619  def int_x86_avx512fp16_mask_vcvtss2sh_round
6620      : ClangBuiltin<"__builtin_ia32_vcvtss2sh_round_mask">,
6621        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6622                              [ llvm_v8f16_ty, llvm_v4f32_ty, llvm_v8f16_ty,
6623                                llvm_i8_ty, llvm_i32_ty ],
6624                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6625  def int_x86_avx512fp16_mask_vcvtsd2sh_round
6626      : ClangBuiltin<"__builtin_ia32_vcvtsd2sh_round_mask">,
6627        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6628                              [ llvm_v8f16_ty, llvm_v2f64_ty, llvm_v8f16_ty,
6629                                llvm_i8_ty, llvm_i32_ty ],
6630                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6631  def int_x86_avx512fp16_mask_vcvtsh2sd_round
6632      : ClangBuiltin<"__builtin_ia32_vcvtsh2sd_round_mask">,
6633        DefaultAttrsIntrinsic<[ llvm_v2f64_ty ],
6634                              [ llvm_v2f64_ty, llvm_v8f16_ty, llvm_v2f64_ty,
6635                                llvm_i8_ty, llvm_i32_ty ],
6636                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6637
6638  def int_x86_avx512fp16_mask_vcvtph2w_128
6639      : ClangBuiltin<"__builtin_ia32_vcvtph2w128_mask">,
6640        DefaultAttrsIntrinsic<[ llvm_v8i16_ty ],
6641                              [ llvm_v8f16_ty, llvm_v8i16_ty, llvm_i8_ty ],
6642                              [ IntrNoMem ]>;
6643  def int_x86_avx512fp16_mask_vcvtph2w_256
6644      : ClangBuiltin<"__builtin_ia32_vcvtph2w256_mask">,
6645        DefaultAttrsIntrinsic<[ llvm_v16i16_ty ],
6646                              [ llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty ],
6647                              [ IntrNoMem ]>;
6648  def int_x86_avx512fp16_mask_vcvtph2w_512
6649      : ClangBuiltin<"__builtin_ia32_vcvtph2w512_mask">,
6650        DefaultAttrsIntrinsic<[ llvm_v32i16_ty ],
6651                              [ llvm_v32f16_ty, llvm_v32i16_ty, llvm_i32_ty,
6652                                llvm_i32_ty ],
6653                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6654  def int_x86_avx512fp16_mask_vcvttph2w_128
6655      : ClangBuiltin<"__builtin_ia32_vcvttph2w128_mask">,
6656        DefaultAttrsIntrinsic<[ llvm_v8i16_ty ],
6657                              [ llvm_v8f16_ty, llvm_v8i16_ty, llvm_i8_ty ],
6658                              [ IntrNoMem ]>;
6659  def int_x86_avx512fp16_mask_vcvttph2w_256
6660      : ClangBuiltin<"__builtin_ia32_vcvttph2w256_mask">,
6661        DefaultAttrsIntrinsic<[ llvm_v16i16_ty ],
6662                              [ llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty ],
6663                              [ IntrNoMem ]>;
6664  def int_x86_avx512fp16_mask_vcvttph2w_512
6665      : ClangBuiltin<"__builtin_ia32_vcvttph2w512_mask">,
6666        DefaultAttrsIntrinsic<[ llvm_v32i16_ty ],
6667                              [ llvm_v32f16_ty, llvm_v32i16_ty, llvm_i32_ty,
6668                                llvm_i32_ty ],
6669                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6670  def int_x86_avx512fp16_mask_vcvtph2uw_128
6671      : ClangBuiltin<"__builtin_ia32_vcvtph2uw128_mask">,
6672        DefaultAttrsIntrinsic<[ llvm_v8i16_ty ],
6673                              [ llvm_v8f16_ty, llvm_v8i16_ty, llvm_i8_ty ],
6674                              [ IntrNoMem ]>;
6675  def int_x86_avx512fp16_mask_vcvtph2uw_256
6676      : ClangBuiltin<"__builtin_ia32_vcvtph2uw256_mask">,
6677        DefaultAttrsIntrinsic<[ llvm_v16i16_ty ],
6678                              [ llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty ],
6679                              [ IntrNoMem ]>;
6680  def int_x86_avx512fp16_mask_vcvtph2uw_512
6681      : ClangBuiltin<"__builtin_ia32_vcvtph2uw512_mask">,
6682        DefaultAttrsIntrinsic<[ llvm_v32i16_ty ],
6683                              [ llvm_v32f16_ty, llvm_v32i16_ty, llvm_i32_ty,
6684                                llvm_i32_ty ],
6685                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6686  def int_x86_avx512fp16_mask_vcvttph2uw_128
6687      : ClangBuiltin<"__builtin_ia32_vcvttph2uw128_mask">,
6688        DefaultAttrsIntrinsic<[ llvm_v8i16_ty ],
6689                              [ llvm_v8f16_ty, llvm_v8i16_ty, llvm_i8_ty ],
6690                              [ IntrNoMem ]>;
6691  def int_x86_avx512fp16_mask_vcvttph2uw_256
6692      : ClangBuiltin<"__builtin_ia32_vcvttph2uw256_mask">,
6693        DefaultAttrsIntrinsic<[ llvm_v16i16_ty ],
6694                              [ llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty ],
6695                              [ IntrNoMem ]>;
6696  def int_x86_avx512fp16_mask_vcvttph2uw_512
6697      : ClangBuiltin<"__builtin_ia32_vcvttph2uw512_mask">,
6698        DefaultAttrsIntrinsic<[ llvm_v32i16_ty ],
6699                              [ llvm_v32f16_ty, llvm_v32i16_ty, llvm_i32_ty,
6700                                llvm_i32_ty ],
6701                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6702
6703  def int_x86_avx512fp16_mask_vcvtph2dq_128
6704      : ClangBuiltin<"__builtin_ia32_vcvtph2dq128_mask">,
6705        DefaultAttrsIntrinsic<[ llvm_v4i32_ty ],
6706                              [ llvm_v8f16_ty, llvm_v4i32_ty, llvm_i8_ty ],
6707                              [ IntrNoMem ]>;
6708  def int_x86_avx512fp16_mask_vcvtph2dq_256
6709      : ClangBuiltin<"__builtin_ia32_vcvtph2dq256_mask">,
6710        DefaultAttrsIntrinsic<[ llvm_v8i32_ty ],
6711                              [ llvm_v8f16_ty, llvm_v8i32_ty, llvm_i8_ty ],
6712                              [ IntrNoMem ]>;
6713  def int_x86_avx512fp16_mask_vcvtph2dq_512
6714      : ClangBuiltin<"__builtin_ia32_vcvtph2dq512_mask">,
6715        DefaultAttrsIntrinsic<[ llvm_v16i32_ty ],
6716                              [ llvm_v16f16_ty, llvm_v16i32_ty, llvm_i16_ty,
6717                                llvm_i32_ty ],
6718                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6719  def int_x86_avx512fp16_mask_vcvtph2udq_128
6720      : ClangBuiltin<"__builtin_ia32_vcvtph2udq128_mask">,
6721        DefaultAttrsIntrinsic<[ llvm_v4i32_ty ],
6722                              [ llvm_v8f16_ty, llvm_v4i32_ty, llvm_i8_ty ],
6723                              [ IntrNoMem ]>;
6724  def int_x86_avx512fp16_mask_vcvtph2udq_256
6725      : ClangBuiltin<"__builtin_ia32_vcvtph2udq256_mask">,
6726        DefaultAttrsIntrinsic<[ llvm_v8i32_ty ],
6727                              [ llvm_v8f16_ty, llvm_v8i32_ty, llvm_i8_ty ],
6728                              [ IntrNoMem ]>;
6729  def int_x86_avx512fp16_mask_vcvtph2udq_512
6730      : ClangBuiltin<"__builtin_ia32_vcvtph2udq512_mask">,
6731        DefaultAttrsIntrinsic<[ llvm_v16i32_ty ],
6732                              [ llvm_v16f16_ty, llvm_v16i32_ty, llvm_i16_ty,
6733                                llvm_i32_ty ],
6734                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6735  def int_x86_avx512fp16_mask_vcvtdq2ph_128
6736      : ClangBuiltin<"__builtin_ia32_vcvtdq2ph128_mask">,
6737        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6738                              [ llvm_v4i32_ty, llvm_v8f16_ty, llvm_i8_ty ],
6739                              [ IntrNoMem ]>;
6740  def int_x86_avx512fp16_mask_vcvtudq2ph_128
6741      : ClangBuiltin<"__builtin_ia32_vcvtudq2ph128_mask">,
6742        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6743                              [ llvm_v4i32_ty, llvm_v8f16_ty, llvm_i8_ty ],
6744                              [ IntrNoMem ]>;
6745  def int_x86_avx512fp16_mask_vcvttph2dq_128
6746      : ClangBuiltin<"__builtin_ia32_vcvttph2dq128_mask">,
6747        DefaultAttrsIntrinsic<[ llvm_v4i32_ty ],
6748                              [ llvm_v8f16_ty, llvm_v4i32_ty, llvm_i8_ty ],
6749                              [ IntrNoMem ]>;
6750  def int_x86_avx512fp16_mask_vcvttph2dq_256
6751      : ClangBuiltin<"__builtin_ia32_vcvttph2dq256_mask">,
6752        DefaultAttrsIntrinsic<[ llvm_v8i32_ty ],
6753                              [ llvm_v8f16_ty, llvm_v8i32_ty, llvm_i8_ty ],
6754                              [ IntrNoMem ]>;
6755  def int_x86_avx512fp16_mask_vcvttph2dq_512
6756      : ClangBuiltin<"__builtin_ia32_vcvttph2dq512_mask">,
6757        DefaultAttrsIntrinsic<[ llvm_v16i32_ty ],
6758                              [ llvm_v16f16_ty, llvm_v16i32_ty, llvm_i16_ty,
6759                                llvm_i32_ty ],
6760                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6761  def int_x86_avx512fp16_mask_vcvttph2udq_128
6762      : ClangBuiltin<"__builtin_ia32_vcvttph2udq128_mask">,
6763        DefaultAttrsIntrinsic<[ llvm_v4i32_ty ],
6764                              [ llvm_v8f16_ty, llvm_v4i32_ty, llvm_i8_ty ],
6765                              [ IntrNoMem ]>;
6766  def int_x86_avx512fp16_mask_vcvttph2udq_256
6767      : ClangBuiltin<"__builtin_ia32_vcvttph2udq256_mask">,
6768        DefaultAttrsIntrinsic<[ llvm_v8i32_ty ],
6769                              [ llvm_v8f16_ty, llvm_v8i32_ty, llvm_i8_ty ],
6770                              [ IntrNoMem ]>;
6771  def int_x86_avx512fp16_mask_vcvttph2udq_512
6772      : ClangBuiltin<"__builtin_ia32_vcvttph2udq512_mask">,
6773        DefaultAttrsIntrinsic<[ llvm_v16i32_ty ],
6774                              [ llvm_v16f16_ty, llvm_v16i32_ty, llvm_i16_ty,
6775                                llvm_i32_ty ],
6776                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6777
6778  def int_x86_avx512fp16_mask_vcvtqq2ph_128
6779      : ClangBuiltin<"__builtin_ia32_vcvtqq2ph128_mask">,
6780        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6781                              [ llvm_v2i64_ty, llvm_v8f16_ty, llvm_i8_ty ],
6782                              [ IntrNoMem ]>;
6783  def int_x86_avx512fp16_mask_vcvtqq2ph_256
6784      : ClangBuiltin<"__builtin_ia32_vcvtqq2ph256_mask">,
6785        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6786                              [ llvm_v4i64_ty, llvm_v8f16_ty, llvm_i8_ty ],
6787                              [ IntrNoMem ]>;
6788  def int_x86_avx512fp16_mask_vcvtph2qq_128
6789      : ClangBuiltin<"__builtin_ia32_vcvtph2qq128_mask">,
6790        DefaultAttrsIntrinsic<[ llvm_v2i64_ty ],
6791                              [ llvm_v8f16_ty, llvm_v2i64_ty, llvm_i8_ty ],
6792                              [ IntrNoMem ]>;
6793  def int_x86_avx512fp16_mask_vcvtph2qq_256
6794      : ClangBuiltin<"__builtin_ia32_vcvtph2qq256_mask">,
6795        DefaultAttrsIntrinsic<[ llvm_v4i64_ty ],
6796                              [ llvm_v8f16_ty, llvm_v4i64_ty, llvm_i8_ty ],
6797                              [ IntrNoMem ]>;
6798  def int_x86_avx512fp16_mask_vcvtph2qq_512
6799      : ClangBuiltin<"__builtin_ia32_vcvtph2qq512_mask">,
6800        DefaultAttrsIntrinsic<[ llvm_v8i64_ty ],
6801                              [ llvm_v8f16_ty, llvm_v8i64_ty, llvm_i8_ty,
6802                                llvm_i32_ty ],
6803                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6804  def int_x86_avx512fp16_mask_vcvtuqq2ph_128
6805      : ClangBuiltin<"__builtin_ia32_vcvtuqq2ph128_mask">,
6806        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6807                              [ llvm_v2i64_ty, llvm_v8f16_ty, llvm_i8_ty ],
6808                              [ IntrNoMem ]>;
6809  def int_x86_avx512fp16_mask_vcvtuqq2ph_256
6810      : ClangBuiltin<"__builtin_ia32_vcvtuqq2ph256_mask">,
6811        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6812                              [ llvm_v4i64_ty, llvm_v8f16_ty, llvm_i8_ty ],
6813                              [ IntrNoMem ]>;
6814  def int_x86_avx512fp16_mask_vcvtph2uqq_128
6815      : ClangBuiltin<"__builtin_ia32_vcvtph2uqq128_mask">,
6816        DefaultAttrsIntrinsic<[ llvm_v2i64_ty ],
6817                              [ llvm_v8f16_ty, llvm_v2i64_ty, llvm_i8_ty ],
6818                              [ IntrNoMem ]>;
6819  def int_x86_avx512fp16_mask_vcvtph2uqq_256
6820      : ClangBuiltin<"__builtin_ia32_vcvtph2uqq256_mask">,
6821        DefaultAttrsIntrinsic<[ llvm_v4i64_ty ],
6822                              [ llvm_v8f16_ty, llvm_v4i64_ty, llvm_i8_ty ],
6823                              [ IntrNoMem ]>;
6824  def int_x86_avx512fp16_mask_vcvtph2uqq_512
6825      : ClangBuiltin<"__builtin_ia32_vcvtph2uqq512_mask">,
6826        DefaultAttrsIntrinsic<[ llvm_v8i64_ty ],
6827                              [ llvm_v8f16_ty, llvm_v8i64_ty, llvm_i8_ty,
6828                                llvm_i32_ty ],
6829                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6830  def int_x86_avx512fp16_mask_vcvttph2qq_128
6831      : ClangBuiltin<"__builtin_ia32_vcvttph2qq128_mask">,
6832        DefaultAttrsIntrinsic<[ llvm_v2i64_ty ],
6833                              [ llvm_v8f16_ty, llvm_v2i64_ty, llvm_i8_ty ],
6834                              [ IntrNoMem ]>;
6835  def int_x86_avx512fp16_mask_vcvttph2qq_256
6836      : ClangBuiltin<"__builtin_ia32_vcvttph2qq256_mask">,
6837        DefaultAttrsIntrinsic<[ llvm_v4i64_ty ],
6838                              [ llvm_v8f16_ty, llvm_v4i64_ty, llvm_i8_ty ],
6839                              [ IntrNoMem ]>;
6840  def int_x86_avx512fp16_mask_vcvttph2qq_512
6841      : ClangBuiltin<"__builtin_ia32_vcvttph2qq512_mask">,
6842        DefaultAttrsIntrinsic<[ llvm_v8i64_ty ],
6843                              [ llvm_v8f16_ty, llvm_v8i64_ty, llvm_i8_ty,
6844                                llvm_i32_ty ],
6845                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6846  def int_x86_avx512fp16_mask_vcvttph2uqq_128
6847      : ClangBuiltin<"__builtin_ia32_vcvttph2uqq128_mask">,
6848        DefaultAttrsIntrinsic<[ llvm_v2i64_ty ],
6849                              [ llvm_v8f16_ty, llvm_v2i64_ty, llvm_i8_ty ],
6850                              [ IntrNoMem ]>;
6851  def int_x86_avx512fp16_mask_vcvttph2uqq_256
6852      : ClangBuiltin<"__builtin_ia32_vcvttph2uqq256_mask">,
6853        DefaultAttrsIntrinsic<[ llvm_v4i64_ty ],
6854                              [ llvm_v8f16_ty, llvm_v4i64_ty, llvm_i8_ty ],
6855                              [ IntrNoMem ]>;
6856  def int_x86_avx512fp16_mask_vcvttph2uqq_512
6857      : ClangBuiltin<"__builtin_ia32_vcvttph2uqq512_mask">,
6858        DefaultAttrsIntrinsic<[ llvm_v8i64_ty ],
6859                              [ llvm_v8f16_ty, llvm_v8i64_ty, llvm_i8_ty,
6860                                llvm_i32_ty ],
6861                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
6862
6863  def int_x86_avx512fp16_vcvtsh2si32
6864      : ClangBuiltin<"__builtin_ia32_vcvtsh2si32">,
6865        DefaultAttrsIntrinsic<[ llvm_i32_ty ], [ llvm_v8f16_ty, llvm_i32_ty ],
6866                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6867  def int_x86_avx512fp16_vcvtsh2usi32
6868      : ClangBuiltin<"__builtin_ia32_vcvtsh2usi32">,
6869        DefaultAttrsIntrinsic<[ llvm_i32_ty ], [ llvm_v8f16_ty, llvm_i32_ty ],
6870                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6871  def int_x86_avx512fp16_vcvtsh2si64
6872      : ClangBuiltin<"__builtin_ia32_vcvtsh2si64">,
6873        DefaultAttrsIntrinsic<[ llvm_i64_ty ], [ llvm_v8f16_ty, llvm_i32_ty ],
6874                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6875  def int_x86_avx512fp16_vcvtsh2usi64
6876      : ClangBuiltin<"__builtin_ia32_vcvtsh2usi64">,
6877        DefaultAttrsIntrinsic<[ llvm_i64_ty ], [ llvm_v8f16_ty, llvm_i32_ty ],
6878                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6879  def int_x86_avx512fp16_vcvtusi2sh
6880      : ClangBuiltin<"__builtin_ia32_vcvtusi2sh">,
6881        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6882                              [ llvm_v8f16_ty, llvm_i32_ty, llvm_i32_ty ],
6883                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6884  def int_x86_avx512fp16_vcvtusi642sh
6885      : ClangBuiltin<"__builtin_ia32_vcvtusi642sh">,
6886        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6887                              [ llvm_v8f16_ty, llvm_i64_ty, llvm_i32_ty ],
6888                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6889  def int_x86_avx512fp16_vcvtsi2sh
6890      : ClangBuiltin<"__builtin_ia32_vcvtsi2sh">,
6891        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6892                              [ llvm_v8f16_ty, llvm_i32_ty, llvm_i32_ty ],
6893                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6894  def int_x86_avx512fp16_vcvtsi642sh
6895      : ClangBuiltin<"__builtin_ia32_vcvtsi642sh">,
6896        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6897                              [ llvm_v8f16_ty, llvm_i64_ty, llvm_i32_ty ],
6898                              [ IntrNoMem, ImmArg<ArgIndex<2>> ]>;
6899  def int_x86_avx512fp16_vcvttsh2si32
6900      : ClangBuiltin<"__builtin_ia32_vcvttsh2si32">,
6901        DefaultAttrsIntrinsic<[ llvm_i32_ty ], [ llvm_v8f16_ty, llvm_i32_ty ],
6902                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6903  def int_x86_avx512fp16_vcvttsh2si64
6904      : ClangBuiltin<"__builtin_ia32_vcvttsh2si64">,
6905        DefaultAttrsIntrinsic<[ llvm_i64_ty ], [ llvm_v8f16_ty, llvm_i32_ty ],
6906                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6907  def int_x86_avx512fp16_vcvttsh2usi32
6908      : ClangBuiltin<"__builtin_ia32_vcvttsh2usi32">,
6909        DefaultAttrsIntrinsic<[ llvm_i32_ty ], [ llvm_v8f16_ty, llvm_i32_ty ],
6910                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6911  def int_x86_avx512fp16_vcvttsh2usi64
6912      : ClangBuiltin<"__builtin_ia32_vcvttsh2usi64">,
6913        DefaultAttrsIntrinsic<[ llvm_i64_ty ], [ llvm_v8f16_ty, llvm_i32_ty ],
6914                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6915
6916  def int_x86_avx512fp16_sqrt_ph_512
6917      : DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6918                              [ llvm_v32f16_ty, llvm_i32_ty ],
6919                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6920  def int_x86_avx512fp16_mask_sqrt_sh
6921      : DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6922                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6923                                llvm_i8_ty, llvm_i32_ty ],
6924                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
6925  def int_x86_avx512fp16_mask_rsqrt_ph_128
6926      : ClangBuiltin<"__builtin_ia32_rsqrtph128_mask">,
6927        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6928                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_i8_ty ],
6929                              [ IntrNoMem ]>;
6930  def int_x86_avx512fp16_mask_rsqrt_ph_256
6931      : ClangBuiltin<"__builtin_ia32_rsqrtph256_mask">,
6932        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
6933                              [ llvm_v16f16_ty, llvm_v16f16_ty, llvm_i16_ty ],
6934                              [ IntrNoMem ]>;
6935  def int_x86_avx512fp16_mask_rsqrt_ph_512
6936      : ClangBuiltin<"__builtin_ia32_rsqrtph512_mask">,
6937        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6938                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty ],
6939                              [ IntrNoMem ]>;
6940  def int_x86_avx512fp16_mask_rsqrt_sh
6941      : ClangBuiltin<"__builtin_ia32_rsqrtsh_mask">,
6942        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6943                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6944                                llvm_i8_ty ],
6945                              [ IntrNoMem ]>;
6946  def int_x86_avx512fp16_mask_rcp_ph_128
6947      : ClangBuiltin<"__builtin_ia32_rcpph128_mask">,
6948        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6949                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_i8_ty ],
6950                              [ IntrNoMem ]>;
6951  def int_x86_avx512fp16_mask_rcp_ph_256
6952      : ClangBuiltin<"__builtin_ia32_rcpph256_mask">,
6953        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
6954                              [ llvm_v16f16_ty, llvm_v16f16_ty, llvm_i16_ty ],
6955                              [ IntrNoMem ]>;
6956  def int_x86_avx512fp16_mask_rcp_ph_512
6957      : ClangBuiltin<"__builtin_ia32_rcpph512_mask">,
6958        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6959                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty ],
6960                              [ IntrNoMem ]>;
6961  def int_x86_avx512fp16_mask_rcp_sh
6962      : ClangBuiltin<"__builtin_ia32_rcpsh_mask">,
6963        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6964                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6965                                llvm_i8_ty ],
6966                              [ IntrNoMem ]>;
6967  def int_x86_avx512fp16_mask_reduce_ph_128
6968      : ClangBuiltin<"__builtin_ia32_reduceph128_mask">,
6969        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6970                              [ llvm_v8f16_ty, llvm_i32_ty, llvm_v8f16_ty,
6971                                llvm_i8_ty ],
6972                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6973  def int_x86_avx512fp16_mask_reduce_ph_256
6974      : ClangBuiltin<"__builtin_ia32_reduceph256_mask">,
6975        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
6976                              [ llvm_v16f16_ty, llvm_i32_ty, llvm_v16f16_ty,
6977                                llvm_i16_ty ],
6978                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6979  def int_x86_avx512fp16_mask_reduce_ph_512
6980      : ClangBuiltin<"__builtin_ia32_reduceph512_mask">,
6981        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
6982                              [ llvm_v32f16_ty, llvm_i32_ty, llvm_v32f16_ty,
6983                                llvm_i32_ty, llvm_i32_ty ],
6984                              [ IntrNoMem, ImmArg<ArgIndex<1>>,
6985                                ImmArg<ArgIndex<4>> ]>;
6986  def int_x86_avx512fp16_mask_reduce_sh
6987      : ClangBuiltin<"__builtin_ia32_reducesh_mask">,
6988        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
6989                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
6990                                llvm_i8_ty, llvm_i32_ty, llvm_i32_ty ],
6991                              [ IntrNoMem, ImmArg<ArgIndex<4>>,
6992                                ImmArg<ArgIndex<5>> ]>;
6993  def int_x86_avx512fp16_fpclass_ph_128
6994      : DefaultAttrsIntrinsic<[ llvm_v8i1_ty ], [ llvm_v8f16_ty, llvm_i32_ty ],
6995                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
6996  def int_x86_avx512fp16_fpclass_ph_256
6997      : DefaultAttrsIntrinsic<[ llvm_v16i1_ty ],
6998                              [ llvm_v16f16_ty, llvm_i32_ty ],
6999                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
7000  def int_x86_avx512fp16_fpclass_ph_512
7001      : DefaultAttrsIntrinsic<[ llvm_v32i1_ty ],
7002                              [ llvm_v32f16_ty, llvm_i32_ty ],
7003                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
7004  def int_x86_avx512fp16_mask_fpclass_sh
7005      : ClangBuiltin<"__builtin_ia32_fpclasssh_mask">,
7006        DefaultAttrsIntrinsic<[ llvm_i8_ty ],
7007                              [ llvm_v8f16_ty, llvm_i32_ty, llvm_i8_ty ],
7008                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
7009  def int_x86_avx512fp16_mask_getexp_ph_128
7010      : ClangBuiltin<"__builtin_ia32_getexpph128_mask">,
7011        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
7012                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_i8_ty ],
7013                              [ IntrNoMem ]>;
7014  def int_x86_avx512fp16_mask_getexp_ph_256
7015      : ClangBuiltin<"__builtin_ia32_getexpph256_mask">,
7016        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
7017                              [ llvm_v16f16_ty, llvm_v16f16_ty, llvm_i16_ty ],
7018                              [ IntrNoMem ]>;
7019  def int_x86_avx512fp16_mask_getexp_ph_512
7020      : ClangBuiltin<"__builtin_ia32_getexpph512_mask">,
7021        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
7022                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty,
7023                                llvm_i32_ty ],
7024                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
7025  def int_x86_avx512fp16_mask_getexp_sh
7026      : ClangBuiltin<"__builtin_ia32_getexpsh128_round_mask">,
7027        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
7028                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
7029                                llvm_i8_ty, llvm_i32_ty ],
7030                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7031  def int_x86_avx512fp16_mask_getmant_ph_128
7032      : ClangBuiltin<"__builtin_ia32_getmantph128_mask">,
7033        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
7034                              [ llvm_v8f16_ty, llvm_i32_ty, llvm_v8f16_ty,
7035                                llvm_i8_ty ],
7036                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
7037  def int_x86_avx512fp16_mask_getmant_ph_256
7038      : ClangBuiltin<"__builtin_ia32_getmantph256_mask">,
7039        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
7040                              [ llvm_v16f16_ty, llvm_i32_ty, llvm_v16f16_ty,
7041                                llvm_i16_ty ],
7042                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
7043  def int_x86_avx512fp16_mask_getmant_ph_512
7044      : ClangBuiltin<"__builtin_ia32_getmantph512_mask">,
7045        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
7046                              [ llvm_v32f16_ty, llvm_i32_ty, llvm_v32f16_ty,
7047                                llvm_i32_ty, llvm_i32_ty ],
7048                              [ IntrNoMem, ImmArg<ArgIndex<1>>,
7049                                ImmArg<ArgIndex<4>> ]>;
7050  def int_x86_avx512fp16_mask_getmant_sh
7051      : ClangBuiltin<"__builtin_ia32_getmantsh_round_mask">,
7052        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
7053                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_i32_ty,
7054                                llvm_v8f16_ty, llvm_i8_ty, llvm_i32_ty ],
7055                              [ IntrNoMem, ImmArg<ArgIndex<2>>,
7056                                ImmArg<ArgIndex<5>> ]>;
7057  def int_x86_avx512fp16_mask_rndscale_ph_128
7058      : ClangBuiltin<"__builtin_ia32_rndscaleph_128_mask">,
7059        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
7060                              [ llvm_v8f16_ty, llvm_i32_ty, llvm_v8f16_ty,
7061                                llvm_i8_ty ],
7062                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
7063  def int_x86_avx512fp16_mask_rndscale_ph_256
7064      : ClangBuiltin<"__builtin_ia32_rndscaleph_256_mask">,
7065        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
7066                              [ llvm_v16f16_ty, llvm_i32_ty, llvm_v16f16_ty,
7067                                llvm_i16_ty ],
7068                              [ IntrNoMem, ImmArg<ArgIndex<1>> ]>;
7069  def int_x86_avx512fp16_mask_rndscale_ph_512
7070      : ClangBuiltin<"__builtin_ia32_rndscaleph_mask">,
7071        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
7072                              [ llvm_v32f16_ty, llvm_i32_ty, llvm_v32f16_ty,
7073                                llvm_i32_ty, llvm_i32_ty ],
7074                              [ IntrNoMem, ImmArg<ArgIndex<1>>,
7075                                ImmArg<ArgIndex<4>> ]>;
7076  def int_x86_avx512fp16_mask_rndscale_sh
7077      : ClangBuiltin<"__builtin_ia32_rndscalesh_round_mask">,
7078        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
7079                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
7080                                llvm_i8_ty, llvm_i32_ty, llvm_i32_ty ],
7081                              [ IntrNoMem, ImmArg<ArgIndex<4>>,
7082                                ImmArg<ArgIndex<5>> ]>;
7083  def int_x86_avx512fp16_mask_scalef_ph_128
7084      : ClangBuiltin<"__builtin_ia32_scalefph128_mask">,
7085        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
7086                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
7087                                llvm_i8_ty ],
7088                              [ IntrNoMem ]>;
7089  def int_x86_avx512fp16_mask_scalef_ph_256
7090      : ClangBuiltin<"__builtin_ia32_scalefph256_mask">,
7091        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
7092                              [ llvm_v16f16_ty, llvm_v16f16_ty, llvm_v16f16_ty,
7093                                llvm_i16_ty ],
7094                              [ IntrNoMem ]>;
7095  def int_x86_avx512fp16_mask_scalef_ph_512
7096      : ClangBuiltin<"__builtin_ia32_scalefph512_mask">,
7097        DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
7098                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_v32f16_ty,
7099                                llvm_i32_ty, llvm_i32_ty ],
7100                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7101  def int_x86_avx512fp16_mask_scalef_sh
7102      : ClangBuiltin<"__builtin_ia32_scalefsh_round_mask">,
7103        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
7104                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty,
7105                                llvm_i8_ty, llvm_i32_ty ],
7106                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7107
7108  def int_x86_avx512fp16_vfmadd_ph_512
7109      : DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
7110                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_v32f16_ty,
7111                                llvm_i32_ty ],
7112                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
7113  def int_x86_avx512fp16_vfmaddsub_ph_128
7114      : ClangBuiltin<"__builtin_ia32_vfmaddsubph">,
7115        DefaultAttrsIntrinsic<[ llvm_v8f16_ty ],
7116                              [ llvm_v8f16_ty, llvm_v8f16_ty, llvm_v8f16_ty ],
7117                              [ IntrNoMem ]>;
7118  def int_x86_avx512fp16_vfmaddsub_ph_256
7119      : ClangBuiltin<"__builtin_ia32_vfmaddsubph256">,
7120        DefaultAttrsIntrinsic<[ llvm_v16f16_ty ],
7121                              [ llvm_v16f16_ty, llvm_v16f16_ty,
7122                                llvm_v16f16_ty ],
7123                              [ IntrNoMem ]>;
7124  def int_x86_avx512fp16_vfmaddsub_ph_512
7125      : DefaultAttrsIntrinsic<[ llvm_v32f16_ty ],
7126                              [ llvm_v32f16_ty, llvm_v32f16_ty, llvm_v32f16_ty,
7127                                llvm_i32_ty ],
7128                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
7129  def int_x86_avx512fp16_vfmadd_f16
7130      : DefaultAttrsIntrinsic<[ llvm_half_ty ],
7131                              [ llvm_half_ty, llvm_half_ty, llvm_half_ty,
7132                                llvm_i32_ty ],
7133                              [ IntrNoMem, ImmArg<ArgIndex<3>> ]>;
7134
7135  def int_x86_avx512fp16_mask_vfcmadd_cph_128
7136      : ClangBuiltin<"__builtin_ia32_vfcmaddcph128_mask">,
7137        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7138                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7139                                llvm_i8_ty ],
7140                              [ IntrNoMem ]>;
7141  def int_x86_avx512fp16_maskz_vfcmadd_cph_128
7142      : ClangBuiltin<"__builtin_ia32_vfcmaddcph128_maskz">,
7143        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7144                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7145                                llvm_i8_ty ],
7146                              [ IntrNoMem ]>;
7147  def int_x86_avx512fp16_mask_vfcmadd_cph_256
7148      : ClangBuiltin<"__builtin_ia32_vfcmaddcph256_mask">,
7149        DefaultAttrsIntrinsic<[ llvm_v8f32_ty ],
7150                              [ llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,
7151                                llvm_i8_ty ],
7152                              [ IntrNoMem ]>;
7153  def int_x86_avx512fp16_maskz_vfcmadd_cph_256
7154      : ClangBuiltin<"__builtin_ia32_vfcmaddcph256_maskz">,
7155        DefaultAttrsIntrinsic<[ llvm_v8f32_ty ],
7156                              [ llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,
7157                                llvm_i8_ty ],
7158                              [ IntrNoMem ]>;
7159  def int_x86_avx512fp16_mask_vfcmadd_cph_512
7160      : ClangBuiltin<"__builtin_ia32_vfcmaddcph512_mask3">,
7161        DefaultAttrsIntrinsic<[ llvm_v16f32_ty ],
7162                              [ llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,
7163                                llvm_i16_ty, llvm_i32_ty ],
7164                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7165  def int_x86_avx512fp16_maskz_vfcmadd_cph_512
7166      : ClangBuiltin<"__builtin_ia32_vfcmaddcph512_maskz">,
7167        DefaultAttrsIntrinsic<[ llvm_v16f32_ty ],
7168                              [ llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,
7169                                llvm_i16_ty, llvm_i32_ty ],
7170                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7171  def int_x86_avx512fp16_mask_vfmadd_cph_128
7172      : ClangBuiltin<"__builtin_ia32_vfmaddcph128_mask">,
7173        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7174                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7175                                llvm_i8_ty ],
7176                              [ IntrNoMem ]>;
7177  def int_x86_avx512fp16_maskz_vfmadd_cph_128
7178      : ClangBuiltin<"__builtin_ia32_vfmaddcph128_maskz">,
7179        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7180                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7181                                llvm_i8_ty ],
7182                              [ IntrNoMem ]>;
7183  def int_x86_avx512fp16_mask_vfmadd_cph_256
7184      : ClangBuiltin<"__builtin_ia32_vfmaddcph256_mask">,
7185        DefaultAttrsIntrinsic<[ llvm_v8f32_ty ],
7186                              [ llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,
7187                                llvm_i8_ty ],
7188                              [ IntrNoMem ]>;
7189  def int_x86_avx512fp16_maskz_vfmadd_cph_256
7190      : ClangBuiltin<"__builtin_ia32_vfmaddcph256_maskz">,
7191        DefaultAttrsIntrinsic<[ llvm_v8f32_ty ],
7192                              [ llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,
7193                                llvm_i8_ty ],
7194                              [ IntrNoMem ]>;
7195  def int_x86_avx512fp16_mask_vfmadd_cph_512
7196      : ClangBuiltin<"__builtin_ia32_vfmaddcph512_mask3">,
7197        DefaultAttrsIntrinsic<[ llvm_v16f32_ty ],
7198                              [ llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,
7199                                llvm_i16_ty, llvm_i32_ty ],
7200                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7201  def int_x86_avx512fp16_maskz_vfmadd_cph_512
7202      : ClangBuiltin<"__builtin_ia32_vfmaddcph512_maskz">,
7203        DefaultAttrsIntrinsic<[ llvm_v16f32_ty ],
7204                              [ llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,
7205                                llvm_i16_ty, llvm_i32_ty ],
7206                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7207  def int_x86_avx512fp16_mask_vfmadd_csh
7208      : ClangBuiltin<"__builtin_ia32_vfmaddcsh_mask">,
7209        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7210                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7211                                llvm_i8_ty, llvm_i32_ty ],
7212                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7213  def int_x86_avx512fp16_maskz_vfmadd_csh
7214      : ClangBuiltin<"__builtin_ia32_vfmaddcsh_maskz">,
7215        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7216                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7217                                llvm_i8_ty, llvm_i32_ty ],
7218                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7219  def int_x86_avx512fp16_mask_vfcmadd_csh
7220      : ClangBuiltin<"__builtin_ia32_vfcmaddcsh_mask">,
7221        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7222                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7223                                llvm_i8_ty, llvm_i32_ty ],
7224                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7225  def int_x86_avx512fp16_maskz_vfcmadd_csh
7226      : ClangBuiltin<"__builtin_ia32_vfcmaddcsh_maskz">,
7227        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7228                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7229                                llvm_i8_ty, llvm_i32_ty ],
7230                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7231  def int_x86_avx512fp16_mask_vfmul_cph_128
7232      : ClangBuiltin<"__builtin_ia32_vfmulcph128_mask">,
7233        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7234                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7235                                llvm_i8_ty ],
7236                              [ IntrNoMem ]>;
7237  def int_x86_avx512fp16_mask_vfcmul_cph_128
7238      : ClangBuiltin<"__builtin_ia32_vfcmulcph128_mask">,
7239        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7240                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7241                                llvm_i8_ty ],
7242                              [ IntrNoMem ]>;
7243  def int_x86_avx512fp16_mask_vfmul_cph_256
7244      : ClangBuiltin<"__builtin_ia32_vfmulcph256_mask">,
7245        DefaultAttrsIntrinsic<[ llvm_v8f32_ty ],
7246                              [ llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,
7247                                llvm_i8_ty ],
7248                              [ IntrNoMem ]>;
7249  def int_x86_avx512fp16_mask_vfcmul_cph_256
7250      : ClangBuiltin<"__builtin_ia32_vfcmulcph256_mask">,
7251        DefaultAttrsIntrinsic<[ llvm_v8f32_ty ],
7252                              [ llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,
7253                                llvm_i8_ty ],
7254                              [ IntrNoMem ]>;
7255  def int_x86_avx512fp16_mask_vfmul_cph_512
7256      : ClangBuiltin<"__builtin_ia32_vfmulcph512_mask">,
7257        DefaultAttrsIntrinsic<[ llvm_v16f32_ty ],
7258                              [ llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,
7259                                llvm_i16_ty, llvm_i32_ty ],
7260                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7261  def int_x86_avx512fp16_mask_vfcmul_cph_512
7262      : ClangBuiltin<"__builtin_ia32_vfcmulcph512_mask">,
7263        DefaultAttrsIntrinsic<[ llvm_v16f32_ty ],
7264                              [ llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,
7265                                llvm_i16_ty, llvm_i32_ty ],
7266                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7267  def int_x86_avx512fp16_mask_vfmul_csh
7268      : ClangBuiltin<"__builtin_ia32_vfmulcsh_mask">,
7269        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7270                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7271                                llvm_i8_ty, llvm_i32_ty ],
7272                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7273  def int_x86_avx512fp16_mask_vfcmul_csh
7274      : ClangBuiltin<"__builtin_ia32_vfcmulcsh_mask">,
7275        DefaultAttrsIntrinsic<[ llvm_v4f32_ty ],
7276                              [ llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
7277                                llvm_i8_ty, llvm_i32_ty ],
7278                              [ IntrNoMem, ImmArg<ArgIndex<4>> ]>;
7279}
7280
7281let TargetPrefix = "x86" in {
7282def int_x86_avx10_vminmaxbf16128 : ClangBuiltin<"__builtin_ia32_vminmaxbf16128">,
7283        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_i32_ty],
7284                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7285def int_x86_avx10_vminmaxbf16256 : ClangBuiltin<"__builtin_ia32_vminmaxbf16256">,
7286        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_i32_ty],
7287                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7288def int_x86_avx10_vminmaxbf16512 : ClangBuiltin<"__builtin_ia32_vminmaxbf16512">,
7289        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_i32_ty],
7290                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7291def int_x86_avx10_vminmaxpd128 : ClangBuiltin<"__builtin_ia32_vminmaxpd128">,
7292        DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty],
7293                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7294def int_x86_avx10_mask_vminmaxpd128 : ClangBuiltin<"__builtin_ia32_vminmaxpd128_mask">,
7295        DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v2f64_ty, llvm_i8_ty],
7296                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7297def int_x86_avx10_vminmaxpd256 : ClangBuiltin<"__builtin_ia32_vminmaxpd256">,
7298        DefaultAttrsIntrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty],
7299                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7300def int_x86_avx10_mask_vminmaxpd256_round : ClangBuiltin<"__builtin_ia32_vminmaxpd256_round_mask">,
7301        DefaultAttrsIntrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty, llvm_i32_ty],
7302                  [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
7303def int_x86_avx10_mask_vminmaxpd_round : ClangBuiltin<"__builtin_ia32_vminmaxpd512_round_mask">,
7304        DefaultAttrsIntrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty],
7305                  [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
7306def int_x86_avx10_vminmaxph128 : ClangBuiltin<"__builtin_ia32_vminmaxph128">,
7307        DefaultAttrsIntrinsic<[llvm_v8f16_ty], [llvm_v8f16_ty, llvm_v8f16_ty, llvm_i32_ty],
7308                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7309def int_x86_avx10_mask_vminmaxph128 : ClangBuiltin<"__builtin_ia32_vminmaxph128_mask">,
7310        DefaultAttrsIntrinsic<[llvm_v8f16_ty], [llvm_v8f16_ty, llvm_v8f16_ty, llvm_i32_ty, llvm_v8f16_ty, llvm_i8_ty],
7311                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7312def int_x86_avx10_vminmaxph256 : ClangBuiltin<"__builtin_ia32_vminmaxph256">,
7313        DefaultAttrsIntrinsic<[llvm_v16f16_ty], [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty],
7314                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7315def int_x86_avx10_mask_vminmaxph256_round : ClangBuiltin<"__builtin_ia32_vminmaxph256_round_mask">,
7316        DefaultAttrsIntrinsic<[llvm_v16f16_ty], [llvm_v16f16_ty, llvm_v16f16_ty, llvm_i32_ty, llvm_v16f16_ty, llvm_i16_ty, llvm_i32_ty],
7317                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7318def int_x86_avx10_mask_vminmaxph_round : ClangBuiltin<"__builtin_ia32_vminmaxph512_round_mask">,
7319        DefaultAttrsIntrinsic<[llvm_v32f16_ty], [llvm_v32f16_ty, llvm_v32f16_ty, llvm_i32_ty, llvm_v32f16_ty, llvm_i32_ty, llvm_i32_ty],
7320                  [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
7321def int_x86_avx10_vminmaxps128 : ClangBuiltin<"__builtin_ia32_vminmaxps128">,
7322        DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty],
7323                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7324def int_x86_avx10_mask_vminmaxps128 : ClangBuiltin<"__builtin_ia32_vminmaxps128_mask">,
7325        DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty, llvm_i8_ty],
7326                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7327def int_x86_avx10_vminmaxps256 : ClangBuiltin<"__builtin_ia32_vminmaxps256">,
7328        DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty],
7329                  [IntrNoMem, ImmArg<ArgIndex<2>>]>;
7330def int_x86_avx10_mask_vminmaxps256_round : ClangBuiltin<"__builtin_ia32_vminmaxps256_round_mask">,
7331        DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty, llvm_i32_ty],
7332                  [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
7333def int_x86_avx10_mask_vminmaxps_round : ClangBuiltin<"__builtin_ia32_vminmaxps512_round_mask">,
7334        DefaultAttrsIntrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty],
7335                  [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
7336def int_x86_avx10_mask_vminmaxsd_round : ClangBuiltin<"__builtin_ia32_vminmaxsd_round_mask">,
7337        DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
7338                  [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
7339def int_x86_avx10_mask_vminmaxsh_round : ClangBuiltin<"__builtin_ia32_vminmaxsh_round_mask">,
7340        DefaultAttrsIntrinsic<[llvm_v8f16_ty], [llvm_v8f16_ty, llvm_v8f16_ty, llvm_i32_ty, llvm_v8f16_ty, llvm_i8_ty, llvm_i32_ty],
7341                  [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
7342def int_x86_avx10_mask_vminmaxss_round : ClangBuiltin<"__builtin_ia32_vminmaxss_round_mask">,
7343        DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
7344                  [IntrNoMem, ImmArg<ArgIndex<2>>, ImmArg<ArgIndex<5>>]>;
7345}
7346
7347//===----------------------------------------------------------------------===//
7348let TargetPrefix = "x86" in {
7349def int_x86_avx10_vcvtbf162ibs128 : ClangBuiltin<"__builtin_ia32_vcvtbf162ibs128">,
7350         DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8bf16_ty],
7351                   [IntrNoMem]>;
7352def int_x86_avx10_vcvtbf162ibs256 : ClangBuiltin<"__builtin_ia32_vcvtbf162ibs256">,
7353        DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16bf16_ty],
7354                  [IntrNoMem]>;
7355def int_x86_avx10_vcvtbf162ibs512 : ClangBuiltin<"__builtin_ia32_vcvtbf162ibs512">,
7356        DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32bf16_ty],
7357                  [IntrNoMem]>;
7358def int_x86_avx10_vcvtbf162iubs128 : ClangBuiltin<"__builtin_ia32_vcvtbf162iubs128">,
7359        DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8bf16_ty],
7360                   [IntrNoMem]>;
7361def int_x86_avx10_vcvtbf162iubs256 : ClangBuiltin<"__builtin_ia32_vcvtbf162iubs256">,
7362        DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16bf16_ty],
7363                  [IntrNoMem]>;
7364def int_x86_avx10_vcvtbf162iubs512 : ClangBuiltin<"__builtin_ia32_vcvtbf162iubs512">,
7365        DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32bf16_ty],
7366                  [IntrNoMem]>;
7367def int_x86_avx10_mask_vcvtph2ibs128 : ClangBuiltin<"__builtin_ia32_vcvtph2ibs128_mask">,
7368        DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8f16_ty, llvm_v8i16_ty, llvm_i8_ty],
7369                  [IntrNoMem]>;
7370def int_x86_avx10_mask_vcvtph2ibs256 : ClangBuiltin<"__builtin_ia32_vcvtph2ibs256_mask">,
7371        DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty, llvm_i32_ty],
7372                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7373def int_x86_avx10_mask_vcvtph2ibs512 : ClangBuiltin<"__builtin_ia32_vcvtph2ibs512_mask">,
7374        DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32f16_ty, llvm_v32i16_ty, llvm_i32_ty, llvm_i32_ty],
7375                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7376def int_x86_avx10_mask_vcvtph2iubs128 : ClangBuiltin<"__builtin_ia32_vcvtph2iubs128_mask">,
7377        DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8f16_ty, llvm_v8i16_ty, llvm_i8_ty],
7378                  [IntrNoMem]>;
7379def int_x86_avx10_mask_vcvtph2iubs256 : ClangBuiltin<"__builtin_ia32_vcvtph2iubs256_mask">,
7380        DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty, llvm_i32_ty],
7381                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7382def int_x86_avx10_mask_vcvtph2iubs512 : ClangBuiltin<"__builtin_ia32_vcvtph2iubs512_mask">,
7383        DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32f16_ty, llvm_v32i16_ty, llvm_i32_ty, llvm_i32_ty],
7384                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7385def int_x86_avx10_mask_vcvtps2ibs128 : ClangBuiltin<"__builtin_ia32_vcvtps2ibs128_mask">,
7386        DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4i32_ty, llvm_i8_ty],
7387                  [IntrNoMem]>;
7388def int_x86_avx10_mask_vcvtps2ibs256 : ClangBuiltin<"__builtin_ia32_vcvtps2ibs256_mask">,
7389        DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
7390                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7391def int_x86_avx10_mask_vcvtps2ibs512 : ClangBuiltin<"__builtin_ia32_vcvtps2ibs512_mask">,
7392        DefaultAttrsIntrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
7393                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7394def int_x86_avx10_mask_vcvtps2iubs128 : ClangBuiltin<"__builtin_ia32_vcvtps2iubs128_mask">,
7395        DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4i32_ty, llvm_i8_ty],
7396                  [IntrNoMem]>;
7397def int_x86_avx10_mask_vcvtps2iubs256 : ClangBuiltin<"__builtin_ia32_vcvtps2iubs256_mask">,
7398        DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
7399                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7400def int_x86_avx10_mask_vcvtps2iubs512 : ClangBuiltin<"__builtin_ia32_vcvtps2iubs512_mask">,
7401        DefaultAttrsIntrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
7402                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7403def int_x86_avx10_vcvttbf162ibs128 : ClangBuiltin<"__builtin_ia32_vcvttbf162ibs128">,
7404        DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8bf16_ty],
7405                  [IntrNoMem]>;
7406def int_x86_avx10_vcvttbf162ibs256 : ClangBuiltin<"__builtin_ia32_vcvttbf162ibs256">,
7407        DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16bf16_ty],
7408                  [IntrNoMem]>;
7409def int_x86_avx10_vcvttbf162ibs512 : ClangBuiltin<"__builtin_ia32_vcvttbf162ibs512">,
7410        DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32bf16_ty],
7411                  [IntrNoMem]>;
7412def int_x86_avx10_vcvttbf162iubs128 : ClangBuiltin<"__builtin_ia32_vcvttbf162iubs128">,
7413        DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8bf16_ty],
7414                  [IntrNoMem]>;
7415def int_x86_avx10_vcvttbf162iubs256 : ClangBuiltin<"__builtin_ia32_vcvttbf162iubs256">,
7416        DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16bf16_ty],
7417                  [IntrNoMem]>;
7418def int_x86_avx10_vcvttbf162iubs512 : ClangBuiltin<"__builtin_ia32_vcvttbf162iubs512">,
7419        DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32bf16_ty],
7420                  [IntrNoMem]>;
7421def int_x86_avx10_mask_vcvttph2ibs128 : ClangBuiltin<"__builtin_ia32_vcvttph2ibs128_mask">,
7422        DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8f16_ty, llvm_v8i16_ty, llvm_i8_ty],
7423                [IntrNoMem]>;
7424def int_x86_avx10_mask_vcvttph2ibs256 : ClangBuiltin<"__builtin_ia32_vcvttph2ibs256_mask">,
7425        DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty, llvm_i32_ty],
7426                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7427def int_x86_avx10_mask_vcvttph2ibs512 : ClangBuiltin<"__builtin_ia32_vcvttph2ibs512_mask">,
7428        DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32f16_ty, llvm_v32i16_ty, llvm_i32_ty, llvm_i32_ty],
7429                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7430def int_x86_avx10_mask_vcvttph2iubs128 : ClangBuiltin<"__builtin_ia32_vcvttph2iubs128_mask">,
7431        DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8f16_ty, llvm_v8i16_ty, llvm_i8_ty],
7432                   [IntrNoMem]>;
7433def int_x86_avx10_mask_vcvttph2iubs256 : ClangBuiltin<"__builtin_ia32_vcvttph2iubs256_mask">,
7434        DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16f16_ty, llvm_v16i16_ty, llvm_i16_ty, llvm_i32_ty],
7435                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7436def int_x86_avx10_mask_vcvttph2iubs512 : ClangBuiltin<"__builtin_ia32_vcvttph2iubs512_mask">,
7437        DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32f16_ty, llvm_v32i16_ty, llvm_i32_ty, llvm_i32_ty],
7438                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7439def int_x86_avx10_mask_vcvttps2ibs128 : ClangBuiltin<"__builtin_ia32_vcvttps2ibs128_mask">,
7440        DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4i32_ty, llvm_i8_ty],
7441                  [IntrNoMem]>;
7442def int_x86_avx10_mask_vcvttps2ibs256 : ClangBuiltin<"__builtin_ia32_vcvttps2ibs256_mask">,
7443        DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
7444                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7445def int_x86_avx10_mask_vcvttps2ibs512 : ClangBuiltin<"__builtin_ia32_vcvttps2ibs512_mask">,
7446        DefaultAttrsIntrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
7447                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7448def int_x86_avx10_mask_vcvttps2iubs128 : ClangBuiltin<"__builtin_ia32_vcvttps2iubs128_mask">,
7449        DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty, llvm_v4i32_ty, llvm_i8_ty],
7450                [IntrNoMem]>;
7451def int_x86_avx10_mask_vcvttps2iubs256 : ClangBuiltin<"__builtin_ia32_vcvttps2iubs256_mask">,
7452        DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
7453                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7454def int_x86_avx10_mask_vcvttps2iubs512 : ClangBuiltin<"__builtin_ia32_vcvttps2iubs512_mask">,
7455        DefaultAttrsIntrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
7456                  [IntrNoMem, ImmArg<ArgIndex<3>>]>;
7457}
7458
7459//===----------------------------------------------------------------------===//
7460let TargetPrefix = "x86" in {
7461def int_x86_avx10_mask_vcvt2ps2phx_128 : ClangBuiltin<"__builtin_ia32_vcvt2ps2phx128_mask">,
7462        DefaultAttrsIntrinsic<[llvm_v8f16_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v8f16_ty, llvm_i8_ty],
7463                              [IntrNoMem]>;
7464def int_x86_avx10_mask_vcvt2ps2phx_256 : ClangBuiltin<"__builtin_ia32_vcvt2ps2phx256_mask">,
7465        DefaultAttrsIntrinsic<[llvm_v16f16_ty], [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v16f16_ty, llvm_i16_ty, llvm_i32_ty],
7466                              [IntrNoMem, ImmArg<ArgIndex<4>>]>;
7467def int_x86_avx10_mask_vcvt2ps2phx_512 : ClangBuiltin<"__builtin_ia32_vcvt2ps2phx512_mask">,
7468        DefaultAttrsIntrinsic<[llvm_v32f16_ty], [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v32f16_ty, llvm_i32_ty, llvm_i32_ty],
7469                              [IntrNoMem, ImmArg<ArgIndex<4>>]>;
7470def int_x86_avx10_mask_vcvtbiasph2bf8128 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2bf8_128_mask">,
7471        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v8f16_ty, llvm_v16i8_ty, llvm_i8_ty],
7472                              [IntrNoMem]>;
7473def int_x86_avx10_mask_vcvtbiasph2bf8256 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2bf8_256_mask">,
7474        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v32i8_ty, llvm_v16f16_ty, llvm_v16i8_ty, llvm_i16_ty],
7475                              [IntrNoMem]>;
7476def int_x86_avx10_mask_vcvtbiasph2bf8512 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2bf8_512_mask">,
7477        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v64i8_ty, llvm_v32f16_ty, llvm_v32i8_ty, llvm_i32_ty],
7478                              [IntrNoMem]>;
7479def int_x86_avx10_mask_vcvtbiasph2bf8s128 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2bf8s_128_mask">,
7480        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v8f16_ty, llvm_v16i8_ty, llvm_i8_ty],
7481                              [IntrNoMem]>;
7482def int_x86_avx10_mask_vcvtbiasph2bf8s256 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2bf8s_256_mask">,
7483        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v32i8_ty, llvm_v16f16_ty, llvm_v16i8_ty, llvm_i16_ty],
7484                              [IntrNoMem]>;
7485def int_x86_avx10_mask_vcvtbiasph2bf8s512 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2bf8s_512_mask">,
7486        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v64i8_ty, llvm_v32f16_ty, llvm_v32i8_ty, llvm_i32_ty],
7487                              [IntrNoMem]>;
7488def int_x86_avx10_mask_vcvtbiasph2hf8128 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2hf8_128_mask">,
7489        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v8f16_ty, llvm_v16i8_ty, llvm_i8_ty],
7490                              [IntrNoMem]>;
7491def int_x86_avx10_mask_vcvtbiasph2hf8256 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2hf8_256_mask">,
7492        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v32i8_ty, llvm_v16f16_ty, llvm_v16i8_ty, llvm_i16_ty],
7493                              [IntrNoMem]>;
7494def int_x86_avx10_mask_vcvtbiasph2hf8512 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2hf8_512_mask">,
7495        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v64i8_ty, llvm_v32f16_ty, llvm_v32i8_ty, llvm_i32_ty],
7496                              [IntrNoMem]>;
7497def int_x86_avx10_mask_vcvtbiasph2hf8s128 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2hf8s_128_mask">,
7498        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v8f16_ty, llvm_v16i8_ty, llvm_i8_ty],
7499                              [IntrNoMem]>;
7500def int_x86_avx10_mask_vcvtbiasph2hf8s256 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2hf8s_256_mask">,
7501        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v32i8_ty, llvm_v16f16_ty, llvm_v16i8_ty, llvm_i16_ty],
7502                              [IntrNoMem]>;
7503def int_x86_avx10_mask_vcvtbiasph2hf8s512 : ClangBuiltin<"__builtin_ia32_vcvtbiasph2hf8s_512_mask">,
7504        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v64i8_ty, llvm_v32f16_ty, llvm_v32i8_ty, llvm_i32_ty],
7505                              [IntrNoMem]>;
7506def int_x86_avx10_vcvt2ph2bf8128 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8_128">,
7507        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v8f16_ty],
7508                              [IntrNoMem]>;
7509def int_x86_avx10_vcvt2ph2bf8256 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8_256">,
7510        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v16f16_ty, llvm_v16f16_ty],
7511                              [IntrNoMem]>;
7512def int_x86_avx10_vcvt2ph2bf8512 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8_512">,
7513        DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_v32f16_ty, llvm_v32f16_ty],
7514                              [IntrNoMem]>;
7515def int_x86_avx10_vcvt2ph2bf8s128 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8s_128">,
7516        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v8f16_ty],
7517                              [IntrNoMem]>;
7518def int_x86_avx10_vcvt2ph2bf8s256 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8s_256">,
7519        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v16f16_ty, llvm_v16f16_ty],
7520                              [IntrNoMem]>;
7521def int_x86_avx10_vcvt2ph2bf8s512 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8s_512">,
7522        DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_v32f16_ty, llvm_v32f16_ty],
7523                              [IntrNoMem]>;
7524def int_x86_avx10_vcvt2ph2hf8128 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8_128">,
7525        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v8f16_ty],
7526                              [IntrNoMem]>;
7527def int_x86_avx10_vcvt2ph2hf8256 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8_256">,
7528        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v16f16_ty, llvm_v16f16_ty],
7529                              [IntrNoMem]>;
7530def int_x86_avx10_vcvt2ph2hf8512 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8_512">,
7531        DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_v32f16_ty, llvm_v32f16_ty],
7532                              [IntrNoMem]>;
7533def int_x86_avx10_vcvt2ph2hf8s128 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8s_128">,
7534        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v8f16_ty],
7535                              [IntrNoMem]>;
7536def int_x86_avx10_vcvt2ph2hf8s256 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8s_256">,
7537        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v16f16_ty, llvm_v16f16_ty],
7538                              [IntrNoMem]>;
7539def int_x86_avx10_vcvt2ph2hf8s512 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8s_512">,
7540        DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_v32f16_ty, llvm_v32f16_ty],
7541                              [IntrNoMem]>;
7542def int_x86_avx10_mask_vcvthf82ph128 : ClangBuiltin<"__builtin_ia32_vcvthf8_2ph128_mask">,
7543        DefaultAttrsIntrinsic<[llvm_v8f16_ty], [llvm_v16i8_ty, llvm_v8f16_ty, llvm_i8_ty],
7544                              [IntrNoMem]>;
7545def int_x86_avx10_mask_vcvthf82ph256 : ClangBuiltin<"__builtin_ia32_vcvthf8_2ph256_mask">,
7546        DefaultAttrsIntrinsic<[llvm_v16f16_ty], [llvm_v16i8_ty, llvm_v16f16_ty, llvm_i16_ty],
7547                              [IntrNoMem]>;
7548def int_x86_avx10_mask_vcvthf82ph512 : ClangBuiltin<"__builtin_ia32_vcvthf8_2ph512_mask">,
7549        DefaultAttrsIntrinsic<[llvm_v32f16_ty], [llvm_v32i8_ty, llvm_v32f16_ty, llvm_i32_ty],
7550                              [IntrNoMem]>;
7551def int_x86_avx10_mask_vcvtph2bf8128 : ClangBuiltin<"__builtin_ia32_vcvtph2bf8_128_mask">,
7552        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v16i8_ty, llvm_i8_ty],
7553                              [IntrNoMem]>;
7554def int_x86_avx10_mask_vcvtph2bf8256 : ClangBuiltin<"__builtin_ia32_vcvtph2bf8_256_mask">,
7555        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16f16_ty, llvm_v16i8_ty, llvm_i16_ty],
7556                              [IntrNoMem]>;
7557def int_x86_avx10_mask_vcvtph2bf8512 : ClangBuiltin<"__builtin_ia32_vcvtph2bf8_512_mask">,
7558        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v32f16_ty, llvm_v32i8_ty, llvm_i32_ty],
7559                              [IntrNoMem]>;
7560def int_x86_avx10_mask_vcvtph2bf8s128 : ClangBuiltin<"__builtin_ia32_vcvtph2bf8s_128_mask">,
7561        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v16i8_ty, llvm_i8_ty],
7562                              [IntrNoMem]>;
7563def int_x86_avx10_mask_vcvtph2bf8s256 : ClangBuiltin<"__builtin_ia32_vcvtph2bf8s_256_mask">,
7564        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16f16_ty, llvm_v16i8_ty, llvm_i16_ty],
7565                              [IntrNoMem]>;
7566def int_x86_avx10_mask_vcvtph2bf8s512 : ClangBuiltin<"__builtin_ia32_vcvtph2bf8s_512_mask">,
7567        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v32f16_ty, llvm_v32i8_ty, llvm_i32_ty],
7568                              [IntrNoMem]>;
7569def int_x86_avx10_mask_vcvtph2hf8128 : ClangBuiltin<"__builtin_ia32_vcvtph2hf8_128_mask">,
7570        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v16i8_ty, llvm_i8_ty],
7571                              [IntrNoMem]>;
7572def int_x86_avx10_mask_vcvtph2hf8256 : ClangBuiltin<"__builtin_ia32_vcvtph2hf8_256_mask">,
7573        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16f16_ty, llvm_v16i8_ty, llvm_i16_ty],
7574                              [IntrNoMem]>;
7575def int_x86_avx10_mask_vcvtph2hf8512 : ClangBuiltin<"__builtin_ia32_vcvtph2hf8_512_mask">,
7576        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v32f16_ty, llvm_v32i8_ty, llvm_i32_ty],
7577                              [IntrNoMem]>;
7578def int_x86_avx10_mask_vcvtph2hf8s128 : ClangBuiltin<"__builtin_ia32_vcvtph2hf8s_128_mask">,
7579        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v16i8_ty, llvm_i8_ty],
7580                              [IntrNoMem]>;
7581def int_x86_avx10_mask_vcvtph2hf8s256 : ClangBuiltin<"__builtin_ia32_vcvtph2hf8s_256_mask">,
7582        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16f16_ty, llvm_v16i8_ty, llvm_i16_ty],
7583                              [IntrNoMem]>;
7584def int_x86_avx10_mask_vcvtph2hf8s512 : ClangBuiltin<"__builtin_ia32_vcvtph2hf8s_512_mask">,
7585        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v32f16_ty, llvm_v32i8_ty, llvm_i32_ty],
7586                              [IntrNoMem]>;
7587}
7588
7589//===----------------------------------------------------------------------===//
7590let TargetPrefix = "x86" in {
7591def int_x86_avx10_vaddbf16512 : ClangBuiltin<"__builtin_ia32_vaddbf16512">,
7592        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7593                              [IntrNoMem]>;
7594def int_x86_avx10_vaddbf16256 : ClangBuiltin<"__builtin_ia32_vaddbf16256">,
7595        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7596                              [IntrNoMem]>;
7597def int_x86_avx10_vaddbf16128 : ClangBuiltin<"__builtin_ia32_vaddbf16128">,
7598        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7599                              [IntrNoMem]>;
7600def int_x86_avx10_vsubbf16512 : ClangBuiltin<"__builtin_ia32_vsubbf16512">,
7601        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7602                              [IntrNoMem]>;
7603def int_x86_avx10_vsubbf16256 : ClangBuiltin<"__builtin_ia32_vsubbf16256">,
7604        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7605                              [IntrNoMem]>;
7606def int_x86_avx10_vsubbf16128 : ClangBuiltin<"__builtin_ia32_vsubbf16128">,
7607        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7608                              [IntrNoMem]>;
7609def int_x86_avx10_vmulbf16512 : ClangBuiltin<"__builtin_ia32_vmulbf16512">,
7610        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7611                              [IntrNoMem]>;
7612def int_x86_avx10_vmulbf16256 : ClangBuiltin<"__builtin_ia32_vmulbf16256">,
7613        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7614                              [IntrNoMem]>;
7615def int_x86_avx10_vmulbf16128 : ClangBuiltin<"__builtin_ia32_vmulbf16128">,
7616        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7617                              [IntrNoMem]>;
7618def int_x86_avx10_vdivbf16512 : ClangBuiltin<"__builtin_ia32_vdivbf16512">,
7619        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7620                              [IntrNoMem]>;
7621def int_x86_avx10_vdivbf16256 : ClangBuiltin<"__builtin_ia32_vdivbf16256">,
7622        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7623                              [IntrNoMem]>;
7624def int_x86_avx10_vdivbf16128 : ClangBuiltin<"__builtin_ia32_vdivbf16128">,
7625        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7626                              [IntrNoMem]>;
7627def int_x86_avx10_vmaxbf16512 : ClangBuiltin<"__builtin_ia32_vmaxbf16512">,
7628        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7629                              [IntrNoMem]>;
7630def int_x86_avx10_vmaxbf16256 : ClangBuiltin<"__builtin_ia32_vmaxbf16256">,
7631        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7632                              [IntrNoMem]>;
7633def int_x86_avx10_vmaxbf16128 : ClangBuiltin<"__builtin_ia32_vmaxbf16128">,
7634        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7635                              [IntrNoMem]>;
7636def int_x86_avx10_vminbf16512 : ClangBuiltin<"__builtin_ia32_vminbf16512">,
7637        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7638                              [IntrNoMem]>;
7639def int_x86_avx10_vminbf16256 : ClangBuiltin<"__builtin_ia32_vminbf16256">,
7640        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7641                              [IntrNoMem]>;
7642def int_x86_avx10_vminbf16128 : ClangBuiltin<"__builtin_ia32_vminbf16128">,
7643        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7644                              [IntrNoMem]>;
7645def int_x86_avx10_vcomisbf16eq : ClangBuiltin<"__builtin_ia32_vcomisbf16eq">,
7646        DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7647                              [IntrNoMem]>;
7648def int_x86_avx10_vcomisbf16lt : ClangBuiltin<"__builtin_ia32_vcomisbf16lt">,
7649        DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty,llvm_v8bf16_ty],
7650                              [IntrNoMem]>;
7651def int_x86_avx10_vcomisbf16le : ClangBuiltin<"__builtin_ia32_vcomisbf16le">,
7652        DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7653                              [IntrNoMem]>;
7654def int_x86_avx10_vcomisbf16gt : ClangBuiltin<"__builtin_ia32_vcomisbf16gt">,
7655        DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7656                              [IntrNoMem]>;
7657def int_x86_avx10_vcomisbf16ge : ClangBuiltin<"__builtin_ia32_vcomisbf16ge">,
7658        DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7659                              [IntrNoMem]>;
7660def int_x86_avx10_vcomisbf16neq : ClangBuiltin<"__builtin_ia32_vcomisbf16neq">,
7661        DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7662                              [IntrNoMem]>;
7663def int_x86_avx10_mask_rsqrt_bf16_128 : ClangBuiltin<"__builtin_ia32_vrsqrtbf16128_mask">,
7664        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_i8_ty],
7665                              [IntrNoMem]>;
7666def int_x86_avx10_mask_rsqrt_bf16_256 : ClangBuiltin<"__builtin_ia32_vrsqrtbf16256_mask">,
7667        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_i16_ty],
7668                              [IntrNoMem]>;
7669def int_x86_avx10_mask_rsqrt_bf16_512 : ClangBuiltin<"__builtin_ia32_vrsqrtbf16512_mask">,
7670        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_i32_ty],
7671                              [IntrNoMem]>;
7672def int_x86_avx10_mask_rcp_bf16_128 : ClangBuiltin<"__builtin_ia32_vrcpbf16128_mask">,
7673        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_i8_ty],
7674                              [IntrNoMem]>;
7675def int_x86_avx10_mask_rcp_bf16_256 : ClangBuiltin<"__builtin_ia32_vrcpbf16256_mask">,
7676        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_i16_ty],
7677                              [IntrNoMem]>;
7678def int_x86_avx10_mask_rcp_bf16_512 : ClangBuiltin<"__builtin_ia32_vrcpbf16512_mask">,
7679        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_i32_ty],
7680                              [IntrNoMem]>;
7681def int_x86_avx10_mask_reduce_bf16_128 : ClangBuiltin<"__builtin_ia32_vreducebf16128_mask">,
7682        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_i32_ty, llvm_v8bf16_ty, llvm_i8_ty],
7683                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7684def int_x86_avx10_mask_reduce_bf16_256 : ClangBuiltin<"__builtin_ia32_vreducebf16256_mask">,
7685        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_i32_ty, llvm_v16bf16_ty, llvm_i16_ty],
7686                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7687def int_x86_avx10_mask_reduce_bf16_512 : ClangBuiltin<"__builtin_ia32_vreducebf16512_mask">,
7688        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_i32_ty, llvm_v32bf16_ty, llvm_i32_ty],
7689                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7690def int_x86_avx10_fpclass_bf16_128 :
7691        DefaultAttrsIntrinsic<[llvm_v8i1_ty], [llvm_v8bf16_ty, llvm_i32_ty],
7692                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7693def int_x86_avx10_fpclass_bf16_256 :
7694        DefaultAttrsIntrinsic<[llvm_v16i1_ty], [llvm_v16bf16_ty, llvm_i32_ty],
7695                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7696def int_x86_avx10_fpclass_bf16_512 :
7697        DefaultAttrsIntrinsic<[llvm_v32i1_ty], [llvm_v32bf16_ty, llvm_i32_ty],
7698                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7699def int_x86_avx10_mask_getexp_bf16_128 : ClangBuiltin<"__builtin_ia32_vgetexpbf16128_mask">,
7700        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_i8_ty],
7701                              [IntrNoMem]>;
7702def int_x86_avx10_mask_getexp_bf16_256 : ClangBuiltin<"__builtin_ia32_vgetexpbf16256_mask">,
7703        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_i16_ty],
7704                              [IntrNoMem]>;
7705def int_x86_avx10_mask_getexp_bf16_512 : ClangBuiltin<"__builtin_ia32_vgetexpbf16512_mask">,
7706        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_i32_ty],
7707                              [IntrNoMem]>;
7708def int_x86_avx10_mask_getmant_bf16_128 : ClangBuiltin<"__builtin_ia32_vgetmantbf16128_mask">,
7709        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_i32_ty, llvm_v8bf16_ty, llvm_i8_ty],
7710                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7711def int_x86_avx10_mask_getmant_bf16_256 : ClangBuiltin<"__builtin_ia32_vgetmantbf16256_mask">,
7712        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_i32_ty, llvm_v16bf16_ty, llvm_i16_ty],
7713                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7714def int_x86_avx10_mask_getmant_bf16_512 : ClangBuiltin<"__builtin_ia32_vgetmantbf16512_mask">,
7715        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_i32_ty, llvm_v32bf16_ty, llvm_i32_ty],
7716                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7717def int_x86_avx10_mask_rndscale_bf16_128 : ClangBuiltin<"__builtin_ia32_vrndscalebf16_128_mask">,
7718        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_i32_ty, llvm_v8bf16_ty, llvm_i8_ty],
7719                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7720def int_x86_avx10_mask_rndscale_bf16_256 : ClangBuiltin<"__builtin_ia32_vrndscalebf16_256_mask">,
7721        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_i32_ty, llvm_v16bf16_ty, llvm_i16_ty],
7722                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7723def int_x86_avx10_mask_rndscale_bf16_512 : ClangBuiltin<"__builtin_ia32_vrndscalebf16_mask">,
7724        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_i32_ty, llvm_v32bf16_ty, llvm_i32_ty],
7725                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7726def int_x86_avx10_mask_scalef_bf16_128 : ClangBuiltin<"__builtin_ia32_vscalefbf16128_mask">,
7727        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_i8_ty],
7728                              [IntrNoMem]>;
7729def int_x86_avx10_mask_scalef_bf16_256 : ClangBuiltin<"__builtin_ia32_vscalefbf16256_mask">,
7730        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_i16_ty],
7731                              [IntrNoMem]>;
7732def int_x86_avx10_mask_scalef_bf16_512 : ClangBuiltin<"__builtin_ia32_vscalefbf16512_mask">,
7733        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_i32_ty],
7734                              [IntrNoMem]>;
7735def int_x86_avx10_vfmadd213bf16256 : ClangBuiltin<"__builtin_ia32_vfmadd213bf16256">,
7736        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7737                              [IntrNoMem]>;
7738def int_x86_avx10_vfmadd213bf16128 : ClangBuiltin<"__builtin_ia32_vfmadd213bf16128">,
7739        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7740                              [IntrNoMem]>;
7741def int_x86_avx10_vfmadd132bf16512 : ClangBuiltin<"__builtin_ia32_vfmadd132bf16512">,
7742        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7743                              [IntrNoMem]>;
7744def int_x86_avx10_vfmadd132bf16256 : ClangBuiltin<"__builtin_ia32_vfmadd132bf16256">,
7745        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7746                              [IntrNoMem]>;
7747def int_x86_avx10_vfmadd132bf16128 : ClangBuiltin<"__builtin_ia32_vfmadd132bf16128">,
7748        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7749                              [IntrNoMem]>;
7750def int_x86_avx10_vfmadd231bf16512 : ClangBuiltin<"__builtin_ia32_vfmadd231bf16512">,
7751        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7752                              [IntrNoMem]>;
7753def int_x86_avx10_vfmadd231bf16256 : ClangBuiltin<"__builtin_ia32_vfmadd231bf16256">,
7754        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7755                              [IntrNoMem]>;
7756def int_x86_avx10_vfmadd231bf16128 : ClangBuiltin<"__builtin_ia32_vfmadd231bf16128">,
7757        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7758                              [IntrNoMem]>;
7759def int_x86_avx10_vfmsub213bf16512 : ClangBuiltin<"__builtin_ia32_vfmsub213bf16512">,
7760        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7761                              [IntrNoMem]>;
7762def int_x86_avx10_vfmsub213bf16256 : ClangBuiltin<"__builtin_ia32_vfmsub213bf16256">,
7763        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7764                              [IntrNoMem]>;
7765def int_x86_avx10_vfmsub213bf16128 : ClangBuiltin<"__builtin_ia32_vfmsub213bf16128">,
7766        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7767                              [IntrNoMem]>;
7768def int_x86_avx10_vfmsub132bf16512 : ClangBuiltin<"__builtin_ia32_vfmsub132bf16512">,
7769        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7770                              [IntrNoMem]>;
7771def int_x86_avx10_vfmsub132bf16256 : ClangBuiltin<"__builtin_ia32_vfmsub132bf16256">,
7772        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7773                              [IntrNoMem]>;
7774def int_x86_avx10_vfmsub132bf16128 : ClangBuiltin<"__builtin_ia32_vfmsub132bf16128">,
7775        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7776                              [IntrNoMem]>;
7777def int_x86_avx10_vfmsub231bf16512 : ClangBuiltin<"__builtin_ia32_vfmsub231bf16512">,
7778        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7779                              [IntrNoMem]>;
7780def int_x86_avx10_vfmsub231bf16256 : ClangBuiltin<"__builtin_ia32_vfmsub231bf16256">,
7781        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7782                              [IntrNoMem]>;
7783def int_x86_avx10_vfmsub231bf16128 : ClangBuiltin<"__builtin_ia32_vfmsub231bf16128">,
7784        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7785                              [IntrNoMem]>;
7786def int_x86_avx10_vfnmadd213bf16512 : ClangBuiltin<"__builtin_ia32_vfnmadd213bf16512">,
7787        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7788                              [IntrNoMem]>;
7789def int_x86_avx10_vfnmadd213bf16256 : ClangBuiltin<"__builtin_ia32_vfnmadd213bf16256">,
7790        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7791                              [IntrNoMem]>;
7792def int_x86_avx10_vfnmadd213bf16128 : ClangBuiltin<"__builtin_ia32_vfnmadd213bf16128">,
7793        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7794                              [IntrNoMem]>;
7795def int_x86_avx10_vfnmadd132bf16512 : ClangBuiltin<"__builtin_ia32_vfnmadd132bf16512">,
7796        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7797                              [IntrNoMem]>;
7798def int_x86_avx10_vfnmadd132bf16256 : ClangBuiltin<"__builtin_ia32_vfnmadd132bf16256">,
7799        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7800                              [IntrNoMem]>;
7801def int_x86_avx10_vfnmadd132bf16128 : ClangBuiltin<"__builtin_ia32_vfnmadd132bf16128">,
7802        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7803                              [IntrNoMem]>;
7804def int_x86_avx10_vfnmadd231bf16512 : ClangBuiltin<"__builtin_ia32_vfnmadd231bf16512">,
7805        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7806                              [IntrNoMem]>;
7807def int_x86_avx10_vfnmadd231bf16256 : ClangBuiltin<"__builtin_ia32_vfnmadd231bf16256">,
7808        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7809                              [IntrNoMem]>;
7810def int_x86_avx10_vfnmadd231bf16128 : ClangBuiltin<"__builtin_ia32_vfnmadd231bf16128">,
7811        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7812                              [IntrNoMem]>;
7813def int_x86_avx10_vfnmsub213bf16512 : ClangBuiltin<"__builtin_ia32_vfnmsub213bf16512">,
7814        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7815                              [IntrNoMem]>;
7816def int_x86_avx10_vfnmsub213bf16256 : ClangBuiltin<"__builtin_ia32_vfnmsub213bf16256">,
7817        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7818                              [IntrNoMem]>;
7819def int_x86_avx10_vfnmsub213bf16128 : ClangBuiltin<"__builtin_ia32_vfnmsub213bf16128">,
7820        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7821                              [IntrNoMem]>;
7822def int_x86_avx10_vfnmsub132bf16512 : ClangBuiltin<"__builtin_ia32_vfnmsub132bf16512">,
7823        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7824                              [IntrNoMem]>;
7825def int_x86_avx10_vfnmsub132bf16256 : ClangBuiltin<"__builtin_ia32_vfnmsub132bf16256">,
7826        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7827                              [IntrNoMem]>;
7828def int_x86_avx10_vfnmsub132bf16128 : ClangBuiltin<"__builtin_ia32_vfnmsub132bf16128">,
7829        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7830                              [IntrNoMem]>;
7831def int_x86_avx10_vfnmsub231bf16512 : ClangBuiltin<"__builtin_ia32_vfnmsub231bf16512">,
7832        DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7833                              [IntrNoMem]>;
7834def int_x86_avx10_vfnmsub231bf16256 : ClangBuiltin<"__builtin_ia32_vfnmsub231bf16256">,
7835        DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7836                              [IntrNoMem]>;
7837def int_x86_avx10_vfnmsub231bf16128 : ClangBuiltin<"__builtin_ia32_vfnmsub231bf16128">,
7838        DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7839                              [IntrNoMem]>;
7840}
7841
7842let TargetPrefix = "x86" in {
7843def int_x86_avx10_vmovrsb128 : ClangBuiltin<"__builtin_ia32_vmovrsb128">,
7844        DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_ptr_ty],
7845                  [IntrReadMem]>;
7846def int_x86_avx10_vmovrsb256 : ClangBuiltin<"__builtin_ia32_vmovrsb256">,
7847        DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_ptr_ty],
7848                  [IntrReadMem]>;
7849def int_x86_avx10_vmovrsb512 : ClangBuiltin<"__builtin_ia32_vmovrsb512">,
7850        DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_ptr_ty],
7851                  [IntrReadMem]>;
7852def int_x86_avx10_vmovrsd128 : ClangBuiltin<"__builtin_ia32_vmovrsd128">,
7853        DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty],
7854                  [IntrReadMem]>;
7855def int_x86_avx10_vmovrsd256 : ClangBuiltin<"__builtin_ia32_vmovrsd256">,
7856        DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_ptr_ty],
7857                  [IntrReadMem]>;
7858def int_x86_avx10_vmovrsd512 : ClangBuiltin<"__builtin_ia32_vmovrsd512">,
7859        DefaultAttrsIntrinsic<[llvm_v16i32_ty], [llvm_ptr_ty],
7860                  [IntrReadMem]>;
7861def int_x86_avx10_vmovrsq128 : ClangBuiltin<"__builtin_ia32_vmovrsq128">,
7862        DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_ptr_ty],
7863                  [IntrReadMem]>;
7864def int_x86_avx10_vmovrsq256 : ClangBuiltin<"__builtin_ia32_vmovrsq256">,
7865        DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_ptr_ty],
7866                  [IntrReadMem]>;
7867def int_x86_avx10_vmovrsq512 : ClangBuiltin<"__builtin_ia32_vmovrsq512">,
7868        DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_ptr_ty],
7869                  [IntrReadMem]>;
7870def int_x86_avx10_vmovrsw128 : ClangBuiltin<"__builtin_ia32_vmovrsw128">,
7871        DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_ptr_ty],
7872                  [IntrReadMem]>;
7873def int_x86_avx10_vmovrsw256 : ClangBuiltin<"__builtin_ia32_vmovrsw256">,
7874        DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_ptr_ty],
7875                  [IntrReadMem]>;
7876def int_x86_avx10_vmovrsw512 : ClangBuiltin<"__builtin_ia32_vmovrsw512">,
7877        DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_ptr_ty],
7878                  [IntrReadMem]>;
7879}
7880
7881let TargetPrefix = "x86" in {
7882def int_x86_movrsqi : ClangBuiltin<"__builtin_ia32_movrsqi">,
7883        Intrinsic<[llvm_i8_ty], [llvm_ptr_ty],
7884                  [IntrReadMem]>;
7885def int_x86_movrshi : ClangBuiltin<"__builtin_ia32_movrshi">,
7886        Intrinsic<[llvm_i16_ty], [llvm_ptr_ty],
7887                  [IntrReadMem]>;
7888def int_x86_movrssi : ClangBuiltin<"__builtin_ia32_movrssi">,
7889        Intrinsic<[llvm_i32_ty], [llvm_ptr_ty],
7890                  [IntrReadMem]>;
7891def int_x86_movrsdi : ClangBuiltin<"__builtin_ia32_movrsdi">,
7892        Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
7893                  [IntrReadMem]>;
7894def int_x86_prefetchrs : ClangBuiltin<"__builtin_ia32_prefetchrs">,
7895        Intrinsic<[], [llvm_ptr_ty], []>;
7896}
7897