Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/llvm/IR/IntrinsicsX86.td is written in an unsupported language. File is not indexed.

0001 //===- IntrinsicsX86.td - Defines X86 intrinsics -----------*- tablegen -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // This file defines all of the X86-specific intrinsics.
0010 //
0011 //===----------------------------------------------------------------------===//
0012 
0013 //===----------------------------------------------------------------------===//
0014 // Interrupt traps
0015 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0016   def int_x86_int : Intrinsic<[], [llvm_i8_ty], [ImmArg<ArgIndex<0>>]>;
0017 }
0018 
0019 //===----------------------------------------------------------------------===//
0020 // SEH intrinsics for Windows
0021 let TargetPrefix = "x86" in {
0022   def int_x86_seh_lsda : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], [IntrNoMem]>;
0023 
0024   // Marks the EH registration node created in LLVM IR prior to code generation.
0025   def int_x86_seh_ehregnode : Intrinsic<[], [llvm_ptr_ty], []>;
0026 
0027   // Marks the EH guard slot node created in LLVM IR prior to code generation.
0028   def int_x86_seh_ehguard : Intrinsic<[], [llvm_ptr_ty], []>;
0029 }
0030 
0031 //===----------------------------------------------------------------------===//
0032 // FLAGS.
0033 let TargetPrefix = "x86" in {
0034   def int_x86_flags_read_u32 : ClangBuiltin<"__builtin_ia32_readeflags_u32">,
0035         Intrinsic<[llvm_i32_ty], [], []>;
0036   def int_x86_flags_read_u64 : ClangBuiltin<"__builtin_ia32_readeflags_u64">,
0037         Intrinsic<[llvm_i64_ty], [], []>;
0038   def int_x86_flags_write_u32 : ClangBuiltin<"__builtin_ia32_writeeflags_u32">,
0039         Intrinsic<[], [llvm_i32_ty], []>;
0040   def int_x86_flags_write_u64 : ClangBuiltin<"__builtin_ia32_writeeflags_u64">,
0041         Intrinsic<[], [llvm_i64_ty], []>;
0042 }
0043 
0044 //===----------------------------------------------------------------------===//
0045 // Read Time Stamp Counter.
0046 let TargetPrefix = "x86" in {
0047   def int_x86_rdtsc : ClangBuiltin<"__builtin_ia32_rdtsc">,
0048               Intrinsic<[llvm_i64_ty], [], []>;
0049   def int_x86_rdtscp :
0050               Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
0051 }
0052 
0053 // Read Performance-Monitoring Counter.
0054 let TargetPrefix = "x86" in {
0055   def int_x86_rdpmc : ClangBuiltin<"__builtin_ia32_rdpmc">,
0056               Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>;
0057 }
0058 
0059 // Read processor ID.
0060 let TargetPrefix = "x86" in {
0061   def int_x86_rdpid : ClangBuiltin<"__builtin_ia32_rdpid">,
0062               Intrinsic<[llvm_i32_ty], [], []>;
0063 }
0064 
0065 // Lock bit test.
0066 let TargetPrefix = "x86" in {
0067   def int_x86_atomic_bts : Intrinsic<[llvm_anyint_ty], [llvm_ptr_ty, llvm_i8_ty],
0068                                      [ImmArg<ArgIndex<1>>]>;
0069   def int_x86_atomic_btc : Intrinsic<[llvm_anyint_ty], [llvm_ptr_ty, llvm_i8_ty],
0070                                      [ImmArg<ArgIndex<1>>]>;
0071   def int_x86_atomic_btr : Intrinsic<[llvm_anyint_ty], [llvm_ptr_ty, llvm_i8_ty],
0072                                      [ImmArg<ArgIndex<1>>]>;
0073   def int_x86_atomic_bts_rm  : Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_anyint_ty],
0074                                          []>;
0075   def int_x86_atomic_btc_rm  : Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_anyint_ty],
0076                                          []>;
0077   def int_x86_atomic_btr_rm  : Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_anyint_ty],
0078                                          []>;
0079 
0080 
0081 }
0082 
0083 // Lock binary arith with CC.
0084 let TargetPrefix = "x86" in {
0085   def int_x86_atomic_add_cc  : Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_anyint_ty, llvm_i32_ty],
0086                                          [ImmArg<ArgIndex<2>>]>;
0087   def int_x86_atomic_sub_cc  : Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_anyint_ty, llvm_i32_ty],
0088                                          [ImmArg<ArgIndex<2>>]>;
0089   def int_x86_atomic_or_cc  : Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_anyint_ty, llvm_i32_ty],
0090                                          [ImmArg<ArgIndex<2>>]>;
0091   def int_x86_atomic_and_cc  : Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_anyint_ty, llvm_i32_ty],
0092                                          [ImmArg<ArgIndex<2>>]>;
0093   def int_x86_atomic_xor_cc  : Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_anyint_ty, llvm_i32_ty],
0094                                          [ImmArg<ArgIndex<2>>]>;
0095 }
0096 
0097 // Read Processor Register.
0098 let TargetPrefix = "x86" in {
0099   def int_x86_rdpru : ClangBuiltin<"__builtin_ia32_rdpru">,
0100               Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>;
0101 }
0102 
0103 //===----------------------------------------------------------------------===//
0104 // CET SS
0105 let TargetPrefix = "x86" in {
0106   def int_x86_incsspd : ClangBuiltin<"__builtin_ia32_incsspd">,
0107               Intrinsic<[], [llvm_i32_ty], []>;
0108   def int_x86_incsspq : ClangBuiltin<"__builtin_ia32_incsspq">,
0109               Intrinsic<[], [llvm_i64_ty], []>;
0110   def int_x86_rdsspd : ClangBuiltin<"__builtin_ia32_rdsspd">,
0111               Intrinsic<[llvm_i32_ty], [llvm_i32_ty], []>;
0112   def int_x86_rdsspq : ClangBuiltin<"__builtin_ia32_rdsspq">,
0113               Intrinsic<[llvm_i64_ty], [llvm_i64_ty], []>;
0114   def int_x86_saveprevssp : ClangBuiltin<"__builtin_ia32_saveprevssp">,
0115               Intrinsic<[], [], []>;
0116   def int_x86_rstorssp : ClangBuiltin<"__builtin_ia32_rstorssp">,
0117               Intrinsic<[], [llvm_ptr_ty], []>;
0118   def int_x86_wrssd : ClangBuiltin<"__builtin_ia32_wrssd">,
0119               Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], []>;
0120   def int_x86_wrssq : ClangBuiltin<"__builtin_ia32_wrssq">,
0121               Intrinsic<[], [llvm_i64_ty, llvm_ptr_ty], []>;
0122   def int_x86_wrussd : ClangBuiltin<"__builtin_ia32_wrussd">,
0123               Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], []>;
0124   def int_x86_wrussq : ClangBuiltin<"__builtin_ia32_wrussq">,
0125               Intrinsic<[], [llvm_i64_ty, llvm_ptr_ty], []>;
0126   def int_x86_setssbsy : ClangBuiltin<"__builtin_ia32_setssbsy">,
0127               Intrinsic<[], [], []>;
0128   def int_x86_clrssbsy : ClangBuiltin<"__builtin_ia32_clrssbsy">,
0129               Intrinsic<[], [llvm_ptr_ty], []>;
0130 }
0131 
0132 //===----------------------------------------------------------------------===//
0133 // SSE1
0134 
0135 // Arithmetic ops
0136 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0137   def int_x86_sse_rcp_ss : ClangBuiltin<"__builtin_ia32_rcpss">,
0138       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
0139                             [IntrNoMem]>;
0140   def int_x86_sse_rcp_ps : ClangBuiltin<"__builtin_ia32_rcpps">,
0141       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
0142                             [IntrNoMem]>;
0143   def int_x86_sse_rsqrt_ss : ClangBuiltin<"__builtin_ia32_rsqrtss">,
0144       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
0145                             [IntrNoMem]>;
0146   def int_x86_sse_rsqrt_ps : ClangBuiltin<"__builtin_ia32_rsqrtps">,
0147       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
0148                             [IntrNoMem]>;
0149   def int_x86_sse_min_ss : ClangBuiltin<"__builtin_ia32_minss">,
0150       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0151                              llvm_v4f32_ty], [IntrNoMem]>;
0152   def int_x86_sse_min_ps : ClangBuiltin<"__builtin_ia32_minps">,
0153       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0154                              llvm_v4f32_ty], [IntrNoMem]>;
0155   def int_x86_sse_max_ss : ClangBuiltin<"__builtin_ia32_maxss">,
0156       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0157                              llvm_v4f32_ty], [IntrNoMem]>;
0158   def int_x86_sse_max_ps : ClangBuiltin<"__builtin_ia32_maxps">,
0159       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0160                              llvm_v4f32_ty], [IntrNoMem]>;
0161 }
0162 
0163 // Comparison ops
0164 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0165   def int_x86_sse_cmp_ss : ClangBuiltin<"__builtin_ia32_cmpss">,
0166       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0167                              llvm_v4f32_ty, llvm_i8_ty],
0168                             [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0169   // NOTE: This comparison intrinsic is not used by clang as long as the
0170   //       distinction in signaling behaviour is not implemented.
0171   def int_x86_sse_cmp_ps :
0172       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0173                              llvm_v4f32_ty, llvm_i8_ty],
0174                             [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0175   def int_x86_sse_comieq_ss : ClangBuiltin<"__builtin_ia32_comieq">,
0176       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0177                              llvm_v4f32_ty], [IntrNoMem]>;
0178   def int_x86_sse_comilt_ss : ClangBuiltin<"__builtin_ia32_comilt">,
0179       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0180                              llvm_v4f32_ty], [IntrNoMem]>;
0181   def int_x86_sse_comile_ss : ClangBuiltin<"__builtin_ia32_comile">,
0182       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0183                              llvm_v4f32_ty], [IntrNoMem]>;
0184   def int_x86_sse_comigt_ss : ClangBuiltin<"__builtin_ia32_comigt">,
0185       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0186                              llvm_v4f32_ty], [IntrNoMem]>;
0187   def int_x86_sse_comige_ss : ClangBuiltin<"__builtin_ia32_comige">,
0188       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0189                              llvm_v4f32_ty], [IntrNoMem]>;
0190   def int_x86_sse_comineq_ss : ClangBuiltin<"__builtin_ia32_comineq">,
0191       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0192                              llvm_v4f32_ty], [IntrNoMem]>;
0193   def int_x86_sse_ucomieq_ss : ClangBuiltin<"__builtin_ia32_ucomieq">,
0194       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0195                              llvm_v4f32_ty], [IntrNoMem]>;
0196   def int_x86_sse_ucomilt_ss : ClangBuiltin<"__builtin_ia32_ucomilt">,
0197       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0198                              llvm_v4f32_ty], [IntrNoMem]>;
0199   def int_x86_sse_ucomile_ss : ClangBuiltin<"__builtin_ia32_ucomile">,
0200       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0201                              llvm_v4f32_ty], [IntrNoMem]>;
0202   def int_x86_sse_ucomigt_ss : ClangBuiltin<"__builtin_ia32_ucomigt">,
0203       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0204                              llvm_v4f32_ty], [IntrNoMem]>;
0205   def int_x86_sse_ucomige_ss : ClangBuiltin<"__builtin_ia32_ucomige">,
0206       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0207                              llvm_v4f32_ty], [IntrNoMem]>;
0208   def int_x86_sse_ucomineq_ss : ClangBuiltin<"__builtin_ia32_ucomineq">,
0209       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
0210                              llvm_v4f32_ty], [IntrNoMem]>;
0211 }
0212 
0213 
0214 // Conversion ops
0215 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0216   def int_x86_sse_cvtss2si : ClangBuiltin<"__builtin_ia32_cvtss2si">,
0217       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
0218   def int_x86_sse_cvtss2si64 : ClangBuiltin<"__builtin_ia32_cvtss2si64">,
0219       DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
0220   def int_x86_sse_cvttss2si : ClangBuiltin<"__builtin_ia32_cvttss2si">,
0221       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
0222   def int_x86_sse_cvttss2si64 : ClangBuiltin<"__builtin_ia32_cvttss2si64">,
0223       DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
0224 
0225   def int_x86_sse_cvtps2pi :
0226       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
0227   def int_x86_sse_cvttps2pi:
0228       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
0229   def int_x86_sse_cvtpi2ps :
0230       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0231                              llvm_x86mmx_ty], [IntrNoMem]>;
0232 }
0233 
0234 // Cacheability support ops
0235 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0236   def int_x86_sse_sfence : ClangBuiltin<"__builtin_ia32_sfence">,
0237               Intrinsic<[], [], []>;
0238 }
0239 
0240 // Control register.
0241 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0242   def int_x86_sse_stmxcsr :
0243               Intrinsic<[], [llvm_ptr_ty],
0244                          [IntrWriteMem, IntrArgMemOnly,
0245                          // This prevents reordering with ldmxcsr
0246                          IntrHasSideEffects]>;
0247   def int_x86_sse_ldmxcsr :
0248               Intrinsic<[], [llvm_ptr_ty],
0249                          // FIXME: LDMXCSR does not actually write to memory,
0250                          // but intrinsic properties are generated incorrectly
0251                          // for IntrReadMem+IntrHasSideEffects.
0252                         [/*IntrReadMem, IntrArgMemOnly,*/ IntrHasSideEffects]>;
0253 }
0254 
0255 // Misc.
0256 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0257   def int_x86_sse_movmsk_ps : ClangBuiltin<"__builtin_ia32_movmskps">,
0258       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
0259 }
0260 
0261 //===----------------------------------------------------------------------===//
0262 // SSE2
0263 
0264 // FP arithmetic ops
0265 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0266   def int_x86_sse2_min_sd : ClangBuiltin<"__builtin_ia32_minsd">,
0267       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0268                              llvm_v2f64_ty], [IntrNoMem]>;
0269   def int_x86_sse2_min_pd : ClangBuiltin<"__builtin_ia32_minpd">,
0270       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0271                              llvm_v2f64_ty], [IntrNoMem]>;
0272   def int_x86_sse2_max_sd : ClangBuiltin<"__builtin_ia32_maxsd">,
0273       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0274                              llvm_v2f64_ty], [IntrNoMem]>;
0275   def int_x86_sse2_max_pd : ClangBuiltin<"__builtin_ia32_maxpd">,
0276       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0277                              llvm_v2f64_ty], [IntrNoMem]>;
0278 }
0279 
0280 // FP comparison ops
0281 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0282   def int_x86_sse2_cmp_sd : ClangBuiltin<"__builtin_ia32_cmpsd">,
0283       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0284                              llvm_v2f64_ty, llvm_i8_ty],
0285                             [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0286   // NOTE: This comparison intrinsic is not used by clang as long as the
0287   //       distinction in signaling behaviour is not implemented.
0288   def int_x86_sse2_cmp_pd :
0289       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0290                              llvm_v2f64_ty, llvm_i8_ty],
0291                             [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0292   def int_x86_sse2_comieq_sd : ClangBuiltin<"__builtin_ia32_comisdeq">,
0293       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0294                              llvm_v2f64_ty], [IntrNoMem]>;
0295   def int_x86_sse2_comilt_sd : ClangBuiltin<"__builtin_ia32_comisdlt">,
0296       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0297                              llvm_v2f64_ty], [IntrNoMem]>;
0298   def int_x86_sse2_comile_sd : ClangBuiltin<"__builtin_ia32_comisdle">,
0299       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0300                              llvm_v2f64_ty], [IntrNoMem]>;
0301   def int_x86_sse2_comigt_sd : ClangBuiltin<"__builtin_ia32_comisdgt">,
0302       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0303                              llvm_v2f64_ty], [IntrNoMem]>;
0304   def int_x86_sse2_comige_sd : ClangBuiltin<"__builtin_ia32_comisdge">,
0305       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0306                              llvm_v2f64_ty], [IntrNoMem]>;
0307   def int_x86_sse2_comineq_sd : ClangBuiltin<"__builtin_ia32_comisdneq">,
0308       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0309                              llvm_v2f64_ty], [IntrNoMem]>;
0310   def int_x86_sse2_ucomieq_sd : ClangBuiltin<"__builtin_ia32_ucomisdeq">,
0311       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0312                              llvm_v2f64_ty], [IntrNoMem]>;
0313   def int_x86_sse2_ucomilt_sd : ClangBuiltin<"__builtin_ia32_ucomisdlt">,
0314       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0315                              llvm_v2f64_ty], [IntrNoMem]>;
0316   def int_x86_sse2_ucomile_sd : ClangBuiltin<"__builtin_ia32_ucomisdle">,
0317       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0318                              llvm_v2f64_ty], [IntrNoMem]>;
0319   def int_x86_sse2_ucomigt_sd : ClangBuiltin<"__builtin_ia32_ucomisdgt">,
0320       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0321                              llvm_v2f64_ty], [IntrNoMem]>;
0322   def int_x86_sse2_ucomige_sd : ClangBuiltin<"__builtin_ia32_ucomisdge">,
0323       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0324                              llvm_v2f64_ty], [IntrNoMem]>;
0325   def int_x86_sse2_ucomineq_sd : ClangBuiltin<"__builtin_ia32_ucomisdneq">,
0326       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
0327                              llvm_v2f64_ty], [IntrNoMem]>;
0328 }
0329 
0330 // Integer arithmetic ops.
0331 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0332   def int_x86_sse2_pmulhu_w : ClangBuiltin<"__builtin_ia32_pmulhuw128">,
0333       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0334                              llvm_v8i16_ty], [IntrNoMem, Commutative]>;
0335   def int_x86_sse2_pmulh_w : ClangBuiltin<"__builtin_ia32_pmulhw128">,
0336       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0337                              llvm_v8i16_ty], [IntrNoMem, Commutative]>;
0338   def int_x86_sse2_pmadd_wd : ClangBuiltin<"__builtin_ia32_pmaddwd128">,
0339       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty,
0340                              llvm_v8i16_ty], [IntrNoMem, Commutative]>;
0341   def int_x86_sse2_pavg_b : ClangBuiltin<"__builtin_ia32_pavgb128">,
0342       DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
0343                              llvm_v16i8_ty], [IntrNoMem, Commutative]>;
0344   def int_x86_sse2_pavg_w : ClangBuiltin<"__builtin_ia32_pavgw128">,
0345       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0346                              llvm_v8i16_ty], [IntrNoMem, Commutative]>;
0347   def int_x86_sse2_psad_bw : ClangBuiltin<"__builtin_ia32_psadbw128">,
0348       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty,
0349                              llvm_v16i8_ty], [IntrNoMem, Commutative]>;
0350 }
0351 
0352 // Integer shift ops.
0353 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0354   def int_x86_sse2_psll_w : ClangBuiltin<"__builtin_ia32_psllw128">,
0355       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0356                              llvm_v8i16_ty], [IntrNoMem]>;
0357   def int_x86_sse2_psll_d : ClangBuiltin<"__builtin_ia32_pslld128">,
0358       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
0359                              llvm_v4i32_ty], [IntrNoMem]>;
0360   def int_x86_sse2_psll_q : ClangBuiltin<"__builtin_ia32_psllq128">,
0361       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
0362                              llvm_v2i64_ty], [IntrNoMem]>;
0363   def int_x86_sse2_psrl_w : ClangBuiltin<"__builtin_ia32_psrlw128">,
0364       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0365                              llvm_v8i16_ty], [IntrNoMem]>;
0366   def int_x86_sse2_psrl_d : ClangBuiltin<"__builtin_ia32_psrld128">,
0367       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
0368                              llvm_v4i32_ty], [IntrNoMem]>;
0369   def int_x86_sse2_psrl_q : ClangBuiltin<"__builtin_ia32_psrlq128">,
0370       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
0371                              llvm_v2i64_ty], [IntrNoMem]>;
0372   def int_x86_sse2_psra_w : ClangBuiltin<"__builtin_ia32_psraw128">,
0373       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0374                              llvm_v8i16_ty], [IntrNoMem]>;
0375   def int_x86_sse2_psra_d : ClangBuiltin<"__builtin_ia32_psrad128">,
0376       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
0377                              llvm_v4i32_ty], [IntrNoMem]>;
0378 
0379   // Oddly these don't require an immediate due to a gcc compatibility issue.
0380   def int_x86_sse2_pslli_w : ClangBuiltin<"__builtin_ia32_psllwi128">,
0381       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0382                              llvm_i32_ty], [IntrNoMem]>;
0383   def int_x86_sse2_pslli_d : ClangBuiltin<"__builtin_ia32_pslldi128">,
0384       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
0385                              llvm_i32_ty], [IntrNoMem]>;
0386   def int_x86_sse2_pslli_q : ClangBuiltin<"__builtin_ia32_psllqi128">,
0387       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
0388                              llvm_i32_ty], [IntrNoMem]>;
0389   def int_x86_sse2_psrli_w : ClangBuiltin<"__builtin_ia32_psrlwi128">,
0390       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0391                              llvm_i32_ty], [IntrNoMem]>;
0392   def int_x86_sse2_psrli_d : ClangBuiltin<"__builtin_ia32_psrldi128">,
0393       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
0394                              llvm_i32_ty], [IntrNoMem]>;
0395   def int_x86_sse2_psrli_q : ClangBuiltin<"__builtin_ia32_psrlqi128">,
0396       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
0397                              llvm_i32_ty], [IntrNoMem]>;
0398   def int_x86_sse2_psrai_w : ClangBuiltin<"__builtin_ia32_psrawi128">,
0399       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0400                              llvm_i32_ty], [IntrNoMem]>;
0401   def int_x86_sse2_psrai_d : ClangBuiltin<"__builtin_ia32_psradi128">,
0402       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
0403                              llvm_i32_ty], [IntrNoMem]>;
0404 }
0405 
0406 // Conversion ops
0407 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0408   def int_x86_sse2_cvtpd2dq : ClangBuiltin<"__builtin_ia32_cvtpd2dq">,
0409       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0410   def int_x86_sse2_cvttpd2dq : ClangBuiltin<"__builtin_ia32_cvttpd2dq">,
0411       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0412   def int_x86_sse2_cvtpd2ps : ClangBuiltin<"__builtin_ia32_cvtpd2ps">,
0413       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0414   def int_x86_sse2_cvtps2dq : ClangBuiltin<"__builtin_ia32_cvtps2dq">,
0415       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
0416   def int_x86_sse2_cvttps2dq : ClangBuiltin<"__builtin_ia32_cvttps2dq">,
0417       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
0418   def int_x86_sse2_cvtsd2si : ClangBuiltin<"__builtin_ia32_cvtsd2si">,
0419       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0420   def int_x86_sse2_cvtsd2si64 : ClangBuiltin<"__builtin_ia32_cvtsd2si64">,
0421       DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0422   def int_x86_sse2_cvttsd2si : ClangBuiltin<"__builtin_ia32_cvttsd2si">,
0423       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0424   def int_x86_sse2_cvttsd2si64 : ClangBuiltin<"__builtin_ia32_cvttsd2si64">,
0425       DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0426   def int_x86_sse2_cvtsd2ss : ClangBuiltin<"__builtin_ia32_cvtsd2ss">,
0427       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0428                              llvm_v2f64_ty], [IntrNoMem]>;
0429   def int_x86_sse_cvtpd2pi :
0430       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0431   def int_x86_sse_cvttpd2pi:
0432       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0433   def int_x86_sse_cvtpi2pd :
0434       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
0435 }
0436 
0437 // Misc.
0438 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0439   def int_x86_sse2_packsswb_128 : ClangBuiltin<"__builtin_ia32_packsswb128">,
0440       DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
0441                              llvm_v8i16_ty], [IntrNoMem]>;
0442   def int_x86_sse2_packssdw_128 : ClangBuiltin<"__builtin_ia32_packssdw128">,
0443       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty,
0444                              llvm_v4i32_ty], [IntrNoMem]>;
0445   def int_x86_sse2_packuswb_128 : ClangBuiltin<"__builtin_ia32_packuswb128">,
0446       DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
0447                              llvm_v8i16_ty], [IntrNoMem]>;
0448   def int_x86_sse2_movmsk_pd : ClangBuiltin<"__builtin_ia32_movmskpd">,
0449       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
0450   def int_x86_sse2_pmovmskb_128 : ClangBuiltin<"__builtin_ia32_pmovmskb128">,
0451       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
0452   def int_x86_sse2_maskmov_dqu : ClangBuiltin<"__builtin_ia32_maskmovdqu">,
0453               Intrinsic<[], [llvm_v16i8_ty,
0454                          llvm_v16i8_ty, llvm_ptr_ty], []>;
0455   def int_x86_sse2_clflush : ClangBuiltin<"__builtin_ia32_clflush">,
0456               Intrinsic<[], [llvm_ptr_ty], []>;
0457   def int_x86_sse2_lfence : ClangBuiltin<"__builtin_ia32_lfence">,
0458               Intrinsic<[], [], []>;
0459   def int_x86_sse2_mfence : ClangBuiltin<"__builtin_ia32_mfence">,
0460               Intrinsic<[], [], []>;
0461   def int_x86_sse2_pause : ClangBuiltin<"__builtin_ia32_pause">,
0462               Intrinsic<[], [], []>;
0463 }
0464 
0465 //===----------------------------------------------------------------------===//
0466 // SSE3
0467 
0468 // Addition / subtraction ops.
0469 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0470   def int_x86_sse3_addsub_ps : ClangBuiltin<"__builtin_ia32_addsubps">,
0471       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0472                              llvm_v4f32_ty], [IntrNoMem]>;
0473   def int_x86_sse3_addsub_pd : ClangBuiltin<"__builtin_ia32_addsubpd">,
0474       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0475                              llvm_v2f64_ty], [IntrNoMem]>;
0476 }
0477 
0478 // Horizontal ops.
0479 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0480   def int_x86_sse3_hadd_ps : ClangBuiltin<"__builtin_ia32_haddps">,
0481       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0482                              llvm_v4f32_ty], [IntrNoMem]>;
0483   def int_x86_sse3_hadd_pd : ClangBuiltin<"__builtin_ia32_haddpd">,
0484       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0485                              llvm_v2f64_ty], [IntrNoMem]>;
0486   def int_x86_sse3_hsub_ps : ClangBuiltin<"__builtin_ia32_hsubps">,
0487       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0488                              llvm_v4f32_ty], [IntrNoMem]>;
0489   def int_x86_sse3_hsub_pd : ClangBuiltin<"__builtin_ia32_hsubpd">,
0490       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0491                              llvm_v2f64_ty], [IntrNoMem]>;
0492 }
0493 
0494 // Specialized unaligned load.
0495 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0496   def int_x86_sse3_ldu_dq : ClangBuiltin<"__builtin_ia32_lddqu">,
0497       DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
0498 }
0499 
0500 // Thread synchronization ops.
0501 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0502   def int_x86_sse3_monitor : ClangBuiltin<"__builtin_ia32_monitor">,
0503               Intrinsic<[], [llvm_ptr_ty,
0504                          llvm_i32_ty, llvm_i32_ty], []>;
0505   def int_x86_sse3_mwait : ClangBuiltin<"__builtin_ia32_mwait">,
0506               Intrinsic<[], [llvm_i32_ty,
0507                          llvm_i32_ty], []>;
0508 }
0509 
0510 //===----------------------------------------------------------------------===//
0511 // SSSE3
0512 
0513 // Horizontal arithmetic ops
0514 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0515   def int_x86_ssse3_phadd_w         :
0516       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0517                              llvm_x86mmx_ty], [IntrNoMem]>;
0518   def int_x86_ssse3_phadd_w_128     : ClangBuiltin<"__builtin_ia32_phaddw128">,
0519       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0520                              llvm_v8i16_ty], [IntrNoMem]>;
0521 
0522   def int_x86_ssse3_phadd_d         :
0523       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0524                              llvm_x86mmx_ty], [IntrNoMem]>;
0525   def int_x86_ssse3_phadd_d_128     : ClangBuiltin<"__builtin_ia32_phaddd128">,
0526       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
0527                              llvm_v4i32_ty], [IntrNoMem]>;
0528 
0529   def int_x86_ssse3_phadd_sw        :
0530       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0531                              llvm_x86mmx_ty], [IntrNoMem]>;
0532   def int_x86_ssse3_phadd_sw_128    : ClangBuiltin<"__builtin_ia32_phaddsw128">,
0533       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0534                              llvm_v8i16_ty], [IntrNoMem]>;
0535 
0536   def int_x86_ssse3_phsub_w         :
0537       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0538                              llvm_x86mmx_ty], [IntrNoMem]>;
0539   def int_x86_ssse3_phsub_w_128     : ClangBuiltin<"__builtin_ia32_phsubw128">,
0540       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0541                              llvm_v8i16_ty], [IntrNoMem]>;
0542 
0543   def int_x86_ssse3_phsub_d         :
0544       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0545                              llvm_x86mmx_ty], [IntrNoMem]>;
0546   def int_x86_ssse3_phsub_d_128     : ClangBuiltin<"__builtin_ia32_phsubd128">,
0547       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
0548                              llvm_v4i32_ty], [IntrNoMem]>;
0549 
0550   def int_x86_ssse3_phsub_sw        :
0551       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0552                              llvm_x86mmx_ty], [IntrNoMem]>;
0553   def int_x86_ssse3_phsub_sw_128    : ClangBuiltin<"__builtin_ia32_phsubsw128">,
0554       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0555                              llvm_v8i16_ty], [IntrNoMem]>;
0556 
0557   def int_x86_ssse3_pmadd_ub_sw     :
0558       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0559                              llvm_x86mmx_ty], [IntrNoMem]>;
0560   def int_x86_ssse3_pmadd_ub_sw_128 : ClangBuiltin<"__builtin_ia32_pmaddubsw128">,
0561       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty,
0562                              llvm_v16i8_ty], [IntrNoMem]>;
0563 }
0564 
0565 // Packed multiply high with round and scale
0566 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0567   def int_x86_ssse3_pmul_hr_sw      :
0568       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0569                              llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
0570   def int_x86_ssse3_pmul_hr_sw_128  : ClangBuiltin<"__builtin_ia32_pmulhrsw128">,
0571       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0572                              llvm_v8i16_ty], [IntrNoMem, Commutative]>;
0573 }
0574 
0575 // Shuffle ops
0576 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0577   def int_x86_ssse3_pshuf_b         :
0578       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0579                              llvm_x86mmx_ty], [IntrNoMem]>;
0580   def int_x86_ssse3_pshuf_b_128     : ClangBuiltin<"__builtin_ia32_pshufb128">,
0581       DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
0582                              llvm_v16i8_ty], [IntrNoMem]>;
0583   def int_x86_sse_pshuf_w           :
0584       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty],
0585                              [IntrNoMem, ImmArg<ArgIndex<1>>]>;
0586 }
0587 
0588 // Sign ops
0589 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0590   def int_x86_ssse3_psign_b         :
0591       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0592                              llvm_x86mmx_ty], [IntrNoMem]>;
0593   def int_x86_ssse3_psign_b_128     : ClangBuiltin<"__builtin_ia32_psignb128">,
0594       DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
0595                              llvm_v16i8_ty], [IntrNoMem]>;
0596 
0597   def int_x86_ssse3_psign_w         :
0598       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0599                              llvm_x86mmx_ty], [IntrNoMem]>;
0600   def int_x86_ssse3_psign_w_128     : ClangBuiltin<"__builtin_ia32_psignw128">,
0601       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
0602                              llvm_v8i16_ty], [IntrNoMem]>;
0603 
0604   def int_x86_ssse3_psign_d         :
0605       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
0606                              llvm_x86mmx_ty], [IntrNoMem]>;
0607   def int_x86_ssse3_psign_d_128     : ClangBuiltin<"__builtin_ia32_psignd128">,
0608       DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
0609                              llvm_v4i32_ty], [IntrNoMem]>;
0610 }
0611 
0612 // Absolute value ops
0613 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0614   def int_x86_ssse3_pabs_b     :
0615       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
0616 
0617   def int_x86_ssse3_pabs_w     :
0618       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
0619 
0620   def int_x86_ssse3_pabs_d     :
0621       DefaultAttrsIntrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
0622 }
0623 
0624 //===----------------------------------------------------------------------===//
0625 // SSE4.1
0626 
0627 // FP rounding ops
0628 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0629   def int_x86_sse41_round_ss        : ClangBuiltin<"__builtin_ia32_roundss">,
0630       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
0631                              llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0632   def int_x86_sse41_round_ps        : ClangBuiltin<"__builtin_ia32_roundps">,
0633       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
0634                              llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>;
0635   def int_x86_sse41_round_sd        : ClangBuiltin<"__builtin_ia32_roundsd">,
0636       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
0637                              llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0638   def int_x86_sse41_round_pd        : ClangBuiltin<"__builtin_ia32_roundpd">,
0639       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
0640                              llvm_i32_ty], [IntrNoMem, ImmArg<ArgIndex<1>>]>;
0641 }
0642 
0643 // Vector min element
0644 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0645   def int_x86_sse41_phminposuw     : ClangBuiltin<"__builtin_ia32_phminposuw128">,
0646       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
0647 }
0648 
0649 // Advanced Encryption Standard (AES) Instructions
0650 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0651   def int_x86_aesni_aesimc          : ClangBuiltin<"__builtin_ia32_aesimc128">,
0652       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
0653 
0654   def int_x86_aesni_aesenc          : ClangBuiltin<"__builtin_ia32_aesenc128">,
0655       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
0656                             [IntrNoMem]>;
0657   def int_x86_aesni_aesenc_256      : ClangBuiltin<"__builtin_ia32_aesenc256">,
0658       DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
0659                             [IntrNoMem]>;
0660   def int_x86_aesni_aesenc_512      : ClangBuiltin<"__builtin_ia32_aesenc512">,
0661       DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
0662                             [IntrNoMem]>;
0663 
0664   def int_x86_aesni_aesenclast : ClangBuiltin<"__builtin_ia32_aesenclast128">,
0665       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
0666                             [IntrNoMem]>;
0667   def int_x86_aesni_aesenclast_256 :
0668     ClangBuiltin<"__builtin_ia32_aesenclast256">,
0669     DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
0670                           [IntrNoMem]>;
0671   def int_x86_aesni_aesenclast_512 :
0672     ClangBuiltin<"__builtin_ia32_aesenclast512">,
0673     DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
0674                           [IntrNoMem]>;
0675 
0676   def int_x86_aesni_aesdec          : ClangBuiltin<"__builtin_ia32_aesdec128">,
0677       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
0678                             [IntrNoMem]>;
0679   def int_x86_aesni_aesdec_256      : ClangBuiltin<"__builtin_ia32_aesdec256">,
0680       DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
0681                             [IntrNoMem]>;
0682   def int_x86_aesni_aesdec_512      : ClangBuiltin<"__builtin_ia32_aesdec512">,
0683       DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
0684                             [IntrNoMem]>;
0685 
0686   def int_x86_aesni_aesdeclast : ClangBuiltin<"__builtin_ia32_aesdeclast128">,
0687       DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
0688                             [IntrNoMem]>;
0689   def int_x86_aesni_aesdeclast_256 :
0690     ClangBuiltin<"__builtin_ia32_aesdeclast256">,
0691     DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
0692                           [IntrNoMem]>;
0693   def int_x86_aesni_aesdeclast_512 :
0694     ClangBuiltin<"__builtin_ia32_aesdeclast512">,
0695     DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
0696                           [IntrNoMem]>;
0697 
0698   def int_x86_aesni_aeskeygenassist :
0699     ClangBuiltin<"__builtin_ia32_aeskeygenassist128">,
0700     DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
0701                           [IntrNoMem, ImmArg<ArgIndex<1>>]>;
0702 }
0703 
0704 // PCLMUL instructions
0705 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
0706   def int_x86_pclmulqdq : ClangBuiltin<"__builtin_ia32_pclmulqdq128">,
0707       DefaultAttrsIntrinsic<[llvm_v2i64_ty],
0708                             [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
0709                             [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0710   def int_x86_pclmulqdq_256 : ClangBuiltin<"__builtin_ia32_pclmulqdq256">,
0711           DefaultAttrsIntrinsic<[llvm_v4i64_ty],
0712                                 [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
0713                                 [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0714   def int_x86_pclmulqdq_512 : ClangBuiltin<"__builtin_ia32_pclmulqdq512">,
0715           DefaultAttrsIntrinsic<[llvm_v8i64_ty],
0716                                 [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
0717                                 [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0718 }
0719 
0720 // Vector pack
0721 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0722   def int_x86_sse41_packusdw : ClangBuiltin<"__builtin_ia32_packusdw128">,
0723       DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
0724                             [IntrNoMem]>;
0725 }
0726 
0727 // Vector insert
0728 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0729   def int_x86_sse41_insertps       : ClangBuiltin<"__builtin_ia32_insertps128">,
0730       DefaultAttrsIntrinsic<[llvm_v4f32_ty],
0731                             [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
0732                             [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0733 }
0734 
0735 // Vector blend
0736 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0737   def int_x86_sse41_pblendvb       : ClangBuiltin<"__builtin_ia32_pblendvb128">,
0738       DefaultAttrsIntrinsic<[llvm_v16i8_ty],
0739                             [llvm_v16i8_ty, llvm_v16i8_ty,llvm_v16i8_ty],
0740                             [IntrNoMem]>;
0741   def int_x86_sse41_blendvpd       : ClangBuiltin<"__builtin_ia32_blendvpd">,
0742       DefaultAttrsIntrinsic<[llvm_v2f64_ty],
0743                             [llvm_v2f64_ty, llvm_v2f64_ty,llvm_v2f64_ty],
0744                             [IntrNoMem]>;
0745   def int_x86_sse41_blendvps       : ClangBuiltin<"__builtin_ia32_blendvps">,
0746       DefaultAttrsIntrinsic<[llvm_v4f32_ty],
0747                             [llvm_v4f32_ty, llvm_v4f32_ty,llvm_v4f32_ty],
0748                             [IntrNoMem]>;
0749 }
0750 
0751 // Vector dot product
0752 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0753   def int_x86_sse41_dppd            : ClangBuiltin<"__builtin_ia32_dppd">,
0754       DefaultAttrsIntrinsic<[llvm_v2f64_ty],
0755                             [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
0756                             [IntrNoMem, Commutative, ImmArg<ArgIndex<2>>]>;
0757   def int_x86_sse41_dpps            : ClangBuiltin<"__builtin_ia32_dpps">,
0758       DefaultAttrsIntrinsic<[llvm_v4f32_ty],
0759                             [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
0760                             [IntrNoMem, Commutative, ImmArg<ArgIndex<2>>]>;
0761 }
0762 
0763 // Vector sum of absolute differences
0764 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0765   def int_x86_sse41_mpsadbw         : ClangBuiltin<"__builtin_ia32_mpsadbw128">,
0766       DefaultAttrsIntrinsic<[llvm_v8i16_ty],
0767                             [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
0768                             [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0769 }
0770 
0771 // Test instruction with bitwise comparison.
0772 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
0773   def int_x86_sse41_ptestz          : ClangBuiltin<"__builtin_ia32_ptestz128">,
0774       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
0775                             [IntrNoMem]>;
0776   def int_x86_sse41_ptestc          : ClangBuiltin<"__builtin_ia32_ptestc128">,
0777       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
0778                             [IntrNoMem]>;
0779   def int_x86_sse41_ptestnzc        : ClangBuiltin<"__builtin_ia32_ptestnzc128">,
0780       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
0781                             [IntrNoMem]>;
0782 }
0783 
0784 //===----------------------------------------------------------------------===//
0785 // SSE4.2
0786 
0787 // Miscellaneous
0788 // CRC Instruction
0789 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
0790   def int_x86_sse42_crc32_32_8       : ClangBuiltin<"__builtin_ia32_crc32qi">,
0791       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i8_ty],
0792                             [IntrNoMem]>;
0793   def int_x86_sse42_crc32_32_16      : ClangBuiltin<"__builtin_ia32_crc32hi">,
0794       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i16_ty],
0795                             [IntrNoMem]>;
0796   def int_x86_sse42_crc32_32_32      : ClangBuiltin<"__builtin_ia32_crc32si">,
0797       DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
0798                             [IntrNoMem]>;
0799   def int_x86_sse42_crc32_64_64      : ClangBuiltin<"__builtin_ia32_crc32di">,
0800       DefaultAttrsIntrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
0801                             [IntrNoMem]>;
0802 }
0803 
0804 // String/text processing ops.
0805 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
0806   def int_x86_sse42_pcmpistrm128  : ClangBuiltin<"__builtin_ia32_pcmpistrm128">,
0807     DefaultAttrsIntrinsic<[llvm_v16i8_ty],
0808         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
0809         [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0810   def int_x86_sse42_pcmpistri128  : ClangBuiltin<"__builtin_ia32_pcmpistri128">,
0811     DefaultAttrsIntrinsic<[llvm_i32_ty],
0812         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
0813         [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0814   def int_x86_sse42_pcmpistria128 : ClangBuiltin<"__builtin_ia32_pcmpistria128">,
0815     DefaultAttrsIntrinsic<[llvm_i32_ty],
0816         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
0817         [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0818   def int_x86_sse42_pcmpistric128 : ClangBuiltin<"__builtin_ia32_pcmpistric128">,
0819     DefaultAttrsIntrinsic<[llvm_i32_ty],
0820         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
0821         [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0822   def int_x86_sse42_pcmpistrio128 : ClangBuiltin<"__builtin_ia32_pcmpistrio128">,
0823     DefaultAttrsIntrinsic<[llvm_i32_ty],
0824         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
0825         [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0826   def int_x86_sse42_pcmpistris128 : ClangBuiltin<"__builtin_ia32_pcmpistris128">,
0827     DefaultAttrsIntrinsic<[llvm_i32_ty],
0828         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
0829         [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0830   def int_x86_sse42_pcmpistriz128 : ClangBuiltin<"__builtin_ia32_pcmpistriz128">,
0831     DefaultAttrsIntrinsic<[llvm_i32_ty],
0832         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
0833         [IntrNoMem, ImmArg<ArgIndex<2>>]>;
0834   def int_x86_sse42_pcmpestrm128  : ClangBuiltin<"__builtin_ia32_pcmpestrm128">,
0835     DefaultAttrsIntrinsic<[llvm_v16i8_ty],
0836         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
0837          llvm_i8_ty],
0838         [IntrNoMem, ImmArg<ArgIndex<4>>]>;
0839   def int_x86_sse42_pcmpestri128  : ClangBuiltin<"__builtin_ia32_pcmpestri128">,
0840     DefaultAttrsIntrinsic<[llvm_i32_ty],
0841         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
0842          llvm_i8_ty],
0843         [IntrNoMem, ImmArg<ArgIndex<4>>]>;
0844   def int_x86_sse42_pcmpestria128 : ClangBuiltin<"__builtin_ia32_pcmpestria128">,
0845     DefaultAttrsIntrinsic<[llvm_i32_ty],
0846         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
0847          llvm_i8_ty],
0848         [IntrNoMem, ImmArg<ArgIndex<4>>]>;
0849   def int_x86_sse42_pcmpestric128 : ClangBuiltin<"__builtin_ia32_pcmpestric128">,
0850     DefaultAttrsIntrinsic<[llvm_i32_ty],
0851         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
0852          llvm_i8_ty],
0853         [IntrNoMem, ImmArg<ArgIndex<4>>]>;
0854   def int_x86_sse42_pcmpestrio128 : ClangBuiltin<"__builtin_ia32_pcmpestrio128">,
0855     DefaultAttrsIntrinsic<[llvm_i32_ty],
0856         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
0857          llvm_i8_ty],
0858         [IntrNoMem, ImmArg<ArgIndex<4>>]>;
0859   def int_x86_sse42_pcmpestris128 : ClangBuiltin<"__builtin_ia32_pcmpestris128">,
0860     DefaultAttrsIntrinsic<[llvm_i32_ty],
0861         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
0862          llvm_i8_ty],
0863         [IntrNoMem, ImmArg<ArgIndex<4>>]>;
0864   def int_x86_sse42_pcmpestriz128 : ClangBuiltin<"__builtin_ia32_pcmpestriz128">,
0865     DefaultAttrsIntrinsic<[llvm_i32_ty],
0866         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
0867          llvm_i8_ty],
0868         [IntrNoMem, ImmArg<ArgIndex<4>>]>;
0869 }
0870 
0871 //===----------------------------------------------------------------------===//
0872 // SSE4A
0873 
0874 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0875   def int_x86_sse4a_extrqi : ClangBuiltin<"__builtin_ia32_extrqi">,
0876     DefaultAttrsIntrinsic<[llvm_v2i64_ty],
0877                           [llvm_v2i64_ty, llvm_i8_ty, llvm_i8_ty],
0878                           [IntrNoMem, ImmArg<ArgIndex<1>>,
0879                            ImmArg<ArgIndex<2>>]>;
0880   def int_x86_sse4a_extrq  : ClangBuiltin<"__builtin_ia32_extrq">,
0881     DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty],
0882                           [IntrNoMem]>;
0883 
0884   def int_x86_sse4a_insertqi : ClangBuiltin<"__builtin_ia32_insertqi">,
0885     DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
0886                                             llvm_i8_ty, llvm_i8_ty],
0887                           [IntrNoMem, ImmArg<ArgIndex<2>>,
0888                            ImmArg<ArgIndex<3>>]>;
0889   def int_x86_sse4a_insertq  : ClangBuiltin<"__builtin_ia32_insertq">,
0890     DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
0891                           [IntrNoMem]>;
0892 }
0893 
0894 //===----------------------------------------------------------------------===//
0895 // AVX
0896 
0897 // Arithmetic ops
0898 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0899   def int_x86_avx_addsub_pd_256 : ClangBuiltin<"__builtin_ia32_addsubpd256">,
0900       DefaultAttrsIntrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty],
0901                             [IntrNoMem]>;
0902   def int_x86_avx_addsub_ps_256 : ClangBuiltin<"__builtin_ia32_addsubps256">,
0903       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty],
0904                             [IntrNoMem]>;
0905   def int_x86_avx_max_pd_256 : ClangBuiltin<"__builtin_ia32_maxpd256">,
0906       DefaultAttrsIntrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty],
0907                             [IntrNoMem]>;
0908   def int_x86_avx_max_ps_256 : ClangBuiltin<"__builtin_ia32_maxps256">,
0909       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty],
0910                             [IntrNoMem]>;
0911   def int_x86_avx_min_pd_256 : ClangBuiltin<"__builtin_ia32_minpd256">,
0912       DefaultAttrsIntrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty],
0913                             [IntrNoMem]>;
0914   def int_x86_avx_min_ps_256 : ClangBuiltin<"__builtin_ia32_minps256">,
0915       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty],
0916                             [IntrNoMem]>;
0917 
0918   def int_x86_avx_rsqrt_ps_256 : ClangBuiltin<"__builtin_ia32_rsqrtps256">,
0919       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
0920 
0921   def int_x86_avx_rcp_ps_256 : ClangBuiltin<"__builtin_ia32_rcpps256">,
0922       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
0923 
0924   def int_x86_avx_round_pd_256 : ClangBuiltin<"__builtin_ia32_roundpd256">,
0925       DefaultAttrsIntrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty],
0926                             [IntrNoMem, ImmArg<ArgIndex<1>>]>;
0927   def int_x86_avx_round_ps_256 : ClangBuiltin<"__builtin_ia32_roundps256">,
0928       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty],
0929                             [IntrNoMem, ImmArg<ArgIndex<1>>]>;
0930 }
0931 
0932 // Horizontal ops
0933 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0934   def int_x86_avx_hadd_pd_256 : ClangBuiltin<"__builtin_ia32_haddpd256">,
0935       DefaultAttrsIntrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty],
0936                             [IntrNoMem]>;
0937   def int_x86_avx_hsub_ps_256 : ClangBuiltin<"__builtin_ia32_hsubps256">,
0938       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty],
0939                             [IntrNoMem]>;
0940   def int_x86_avx_hsub_pd_256 : ClangBuiltin<"__builtin_ia32_hsubpd256">,
0941       DefaultAttrsIntrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty],
0942                             [IntrNoMem]>;
0943   def int_x86_avx_hadd_ps_256 : ClangBuiltin<"__builtin_ia32_haddps256">,
0944       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty],
0945                             [IntrNoMem]>;
0946 }
0947 
0948 // Vector permutation
0949 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
0950   def int_x86_avx_vpermilvar_pd : ClangBuiltin<"__builtin_ia32_vpermilvarpd">,
0951       DefaultAttrsIntrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2i64_ty],
0952                             [IntrNoMem]>;
0953   def int_x86_avx_vpermilvar_ps : ClangBuiltin<"__builtin_ia32_vpermilvarps">,
0954       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4i32_ty],
0955                             [IntrNoMem]>;
0956 
0957   def int_x86_avx_vpermilvar_pd_256 :
0958         ClangBuiltin<"__builtin_ia32_vpermilvarpd256">,
0959         DefaultAttrsIntrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4i64_ty],
0960                               [IntrNoMem]>;
0961   def int_x86_avx_vpermilvar_ps_256 :
0962         ClangBuiltin<"__builtin_ia32_vpermilvarps256">,
0963         DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty],
0964                               [IntrNoMem]>;
0965 
0966   def int_x86_avx512_vpermi2var_d_128 :
0967        ClangBuiltin<"__builtin_ia32_vpermi2vard128">,
0968        DefaultAttrsIntrinsic<[llvm_v4i32_ty],
0969                              [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
0970                              [IntrNoMem]>;
0971 
0972   def int_x86_avx512_vpermi2var_d_256 :
0973         ClangBuiltin<"__builtin_ia32_vpermi2vard256">,
0974         DefaultAttrsIntrinsic<[llvm_v8i32_ty],
0975                               [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty],
0976                               [IntrNoMem]>;
0977 
0978   def int_x86_avx512_vpermi2var_d_512 :
0979         ClangBuiltin<"__builtin_ia32_vpermi2vard512">,
0980         DefaultAttrsIntrinsic<[llvm_v16i32_ty],
0981                               [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
0982                               [IntrNoMem]>;
0983 
0984   def int_x86_avx512_vpermi2var_hi_128 :
0985         ClangBuiltin<"__builtin_ia32_vpermi2varhi128">,
0986         DefaultAttrsIntrinsic<[llvm_v8i16_ty],
0987                               [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
0988                               [IntrNoMem]>;
0989 
0990   def int_x86_avx512_vpermi2var_hi_256 :
0991         ClangBuiltin<"__builtin_ia32_vpermi2varhi256">,
0992         DefaultAttrsIntrinsic<[llvm_v16i16_ty],
0993                               [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty],
0994                               [IntrNoMem]>;
0995 
0996   def int_x86_avx512_vpermi2var_hi_512 :
0997         ClangBuiltin<"__builtin_ia32_vpermi2varhi512">,
0998         DefaultAttrsIntrinsic<[llvm_v32i16_ty],
0999                               [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
1092 let 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
1140 let 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
1152 let 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
1160 let 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
1172 let 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
1186 let 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
1264 let 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
1272 let 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
1280 let 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
1286 let 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
1302 let 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
1320 let 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.
1336 let 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.
1358 let 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.
1497 let 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
1513 let 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
1538 let 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
1551 let 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
1561 let 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
1569 let 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
1579 let 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
1595 let 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
1613 let 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
1706 let 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.
1777 let 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 
1791 let 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
1867 let 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 
2045 let 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
2226 let 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.
2255 let 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.
2261 let 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.
2380 let 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
2438 let 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.
2477 let 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.
2490 let 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
2512 let 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.
2535 let 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 
2563 let 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 
2593 let 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
2614 let 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
2627 let 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
2660 let 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
2670 let 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 
2679 let 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 
2707 let 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 
2721 let 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 
2735 let 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 
2757 let 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
2772 let 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
2814 let 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.
2890 let 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
2906 let 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>>]>;
3285 def 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>>]>;
3290 def 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>>]>;
3295 def 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>>]>;
3301 def 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>>]>;
3306 def 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>>]>;
3311 def 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
3320 let 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
3342 let 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
3772 let 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
3812 let 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.
4052 let 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
4290 let 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
4314 let 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
4329 let 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
4343 let 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
4864 let 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
4908 let 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.
4936 let 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
4982 let 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
5524 let 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
5625 let 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
5651 let TargetPrefix = "x86" in {
5652 def int_x86_vsha512msg1 : ClangBuiltin<"__builtin_ia32_vsha512msg1">,
5653     DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v2i64_ty],
5654                           [IntrNoMem]>;
5655 def int_x86_vsha512msg2 : ClangBuiltin<"__builtin_ia32_vsha512msg2">,
5656     DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
5657                           [IntrNoMem]>;
5658 def 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.
5665 let 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
5676 let 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 
5684 let 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 
5697 let 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
5704 let 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 
5716 let 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 
5728 let 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 
5738 let TargetPrefix = "x86" in {
5739   def int_x86_invpcid : ClangBuiltin<"__builtin_ia32_invpcid">,
5740               Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], []>;
5741 }
5742 
5743 let 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 
5787 let 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 
5797 let 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 
5805 let 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
5814 let 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 
5867 let 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 //===----------------------------------------------------------------------===//
6256 let TargetPrefix = "x86" in {
6257 // CMPCCXADD
6258 def 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 
6264 def 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
6271 def int_x86_vbcstnebf162ps128
6272     : ClangBuiltin<"__builtin_ia32_vbcstnebf162ps128">,
6273       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6274                             [IntrReadMem, IntrArgMemOnly]>;
6275 def int_x86_vbcstnebf162ps256
6276     : ClangBuiltin<"__builtin_ia32_vbcstnebf162ps256">,
6277       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6278                             [IntrReadMem, IntrArgMemOnly]>;
6279 def int_x86_vbcstnesh2ps128
6280     : ClangBuiltin<"__builtin_ia32_vbcstnesh2ps128">,
6281       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6282                             [IntrReadMem, IntrArgMemOnly]>;
6283 def int_x86_vbcstnesh2ps256
6284     : ClangBuiltin<"__builtin_ia32_vbcstnesh2ps256">,
6285       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6286                             [IntrReadMem, IntrArgMemOnly]>;
6287 def int_x86_vcvtneebf162ps128
6288     : ClangBuiltin<"__builtin_ia32_vcvtneebf162ps128">,
6289       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6290                             [IntrReadMem, IntrArgMemOnly]>;
6291 def int_x86_vcvtneebf162ps256
6292     : ClangBuiltin<"__builtin_ia32_vcvtneebf162ps256">,
6293       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6294                             [IntrReadMem, IntrArgMemOnly]>;
6295 def int_x86_vcvtneeph2ps128
6296     : ClangBuiltin<"__builtin_ia32_vcvtneeph2ps128">,
6297       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6298                             [IntrReadMem, IntrArgMemOnly]>;
6299 def int_x86_vcvtneeph2ps256
6300     : ClangBuiltin<"__builtin_ia32_vcvtneeph2ps256">,
6301       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6302                             [IntrReadMem, IntrArgMemOnly]>;
6303 def int_x86_vcvtneobf162ps128
6304     : ClangBuiltin<"__builtin_ia32_vcvtneobf162ps128">,
6305       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6306                             [IntrReadMem, IntrArgMemOnly]>;
6307 def int_x86_vcvtneobf162ps256
6308     : ClangBuiltin<"__builtin_ia32_vcvtneobf162ps256">,
6309       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6310                             [IntrReadMem, IntrArgMemOnly]>;
6311 def int_x86_vcvtneoph2ps128
6312     : ClangBuiltin<"__builtin_ia32_vcvtneoph2ps128">,
6313       DefaultAttrsIntrinsic<[llvm_v4f32_ty], [llvm_ptr_ty],
6314                             [IntrReadMem, IntrArgMemOnly]>;
6315 def int_x86_vcvtneoph2ps256
6316     : ClangBuiltin<"__builtin_ia32_vcvtneoph2ps256">,
6317       DefaultAttrsIntrinsic<[llvm_v8f32_ty], [llvm_ptr_ty],
6318                             [IntrReadMem, IntrArgMemOnly]>;
6319 def int_x86_vcvtneps2bf16128
6320     : ClangBuiltin<"__builtin_ia32_vcvtneps2bf16128">,
6321       DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v4f32_ty], [IntrNoMem]>;
6322 def int_x86_vcvtneps2bf16256
6323     : ClangBuiltin<"__builtin_ia32_vcvtneps2bf16256">,
6324       DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8f32_ty], [IntrNoMem]>;
6325 }
6326 //===----------------------------------------------------------------------===//
6327 // SM3 intrinsics
6328 let 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
6347 let 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
6381 let 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 
6411 let 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 
6422 let TargetPrefix = "x86" in {
6423 def int_x86_urdmsr : ClangBuiltin<"__builtin_ia32_urdmsr">,
6424         Intrinsic<[llvm_i64_ty], [llvm_i64_ty],
6425                   [IntrInaccessibleMemOnly]>;
6426 def int_x86_uwrmsr : ClangBuiltin<"__builtin_ia32_uwrmsr">,
6427         Intrinsic<[], [llvm_i64_ty, llvm_i64_ty],
6428                   [IntrInaccessibleMemOnly]>;
6429 }
6430 
6431 //===----------------------------------------------------------------------===//
6432 let 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 
7281 let TargetPrefix = "x86" in {
7282 def 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>>]>;
7285 def 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>>]>;
7288 def 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>>]>;
7291 def 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>>]>;
7294 def 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>>]>;
7297 def 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>>]>;
7300 def 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>>]>;
7303 def 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>>]>;
7306 def 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>>]>;
7309 def 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>>]>;
7312 def 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>>]>;
7315 def 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>>]>;
7318 def 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>>]>;
7321 def 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>>]>;
7324 def 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>>]>;
7327 def 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>>]>;
7330 def 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>>]>;
7333 def 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>>]>;
7336 def 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>>]>;
7339 def 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>>]>;
7342 def 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 //===----------------------------------------------------------------------===//
7348 let TargetPrefix = "x86" in {
7349 def int_x86_avx10_vcvtbf162ibs128 : ClangBuiltin<"__builtin_ia32_vcvtbf162ibs128">,
7350          DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8bf16_ty],
7351                    [IntrNoMem]>;
7352 def int_x86_avx10_vcvtbf162ibs256 : ClangBuiltin<"__builtin_ia32_vcvtbf162ibs256">,
7353         DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16bf16_ty],
7354                   [IntrNoMem]>;
7355 def int_x86_avx10_vcvtbf162ibs512 : ClangBuiltin<"__builtin_ia32_vcvtbf162ibs512">,
7356         DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32bf16_ty],
7357                   [IntrNoMem]>;
7358 def int_x86_avx10_vcvtbf162iubs128 : ClangBuiltin<"__builtin_ia32_vcvtbf162iubs128">,
7359         DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8bf16_ty],
7360                    [IntrNoMem]>;
7361 def int_x86_avx10_vcvtbf162iubs256 : ClangBuiltin<"__builtin_ia32_vcvtbf162iubs256">,
7362         DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16bf16_ty],
7363                   [IntrNoMem]>;
7364 def int_x86_avx10_vcvtbf162iubs512 : ClangBuiltin<"__builtin_ia32_vcvtbf162iubs512">,
7365         DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32bf16_ty],
7366                   [IntrNoMem]>;
7367 def 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]>;
7370 def 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>>]>;
7373 def 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>>]>;
7376 def 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]>;
7379 def 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>>]>;
7382 def 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>>]>;
7385 def 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]>;
7388 def 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>>]>;
7391 def 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>>]>;
7394 def 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]>;
7397 def 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>>]>;
7400 def 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>>]>;
7403 def int_x86_avx10_vcvttbf162ibs128 : ClangBuiltin<"__builtin_ia32_vcvttbf162ibs128">,
7404         DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8bf16_ty],
7405                   [IntrNoMem]>;
7406 def int_x86_avx10_vcvttbf162ibs256 : ClangBuiltin<"__builtin_ia32_vcvttbf162ibs256">,
7407         DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16bf16_ty],
7408                   [IntrNoMem]>;
7409 def int_x86_avx10_vcvttbf162ibs512 : ClangBuiltin<"__builtin_ia32_vcvttbf162ibs512">,
7410         DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32bf16_ty],
7411                   [IntrNoMem]>;
7412 def int_x86_avx10_vcvttbf162iubs128 : ClangBuiltin<"__builtin_ia32_vcvttbf162iubs128">,
7413         DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_v8bf16_ty],
7414                   [IntrNoMem]>;
7415 def int_x86_avx10_vcvttbf162iubs256 : ClangBuiltin<"__builtin_ia32_vcvttbf162iubs256">,
7416         DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_v16bf16_ty],
7417                   [IntrNoMem]>;
7418 def int_x86_avx10_vcvttbf162iubs512 : ClangBuiltin<"__builtin_ia32_vcvttbf162iubs512">,
7419         DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_v32bf16_ty],
7420                   [IntrNoMem]>;
7421 def 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]>;
7424 def 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>>]>;
7427 def 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>>]>;
7430 def 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]>;
7433 def 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>>]>;
7436 def 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>>]>;
7439 def 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]>;
7442 def 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>>]>;
7445 def 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>>]>;
7448 def 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]>;
7451 def 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>>]>;
7454 def 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 //===----------------------------------------------------------------------===//
7460 let TargetPrefix = "x86" in {
7461 def 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]>;
7464 def 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>>]>;
7467 def 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>>]>;
7470 def 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]>;
7473 def 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]>;
7476 def 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]>;
7479 def 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]>;
7482 def 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]>;
7485 def 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]>;
7488 def 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]>;
7491 def 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]>;
7494 def 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]>;
7497 def 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]>;
7500 def 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]>;
7503 def 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]>;
7506 def int_x86_avx10_vcvt2ph2bf8128 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8_128">,
7507         DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v8f16_ty],
7508                               [IntrNoMem]>;
7509 def int_x86_avx10_vcvt2ph2bf8256 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8_256">,
7510         DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v16f16_ty, llvm_v16f16_ty],
7511                               [IntrNoMem]>;
7512 def int_x86_avx10_vcvt2ph2bf8512 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8_512">,
7513         DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_v32f16_ty, llvm_v32f16_ty],
7514                               [IntrNoMem]>;
7515 def int_x86_avx10_vcvt2ph2bf8s128 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8s_128">,
7516         DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v8f16_ty],
7517                               [IntrNoMem]>;
7518 def int_x86_avx10_vcvt2ph2bf8s256 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8s_256">,
7519         DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v16f16_ty, llvm_v16f16_ty],
7520                               [IntrNoMem]>;
7521 def int_x86_avx10_vcvt2ph2bf8s512 : ClangBuiltin<"__builtin_ia32_vcvt2ph2bf8s_512">,
7522         DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_v32f16_ty, llvm_v32f16_ty],
7523                               [IntrNoMem]>;
7524 def int_x86_avx10_vcvt2ph2hf8128 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8_128">,
7525         DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v8f16_ty],
7526                               [IntrNoMem]>;
7527 def int_x86_avx10_vcvt2ph2hf8256 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8_256">,
7528         DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v16f16_ty, llvm_v16f16_ty],
7529                               [IntrNoMem]>;
7530 def int_x86_avx10_vcvt2ph2hf8512 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8_512">,
7531         DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_v32f16_ty, llvm_v32f16_ty],
7532                               [IntrNoMem]>;
7533 def int_x86_avx10_vcvt2ph2hf8s128 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8s_128">,
7534         DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_v8f16_ty, llvm_v8f16_ty],
7535                               [IntrNoMem]>;
7536 def int_x86_avx10_vcvt2ph2hf8s256 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8s_256">,
7537         DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_v16f16_ty, llvm_v16f16_ty],
7538                               [IntrNoMem]>;
7539 def int_x86_avx10_vcvt2ph2hf8s512 : ClangBuiltin<"__builtin_ia32_vcvt2ph2hf8s_512">,
7540         DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_v32f16_ty, llvm_v32f16_ty],
7541                               [IntrNoMem]>;
7542 def 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]>;
7545 def 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]>;
7548 def 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]>;
7551 def 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]>;
7554 def 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]>;
7557 def 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]>;
7560 def 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]>;
7563 def 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]>;
7566 def 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]>;
7569 def 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]>;
7572 def 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]>;
7575 def 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]>;
7578 def 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]>;
7581 def 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]>;
7584 def 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 //===----------------------------------------------------------------------===//
7590 let TargetPrefix = "x86" in {
7591 def int_x86_avx10_vaddbf16512 : ClangBuiltin<"__builtin_ia32_vaddbf16512">,
7592         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7593                               [IntrNoMem]>;
7594 def int_x86_avx10_vaddbf16256 : ClangBuiltin<"__builtin_ia32_vaddbf16256">,
7595         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7596                               [IntrNoMem]>;
7597 def int_x86_avx10_vaddbf16128 : ClangBuiltin<"__builtin_ia32_vaddbf16128">,
7598         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7599                               [IntrNoMem]>;
7600 def int_x86_avx10_vsubbf16512 : ClangBuiltin<"__builtin_ia32_vsubbf16512">,
7601         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7602                               [IntrNoMem]>;
7603 def int_x86_avx10_vsubbf16256 : ClangBuiltin<"__builtin_ia32_vsubbf16256">,
7604         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7605                               [IntrNoMem]>;
7606 def int_x86_avx10_vsubbf16128 : ClangBuiltin<"__builtin_ia32_vsubbf16128">,
7607         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7608                               [IntrNoMem]>;
7609 def int_x86_avx10_vmulbf16512 : ClangBuiltin<"__builtin_ia32_vmulbf16512">,
7610         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7611                               [IntrNoMem]>;
7612 def int_x86_avx10_vmulbf16256 : ClangBuiltin<"__builtin_ia32_vmulbf16256">,
7613         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7614                               [IntrNoMem]>;
7615 def int_x86_avx10_vmulbf16128 : ClangBuiltin<"__builtin_ia32_vmulbf16128">,
7616         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7617                               [IntrNoMem]>;
7618 def int_x86_avx10_vdivbf16512 : ClangBuiltin<"__builtin_ia32_vdivbf16512">,
7619         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7620                               [IntrNoMem]>;
7621 def int_x86_avx10_vdivbf16256 : ClangBuiltin<"__builtin_ia32_vdivbf16256">,
7622         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7623                               [IntrNoMem]>;
7624 def int_x86_avx10_vdivbf16128 : ClangBuiltin<"__builtin_ia32_vdivbf16128">,
7625         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7626                               [IntrNoMem]>;
7627 def int_x86_avx10_vmaxbf16512 : ClangBuiltin<"__builtin_ia32_vmaxbf16512">,
7628         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7629                               [IntrNoMem]>;
7630 def int_x86_avx10_vmaxbf16256 : ClangBuiltin<"__builtin_ia32_vmaxbf16256">,
7631         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7632                               [IntrNoMem]>;
7633 def int_x86_avx10_vmaxbf16128 : ClangBuiltin<"__builtin_ia32_vmaxbf16128">,
7634         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7635                               [IntrNoMem]>;
7636 def int_x86_avx10_vminbf16512 : ClangBuiltin<"__builtin_ia32_vminbf16512">,
7637         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty],
7638                               [IntrNoMem]>;
7639 def int_x86_avx10_vminbf16256 : ClangBuiltin<"__builtin_ia32_vminbf16256">,
7640         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty],
7641                               [IntrNoMem]>;
7642 def int_x86_avx10_vminbf16128 : ClangBuiltin<"__builtin_ia32_vminbf16128">,
7643         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7644                               [IntrNoMem]>;
7645 def int_x86_avx10_vcomisbf16eq : ClangBuiltin<"__builtin_ia32_vcomisbf16eq">,
7646         DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7647                               [IntrNoMem]>;
7648 def int_x86_avx10_vcomisbf16lt : ClangBuiltin<"__builtin_ia32_vcomisbf16lt">,
7649         DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty,llvm_v8bf16_ty],
7650                               [IntrNoMem]>;
7651 def int_x86_avx10_vcomisbf16le : ClangBuiltin<"__builtin_ia32_vcomisbf16le">,
7652         DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7653                               [IntrNoMem]>;
7654 def int_x86_avx10_vcomisbf16gt : ClangBuiltin<"__builtin_ia32_vcomisbf16gt">,
7655         DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7656                               [IntrNoMem]>;
7657 def int_x86_avx10_vcomisbf16ge : ClangBuiltin<"__builtin_ia32_vcomisbf16ge">,
7658         DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7659                               [IntrNoMem]>;
7660 def int_x86_avx10_vcomisbf16neq : ClangBuiltin<"__builtin_ia32_vcomisbf16neq">,
7661         DefaultAttrsIntrinsic<[llvm_i32_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty],
7662                               [IntrNoMem]>;
7663 def 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]>;
7666 def 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]>;
7669 def 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]>;
7672 def 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]>;
7675 def 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]>;
7678 def 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]>;
7681 def 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>>]>;
7684 def 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>>]>;
7687 def 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>>]>;
7690 def int_x86_avx10_fpclass_bf16_128 :
7691         DefaultAttrsIntrinsic<[llvm_v8i1_ty], [llvm_v8bf16_ty, llvm_i32_ty],
7692                               [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7693 def int_x86_avx10_fpclass_bf16_256 :
7694         DefaultAttrsIntrinsic<[llvm_v16i1_ty], [llvm_v16bf16_ty, llvm_i32_ty],
7695                               [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7696 def int_x86_avx10_fpclass_bf16_512 :
7697         DefaultAttrsIntrinsic<[llvm_v32i1_ty], [llvm_v32bf16_ty, llvm_i32_ty],
7698                               [IntrNoMem, ImmArg<ArgIndex<1>>]>;
7699 def 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]>;
7702 def 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]>;
7705 def 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]>;
7708 def 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>>]>;
7711 def 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>>]>;
7714 def 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>>]>;
7717 def 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>>]>;
7720 def 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>>]>;
7723 def 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>>]>;
7726 def 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]>;
7729 def 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]>;
7732 def 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]>;
7735 def int_x86_avx10_vfmadd213bf16256 : ClangBuiltin<"__builtin_ia32_vfmadd213bf16256">,
7736         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7737                               [IntrNoMem]>;
7738 def int_x86_avx10_vfmadd213bf16128 : ClangBuiltin<"__builtin_ia32_vfmadd213bf16128">,
7739         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7740                               [IntrNoMem]>;
7741 def int_x86_avx10_vfmadd132bf16512 : ClangBuiltin<"__builtin_ia32_vfmadd132bf16512">,
7742         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7743                               [IntrNoMem]>;
7744 def int_x86_avx10_vfmadd132bf16256 : ClangBuiltin<"__builtin_ia32_vfmadd132bf16256">,
7745         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7746                               [IntrNoMem]>;
7747 def int_x86_avx10_vfmadd132bf16128 : ClangBuiltin<"__builtin_ia32_vfmadd132bf16128">,
7748         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7749                               [IntrNoMem]>;
7750 def int_x86_avx10_vfmadd231bf16512 : ClangBuiltin<"__builtin_ia32_vfmadd231bf16512">,
7751         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7752                               [IntrNoMem]>;
7753 def int_x86_avx10_vfmadd231bf16256 : ClangBuiltin<"__builtin_ia32_vfmadd231bf16256">,
7754         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7755                               [IntrNoMem]>;
7756 def int_x86_avx10_vfmadd231bf16128 : ClangBuiltin<"__builtin_ia32_vfmadd231bf16128">,
7757         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7758                               [IntrNoMem]>;
7759 def int_x86_avx10_vfmsub213bf16512 : ClangBuiltin<"__builtin_ia32_vfmsub213bf16512">,
7760         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7761                               [IntrNoMem]>;
7762 def int_x86_avx10_vfmsub213bf16256 : ClangBuiltin<"__builtin_ia32_vfmsub213bf16256">,
7763         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7764                               [IntrNoMem]>;
7765 def int_x86_avx10_vfmsub213bf16128 : ClangBuiltin<"__builtin_ia32_vfmsub213bf16128">,
7766         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7767                               [IntrNoMem]>;
7768 def int_x86_avx10_vfmsub132bf16512 : ClangBuiltin<"__builtin_ia32_vfmsub132bf16512">,
7769         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7770                               [IntrNoMem]>;
7771 def int_x86_avx10_vfmsub132bf16256 : ClangBuiltin<"__builtin_ia32_vfmsub132bf16256">,
7772         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7773                               [IntrNoMem]>;
7774 def int_x86_avx10_vfmsub132bf16128 : ClangBuiltin<"__builtin_ia32_vfmsub132bf16128">,
7775         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7776                               [IntrNoMem]>;
7777 def int_x86_avx10_vfmsub231bf16512 : ClangBuiltin<"__builtin_ia32_vfmsub231bf16512">,
7778         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7779                               [IntrNoMem]>;
7780 def int_x86_avx10_vfmsub231bf16256 : ClangBuiltin<"__builtin_ia32_vfmsub231bf16256">,
7781         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7782                               [IntrNoMem]>;
7783 def int_x86_avx10_vfmsub231bf16128 : ClangBuiltin<"__builtin_ia32_vfmsub231bf16128">,
7784         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7785                               [IntrNoMem]>;
7786 def int_x86_avx10_vfnmadd213bf16512 : ClangBuiltin<"__builtin_ia32_vfnmadd213bf16512">,
7787         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7788                               [IntrNoMem]>;
7789 def int_x86_avx10_vfnmadd213bf16256 : ClangBuiltin<"__builtin_ia32_vfnmadd213bf16256">,
7790         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7791                               [IntrNoMem]>;
7792 def int_x86_avx10_vfnmadd213bf16128 : ClangBuiltin<"__builtin_ia32_vfnmadd213bf16128">,
7793         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7794                               [IntrNoMem]>;
7795 def int_x86_avx10_vfnmadd132bf16512 : ClangBuiltin<"__builtin_ia32_vfnmadd132bf16512">,
7796         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7797                               [IntrNoMem]>;
7798 def int_x86_avx10_vfnmadd132bf16256 : ClangBuiltin<"__builtin_ia32_vfnmadd132bf16256">,
7799         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7800                               [IntrNoMem]>;
7801 def int_x86_avx10_vfnmadd132bf16128 : ClangBuiltin<"__builtin_ia32_vfnmadd132bf16128">,
7802         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7803                               [IntrNoMem]>;
7804 def int_x86_avx10_vfnmadd231bf16512 : ClangBuiltin<"__builtin_ia32_vfnmadd231bf16512">,
7805         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7806                               [IntrNoMem]>;
7807 def int_x86_avx10_vfnmadd231bf16256 : ClangBuiltin<"__builtin_ia32_vfnmadd231bf16256">,
7808         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7809                               [IntrNoMem]>;
7810 def int_x86_avx10_vfnmadd231bf16128 : ClangBuiltin<"__builtin_ia32_vfnmadd231bf16128">,
7811         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7812                               [IntrNoMem]>;
7813 def int_x86_avx10_vfnmsub213bf16512 : ClangBuiltin<"__builtin_ia32_vfnmsub213bf16512">,
7814         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7815                               [IntrNoMem]>;
7816 def int_x86_avx10_vfnmsub213bf16256 : ClangBuiltin<"__builtin_ia32_vfnmsub213bf16256">,
7817         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7818                               [IntrNoMem]>;
7819 def int_x86_avx10_vfnmsub213bf16128 : ClangBuiltin<"__builtin_ia32_vfnmsub213bf16128">,
7820         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7821                               [IntrNoMem]>;
7822 def int_x86_avx10_vfnmsub132bf16512 : ClangBuiltin<"__builtin_ia32_vfnmsub132bf16512">,
7823         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7824                               [IntrNoMem]>;
7825 def int_x86_avx10_vfnmsub132bf16256 : ClangBuiltin<"__builtin_ia32_vfnmsub132bf16256">,
7826         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7827                               [IntrNoMem]>;
7828 def int_x86_avx10_vfnmsub132bf16128 : ClangBuiltin<"__builtin_ia32_vfnmsub132bf16128">,
7829         DefaultAttrsIntrinsic<[llvm_v8bf16_ty], [llvm_v8bf16_ty, llvm_v8bf16_ty, llvm_v8bf16_ty ],
7830                               [IntrNoMem]>;
7831 def int_x86_avx10_vfnmsub231bf16512 : ClangBuiltin<"__builtin_ia32_vfnmsub231bf16512">,
7832         DefaultAttrsIntrinsic<[llvm_v32bf16_ty], [llvm_v32bf16_ty, llvm_v32bf16_ty, llvm_v32bf16_ty],
7833                               [IntrNoMem]>;
7834 def int_x86_avx10_vfnmsub231bf16256 : ClangBuiltin<"__builtin_ia32_vfnmsub231bf16256">,
7835         DefaultAttrsIntrinsic<[llvm_v16bf16_ty], [llvm_v16bf16_ty, llvm_v16bf16_ty, llvm_v16bf16_ty],
7836                               [IntrNoMem]>;
7837 def 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 
7842 let TargetPrefix = "x86" in {
7843 def int_x86_avx10_vmovrsb128 : ClangBuiltin<"__builtin_ia32_vmovrsb128">,
7844         DefaultAttrsIntrinsic<[llvm_v16i8_ty], [llvm_ptr_ty],
7845                   [IntrReadMem]>;
7846 def int_x86_avx10_vmovrsb256 : ClangBuiltin<"__builtin_ia32_vmovrsb256">,
7847         DefaultAttrsIntrinsic<[llvm_v32i8_ty], [llvm_ptr_ty],
7848                   [IntrReadMem]>;
7849 def int_x86_avx10_vmovrsb512 : ClangBuiltin<"__builtin_ia32_vmovrsb512">,
7850         DefaultAttrsIntrinsic<[llvm_v64i8_ty], [llvm_ptr_ty],
7851                   [IntrReadMem]>;
7852 def int_x86_avx10_vmovrsd128 : ClangBuiltin<"__builtin_ia32_vmovrsd128">,
7853         DefaultAttrsIntrinsic<[llvm_v4i32_ty], [llvm_ptr_ty],
7854                   [IntrReadMem]>;
7855 def int_x86_avx10_vmovrsd256 : ClangBuiltin<"__builtin_ia32_vmovrsd256">,
7856         DefaultAttrsIntrinsic<[llvm_v8i32_ty], [llvm_ptr_ty],
7857                   [IntrReadMem]>;
7858 def int_x86_avx10_vmovrsd512 : ClangBuiltin<"__builtin_ia32_vmovrsd512">,
7859         DefaultAttrsIntrinsic<[llvm_v16i32_ty], [llvm_ptr_ty],
7860                   [IntrReadMem]>;
7861 def int_x86_avx10_vmovrsq128 : ClangBuiltin<"__builtin_ia32_vmovrsq128">,
7862         DefaultAttrsIntrinsic<[llvm_v2i64_ty], [llvm_ptr_ty],
7863                   [IntrReadMem]>;
7864 def int_x86_avx10_vmovrsq256 : ClangBuiltin<"__builtin_ia32_vmovrsq256">,
7865         DefaultAttrsIntrinsic<[llvm_v4i64_ty], [llvm_ptr_ty],
7866                   [IntrReadMem]>;
7867 def int_x86_avx10_vmovrsq512 : ClangBuiltin<"__builtin_ia32_vmovrsq512">,
7868         DefaultAttrsIntrinsic<[llvm_v8i64_ty], [llvm_ptr_ty],
7869                   [IntrReadMem]>;
7870 def int_x86_avx10_vmovrsw128 : ClangBuiltin<"__builtin_ia32_vmovrsw128">,
7871         DefaultAttrsIntrinsic<[llvm_v8i16_ty], [llvm_ptr_ty],
7872                   [IntrReadMem]>;
7873 def int_x86_avx10_vmovrsw256 : ClangBuiltin<"__builtin_ia32_vmovrsw256">,
7874         DefaultAttrsIntrinsic<[llvm_v16i16_ty], [llvm_ptr_ty],
7875                   [IntrReadMem]>;
7876 def int_x86_avx10_vmovrsw512 : ClangBuiltin<"__builtin_ia32_vmovrsw512">,
7877         DefaultAttrsIntrinsic<[llvm_v32i16_ty], [llvm_ptr_ty],
7878                   [IntrReadMem]>;
7879 }
7880 
7881 let TargetPrefix = "x86" in {
7882 def int_x86_movrsqi : ClangBuiltin<"__builtin_ia32_movrsqi">,
7883         Intrinsic<[llvm_i8_ty], [llvm_ptr_ty],
7884                   [IntrReadMem]>;
7885 def int_x86_movrshi : ClangBuiltin<"__builtin_ia32_movrshi">,
7886         Intrinsic<[llvm_i16_ty], [llvm_ptr_ty],
7887                   [IntrReadMem]>;
7888 def int_x86_movrssi : ClangBuiltin<"__builtin_ia32_movrssi">,
7889         Intrinsic<[llvm_i32_ty], [llvm_ptr_ty],
7890                   [IntrReadMem]>;
7891 def int_x86_movrsdi : ClangBuiltin<"__builtin_ia32_movrsdi">,
7892         Intrinsic<[llvm_i64_ty], [llvm_ptr_ty],
7893                   [IntrReadMem]>;
7894 def int_x86_prefetchrs : ClangBuiltin<"__builtin_ia32_prefetchrs">,
7895         Intrinsic<[], [llvm_ptr_ty], []>;
7896 }