Home | History | Annotate | Download | only in IR
      1 //===- IntrinsicsX86.td - Defines X86 intrinsics -----------*- tablegen -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file defines all of the X86-specific intrinsics.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 //===----------------------------------------------------------------------===//
     15 // Interrupt traps
     16 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
     17   def int_x86_int : Intrinsic<[], [llvm_i8_ty]>;
     18 }
     19 
     20 //===----------------------------------------------------------------------===//
     21 // SEH intrinsics for Windows
     22 let TargetPrefix = "x86" in {
     23   def int_x86_seh_lsda : Intrinsic<[llvm_ptr_ty], [llvm_ptr_ty], [IntrNoMem]>;
     24 
     25   // Marks the EH registration node created in LLVM IR prior to code generation.
     26   def int_x86_seh_ehregnode : Intrinsic<[], [llvm_ptr_ty], []>;
     27 
     28   // Marks the EH guard slot node created in LLVM IR prior to code generation.
     29   def int_x86_seh_ehguard : Intrinsic<[], [llvm_ptr_ty], []>;
     30 
     31   // Given a pointer to the end of an EH registration object, returns the true
     32   // parent frame address that can be used with llvm.localrecover.
     33   def int_x86_seh_recoverfp : Intrinsic<[llvm_ptr_ty],
     34                                         [llvm_ptr_ty, llvm_ptr_ty],
     35                                         [IntrNoMem]>;
     36 }
     37 
     38 //===----------------------------------------------------------------------===//
     39 // FLAGS.
     40 let TargetPrefix = "x86" in {
     41   def int_x86_flags_read_u32 : GCCBuiltin<"__builtin_ia32_readeflags_u32">,
     42         Intrinsic<[llvm_i32_ty], [], []>;
     43   def int_x86_flags_read_u64 : GCCBuiltin<"__builtin_ia32_readeflags_u64">,
     44         Intrinsic<[llvm_i64_ty], [], []>;
     45   def int_x86_flags_write_u32 : GCCBuiltin<"__builtin_ia32_writeeflags_u32">,
     46         Intrinsic<[], [llvm_i32_ty], []>;
     47   def int_x86_flags_write_u64 : GCCBuiltin<"__builtin_ia32_writeeflags_u64">,
     48         Intrinsic<[], [llvm_i64_ty], []>;
     49 }
     50 
     51 //===----------------------------------------------------------------------===//
     52 // Read Time Stamp Counter.
     53 let TargetPrefix = "x86" in {
     54   def int_x86_rdtsc : GCCBuiltin<"__builtin_ia32_rdtsc">,
     55               Intrinsic<[llvm_i64_ty], [], []>;
     56   def int_x86_rdtscp : GCCBuiltin<"__builtin_ia32_rdtscp">,
     57               Intrinsic<[llvm_i64_ty], [llvm_ptr_ty], [IntrArgMemOnly]>;
     58 }
     59 
     60 // Read Performance-Monitoring Counter.
     61 let TargetPrefix = "x86" in {
     62   def int_x86_rdpmc : GCCBuiltin<"__builtin_ia32_rdpmc">,
     63               Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>;
     64 }
     65 
     66 //===----------------------------------------------------------------------===//
     67 // 3DNow!
     68 
     69 let TargetPrefix = "x86" in {
     70   def int_x86_3dnow_pavgusb : GCCBuiltin<"__builtin_ia32_pavgusb">,
     71               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     72                         [IntrNoMem]>;
     73   def int_x86_3dnow_pf2id : GCCBuiltin<"__builtin_ia32_pf2id">,
     74               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
     75   def int_x86_3dnow_pfacc : GCCBuiltin<"__builtin_ia32_pfacc">,
     76               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     77                         [IntrNoMem]>;
     78   def int_x86_3dnow_pfadd : GCCBuiltin<"__builtin_ia32_pfadd">,
     79               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     80                         [IntrNoMem]>;
     81   def int_x86_3dnow_pfcmpeq : GCCBuiltin<"__builtin_ia32_pfcmpeq">,
     82               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     83                         [IntrNoMem]>;
     84   def int_x86_3dnow_pfcmpge : GCCBuiltin<"__builtin_ia32_pfcmpge">,
     85               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     86                         [IntrNoMem]>;
     87   def int_x86_3dnow_pfcmpgt : GCCBuiltin<"__builtin_ia32_pfcmpgt">,
     88               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     89                         [IntrNoMem]>;
     90   def int_x86_3dnow_pfmax : GCCBuiltin<"__builtin_ia32_pfmax">,
     91               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     92                         [IntrNoMem]>;
     93   def int_x86_3dnow_pfmin : GCCBuiltin<"__builtin_ia32_pfmin">,
     94               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     95                         [IntrNoMem]>;
     96   def int_x86_3dnow_pfmul : GCCBuiltin<"__builtin_ia32_pfmul">,
     97               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     98                         [IntrNoMem]>;
     99   def int_x86_3dnow_pfrcp : GCCBuiltin<"__builtin_ia32_pfrcp">,
    100               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    101   def int_x86_3dnow_pfrcpit1 : GCCBuiltin<"__builtin_ia32_pfrcpit1">,
    102               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    103                         [IntrNoMem]>;
    104   def int_x86_3dnow_pfrcpit2 : GCCBuiltin<"__builtin_ia32_pfrcpit2">,
    105               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    106                         [IntrNoMem]>;
    107   def int_x86_3dnow_pfrsqrt : GCCBuiltin<"__builtin_ia32_pfrsqrt">,
    108               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    109   def int_x86_3dnow_pfrsqit1 : GCCBuiltin<"__builtin_ia32_pfrsqit1">,
    110               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    111                         [IntrNoMem]>;
    112   def int_x86_3dnow_pfsub : GCCBuiltin<"__builtin_ia32_pfsub">,
    113               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    114                         [IntrNoMem]>;
    115   def int_x86_3dnow_pfsubr : GCCBuiltin<"__builtin_ia32_pfsubr">,
    116               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    117                         [IntrNoMem]>;
    118   def int_x86_3dnow_pi2fd : GCCBuiltin<"__builtin_ia32_pi2fd">,
    119               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    120   def int_x86_3dnow_pmulhrw : GCCBuiltin<"__builtin_ia32_pmulhrw">,
    121               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    122                         [IntrNoMem]>;
    123 }
    124 
    125 //===----------------------------------------------------------------------===//
    126 // 3DNow! extensions
    127 
    128 let TargetPrefix = "x86" in {
    129   def int_x86_3dnowa_pf2iw : GCCBuiltin<"__builtin_ia32_pf2iw">,
    130               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    131   def int_x86_3dnowa_pfnacc : GCCBuiltin<"__builtin_ia32_pfnacc">,
    132               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    133                         [IntrNoMem]>;
    134   def int_x86_3dnowa_pfpnacc : GCCBuiltin<"__builtin_ia32_pfpnacc">,
    135               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    136                         [IntrNoMem]>;
    137   def int_x86_3dnowa_pi2fw : GCCBuiltin<"__builtin_ia32_pi2fw">,
    138               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    139   def int_x86_3dnowa_pswapd :
    140               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    141 }
    142 
    143 //===----------------------------------------------------------------------===//
    144 // SSE1
    145 
    146 // Arithmetic ops
    147 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    148   def int_x86_sse_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss">,
    149               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    150                         [IntrNoMem]>;
    151   def int_x86_sse_sqrt_ps : GCCBuiltin<"__builtin_ia32_sqrtps">,
    152               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    153                         [IntrNoMem]>;
    154   def int_x86_sse_rcp_ss : GCCBuiltin<"__builtin_ia32_rcpss">,
    155               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    156                         [IntrNoMem]>;
    157   def int_x86_sse_rcp_ps : GCCBuiltin<"__builtin_ia32_rcpps">,
    158               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    159                         [IntrNoMem]>;
    160   def int_x86_sse_rsqrt_ss : GCCBuiltin<"__builtin_ia32_rsqrtss">,
    161               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    162                         [IntrNoMem]>;
    163   def int_x86_sse_rsqrt_ps : GCCBuiltin<"__builtin_ia32_rsqrtps">,
    164               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    165                         [IntrNoMem]>;
    166   def int_x86_sse_min_ss : GCCBuiltin<"__builtin_ia32_minss">,
    167               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    168                          llvm_v4f32_ty], [IntrNoMem]>;
    169   def int_x86_sse_min_ps : GCCBuiltin<"__builtin_ia32_minps">,
    170               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    171                          llvm_v4f32_ty], [IntrNoMem]>;
    172   def int_x86_sse_max_ss : GCCBuiltin<"__builtin_ia32_maxss">,
    173               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    174                          llvm_v4f32_ty], [IntrNoMem]>;
    175   def int_x86_sse_max_ps : GCCBuiltin<"__builtin_ia32_maxps">,
    176               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    177                          llvm_v4f32_ty], [IntrNoMem]>;
    178 }
    179 
    180 // Comparison ops
    181 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    182   def int_x86_sse_cmp_ss : GCCBuiltin<"__builtin_ia32_cmpss">,
    183               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    184                          llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
    185   def int_x86_sse_cmp_ps :
    186               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    187                          llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
    188   def int_x86_sse_comieq_ss : GCCBuiltin<"__builtin_ia32_comieq">,
    189               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    190                          llvm_v4f32_ty], [IntrNoMem]>;
    191   def int_x86_sse_comilt_ss : GCCBuiltin<"__builtin_ia32_comilt">,
    192               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    193                          llvm_v4f32_ty], [IntrNoMem]>;
    194   def int_x86_sse_comile_ss : GCCBuiltin<"__builtin_ia32_comile">,
    195               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    196                          llvm_v4f32_ty], [IntrNoMem]>;
    197   def int_x86_sse_comigt_ss : GCCBuiltin<"__builtin_ia32_comigt">,
    198               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    199                          llvm_v4f32_ty], [IntrNoMem]>;
    200   def int_x86_sse_comige_ss : GCCBuiltin<"__builtin_ia32_comige">,
    201               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    202                          llvm_v4f32_ty], [IntrNoMem]>;
    203   def int_x86_sse_comineq_ss : GCCBuiltin<"__builtin_ia32_comineq">,
    204               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    205                          llvm_v4f32_ty], [IntrNoMem]>;
    206   def int_x86_sse_ucomieq_ss : GCCBuiltin<"__builtin_ia32_ucomieq">,
    207               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    208                          llvm_v4f32_ty], [IntrNoMem]>;
    209   def int_x86_sse_ucomilt_ss : GCCBuiltin<"__builtin_ia32_ucomilt">,
    210               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    211                          llvm_v4f32_ty], [IntrNoMem]>;
    212   def int_x86_sse_ucomile_ss : GCCBuiltin<"__builtin_ia32_ucomile">,
    213               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    214                          llvm_v4f32_ty], [IntrNoMem]>;
    215   def int_x86_sse_ucomigt_ss : GCCBuiltin<"__builtin_ia32_ucomigt">,
    216               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    217                          llvm_v4f32_ty], [IntrNoMem]>;
    218   def int_x86_sse_ucomige_ss : GCCBuiltin<"__builtin_ia32_ucomige">,
    219               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    220                          llvm_v4f32_ty], [IntrNoMem]>;
    221   def int_x86_sse_ucomineq_ss : GCCBuiltin<"__builtin_ia32_ucomineq">,
    222               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    223                          llvm_v4f32_ty], [IntrNoMem]>;
    224 }
    225 
    226 
    227 // Conversion ops
    228 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    229   def int_x86_sse_cvtss2si : GCCBuiltin<"__builtin_ia32_cvtss2si">,
    230               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    231   def int_x86_sse_cvtss2si64 : GCCBuiltin<"__builtin_ia32_cvtss2si64">,
    232               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    233   def int_x86_sse_cvttss2si : GCCBuiltin<"__builtin_ia32_cvttss2si">,
    234               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    235   def int_x86_sse_cvttss2si64 : GCCBuiltin<"__builtin_ia32_cvttss2si64">,
    236               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    237   def int_x86_sse_cvtsi2ss : // TODO: Remove this intrinsic.
    238               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    239                          llvm_i32_ty], [IntrNoMem]>;
    240   def int_x86_sse_cvtsi642ss : // TODO: Remove this intrinsic.
    241               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    242                          llvm_i64_ty], [IntrNoMem]>;
    243 
    244   def int_x86_sse_cvtps2pi : GCCBuiltin<"__builtin_ia32_cvtps2pi">,
    245               Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    246   def int_x86_sse_cvttps2pi: GCCBuiltin<"__builtin_ia32_cvttps2pi">,
    247               Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    248   def int_x86_sse_cvtpi2ps : GCCBuiltin<"__builtin_ia32_cvtpi2ps">,
    249               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    250                          llvm_x86mmx_ty], [IntrNoMem]>;
    251 }
    252 
    253 // Cacheability support ops
    254 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    255   def int_x86_sse_sfence : GCCBuiltin<"__builtin_ia32_sfence">,
    256               Intrinsic<[], [], []>;
    257 }
    258 
    259 // Control register.
    260 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    261   def int_x86_sse_stmxcsr :
    262               Intrinsic<[], [llvm_ptr_ty], []>;
    263   def int_x86_sse_ldmxcsr :
    264               Intrinsic<[], [llvm_ptr_ty], []>;
    265 }
    266 
    267 // Misc.
    268 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    269   def int_x86_sse_movmsk_ps : GCCBuiltin<"__builtin_ia32_movmskps">,
    270               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    271 }
    272 
    273 //===----------------------------------------------------------------------===//
    274 // SSE2
    275 
    276 // FP arithmetic ops
    277 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    278   def int_x86_sse2_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtsd">,
    279               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty],
    280                         [IntrNoMem]>;
    281   def int_x86_sse2_sqrt_pd : GCCBuiltin<"__builtin_ia32_sqrtpd">,
    282               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty],
    283                         [IntrNoMem]>;
    284   def int_x86_sse2_min_sd : GCCBuiltin<"__builtin_ia32_minsd">,
    285               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    286                          llvm_v2f64_ty], [IntrNoMem]>;
    287   def int_x86_sse2_min_pd : GCCBuiltin<"__builtin_ia32_minpd">,
    288               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    289                          llvm_v2f64_ty], [IntrNoMem]>;
    290   def int_x86_sse2_max_sd : GCCBuiltin<"__builtin_ia32_maxsd">,
    291               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    292                          llvm_v2f64_ty], [IntrNoMem]>;
    293   def int_x86_sse2_max_pd : GCCBuiltin<"__builtin_ia32_maxpd">,
    294               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    295                          llvm_v2f64_ty], [IntrNoMem]>;
    296 }
    297 
    298 // FP comparison ops
    299 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    300   def int_x86_sse2_cmp_sd : GCCBuiltin<"__builtin_ia32_cmpsd">,
    301               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    302                          llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
    303   def int_x86_sse2_cmp_pd :
    304               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    305                          llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
    306   def int_x86_sse2_comieq_sd : GCCBuiltin<"__builtin_ia32_comisdeq">,
    307               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    308                          llvm_v2f64_ty], [IntrNoMem]>;
    309   def int_x86_sse2_comilt_sd : GCCBuiltin<"__builtin_ia32_comisdlt">,
    310               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    311                          llvm_v2f64_ty], [IntrNoMem]>;
    312   def int_x86_sse2_comile_sd : GCCBuiltin<"__builtin_ia32_comisdle">,
    313               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    314                          llvm_v2f64_ty], [IntrNoMem]>;
    315   def int_x86_sse2_comigt_sd : GCCBuiltin<"__builtin_ia32_comisdgt">,
    316               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    317                          llvm_v2f64_ty], [IntrNoMem]>;
    318   def int_x86_sse2_comige_sd : GCCBuiltin<"__builtin_ia32_comisdge">,
    319               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    320                          llvm_v2f64_ty], [IntrNoMem]>;
    321   def int_x86_sse2_comineq_sd : GCCBuiltin<"__builtin_ia32_comisdneq">,
    322               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    323                          llvm_v2f64_ty], [IntrNoMem]>;
    324   def int_x86_sse2_ucomieq_sd : GCCBuiltin<"__builtin_ia32_ucomisdeq">,
    325               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    326                          llvm_v2f64_ty], [IntrNoMem]>;
    327   def int_x86_sse2_ucomilt_sd : GCCBuiltin<"__builtin_ia32_ucomisdlt">,
    328               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    329                          llvm_v2f64_ty], [IntrNoMem]>;
    330   def int_x86_sse2_ucomile_sd : GCCBuiltin<"__builtin_ia32_ucomisdle">,
    331               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    332                          llvm_v2f64_ty], [IntrNoMem]>;
    333   def int_x86_sse2_ucomigt_sd : GCCBuiltin<"__builtin_ia32_ucomisdgt">,
    334               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    335                          llvm_v2f64_ty], [IntrNoMem]>;
    336   def int_x86_sse2_ucomige_sd : GCCBuiltin<"__builtin_ia32_ucomisdge">,
    337               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    338                          llvm_v2f64_ty], [IntrNoMem]>;
    339   def int_x86_sse2_ucomineq_sd : GCCBuiltin<"__builtin_ia32_ucomisdneq">,
    340               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
    341                          llvm_v2f64_ty], [IntrNoMem]>;
    342 }
    343 
    344 // Integer arithmetic ops.
    345 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    346   def int_x86_sse2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb128">,
    347               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    348                          llvm_v16i8_ty], [IntrNoMem, Commutative]>;
    349   def int_x86_sse2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw128">,
    350               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    351                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    352   def int_x86_sse2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb128">,
    353               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    354                          llvm_v16i8_ty], [IntrNoMem, Commutative]>;
    355   def int_x86_sse2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw128">,
    356               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    357                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    358   def int_x86_sse2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb128">,
    359               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    360                          llvm_v16i8_ty], [IntrNoMem]>;
    361   def int_x86_sse2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw128">,
    362               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    363                          llvm_v8i16_ty], [IntrNoMem]>;
    364   def int_x86_sse2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb128">,
    365               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    366                          llvm_v16i8_ty], [IntrNoMem]>;
    367   def int_x86_sse2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw128">,
    368               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    369                          llvm_v8i16_ty], [IntrNoMem]>;
    370   def int_x86_sse2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw128">,
    371               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    372                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    373   def int_x86_sse2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw128">,
    374               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    375                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    376   def int_x86_sse2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq128">,
    377               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty,
    378                          llvm_v4i32_ty], [IntrNoMem, Commutative]>;
    379   def int_x86_sse2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd128">,
    380               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty,
    381                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    382   def int_x86_sse2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb128">,
    383               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    384                          llvm_v16i8_ty], [IntrNoMem, Commutative]>;
    385   def int_x86_sse2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw128">,
    386               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    387                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    388   def int_x86_sse2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw128">,
    389               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty,
    390                          llvm_v16i8_ty], [IntrNoMem, Commutative]>;
    391 }
    392 
    393 // Integer shift ops.
    394 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    395   def int_x86_sse2_psll_w : GCCBuiltin<"__builtin_ia32_psllw128">,
    396               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    397                          llvm_v8i16_ty], [IntrNoMem]>;
    398   def int_x86_sse2_psll_d : GCCBuiltin<"__builtin_ia32_pslld128">,
    399               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    400                          llvm_v4i32_ty], [IntrNoMem]>;
    401   def int_x86_sse2_psll_q : GCCBuiltin<"__builtin_ia32_psllq128">,
    402               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    403                          llvm_v2i64_ty], [IntrNoMem]>;
    404   def int_x86_sse2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw128">,
    405               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    406                          llvm_v8i16_ty], [IntrNoMem]>;
    407   def int_x86_sse2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld128">,
    408               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    409                          llvm_v4i32_ty], [IntrNoMem]>;
    410   def int_x86_sse2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq128">,
    411               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    412                          llvm_v2i64_ty], [IntrNoMem]>;
    413   def int_x86_sse2_psra_w : GCCBuiltin<"__builtin_ia32_psraw128">,
    414               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    415                          llvm_v8i16_ty], [IntrNoMem]>;
    416   def int_x86_sse2_psra_d : GCCBuiltin<"__builtin_ia32_psrad128">,
    417               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    418                          llvm_v4i32_ty], [IntrNoMem]>;
    419 
    420   def int_x86_sse2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi128">,
    421               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    422                          llvm_i32_ty], [IntrNoMem]>;
    423   def int_x86_sse2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi128">,
    424               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    425                          llvm_i32_ty], [IntrNoMem]>;
    426   def int_x86_sse2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi128">,
    427               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    428                          llvm_i32_ty], [IntrNoMem]>;
    429   def int_x86_sse2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi128">,
    430               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    431                          llvm_i32_ty], [IntrNoMem]>;
    432   def int_x86_sse2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi128">,
    433               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    434                          llvm_i32_ty], [IntrNoMem]>;
    435   def int_x86_sse2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi128">,
    436               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    437                          llvm_i32_ty], [IntrNoMem]>;
    438   def int_x86_sse2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi128">,
    439               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    440                          llvm_i32_ty], [IntrNoMem]>;
    441   def int_x86_sse2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi128">,
    442               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    443                          llvm_i32_ty], [IntrNoMem]>;
    444 }
    445 
    446 // Conversion ops
    447 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    448   def int_x86_sse2_cvtdq2ps : GCCBuiltin<"__builtin_ia32_cvtdq2ps">,
    449               Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
    450   def int_x86_sse2_cvtpd2dq : GCCBuiltin<"__builtin_ia32_cvtpd2dq">,
    451               Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    452   def int_x86_sse2_cvttpd2dq : GCCBuiltin<"__builtin_ia32_cvttpd2dq">,
    453               Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    454   def int_x86_sse2_cvtpd2ps : GCCBuiltin<"__builtin_ia32_cvtpd2ps">,
    455               Intrinsic<[llvm_v4f32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    456   def int_x86_sse2_cvtps2dq : GCCBuiltin<"__builtin_ia32_cvtps2dq">,
    457               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    458   def int_x86_sse2_cvttps2dq : GCCBuiltin<"__builtin_ia32_cvttps2dq">,
    459               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    460   def int_x86_sse2_cvtsd2si : GCCBuiltin<"__builtin_ia32_cvtsd2si">,
    461               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    462   def int_x86_sse2_cvtsd2si64 : GCCBuiltin<"__builtin_ia32_cvtsd2si64">,
    463               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    464   def int_x86_sse2_cvttsd2si : GCCBuiltin<"__builtin_ia32_cvttsd2si">,
    465               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    466   def int_x86_sse2_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_cvttsd2si64">,
    467               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    468   def int_x86_sse2_cvtsi2sd : // TODO: Remove this intrinsic.
    469               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    470                          llvm_i32_ty], [IntrNoMem]>;
    471   def int_x86_sse2_cvtsi642sd : // TODO: Remove this intrinsic.
    472               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    473                          llvm_i64_ty], [IntrNoMem]>;
    474   def int_x86_sse2_cvtsd2ss : GCCBuiltin<"__builtin_ia32_cvtsd2ss">,
    475               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    476                          llvm_v2f64_ty], [IntrNoMem]>;
    477   def int_x86_sse2_cvtss2sd : // TODO: Remove this intrinsic.
    478               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    479                          llvm_v4f32_ty], [IntrNoMem]>;
    480   def int_x86_sse_cvtpd2pi : GCCBuiltin<"__builtin_ia32_cvtpd2pi">,
    481               Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    482   def int_x86_sse_cvttpd2pi: GCCBuiltin<"__builtin_ia32_cvttpd2pi">,
    483               Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    484   def int_x86_sse_cvtpi2pd : GCCBuiltin<"__builtin_ia32_cvtpi2pd">,
    485               Intrinsic<[llvm_v2f64_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    486 }
    487 
    488 // Misc.
    489 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    490   def int_x86_sse2_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128">,
    491               Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
    492                          llvm_v8i16_ty], [IntrNoMem]>;
    493   def int_x86_sse2_packssdw_128 : GCCBuiltin<"__builtin_ia32_packssdw128">,
    494               Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty,
    495                          llvm_v4i32_ty], [IntrNoMem]>;
    496   def int_x86_sse2_packuswb_128 : GCCBuiltin<"__builtin_ia32_packuswb128">,
    497               Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
    498                          llvm_v8i16_ty], [IntrNoMem]>;
    499   def int_x86_sse2_movmsk_pd : GCCBuiltin<"__builtin_ia32_movmskpd">,
    500               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    501   def int_x86_sse2_pmovmskb_128 : GCCBuiltin<"__builtin_ia32_pmovmskb128">,
    502               Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
    503   def int_x86_sse2_maskmov_dqu : GCCBuiltin<"__builtin_ia32_maskmovdqu">,
    504               Intrinsic<[], [llvm_v16i8_ty,
    505                          llvm_v16i8_ty, llvm_ptr_ty], []>;
    506   def int_x86_sse2_clflush : GCCBuiltin<"__builtin_ia32_clflush">,
    507               Intrinsic<[], [llvm_ptr_ty], []>;
    508   def int_x86_sse2_lfence : GCCBuiltin<"__builtin_ia32_lfence">,
    509               Intrinsic<[], [], []>;
    510   def int_x86_sse2_mfence : GCCBuiltin<"__builtin_ia32_mfence">,
    511               Intrinsic<[], [], []>;
    512   def int_x86_sse2_pause : GCCBuiltin<"__builtin_ia32_pause">,
    513               Intrinsic<[], [], []>;
    514 }
    515 
    516 //===----------------------------------------------------------------------===//
    517 // SSE3
    518 
    519 // Addition / subtraction ops.
    520 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    521   def int_x86_sse3_addsub_ps : GCCBuiltin<"__builtin_ia32_addsubps">,
    522               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    523                          llvm_v4f32_ty], [IntrNoMem]>;
    524   def int_x86_sse3_addsub_pd : GCCBuiltin<"__builtin_ia32_addsubpd">,
    525               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    526                          llvm_v2f64_ty], [IntrNoMem]>;
    527 }
    528 
    529 // Horizontal ops.
    530 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    531   def int_x86_sse3_hadd_ps : GCCBuiltin<"__builtin_ia32_haddps">,
    532               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    533                          llvm_v4f32_ty], [IntrNoMem]>;
    534   def int_x86_sse3_hadd_pd : GCCBuiltin<"__builtin_ia32_haddpd">,
    535               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    536                          llvm_v2f64_ty], [IntrNoMem]>;
    537   def int_x86_sse3_hsub_ps : GCCBuiltin<"__builtin_ia32_hsubps">,
    538               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    539                          llvm_v4f32_ty], [IntrNoMem]>;
    540   def int_x86_sse3_hsub_pd : GCCBuiltin<"__builtin_ia32_hsubpd">,
    541               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    542                          llvm_v2f64_ty], [IntrNoMem]>;
    543 }
    544 
    545 // Specialized unaligned load.
    546 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    547   def int_x86_sse3_ldu_dq : GCCBuiltin<"__builtin_ia32_lddqu">,
    548               Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
    549 }
    550 
    551 // Thread synchronization ops.
    552 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    553   def int_x86_sse3_monitor : GCCBuiltin<"__builtin_ia32_monitor">,
    554               Intrinsic<[], [llvm_ptr_ty,
    555                          llvm_i32_ty, llvm_i32_ty], []>;
    556   def int_x86_sse3_mwait : GCCBuiltin<"__builtin_ia32_mwait">,
    557               Intrinsic<[], [llvm_i32_ty,
    558                          llvm_i32_ty], []>;
    559 }
    560 
    561 //===----------------------------------------------------------------------===//
    562 // SSSE3
    563 
    564 // Horizontal arithmetic ops
    565 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    566   def int_x86_ssse3_phadd_w         : GCCBuiltin<"__builtin_ia32_phaddw">,
    567               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    568                          llvm_x86mmx_ty], [IntrNoMem]>;
    569   def int_x86_ssse3_phadd_w_128     : GCCBuiltin<"__builtin_ia32_phaddw128">,
    570               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    571                          llvm_v8i16_ty], [IntrNoMem]>;
    572 
    573   def int_x86_ssse3_phadd_d         : GCCBuiltin<"__builtin_ia32_phaddd">,
    574               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    575                          llvm_x86mmx_ty], [IntrNoMem]>;
    576   def int_x86_ssse3_phadd_d_128     : GCCBuiltin<"__builtin_ia32_phaddd128">,
    577               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    578                          llvm_v4i32_ty], [IntrNoMem]>;
    579 
    580   def int_x86_ssse3_phadd_sw        : GCCBuiltin<"__builtin_ia32_phaddsw">,
    581               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    582                          llvm_x86mmx_ty], [IntrNoMem]>;
    583   def int_x86_ssse3_phadd_sw_128    : GCCBuiltin<"__builtin_ia32_phaddsw128">,
    584               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    585                          llvm_v8i16_ty], [IntrNoMem]>;
    586 
    587   def int_x86_ssse3_phsub_w         : GCCBuiltin<"__builtin_ia32_phsubw">,
    588               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    589                          llvm_x86mmx_ty], [IntrNoMem]>;
    590   def int_x86_ssse3_phsub_w_128     : GCCBuiltin<"__builtin_ia32_phsubw128">,
    591               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    592                          llvm_v8i16_ty], [IntrNoMem]>;
    593 
    594   def int_x86_ssse3_phsub_d         : GCCBuiltin<"__builtin_ia32_phsubd">,
    595               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    596                          llvm_x86mmx_ty], [IntrNoMem]>;
    597   def int_x86_ssse3_phsub_d_128     : GCCBuiltin<"__builtin_ia32_phsubd128">,
    598               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    599                          llvm_v4i32_ty], [IntrNoMem]>;
    600 
    601   def int_x86_ssse3_phsub_sw        : GCCBuiltin<"__builtin_ia32_phsubsw">,
    602               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    603                          llvm_x86mmx_ty], [IntrNoMem]>;
    604   def int_x86_ssse3_phsub_sw_128    : GCCBuiltin<"__builtin_ia32_phsubsw128">,
    605               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    606                          llvm_v8i16_ty], [IntrNoMem]>;
    607 
    608   def int_x86_ssse3_pmadd_ub_sw     : GCCBuiltin<"__builtin_ia32_pmaddubsw">,
    609               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    610                          llvm_x86mmx_ty], [IntrNoMem]>;
    611   def int_x86_ssse3_pmadd_ub_sw_128 : GCCBuiltin<"__builtin_ia32_pmaddubsw128">,
    612               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty,
    613                          llvm_v16i8_ty], [IntrNoMem]>;
    614 }
    615 
    616 // Packed multiply high with round and scale
    617 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    618   def int_x86_ssse3_pmul_hr_sw      : GCCBuiltin<"__builtin_ia32_pmulhrsw">,
    619               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    620                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
    621   def int_x86_ssse3_pmul_hr_sw_128  : GCCBuiltin<"__builtin_ia32_pmulhrsw128">,
    622               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    623                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    624 }
    625 
    626 // Shuffle ops
    627 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    628   def int_x86_ssse3_pshuf_b         : GCCBuiltin<"__builtin_ia32_pshufb">,
    629               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    630                          llvm_x86mmx_ty], [IntrNoMem]>;
    631   def int_x86_ssse3_pshuf_b_128     : GCCBuiltin<"__builtin_ia32_pshufb128">,
    632               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    633                          llvm_v16i8_ty], [IntrNoMem]>;
    634   def int_x86_sse_pshuf_w           : GCCBuiltin<"__builtin_ia32_pshufw">,
    635               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty],
    636                          [IntrNoMem]>;
    637 }
    638 
    639 // Sign ops
    640 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    641   def int_x86_ssse3_psign_b         : GCCBuiltin<"__builtin_ia32_psignb">,
    642               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    643                          llvm_x86mmx_ty], [IntrNoMem]>;
    644   def int_x86_ssse3_psign_b_128     : GCCBuiltin<"__builtin_ia32_psignb128">,
    645               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    646                          llvm_v16i8_ty], [IntrNoMem]>;
    647 
    648   def int_x86_ssse3_psign_w         : GCCBuiltin<"__builtin_ia32_psignw">,
    649               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    650                          llvm_x86mmx_ty], [IntrNoMem]>;
    651   def int_x86_ssse3_psign_w_128     : GCCBuiltin<"__builtin_ia32_psignw128">,
    652               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    653                          llvm_v8i16_ty], [IntrNoMem]>;
    654 
    655   def int_x86_ssse3_psign_d         : GCCBuiltin<"__builtin_ia32_psignd">,
    656               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    657                          llvm_x86mmx_ty], [IntrNoMem]>;
    658   def int_x86_ssse3_psign_d_128     : GCCBuiltin<"__builtin_ia32_psignd128">,
    659               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    660                          llvm_v4i32_ty], [IntrNoMem]>;
    661 }
    662 
    663 // Absolute value ops
    664 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    665   def int_x86_ssse3_pabs_b     : GCCBuiltin<"__builtin_ia32_pabsb">,
    666               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    667   def int_x86_ssse3_pabs_b_128 : GCCBuiltin<"__builtin_ia32_pabsb128">,
    668               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
    669 
    670   def int_x86_ssse3_pabs_w     : GCCBuiltin<"__builtin_ia32_pabsw">,
    671               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    672   def int_x86_ssse3_pabs_w_128 : GCCBuiltin<"__builtin_ia32_pabsw128">,
    673               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
    674 
    675   def int_x86_ssse3_pabs_d     : GCCBuiltin<"__builtin_ia32_pabsd">,
    676               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    677   def int_x86_ssse3_pabs_d_128 : GCCBuiltin<"__builtin_ia32_pabsd128">,
    678               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
    679 }
    680 
    681 //===----------------------------------------------------------------------===//
    682 // SSE4.1
    683 
    684 // FP rounding ops
    685 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    686   def int_x86_sse41_round_ss        : GCCBuiltin<"__builtin_ia32_roundss">,
    687               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
    688                          llvm_i32_ty], [IntrNoMem]>;
    689   def int_x86_sse41_round_ps        : GCCBuiltin<"__builtin_ia32_roundps">,
    690               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    691                          llvm_i32_ty], [IntrNoMem]>;
    692   def int_x86_sse41_round_sd        : GCCBuiltin<"__builtin_ia32_roundsd">,
    693               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
    694                          llvm_i32_ty], [IntrNoMem]>;
    695   def int_x86_sse41_round_pd        : GCCBuiltin<"__builtin_ia32_roundpd">,
    696               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    697                          llvm_i32_ty], [IntrNoMem]>;
    698 }
    699 
    700 // Vector min element
    701 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    702   def int_x86_sse41_phminposuw     : GCCBuiltin<"__builtin_ia32_phminposuw128">,
    703               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty],
    704                         [IntrNoMem]>;
    705 }
    706 
    707 // Advanced Encryption Standard (AES) Instructions
    708 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    709   def int_x86_aesni_aesimc          : GCCBuiltin<"__builtin_ia32_aesimc128">,
    710               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty],
    711                         [IntrNoMem]>;
    712   def int_x86_aesni_aesenc          : GCCBuiltin<"__builtin_ia32_aesenc128">,
    713               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    714                         [IntrNoMem]>;
    715   def int_x86_aesni_aesenclast : GCCBuiltin<"__builtin_ia32_aesenclast128">,
    716               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    717                         [IntrNoMem]>;
    718   def int_x86_aesni_aesdec          : GCCBuiltin<"__builtin_ia32_aesdec128">,
    719               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    720                         [IntrNoMem]>;
    721   def int_x86_aesni_aesdeclast : GCCBuiltin<"__builtin_ia32_aesdeclast128">,
    722               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    723                         [IntrNoMem]>;
    724   def int_x86_aesni_aeskeygenassist :
    725               GCCBuiltin<"__builtin_ia32_aeskeygenassist128">,
    726               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
    727                         [IntrNoMem]>;
    728 }
    729 
    730 // PCLMUL instruction
    731 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
    732   def int_x86_pclmulqdq : GCCBuiltin<"__builtin_ia32_pclmulqdq128">,
    733           Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
    734                     [IntrNoMem]>;
    735 }
    736 
    737 // Vector pack
    738 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    739   def int_x86_sse41_packusdw        : GCCBuiltin<"__builtin_ia32_packusdw128">,
    740               Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    741                         [IntrNoMem]>;
    742 }
    743 
    744 // Vector multiply
    745 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    746   def int_x86_sse41_pmuldq          : GCCBuiltin<"__builtin_ia32_pmuldq128">,
    747               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    748                         [IntrNoMem, Commutative]>;
    749 }
    750 
    751 // Vector insert
    752 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    753   def int_x86_sse41_insertps       : GCCBuiltin<"__builtin_ia32_insertps128">,
    754           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
    755                     [IntrNoMem]>;
    756 }
    757 
    758 // Vector blend
    759 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    760   def int_x86_sse41_pblendvb         : GCCBuiltin<"__builtin_ia32_pblendvb128">,
    761         Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_v16i8_ty],
    762                   [IntrNoMem]>;
    763   def int_x86_sse41_blendvpd         : GCCBuiltin<"__builtin_ia32_blendvpd">,
    764         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,llvm_v2f64_ty],
    765                   [IntrNoMem]>;
    766   def int_x86_sse41_blendvps         : GCCBuiltin<"__builtin_ia32_blendvps">,
    767         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_v4f32_ty],
    768                   [IntrNoMem]>;
    769 }
    770 
    771 // Vector dot product
    772 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    773   def int_x86_sse41_dppd            : GCCBuiltin<"__builtin_ia32_dppd">,
    774           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
    775                     [IntrNoMem, Commutative]>;
    776   def int_x86_sse41_dpps            : GCCBuiltin<"__builtin_ia32_dpps">,
    777           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
    778                     [IntrNoMem, Commutative]>;
    779 }
    780 
    781 // Vector sum of absolute differences
    782 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    783   def int_x86_sse41_mpsadbw         : GCCBuiltin<"__builtin_ia32_mpsadbw128">,
    784           Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_i8_ty],
    785                     [IntrNoMem, Commutative]>;
    786 }
    787 
    788 // Cacheability support ops
    789 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    790   def int_x86_sse41_movntdqa        : GCCBuiltin<"__builtin_ia32_movntdqa">,
    791           Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
    792 }
    793 
    794 // Test instruction with bitwise comparison.
    795 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
    796   def int_x86_sse41_ptestz          : GCCBuiltin<"__builtin_ia32_ptestz128">,
    797           Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    798                     [IntrNoMem]>;
    799   def int_x86_sse41_ptestc          : GCCBuiltin<"__builtin_ia32_ptestc128">,
    800           Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    801                     [IntrNoMem]>;
    802   def int_x86_sse41_ptestnzc        : GCCBuiltin<"__builtin_ia32_ptestnzc128">,
    803           Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    804                     [IntrNoMem]>;
    805 }
    806 
    807 //===----------------------------------------------------------------------===//
    808 // SSE4.2
    809 
    810 // Miscellaneous
    811 // CRC Instruction
    812 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
    813   def int_x86_sse42_crc32_32_8       : GCCBuiltin<"__builtin_ia32_crc32qi">,
    814           Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i8_ty],
    815                     [IntrNoMem]>;
    816   def int_x86_sse42_crc32_32_16      : GCCBuiltin<"__builtin_ia32_crc32hi">,
    817           Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i16_ty],
    818                     [IntrNoMem]>;
    819   def int_x86_sse42_crc32_32_32      : GCCBuiltin<"__builtin_ia32_crc32si">,
    820           Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
    821                     [IntrNoMem]>;
    822   def int_x86_sse42_crc32_64_64      : GCCBuiltin<"__builtin_ia32_crc32di">,
    823           Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
    824                     [IntrNoMem]>;
    825 }
    826 
    827 // String/text processing ops.
    828 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
    829   def int_x86_sse42_pcmpistrm128  : GCCBuiltin<"__builtin_ia32_pcmpistrm128">,
    830     Intrinsic<[llvm_v16i8_ty],
    831         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    832         [IntrNoMem]>;
    833   def int_x86_sse42_pcmpistri128  : GCCBuiltin<"__builtin_ia32_pcmpistri128">,
    834     Intrinsic<[llvm_i32_ty],
    835         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    836         [IntrNoMem]>;
    837   def int_x86_sse42_pcmpistria128 : GCCBuiltin<"__builtin_ia32_pcmpistria128">,
    838     Intrinsic<[llvm_i32_ty],
    839         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    840         [IntrNoMem]>;
    841   def int_x86_sse42_pcmpistric128 : GCCBuiltin<"__builtin_ia32_pcmpistric128">,
    842     Intrinsic<[llvm_i32_ty],
    843         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    844         [IntrNoMem]>;
    845   def int_x86_sse42_pcmpistrio128 : GCCBuiltin<"__builtin_ia32_pcmpistrio128">,
    846     Intrinsic<[llvm_i32_ty],
    847         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    848         [IntrNoMem]>;
    849   def int_x86_sse42_pcmpistris128 : GCCBuiltin<"__builtin_ia32_pcmpistris128">,
    850     Intrinsic<[llvm_i32_ty],
    851         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    852         [IntrNoMem]>;
    853   def int_x86_sse42_pcmpistriz128 : GCCBuiltin<"__builtin_ia32_pcmpistriz128">,
    854     Intrinsic<[llvm_i32_ty],
    855         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    856         [IntrNoMem]>;
    857   def int_x86_sse42_pcmpestrm128  : GCCBuiltin<"__builtin_ia32_pcmpestrm128">,
    858     Intrinsic<[llvm_v16i8_ty],
    859         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
    860          llvm_i8_ty],
    861         [IntrNoMem]>;
    862   def int_x86_sse42_pcmpestri128  : GCCBuiltin<"__builtin_ia32_pcmpestri128">,
    863     Intrinsic<[llvm_i32_ty],
    864         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
    865          llvm_i8_ty],
    866         [IntrNoMem]>;
    867   def int_x86_sse42_pcmpestria128 : GCCBuiltin<"__builtin_ia32_pcmpestria128">,
    868     Intrinsic<[llvm_i32_ty],
    869         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
    870          llvm_i8_ty],
    871         [IntrNoMem]>;
    872   def int_x86_sse42_pcmpestric128 : GCCBuiltin<"__builtin_ia32_pcmpestric128">,
    873     Intrinsic<[llvm_i32_ty],
    874         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
    875          llvm_i8_ty],
    876         [IntrNoMem]>;
    877   def int_x86_sse42_pcmpestrio128 : GCCBuiltin<"__builtin_ia32_pcmpestrio128">,
    878     Intrinsic<[llvm_i32_ty],
    879         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
    880          llvm_i8_ty],
    881         [IntrNoMem]>;
    882   def int_x86_sse42_pcmpestris128 : GCCBuiltin<"__builtin_ia32_pcmpestris128">,
    883     Intrinsic<[llvm_i32_ty],
    884         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
    885          llvm_i8_ty],
    886         [IntrNoMem]>;
    887   def int_x86_sse42_pcmpestriz128 : GCCBuiltin<"__builtin_ia32_pcmpestriz128">,
    888     Intrinsic<[llvm_i32_ty],
    889         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
    890          llvm_i8_ty],
    891         [IntrNoMem]>;
    892 }
    893 
    894 //===----------------------------------------------------------------------===//
    895 // SSE4A
    896 
    897 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    898   def int_x86_sse4a_extrqi : GCCBuiltin<"__builtin_ia32_extrqi">,
    899     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty, llvm_i8_ty],
    900               [IntrNoMem]>;
    901   def int_x86_sse4a_extrq  : GCCBuiltin<"__builtin_ia32_extrq">,
    902     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty], [IntrNoMem]>;
    903 
    904   def int_x86_sse4a_insertqi : GCCBuiltin<"__builtin_ia32_insertqi">,
    905     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
    906                                 llvm_i8_ty, llvm_i8_ty], [IntrNoMem]>;
    907   def int_x86_sse4a_insertq  : GCCBuiltin<"__builtin_ia32_insertq">,
    908     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
    909 }
    910 
    911 //===----------------------------------------------------------------------===//
    912 // AVX
    913 
    914 // Arithmetic ops
    915 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    916   def int_x86_avx_addsub_pd_256 : GCCBuiltin<"__builtin_ia32_addsubpd256">,
    917         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
    918                   llvm_v4f64_ty], [IntrNoMem]>;
    919   def int_x86_avx_addsub_ps_256 : GCCBuiltin<"__builtin_ia32_addsubps256">,
    920         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
    921                   llvm_v8f32_ty], [IntrNoMem]>;
    922   def int_x86_avx_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256">,
    923         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
    924                   llvm_v4f64_ty], [IntrNoMem]>;
    925   def int_x86_avx_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256">,
    926         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
    927                   llvm_v8f32_ty], [IntrNoMem]>;
    928   def int_x86_avx_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256">,
    929         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
    930                   llvm_v4f64_ty], [IntrNoMem]>;
    931   def int_x86_avx_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256">,
    932         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
    933                   llvm_v8f32_ty], [IntrNoMem]>;
    934 
    935   def int_x86_avx_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256">,
    936         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
    937   def int_x86_avx_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256">,
    938         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
    939 
    940   def int_x86_avx_rsqrt_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrtps256">,
    941         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
    942 
    943   def int_x86_avx_rcp_ps_256 : GCCBuiltin<"__builtin_ia32_rcpps256">,
    944         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
    945 
    946   def int_x86_avx_round_pd_256 : GCCBuiltin<"__builtin_ia32_roundpd256">,
    947         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
    948                   llvm_i32_ty], [IntrNoMem]>;
    949   def int_x86_avx_round_ps_256 : GCCBuiltin<"__builtin_ia32_roundps256">,
    950         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
    951                   llvm_i32_ty], [IntrNoMem]>;
    952 }
    953 
    954 // Horizontal ops
    955 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    956   def int_x86_avx_hadd_pd_256 : GCCBuiltin<"__builtin_ia32_haddpd256">,
    957         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
    958                   llvm_v4f64_ty], [IntrNoMem]>;
    959   def int_x86_avx_hsub_ps_256 : GCCBuiltin<"__builtin_ia32_hsubps256">,
    960         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
    961                   llvm_v8f32_ty], [IntrNoMem]>;
    962   def int_x86_avx_hsub_pd_256 : GCCBuiltin<"__builtin_ia32_hsubpd256">,
    963         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
    964                   llvm_v4f64_ty], [IntrNoMem]>;
    965   def int_x86_avx_hadd_ps_256 : GCCBuiltin<"__builtin_ia32_haddps256">,
    966         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
    967                   llvm_v8f32_ty], [IntrNoMem]>;
    968 }
    969 
    970 // Vector permutation
    971 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    972   def int_x86_avx_vpermilvar_pd : GCCBuiltin<"__builtin_ia32_vpermilvarpd">,
    973         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    974                   llvm_v2i64_ty], [IntrNoMem]>;
    975   def int_x86_avx_vpermilvar_ps : GCCBuiltin<"__builtin_ia32_vpermilvarps">,
    976         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    977                   llvm_v4i32_ty], [IntrNoMem]>;
    978 
    979   def int_x86_avx_vpermilvar_pd_256 :
    980         GCCBuiltin<"__builtin_ia32_vpermilvarpd256">,
    981         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4i64_ty], [IntrNoMem]>;
    982   def int_x86_avx_vpermilvar_ps_256 :
    983         GCCBuiltin<"__builtin_ia32_vpermilvarps256">,
    984         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty], [IntrNoMem]>;
    985 
    986   def int_x86_avx_vperm2f128_pd_256 :
    987         GCCBuiltin<"__builtin_ia32_vperm2f128_pd256">,
    988         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
    989                   llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
    990   def int_x86_avx_vperm2f128_ps_256 :
    991         GCCBuiltin<"__builtin_ia32_vperm2f128_ps256">,
    992         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
    993                   llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
    994   def int_x86_avx_vperm2f128_si_256 :
    995         GCCBuiltin<"__builtin_ia32_vperm2f128_si256">,
    996         Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
    997                   llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
    998 
    999   def int_x86_avx512_mask_vpermi2var_d_128 :
   1000        GCCBuiltin<"__builtin_ia32_vpermi2vard128_mask">,
   1001         Intrinsic<[llvm_v4i32_ty],
   1002         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
   1003         [IntrNoMem]>;
   1004 
   1005   def int_x86_avx512_mask_vpermi2var_d_256 :
   1006         GCCBuiltin<"__builtin_ia32_vpermi2vard256_mask">,
   1007           Intrinsic<[llvm_v8i32_ty],
   1008           [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
   1009           [IntrNoMem]>;
   1010 
   1011   def int_x86_avx512_mask_vpermi2var_d_512 :
   1012         GCCBuiltin<"__builtin_ia32_vpermi2vard512_mask">,
   1013           Intrinsic<[llvm_v16i32_ty],
   1014           [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
   1015           [IntrNoMem]>;
   1016 
   1017   def int_x86_avx512_mask_vpermi2var_hi_128 :
   1018         GCCBuiltin<"__builtin_ia32_vpermi2varhi128_mask">,
   1019           Intrinsic<[llvm_v8i16_ty],
   1020           [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
   1021           [IntrNoMem]>;
   1022 
   1023   def int_x86_avx512_mask_vpermi2var_hi_256 :
   1024         GCCBuiltin<"__builtin_ia32_vpermi2varhi256_mask">,
   1025           Intrinsic<[llvm_v16i16_ty],
   1026           [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
   1027           [IntrNoMem]>;
   1028 
   1029   def int_x86_avx512_mask_vpermi2var_hi_512 :
   1030         GCCBuiltin<"__builtin_ia32_vpermi2varhi512_mask">,
   1031           Intrinsic<[llvm_v32i16_ty],
   1032           [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
   1033           [IntrNoMem]>;
   1034 
   1035   def int_x86_avx512_mask_vpermi2var_pd_128 :
   1036         GCCBuiltin<"__builtin_ia32_vpermi2varpd128_mask">,
   1037           Intrinsic<[llvm_v2f64_ty],
   1038           [llvm_v2f64_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
   1039           [IntrNoMem]>;
   1040 
   1041   def int_x86_avx512_mask_vpermi2var_pd_256 :
   1042         GCCBuiltin<"__builtin_ia32_vpermi2varpd256_mask">,
   1043           Intrinsic<[llvm_v4f64_ty],
   1044           [llvm_v4f64_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
   1045           [IntrNoMem]>;
   1046 
   1047   def int_x86_avx512_mask_vpermi2var_pd_512 :
   1048         GCCBuiltin<"__builtin_ia32_vpermi2varpd512_mask">,
   1049           Intrinsic<[llvm_v8f64_ty],
   1050           [llvm_v8f64_ty, llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty],
   1051           [IntrNoMem]>;
   1052 
   1053   def int_x86_avx512_mask_vpermi2var_ps_128 :
   1054         GCCBuiltin<"__builtin_ia32_vpermi2varps128_mask">,
   1055           Intrinsic<[llvm_v4f32_ty],
   1056           [llvm_v4f32_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
   1057           [IntrNoMem]>;
   1058 
   1059   def int_x86_avx512_mask_vpermi2var_ps_256 :
   1060         GCCBuiltin<"__builtin_ia32_vpermi2varps256_mask">,
   1061           Intrinsic<[llvm_v8f32_ty],
   1062           [llvm_v8f32_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
   1063           [IntrNoMem]>;
   1064 
   1065   def int_x86_avx512_mask_vpermi2var_ps_512 :
   1066         GCCBuiltin<"__builtin_ia32_vpermi2varps512_mask">,
   1067           Intrinsic<[llvm_v16f32_ty],
   1068           [llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty],
   1069           [IntrNoMem]>;
   1070 
   1071   def int_x86_avx512_mask_vpermi2var_q_128 :
   1072         GCCBuiltin<"__builtin_ia32_vpermi2varq128_mask">,
   1073           Intrinsic<[llvm_v2i64_ty],
   1074           [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
   1075           [IntrNoMem]>;
   1076 
   1077   def int_x86_avx512_mask_vpermi2var_q_256 :
   1078         GCCBuiltin<"__builtin_ia32_vpermi2varq256_mask">,
   1079           Intrinsic<[llvm_v4i64_ty],
   1080           [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
   1081           [IntrNoMem]>;
   1082 
   1083   def int_x86_avx512_mask_vpermi2var_q_512 :
   1084         GCCBuiltin<"__builtin_ia32_vpermi2varq512_mask">,
   1085           Intrinsic<[llvm_v8i64_ty],
   1086           [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
   1087           [IntrNoMem]>;
   1088 
   1089   def int_x86_avx512_mask_vpermt2var_d_512:
   1090         GCCBuiltin<"__builtin_ia32_vpermt2vard512_mask">,
   1091         Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   1092                   llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   1093 
   1094   def int_x86_avx512_mask_vpermt2var_q_512:
   1095         GCCBuiltin<"__builtin_ia32_vpermt2varq512_mask">,
   1096         Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   1097                   llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1098 
   1099   def int_x86_avx512_mask_vpermt2var_ps_512:
   1100         GCCBuiltin<"__builtin_ia32_vpermt2varps512_mask">,
   1101         Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty,
   1102                   llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
   1103 
   1104   def int_x86_avx512_mask_vpermt2var_pd_512:
   1105         GCCBuiltin<"__builtin_ia32_vpermt2varpd512_mask">,
   1106         Intrinsic<[llvm_v8f64_ty], [llvm_v8i64_ty,
   1107                   llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
   1108 
   1109   def int_x86_avx512_mask_vpermt2var_d_128 :
   1110         GCCBuiltin<"__builtin_ia32_vpermt2vard128_mask">,
   1111           Intrinsic<[llvm_v4i32_ty],
   1112           [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
   1113           [IntrNoMem]>;
   1114 
   1115   def int_x86_avx512_maskz_vpermt2var_d_128 :
   1116         GCCBuiltin<"__builtin_ia32_vpermt2vard128_maskz">,
   1117           Intrinsic<[llvm_v4i32_ty],
   1118           [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
   1119           [IntrNoMem]>;
   1120 
   1121   def int_x86_avx512_mask_vpermt2var_d_256 :
   1122         GCCBuiltin<"__builtin_ia32_vpermt2vard256_mask">,
   1123           Intrinsic<[llvm_v8i32_ty],
   1124           [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
   1125           [IntrNoMem]>;
   1126 
   1127   def int_x86_avx512_maskz_vpermt2var_d_256 :
   1128         GCCBuiltin<"__builtin_ia32_vpermt2vard256_maskz">,
   1129           Intrinsic<[llvm_v8i32_ty],
   1130           [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
   1131           [IntrNoMem]>;
   1132 
   1133   def int_x86_avx512_maskz_vpermt2var_d_512 :
   1134         GCCBuiltin<"__builtin_ia32_vpermt2vard512_maskz">,
   1135           Intrinsic<[llvm_v16i32_ty],
   1136           [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
   1137           [IntrNoMem]>;
   1138 
   1139   def int_x86_avx512_mask_vpermt2var_hi_128 :
   1140         GCCBuiltin<"__builtin_ia32_vpermt2varhi128_mask">,
   1141           Intrinsic<[llvm_v8i16_ty],
   1142           [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
   1143           [IntrNoMem]>;
   1144 
   1145   def int_x86_avx512_maskz_vpermt2var_hi_128 :
   1146         GCCBuiltin<"__builtin_ia32_vpermt2varhi128_maskz">,
   1147           Intrinsic<[llvm_v8i16_ty],
   1148           [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
   1149           [IntrNoMem]>;
   1150 
   1151   def int_x86_avx512_mask_vpermt2var_hi_256 :
   1152         GCCBuiltin<"__builtin_ia32_vpermt2varhi256_mask">,
   1153           Intrinsic<[llvm_v16i16_ty],
   1154           [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
   1155           [IntrNoMem]>;
   1156 
   1157   def int_x86_avx512_maskz_vpermt2var_hi_256 :
   1158         GCCBuiltin<"__builtin_ia32_vpermt2varhi256_maskz">,
   1159           Intrinsic<[llvm_v16i16_ty],
   1160           [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
   1161           [IntrNoMem]>;
   1162 
   1163   def int_x86_avx512_mask_vpermt2var_hi_512 :
   1164         GCCBuiltin<"__builtin_ia32_vpermt2varhi512_mask">,
   1165           Intrinsic<[llvm_v32i16_ty],
   1166           [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
   1167           [IntrNoMem]>;
   1168 
   1169   def int_x86_avx512_maskz_vpermt2var_hi_512 :
   1170         GCCBuiltin<"__builtin_ia32_vpermt2varhi512_maskz">,
   1171           Intrinsic<[llvm_v32i16_ty],
   1172           [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
   1173           [IntrNoMem]>;
   1174 
   1175   def int_x86_avx512_mask_vpermt2var_pd_128 :
   1176         GCCBuiltin<"__builtin_ia32_vpermt2varpd128_mask">,
   1177           Intrinsic<[llvm_v2f64_ty],
   1178           [llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
   1179           [IntrNoMem]>;
   1180 
   1181   def int_x86_avx512_maskz_vpermt2var_pd_128 :
   1182         GCCBuiltin<"__builtin_ia32_vpermt2varpd128_maskz">,
   1183           Intrinsic<[llvm_v2f64_ty],
   1184           [llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
   1185           [IntrNoMem]>;
   1186 
   1187   def int_x86_avx512_mask_vpermt2var_pd_256 :
   1188         GCCBuiltin<"__builtin_ia32_vpermt2varpd256_mask">,
   1189           Intrinsic<[llvm_v4f64_ty],
   1190           [llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
   1191           [IntrNoMem]>;
   1192 
   1193   def int_x86_avx512_maskz_vpermt2var_pd_256 :
   1194         GCCBuiltin<"__builtin_ia32_vpermt2varpd256_maskz">,
   1195           Intrinsic<[llvm_v4f64_ty],
   1196           [llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
   1197           [IntrNoMem]>;
   1198 
   1199   def int_x86_avx512_maskz_vpermt2var_pd_512 :
   1200         GCCBuiltin<"__builtin_ia32_vpermt2varpd512_maskz">,
   1201           Intrinsic<[llvm_v8f64_ty],
   1202           [llvm_v8i64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
   1203           [IntrNoMem]>;
   1204 
   1205   def int_x86_avx512_mask_vpermt2var_ps_128 :
   1206         GCCBuiltin<"__builtin_ia32_vpermt2varps128_mask">,
   1207           Intrinsic<[llvm_v4f32_ty],
   1208           [llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
   1209           [IntrNoMem]>;
   1210 
   1211   def int_x86_avx512_maskz_vpermt2var_ps_128 :
   1212         GCCBuiltin<"__builtin_ia32_vpermt2varps128_maskz">,
   1213           Intrinsic<[llvm_v4f32_ty],
   1214           [llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
   1215           [IntrNoMem]>;
   1216 
   1217   def int_x86_avx512_mask_vpermt2var_ps_256 :
   1218         GCCBuiltin<"__builtin_ia32_vpermt2varps256_mask">,
   1219           Intrinsic<[llvm_v8f32_ty],
   1220           [llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
   1221           [IntrNoMem]>;
   1222 
   1223   def int_x86_avx512_maskz_vpermt2var_ps_256 :
   1224         GCCBuiltin<"__builtin_ia32_vpermt2varps256_maskz">,
   1225           Intrinsic<[llvm_v8f32_ty],
   1226           [llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
   1227           [IntrNoMem]>;
   1228 
   1229   def int_x86_avx512_maskz_vpermt2var_ps_512 :
   1230         GCCBuiltin<"__builtin_ia32_vpermt2varps512_maskz">,
   1231           Intrinsic<[llvm_v16f32_ty],
   1232           [llvm_v16i32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
   1233           [IntrNoMem]>;
   1234 
   1235   def int_x86_avx512_mask_vpermt2var_q_128 :
   1236         GCCBuiltin<"__builtin_ia32_vpermt2varq128_mask">,
   1237           Intrinsic<[llvm_v2i64_ty],
   1238           [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
   1239           [IntrNoMem]>;
   1240 
   1241   def int_x86_avx512_maskz_vpermt2var_q_128 :
   1242         GCCBuiltin<"__builtin_ia32_vpermt2varq128_maskz">,
   1243           Intrinsic<[llvm_v2i64_ty],
   1244           [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
   1245           [IntrNoMem]>;
   1246 
   1247   def int_x86_avx512_mask_vpermt2var_q_256 :
   1248         GCCBuiltin<"__builtin_ia32_vpermt2varq256_mask">,
   1249           Intrinsic<[llvm_v4i64_ty],
   1250           [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
   1251           [IntrNoMem]>;
   1252 
   1253   def int_x86_avx512_maskz_vpermt2var_q_256 :
   1254         GCCBuiltin<"__builtin_ia32_vpermt2varq256_maskz">,
   1255           Intrinsic<[llvm_v4i64_ty],
   1256           [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
   1257           [IntrNoMem]>;
   1258 
   1259   def int_x86_avx512_maskz_vpermt2var_q_512 :
   1260         GCCBuiltin<"__builtin_ia32_vpermt2varq512_maskz">,
   1261           Intrinsic<[llvm_v8i64_ty],
   1262           [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
   1263           [IntrNoMem]>;
   1264 
   1265   def int_x86_avx512_mask_vpermi2var_qi_128 :
   1266         GCCBuiltin<"__builtin_ia32_vpermi2varqi128_mask">,
   1267           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
   1268           llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
   1269           [IntrNoMem]>;
   1270 
   1271   def int_x86_avx512_mask_vpermt2var_qi_128 :
   1272         GCCBuiltin<"__builtin_ia32_vpermt2varqi128_mask">,
   1273           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
   1274           llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
   1275           [IntrNoMem]>;
   1276 
   1277   def int_x86_avx512_maskz_vpermt2var_qi_128 :
   1278         GCCBuiltin<"__builtin_ia32_vpermt2varqi128_maskz">,
   1279           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
   1280           llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
   1281           [IntrNoMem]>;
   1282 
   1283   def int_x86_avx512_mask_vpermi2var_qi_256 :
   1284         GCCBuiltin<"__builtin_ia32_vpermi2varqi256_mask">,
   1285           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1286           llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
   1287           [IntrNoMem]>;
   1288 
   1289   def int_x86_avx512_mask_vpermt2var_qi_256 :
   1290         GCCBuiltin<"__builtin_ia32_vpermt2varqi256_mask">,
   1291           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1292           llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
   1293           [IntrNoMem]>;
   1294 
   1295   def int_x86_avx512_maskz_vpermt2var_qi_256 :
   1296         GCCBuiltin<"__builtin_ia32_vpermt2varqi256_maskz">,
   1297           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1298           llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
   1299           [IntrNoMem]>;
   1300 
   1301   def int_x86_avx512_mask_vpermi2var_qi_512 :
   1302         GCCBuiltin<"__builtin_ia32_vpermi2varqi512_mask">,
   1303           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty,
   1304           llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
   1305           [IntrNoMem]>;
   1306 
   1307   def int_x86_avx512_mask_vpermt2var_qi_512 :
   1308         GCCBuiltin<"__builtin_ia32_vpermt2varqi512_mask">,
   1309           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty,
   1310           llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
   1311           [IntrNoMem]>;
   1312 
   1313   def int_x86_avx512_maskz_vpermt2var_qi_512 :
   1314         GCCBuiltin<"__builtin_ia32_vpermt2varqi512_maskz">,
   1315           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty,
   1316           llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
   1317           [IntrNoMem]>;
   1318 
   1319   def int_x86_avx512_vpermilvar_pd_512 :
   1320         GCCBuiltin<"__builtin_ia32_vpermilvarpd512">,
   1321           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8i64_ty],
   1322           [IntrNoMem]>;
   1323 
   1324   def int_x86_avx512_vpermilvar_ps_512 :
   1325         GCCBuiltin<"__builtin_ia32_vpermilvarps512">,
   1326           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16i32_ty],
   1327           [IntrNoMem]>;
   1328 
   1329   def int_x86_avx512_pshuf_b_512 :
   1330         GCCBuiltin<"__builtin_ia32_pshufb512">,
   1331           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty],
   1332           [IntrNoMem]>;
   1333 
   1334   def int_x86_avx512_mask_shuf_f32x4_256 :
   1335          GCCBuiltin<"__builtin_ia32_shuf_f32x4_256_mask">,
   1336           Intrinsic<[llvm_v8f32_ty],
   1337           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty, llvm_i8_ty],
   1338           [IntrNoMem]>;
   1339 
   1340   def int_x86_avx512_mask_shuf_f32x4 :
   1341          GCCBuiltin<"__builtin_ia32_shuf_f32x4_mask">,
   1342           Intrinsic<[llvm_v16f32_ty],
   1343           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty, llvm_i16_ty],
   1344           [IntrNoMem]>;
   1345 
   1346   def int_x86_avx512_mask_shuf_f64x2_256 :
   1347          GCCBuiltin<"__builtin_ia32_shuf_f64x2_256_mask">,
   1348           Intrinsic<[llvm_v4f64_ty],
   1349           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty, llvm_v4f64_ty, llvm_i8_ty],
   1350           [IntrNoMem]>;
   1351 
   1352   def int_x86_avx512_mask_shuf_f64x2 :
   1353          GCCBuiltin<"__builtin_ia32_shuf_f64x2_mask">,
   1354           Intrinsic<[llvm_v8f64_ty],
   1355           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty, llvm_i8_ty],
   1356           [IntrNoMem]>;
   1357 
   1358   def int_x86_avx512_mask_shuf_i32x4_256 :
   1359          GCCBuiltin<"__builtin_ia32_shuf_i32x4_256_mask">,
   1360           Intrinsic<[llvm_v8i32_ty],
   1361           [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_v8i32_ty, llvm_i8_ty],
   1362           [IntrNoMem]>;
   1363 
   1364   def int_x86_avx512_mask_shuf_i32x4 :
   1365          GCCBuiltin<"__builtin_ia32_shuf_i32x4_mask">,
   1366           Intrinsic<[llvm_v16i32_ty],
   1367           [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty],
   1368           [IntrNoMem]>;
   1369 
   1370   def int_x86_avx512_mask_shuf_i64x2_256 :
   1371          GCCBuiltin<"__builtin_ia32_shuf_i64x2_256_mask">,
   1372           Intrinsic<[llvm_v4i64_ty],
   1373           [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_v4i64_ty, llvm_i8_ty],
   1374           [IntrNoMem]>;
   1375 
   1376   def int_x86_avx512_mask_shuf_i64x2 :
   1377          GCCBuiltin<"__builtin_ia32_shuf_i64x2_mask">,
   1378           Intrinsic<[llvm_v8i64_ty],
   1379           [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty],
   1380           [IntrNoMem]>;
   1381 }
   1382 
   1383 // Vector blend
   1384 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1385   def int_x86_avx_blendv_pd_256 : GCCBuiltin<"__builtin_ia32_blendvpd256">,
   1386         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1387                   llvm_v4f64_ty, llvm_v4f64_ty], [IntrNoMem]>;
   1388   def int_x86_avx_blendv_ps_256 : GCCBuiltin<"__builtin_ia32_blendvps256">,
   1389         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1390                   llvm_v8f32_ty, llvm_v8f32_ty], [IntrNoMem]>;
   1391 }
   1392 
   1393 // Vector dot product
   1394 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1395   def int_x86_avx_dp_ps_256 : GCCBuiltin<"__builtin_ia32_dpps256">,
   1396         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1397                   llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem, Commutative]>;
   1398 }
   1399 
   1400 // Vector compare
   1401 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1402   def int_x86_avx_cmp_pd_256 :
   1403         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1404                   llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
   1405   def int_x86_avx_cmp_ps_256 :
   1406         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1407                   llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
   1408 }
   1409 
   1410 // Vector convert
   1411 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1412   def int_x86_avx_cvtdq2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtdq2ps256">,
   1413         Intrinsic<[llvm_v8f32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
   1414   def int_x86_avx_cvt_pd2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtpd2ps256">,
   1415         Intrinsic<[llvm_v4f32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   1416   def int_x86_avx_cvt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvtps2dq256">,
   1417         Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   1418   def int_x86_avx_cvtt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvttpd2dq256">,
   1419         Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   1420   def int_x86_avx_cvt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvtpd2dq256">,
   1421         Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   1422   def int_x86_avx_cvtt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvttps2dq256">,
   1423         Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   1424 }
   1425 
   1426 // Vector bit test
   1427 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1428   def int_x86_avx_vtestz_pd : GCCBuiltin<"__builtin_ia32_vtestzpd">,
   1429         Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
   1430                   llvm_v2f64_ty], [IntrNoMem]>;
   1431   def int_x86_avx_vtestc_pd : GCCBuiltin<"__builtin_ia32_vtestcpd">,
   1432         Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
   1433                   llvm_v2f64_ty], [IntrNoMem]>;
   1434   def int_x86_avx_vtestnzc_pd : GCCBuiltin<"__builtin_ia32_vtestnzcpd">,
   1435         Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
   1436                   llvm_v2f64_ty], [IntrNoMem]>;
   1437   def int_x86_avx_vtestz_ps : GCCBuiltin<"__builtin_ia32_vtestzps">,
   1438         Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
   1439                   llvm_v4f32_ty], [IntrNoMem]>;
   1440   def int_x86_avx_vtestc_ps : GCCBuiltin<"__builtin_ia32_vtestcps">,
   1441         Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
   1442                   llvm_v4f32_ty], [IntrNoMem]>;
   1443   def int_x86_avx_vtestnzc_ps : GCCBuiltin<"__builtin_ia32_vtestnzcps">,
   1444         Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
   1445                   llvm_v4f32_ty], [IntrNoMem]>;
   1446   def int_x86_avx_vtestz_pd_256 : GCCBuiltin<"__builtin_ia32_vtestzpd256">,
   1447         Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
   1448                   llvm_v4f64_ty], [IntrNoMem]>;
   1449   def int_x86_avx_vtestc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestcpd256">,
   1450         Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
   1451                   llvm_v4f64_ty], [IntrNoMem]>;
   1452   def int_x86_avx_vtestnzc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestnzcpd256">,
   1453         Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
   1454                   llvm_v4f64_ty], [IntrNoMem]>;
   1455   def int_x86_avx_vtestz_ps_256 : GCCBuiltin<"__builtin_ia32_vtestzps256">,
   1456         Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
   1457                   llvm_v8f32_ty], [IntrNoMem]>;
   1458   def int_x86_avx_vtestc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestcps256">,
   1459         Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
   1460                   llvm_v8f32_ty], [IntrNoMem]>;
   1461   def int_x86_avx_vtestnzc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestnzcps256">,
   1462         Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
   1463                   llvm_v8f32_ty], [IntrNoMem]>;
   1464   def int_x86_avx_ptestz_256 : GCCBuiltin<"__builtin_ia32_ptestz256">,
   1465         Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
   1466                   llvm_v4i64_ty], [IntrNoMem]>;
   1467   def int_x86_avx_ptestc_256 : GCCBuiltin<"__builtin_ia32_ptestc256">,
   1468         Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
   1469                   llvm_v4i64_ty], [IntrNoMem]>;
   1470   def int_x86_avx_ptestnzc_256 : GCCBuiltin<"__builtin_ia32_ptestnzc256">,
   1471         Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
   1472                   llvm_v4i64_ty], [IntrNoMem]>;
   1473   def int_x86_avx512_ptestm_d_512 : GCCBuiltin<"__builtin_ia32_ptestmd512">,
   1474         Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   1475                   llvm_i16_ty], [IntrNoMem]>;
   1476   def int_x86_avx512_ptestm_q_512 : GCCBuiltin<"__builtin_ia32_ptestmq512">,
   1477         Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   1478                   llvm_i8_ty], [IntrNoMem]>;
   1479 
   1480   def int_x86_avx512_ptestm_b_128 : GCCBuiltin<"__builtin_ia32_ptestmb128">,
   1481         Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty,
   1482                    llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
   1483   def int_x86_avx512_ptestm_b_256 : GCCBuiltin<"__builtin_ia32_ptestmb256">,
   1484         Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty,
   1485                    llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
   1486   def int_x86_avx512_ptestm_b_512 : GCCBuiltin<"__builtin_ia32_ptestmb512">,
   1487         Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty,
   1488                    llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
   1489   def int_x86_avx512_ptestm_d_128 : GCCBuiltin<"__builtin_ia32_ptestmd128">,
   1490         Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty,
   1491                    llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
   1492   def int_x86_avx512_ptestm_d_256 : GCCBuiltin<"__builtin_ia32_ptestmd256">,
   1493         Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty,
   1494                    llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   1495   def int_x86_avx512_ptestm_q_128 : GCCBuiltin<"__builtin_ia32_ptestmq128">,
   1496         Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty,
   1497                    llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1498   def int_x86_avx512_ptestm_q_256 : GCCBuiltin<"__builtin_ia32_ptestmq256">,
   1499         Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty,
   1500                    llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1501   def int_x86_avx512_ptestm_w_128 : GCCBuiltin<"__builtin_ia32_ptestmw128">,
   1502         Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty,
   1503                    llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   1504   def int_x86_avx512_ptestm_w_256 : GCCBuiltin<"__builtin_ia32_ptestmw256">,
   1505         Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty,
   1506                    llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   1507   def int_x86_avx512_ptestm_w_512 : GCCBuiltin<"__builtin_ia32_ptestmw512">,
   1508         Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty,
   1509                    llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   1510 
   1511   def int_x86_avx512_ptestnm_b_128 : GCCBuiltin<"__builtin_ia32_ptestnmb128">,
   1512         Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty,
   1513                    llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
   1514   def int_x86_avx512_ptestnm_b_256 : GCCBuiltin<"__builtin_ia32_ptestnmb256">,
   1515         Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty,
   1516                    llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
   1517   def int_x86_avx512_ptestnm_b_512 : GCCBuiltin<"__builtin_ia32_ptestnmb512">,
   1518         Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty,
   1519                    llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
   1520   def int_x86_avx512_ptestnm_d_128 : GCCBuiltin<"__builtin_ia32_ptestnmd128">,
   1521         Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty,
   1522                    llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
   1523   def int_x86_avx512_ptestnm_d_256 : GCCBuiltin<"__builtin_ia32_ptestnmd256">,
   1524         Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty,
   1525                    llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   1526   def int_x86_avx512_ptestnm_d_512 : GCCBuiltin<"__builtin_ia32_ptestnmd512">,
   1527         Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty,
   1528                    llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   1529   def int_x86_avx512_ptestnm_q_128 : GCCBuiltin<"__builtin_ia32_ptestnmq128">,
   1530         Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty,
   1531                    llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1532   def int_x86_avx512_ptestnm_q_256 : GCCBuiltin<"__builtin_ia32_ptestnmq256">,
   1533         Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty,
   1534                    llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1535   def int_x86_avx512_ptestnm_q_512 : GCCBuiltin<"__builtin_ia32_ptestnmq512">,
   1536         Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty,
   1537                    llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1538   def int_x86_avx512_ptestnm_w_128 : GCCBuiltin<"__builtin_ia32_ptestnmw128">,
   1539         Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty,
   1540                    llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   1541   def int_x86_avx512_ptestnm_w_256 : GCCBuiltin<"__builtin_ia32_ptestnmw256">,
   1542         Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty,
   1543                    llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   1544   def int_x86_avx512_ptestnm_w_512 : GCCBuiltin<"__builtin_ia32_ptestnmw512">,
   1545         Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty,
   1546                    llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   1547 
   1548   def int_x86_avx512_mask_fpclass_pd_128 :
   1549          GCCBuiltin<"__builtin_ia32_fpclasspd128_mask">,
   1550           Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_i32_ty, llvm_i8_ty],
   1551           [IntrNoMem]>;
   1552   def int_x86_avx512_mask_fpclass_pd_256 :
   1553          GCCBuiltin<"__builtin_ia32_fpclasspd256_mask">,
   1554           Intrinsic<[llvm_i8_ty], [llvm_v4f64_ty, llvm_i32_ty, llvm_i8_ty],
   1555           [IntrNoMem]>;
   1556   def int_x86_avx512_mask_fpclass_pd_512 :
   1557          GCCBuiltin<"__builtin_ia32_fpclasspd512_mask">,
   1558           Intrinsic<[llvm_i8_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_i8_ty],
   1559           [IntrNoMem]>;
   1560   def int_x86_avx512_mask_fpclass_ps_128 :
   1561          GCCBuiltin<"__builtin_ia32_fpclassps128_mask">,
   1562           Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i8_ty],
   1563           [IntrNoMem]>;
   1564   def int_x86_avx512_mask_fpclass_ps_256 :
   1565          GCCBuiltin<"__builtin_ia32_fpclassps256_mask">,
   1566           Intrinsic<[llvm_i8_ty], [llvm_v8f32_ty, llvm_i32_ty, llvm_i8_ty],
   1567           [IntrNoMem]>;
   1568   def int_x86_avx512_mask_fpclass_ps_512 :
   1569          GCCBuiltin<"__builtin_ia32_fpclassps512_mask">,
   1570           Intrinsic<[llvm_i16_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_i16_ty],
   1571           [IntrNoMem]>;
   1572   def int_x86_avx512_mask_fpclass_sd :
   1573          GCCBuiltin<"__builtin_ia32_fpclasssd_mask">,
   1574           Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_i32_ty, llvm_i8_ty],
   1575           [IntrNoMem]>;
   1576   def int_x86_avx512_mask_fpclass_ss :
   1577          GCCBuiltin<"__builtin_ia32_fpclassss_mask">,
   1578           Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i8_ty],
   1579           [IntrNoMem]>;
   1580 }
   1581 
   1582 // Vector extract sign mask
   1583 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1584   def int_x86_avx_movmsk_pd_256 : GCCBuiltin<"__builtin_ia32_movmskpd256">,
   1585         Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   1586   def int_x86_avx_movmsk_ps_256 : GCCBuiltin<"__builtin_ia32_movmskps256">,
   1587         Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   1588 }
   1589 
   1590 // Vector zero
   1591 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1592   def int_x86_avx_vzeroall : GCCBuiltin<"__builtin_ia32_vzeroall">,
   1593         Intrinsic<[], [], []>;
   1594   def int_x86_avx_vzeroupper : GCCBuiltin<"__builtin_ia32_vzeroupper">,
   1595         Intrinsic<[], [], []>;
   1596 }
   1597 
   1598 // SIMD load ops
   1599 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1600   def int_x86_avx_ldu_dq_256 : GCCBuiltin<"__builtin_ia32_lddqu256">,
   1601         Intrinsic<[llvm_v32i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
   1602 }
   1603 
   1604 // Conditional load ops
   1605 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1606   def int_x86_avx_maskload_pd : GCCBuiltin<"__builtin_ia32_maskloadpd">,
   1607         Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2i64_ty],
   1608                   [IntrReadMem, IntrArgMemOnly]>;
   1609   def int_x86_avx_maskload_ps : GCCBuiltin<"__builtin_ia32_maskloadps">,
   1610         Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4i32_ty],
   1611                   [IntrReadMem, IntrArgMemOnly]>;
   1612   def int_x86_avx_maskload_pd_256 : GCCBuiltin<"__builtin_ia32_maskloadpd256">,
   1613         Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4i64_ty],
   1614                   [IntrReadMem, IntrArgMemOnly]>;
   1615   def int_x86_avx_maskload_ps_256 : GCCBuiltin<"__builtin_ia32_maskloadps256">,
   1616         Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8i32_ty],
   1617                   [IntrReadMem, IntrArgMemOnly]>;
   1618 }
   1619 
   1620 // Conditional store ops
   1621 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1622   def int_x86_avx_maskstore_pd : GCCBuiltin<"__builtin_ia32_maskstorepd">,
   1623         Intrinsic<[], [llvm_ptr_ty,
   1624                   llvm_v2i64_ty, llvm_v2f64_ty], [IntrArgMemOnly]>;
   1625   def int_x86_avx_maskstore_ps : GCCBuiltin<"__builtin_ia32_maskstoreps">,
   1626         Intrinsic<[], [llvm_ptr_ty,
   1627                   llvm_v4i32_ty, llvm_v4f32_ty], [IntrArgMemOnly]>;
   1628   def int_x86_avx_maskstore_pd_256 :
   1629         GCCBuiltin<"__builtin_ia32_maskstorepd256">,
   1630         Intrinsic<[], [llvm_ptr_ty,
   1631                   llvm_v4i64_ty, llvm_v4f64_ty], [IntrArgMemOnly]>;
   1632   def int_x86_avx_maskstore_ps_256 :
   1633         GCCBuiltin<"__builtin_ia32_maskstoreps256">,
   1634         Intrinsic<[], [llvm_ptr_ty,
   1635                   llvm_v8i32_ty, llvm_v8f32_ty], [IntrArgMemOnly]>;
   1636 
   1637   def int_x86_avx512_mask_store_ss :
   1638         GCCBuiltin<"__builtin_ia32_storess_mask">,
   1639         Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty, llvm_i8_ty],
   1640                   [IntrArgMemOnly]>;
   1641 }
   1642 
   1643 //===----------------------------------------------------------------------===//
   1644 // AVX2
   1645 
   1646 // Integer arithmetic ops.
   1647 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1648   def int_x86_avx2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb256">,
   1649               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1650                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1651   def int_x86_avx2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw256">,
   1652               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1653                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1654   def int_x86_avx2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb256">,
   1655               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1656                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1657   def int_x86_avx2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw256">,
   1658               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1659                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1660   def int_x86_avx2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb256">,
   1661               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1662                          llvm_v32i8_ty], [IntrNoMem]>;
   1663   def int_x86_avx2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw256">,
   1664               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1665                          llvm_v16i16_ty], [IntrNoMem]>;
   1666   def int_x86_avx2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb256">,
   1667               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1668                          llvm_v32i8_ty], [IntrNoMem]>;
   1669   def int_x86_avx2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw256">,
   1670               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1671                          llvm_v16i16_ty], [IntrNoMem]>;
   1672   def int_x86_avx2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw256">,
   1673               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1674                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1675   def int_x86_avx2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw256">,
   1676               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1677                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1678   def int_x86_avx2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq256">,
   1679               Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
   1680                          llvm_v8i32_ty], [IntrNoMem, Commutative]>;
   1681   def int_x86_avx2_pmul_dq : GCCBuiltin<"__builtin_ia32_pmuldq256">,
   1682               Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
   1683                          llvm_v8i32_ty], [IntrNoMem, Commutative]>;
   1684   def int_x86_avx2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd256">,
   1685               Intrinsic<[llvm_v8i32_ty], [llvm_v16i16_ty,
   1686                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1687   def int_x86_avx2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb256">,
   1688               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1689                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1690   def int_x86_avx2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw256">,
   1691               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1692                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1693   def int_x86_avx2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw256">,
   1694               Intrinsic<[llvm_v4i64_ty], [llvm_v32i8_ty,
   1695                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1696 }
   1697 
   1698 // Integer shift ops.
   1699 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1700   def int_x86_avx2_psll_w : GCCBuiltin<"__builtin_ia32_psllw256">,
   1701               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1702                          llvm_v8i16_ty], [IntrNoMem]>;
   1703   def int_x86_avx2_psll_d : GCCBuiltin<"__builtin_ia32_pslld256">,
   1704               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1705                          llvm_v4i32_ty], [IntrNoMem]>;
   1706   def int_x86_avx2_psll_q : GCCBuiltin<"__builtin_ia32_psllq256">,
   1707               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1708                          llvm_v2i64_ty], [IntrNoMem]>;
   1709   def int_x86_avx2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw256">,
   1710               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1711                          llvm_v8i16_ty], [IntrNoMem]>;
   1712   def int_x86_avx2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld256">,
   1713               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1714                          llvm_v4i32_ty], [IntrNoMem]>;
   1715   def int_x86_avx2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq256">,
   1716               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1717                          llvm_v2i64_ty], [IntrNoMem]>;
   1718   def int_x86_avx2_psra_w : GCCBuiltin<"__builtin_ia32_psraw256">,
   1719               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1720                          llvm_v8i16_ty], [IntrNoMem]>;
   1721   def int_x86_avx2_psra_d : GCCBuiltin<"__builtin_ia32_psrad256">,
   1722               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1723                          llvm_v4i32_ty], [IntrNoMem]>;
   1724 
   1725   def int_x86_avx2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi256">,
   1726               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1727                          llvm_i32_ty], [IntrNoMem]>;
   1728   def int_x86_avx2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi256">,
   1729               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1730                          llvm_i32_ty], [IntrNoMem]>;
   1731   def int_x86_avx2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi256">,
   1732               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1733                          llvm_i32_ty], [IntrNoMem]>;
   1734   def int_x86_avx2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi256">,
   1735               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1736                          llvm_i32_ty], [IntrNoMem]>;
   1737   def int_x86_avx2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi256">,
   1738               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1739                          llvm_i32_ty], [IntrNoMem]>;
   1740   def int_x86_avx2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi256">,
   1741               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1742                          llvm_i32_ty], [IntrNoMem]>;
   1743   def int_x86_avx2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi256">,
   1744               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1745                          llvm_i32_ty], [IntrNoMem]>;
   1746   def int_x86_avx2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi256">,
   1747               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1748                          llvm_i32_ty], [IntrNoMem]>;
   1749 
   1750   def int_x86_avx512_psra_q_128 : GCCBuiltin<"__builtin_ia32_psraq128">,
   1751               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
   1752                          llvm_v2i64_ty], [IntrNoMem]>;
   1753   def int_x86_avx512_psra_q_256 : GCCBuiltin<"__builtin_ia32_psraq256">,
   1754               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1755                          llvm_v2i64_ty], [IntrNoMem]>;
   1756 
   1757   def int_x86_avx512_psrai_q_128 : GCCBuiltin<"__builtin_ia32_psraqi128">,
   1758               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
   1759                          llvm_i32_ty], [IntrNoMem]>;
   1760   def int_x86_avx512_psrai_q_256 : GCCBuiltin<"__builtin_ia32_psraqi256">,
   1761               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1762                          llvm_i32_ty], [IntrNoMem]>;
   1763 
   1764   def int_x86_avx512_psll_w_512 : GCCBuiltin<"__builtin_ia32_psllw512">,
   1765               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
   1766                          llvm_v8i16_ty], [IntrNoMem]>;
   1767   def int_x86_avx512_psll_d_512 : GCCBuiltin<"__builtin_ia32_pslld512">,
   1768               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   1769                          llvm_v4i32_ty], [IntrNoMem]>;
   1770   def int_x86_avx512_psll_q_512 : GCCBuiltin<"__builtin_ia32_psllq512">,
   1771               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   1772                          llvm_v2i64_ty], [IntrNoMem]>;
   1773   def int_x86_avx512_psrl_w_512 : GCCBuiltin<"__builtin_ia32_psrlw512">,
   1774               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
   1775                          llvm_v8i16_ty], [IntrNoMem]>;
   1776   def int_x86_avx512_psrl_d_512 : GCCBuiltin<"__builtin_ia32_psrld512">,
   1777               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   1778                          llvm_v4i32_ty], [IntrNoMem]>;
   1779   def int_x86_avx512_psrl_q_512 : GCCBuiltin<"__builtin_ia32_psrlq512">,
   1780               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   1781                          llvm_v2i64_ty], [IntrNoMem]>;
   1782   def int_x86_avx512_psra_w_512 : GCCBuiltin<"__builtin_ia32_psraw512">,
   1783               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
   1784                          llvm_v8i16_ty], [IntrNoMem]>;
   1785   def int_x86_avx512_psra_d_512 : GCCBuiltin<"__builtin_ia32_psrad512">,
   1786               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   1787                          llvm_v4i32_ty], [IntrNoMem]>;
   1788   def int_x86_avx512_psra_q_512 : GCCBuiltin<"__builtin_ia32_psraq512">,
   1789               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   1790                          llvm_v2i64_ty], [IntrNoMem]>;
   1791 
   1792   def int_x86_avx512_pslli_w_512 : GCCBuiltin<"__builtin_ia32_psllwi512">,
   1793               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
   1794                          llvm_i32_ty], [IntrNoMem]>;
   1795   def int_x86_avx512_pslli_d_512 : GCCBuiltin<"__builtin_ia32_pslldi512">,
   1796               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   1797                          llvm_i32_ty], [IntrNoMem]>;
   1798   def int_x86_avx512_pslli_q_512 : GCCBuiltin<"__builtin_ia32_psllqi512">,
   1799               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   1800                          llvm_i32_ty], [IntrNoMem]>;
   1801   def int_x86_avx512_psrli_w_512 : GCCBuiltin<"__builtin_ia32_psrlwi512">,
   1802               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
   1803                          llvm_i32_ty], [IntrNoMem]>;
   1804   def int_x86_avx512_psrli_d_512 : GCCBuiltin<"__builtin_ia32_psrldi512">,
   1805               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   1806                          llvm_i32_ty], [IntrNoMem]>;
   1807   def int_x86_avx512_psrli_q_512 : GCCBuiltin<"__builtin_ia32_psrlqi512">,
   1808               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   1809                          llvm_i32_ty], [IntrNoMem]>;
   1810   def int_x86_avx512_psrai_w_512 : GCCBuiltin<"__builtin_ia32_psrawi512">,
   1811               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
   1812                          llvm_i32_ty], [IntrNoMem]>;
   1813   def int_x86_avx512_psrai_d_512 : GCCBuiltin<"__builtin_ia32_psradi512">,
   1814               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   1815                          llvm_i32_ty], [IntrNoMem]>;
   1816   def int_x86_avx512_psrai_q_512 : GCCBuiltin<"__builtin_ia32_psraqi512">,
   1817               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   1818                          llvm_i32_ty], [IntrNoMem]>;
   1819 
   1820   def int_x86_avx512_mask_pmultishift_qb_128:
   1821         GCCBuiltin<"__builtin_ia32_vpmultishiftqb128_mask">,
   1822         Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
   1823                    llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
   1824   def int_x86_avx512_mask_pmultishift_qb_256:
   1825         GCCBuiltin<"__builtin_ia32_vpmultishiftqb256_mask">,
   1826         Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1827                    llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
   1828   def int_x86_avx512_mask_pmultishift_qb_512:
   1829         GCCBuiltin<"__builtin_ia32_vpmultishiftqb512_mask">,
   1830         Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty,
   1831                    llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
   1832 }
   1833 
   1834 // Pack ops.
   1835 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1836   def int_x86_avx2_packsswb : GCCBuiltin<"__builtin_ia32_packsswb256">,
   1837               Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
   1838                          llvm_v16i16_ty], [IntrNoMem]>;
   1839   def int_x86_avx2_packssdw : GCCBuiltin<"__builtin_ia32_packssdw256">,
   1840               Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
   1841                          llvm_v8i32_ty], [IntrNoMem]>;
   1842   def int_x86_avx2_packuswb : GCCBuiltin<"__builtin_ia32_packuswb256">,
   1843               Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
   1844                          llvm_v16i16_ty], [IntrNoMem]>;
   1845   def int_x86_avx2_packusdw : GCCBuiltin<"__builtin_ia32_packusdw256">,
   1846               Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
   1847                          llvm_v8i32_ty], [IntrNoMem]>;
   1848 }
   1849 
   1850 // Absolute value ops
   1851 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1852   def int_x86_avx2_pabs_b : GCCBuiltin<"__builtin_ia32_pabsb256">,
   1853               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty], [IntrNoMem]>;
   1854   def int_x86_avx2_pabs_w : GCCBuiltin<"__builtin_ia32_pabsw256">,
   1855               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty], [IntrNoMem]>;
   1856   def int_x86_avx2_pabs_d : GCCBuiltin<"__builtin_ia32_pabsd256">,
   1857               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
   1858 
   1859   def int_x86_avx512_mask_pabs_b_128 :
   1860        GCCBuiltin<"__builtin_ia32_pabsb128_mask">,
   1861         Intrinsic<[llvm_v16i8_ty],
   1862         [llvm_v16i8_ty, llvm_v16i8_ty,  llvm_i16_ty],
   1863         [IntrNoMem]>;
   1864 
   1865   def int_x86_avx512_mask_pabs_b_256 :
   1866         GCCBuiltin<"__builtin_ia32_pabsb256_mask">,
   1867           Intrinsic<[llvm_v32i8_ty],
   1868           [llvm_v32i8_ty, llvm_v32i8_ty,  llvm_i32_ty],
   1869           [IntrNoMem]>;
   1870 
   1871   def int_x86_avx512_mask_pabs_b_512 :
   1872         GCCBuiltin<"__builtin_ia32_pabsb512_mask">,
   1873           Intrinsic<[llvm_v64i8_ty],
   1874           [llvm_v64i8_ty, llvm_v64i8_ty,  llvm_i64_ty],
   1875           [IntrNoMem]>;
   1876 
   1877   def int_x86_avx512_mask_pabs_d_128 :
   1878         GCCBuiltin<"__builtin_ia32_pabsd128_mask">,
   1879           Intrinsic<[llvm_v4i32_ty],
   1880           [llvm_v4i32_ty, llvm_v4i32_ty,  llvm_i8_ty],
   1881           [IntrNoMem]>;
   1882 
   1883   def int_x86_avx512_mask_pabs_d_256 :
   1884         GCCBuiltin<"__builtin_ia32_pabsd256_mask">,
   1885           Intrinsic<[llvm_v8i32_ty],
   1886           [llvm_v8i32_ty, llvm_v8i32_ty,  llvm_i8_ty],
   1887           [IntrNoMem]>;
   1888 
   1889   def int_x86_avx512_mask_pabs_d_512 :
   1890         GCCBuiltin<"__builtin_ia32_pabsd512_mask">,
   1891           Intrinsic<[llvm_v16i32_ty],
   1892           [llvm_v16i32_ty, llvm_v16i32_ty,  llvm_i16_ty],
   1893           [IntrNoMem]>;
   1894 
   1895   def int_x86_avx512_mask_pabs_q_128 :
   1896         GCCBuiltin<"__builtin_ia32_pabsq128_mask">,
   1897           Intrinsic<[llvm_v2i64_ty],
   1898           [llvm_v2i64_ty, llvm_v2i64_ty,  llvm_i8_ty],
   1899           [IntrNoMem]>;
   1900 
   1901   def int_x86_avx512_mask_pabs_q_256 :
   1902         GCCBuiltin<"__builtin_ia32_pabsq256_mask">,
   1903           Intrinsic<[llvm_v4i64_ty],
   1904           [llvm_v4i64_ty, llvm_v4i64_ty,  llvm_i8_ty],
   1905           [IntrNoMem]>;
   1906 
   1907   def int_x86_avx512_mask_pabs_q_512 :
   1908         GCCBuiltin<"__builtin_ia32_pabsq512_mask">,
   1909           Intrinsic<[llvm_v8i64_ty],
   1910           [llvm_v8i64_ty, llvm_v8i64_ty,  llvm_i8_ty],
   1911           [IntrNoMem]>;
   1912 
   1913   def int_x86_avx512_mask_pabs_w_128 :
   1914         GCCBuiltin<"__builtin_ia32_pabsw128_mask">,
   1915           Intrinsic<[llvm_v8i16_ty],
   1916           [llvm_v8i16_ty, llvm_v8i16_ty,  llvm_i8_ty],
   1917           [IntrNoMem]>;
   1918 
   1919   def int_x86_avx512_mask_pabs_w_256 :
   1920         GCCBuiltin<"__builtin_ia32_pabsw256_mask">,
   1921           Intrinsic<[llvm_v16i16_ty],
   1922           [llvm_v16i16_ty, llvm_v16i16_ty,  llvm_i16_ty],
   1923           [IntrNoMem]>;
   1924 
   1925   def int_x86_avx512_mask_pabs_w_512 :
   1926         GCCBuiltin<"__builtin_ia32_pabsw512_mask">,
   1927           Intrinsic<[llvm_v32i16_ty],
   1928           [llvm_v32i16_ty, llvm_v32i16_ty,  llvm_i32_ty],
   1929           [IntrNoMem]>;
   1930 }
   1931 
   1932 // Horizontal arithmetic ops
   1933 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1934   def int_x86_avx2_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw256">,
   1935               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1936                          llvm_v16i16_ty], [IntrNoMem]>;
   1937   def int_x86_avx2_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd256">,
   1938               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1939                          llvm_v8i32_ty], [IntrNoMem]>;
   1940   def int_x86_avx2_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw256">,
   1941               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1942                          llvm_v16i16_ty], [IntrNoMem]>;
   1943   def int_x86_avx2_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw256">,
   1944               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1945                          llvm_v16i16_ty], [IntrNoMem]>;
   1946   def int_x86_avx2_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd256">,
   1947               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1948                          llvm_v8i32_ty], [IntrNoMem]>;
   1949   def int_x86_avx2_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw256">,
   1950               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1951                          llvm_v16i16_ty], [IntrNoMem]>;
   1952   def int_x86_avx2_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw256">,
   1953               Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty,
   1954                          llvm_v32i8_ty], [IntrNoMem]>;
   1955 }
   1956 
   1957 // Sign ops
   1958 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1959   def int_x86_avx2_psign_b : GCCBuiltin<"__builtin_ia32_psignb256">,
   1960               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1961                          llvm_v32i8_ty], [IntrNoMem]>;
   1962   def int_x86_avx2_psign_w : GCCBuiltin<"__builtin_ia32_psignw256">,
   1963               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1964                          llvm_v16i16_ty], [IntrNoMem]>;
   1965   def int_x86_avx2_psign_d : GCCBuiltin<"__builtin_ia32_psignd256">,
   1966               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1967                          llvm_v8i32_ty], [IntrNoMem]>;
   1968 }
   1969 
   1970 // Packed multiply high with round and scale
   1971 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1972   def int_x86_avx2_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw256">,
   1973               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1974                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1975   def int_x86_avx512_mask_pmul_hr_sw_128 : GCCBuiltin<"__builtin_ia32_pmulhrsw128_mask">,
   1976               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   1977                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   1978   def int_x86_avx512_mask_pmul_hr_sw_256 : GCCBuiltin<"__builtin_ia32_pmulhrsw256_mask">,
   1979               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
   1980                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   1981   def int_x86_avx512_mask_pmul_hr_sw_512 : GCCBuiltin<"__builtin_ia32_pmulhrsw512_mask">,
   1982               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
   1983                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   1984 }
   1985 
   1986 // Vector blend
   1987 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1988   def int_x86_avx2_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb256">,
   1989               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
   1990                          llvm_v32i8_ty], [IntrNoMem]>;
   1991 }
   1992 
   1993 // Vector load with broadcast
   1994 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1995   def int_x86_avx512_mask_pbroadcast_b_gpr_128 :
   1996           GCCBuiltin<"__builtin_ia32_pbroadcastb128_gpr_mask">,
   1997           Intrinsic<[llvm_v16i8_ty],
   1998                     [llvm_i8_ty, llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
   1999   def int_x86_avx512_mask_pbroadcast_b_gpr_256 :
   2000           GCCBuiltin<"__builtin_ia32_pbroadcastb256_gpr_mask">,
   2001           Intrinsic<[llvm_v32i8_ty],
   2002                     [llvm_i8_ty, llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2003   def int_x86_avx512_mask_pbroadcast_b_gpr_512 :
   2004           GCCBuiltin<"__builtin_ia32_pbroadcastb512_gpr_mask">,
   2005           Intrinsic<[llvm_v64i8_ty],
   2006                     [llvm_i8_ty, llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
   2007 
   2008   def int_x86_avx512_mask_pbroadcast_w_gpr_128 :
   2009           GCCBuiltin<"__builtin_ia32_pbroadcastw128_gpr_mask">,
   2010           Intrinsic<[llvm_v8i16_ty],
   2011                     [llvm_i16_ty, llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   2012   def int_x86_avx512_mask_pbroadcast_w_gpr_256 :
   2013           GCCBuiltin<"__builtin_ia32_pbroadcastw256_gpr_mask">,
   2014           Intrinsic<[llvm_v16i16_ty],
   2015                     [llvm_i16_ty, llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   2016   def int_x86_avx512_mask_pbroadcast_w_gpr_512 :
   2017           GCCBuiltin<"__builtin_ia32_pbroadcastw512_gpr_mask">,
   2018           Intrinsic<[llvm_v32i16_ty],
   2019                     [llvm_i16_ty, llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2020 
   2021   def int_x86_avx512_mask_pbroadcast_d_gpr_128 :
   2022           GCCBuiltin<"__builtin_ia32_pbroadcastd128_gpr_mask">,
   2023           Intrinsic<[llvm_v4i32_ty],
   2024                     [llvm_i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2025   def int_x86_avx512_mask_pbroadcast_d_gpr_256 :
   2026           GCCBuiltin<"__builtin_ia32_pbroadcastd256_gpr_mask">,
   2027           Intrinsic<[llvm_v8i32_ty],
   2028                     [llvm_i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2029   def int_x86_avx512_mask_pbroadcast_d_gpr_512 :
   2030           GCCBuiltin<"__builtin_ia32_pbroadcastd512_gpr_mask">,
   2031           Intrinsic<[llvm_v16i32_ty],
   2032                     [llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   2033 
   2034   def int_x86_avx512_mask_pbroadcast_q_gpr_128 :
   2035           GCCBuiltin<"__builtin_ia32_pbroadcastq128_gpr_mask">,
   2036           Intrinsic<[llvm_v2i64_ty],
   2037                     [llvm_i64_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2038   def int_x86_avx512_mask_pbroadcast_q_gpr_256 :
   2039           GCCBuiltin<"__builtin_ia32_pbroadcastq256_gpr_mask">,
   2040           Intrinsic<[llvm_v4i64_ty],
   2041                     [llvm_i64_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2042   def int_x86_avx512_mask_pbroadcast_q_gpr_512 :
   2043           GCCBuiltin<"__builtin_ia32_pbroadcastq512_gpr_mask">,
   2044           Intrinsic<[llvm_v8i64_ty],
   2045                     [llvm_i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2046 
   2047   def int_x86_avx512_mask_pbroadcast_q_mem_512 :
   2048           GCCBuiltin<"__builtin_ia32_pbroadcastq512_mem_mask">,
   2049           Intrinsic<[llvm_v8i64_ty],
   2050                     [llvm_i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2051 }
   2052 
   2053 // Vector permutation
   2054 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2055   def int_x86_avx2_permd : GCCBuiltin<"__builtin_ia32_permvarsi256">,
   2056               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
   2057                         [IntrNoMem]>;
   2058   def int_x86_avx2_permps : GCCBuiltin<"__builtin_ia32_permvarsf256">,
   2059               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty],
   2060                         [IntrNoMem]>;
   2061   def int_x86_avx2_vperm2i128 : GCCBuiltin<"__builtin_ia32_permti256">,
   2062               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   2063                          llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2064 }
   2065 
   2066 // Conditional load ops
   2067 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2068   def int_x86_avx2_maskload_d : GCCBuiltin<"__builtin_ia32_maskloadd">,
   2069         Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty],
   2070                   [IntrReadMem, IntrArgMemOnly]>;
   2071   def int_x86_avx2_maskload_q : GCCBuiltin<"__builtin_ia32_maskloadq">,
   2072         Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty],
   2073                   [IntrReadMem, IntrArgMemOnly]>;
   2074   def int_x86_avx2_maskload_d_256 : GCCBuiltin<"__builtin_ia32_maskloadd256">,
   2075         Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty],
   2076                   [IntrReadMem, IntrArgMemOnly]>;
   2077   def int_x86_avx2_maskload_q_256 : GCCBuiltin<"__builtin_ia32_maskloadq256">,
   2078         Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty],
   2079                   [IntrReadMem, IntrArgMemOnly]>;
   2080 }
   2081 
   2082 // Conditional store ops
   2083 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2084   def int_x86_avx2_maskstore_d : GCCBuiltin<"__builtin_ia32_maskstored">,
   2085         Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty],
   2086                   [IntrArgMemOnly]>;
   2087   def int_x86_avx2_maskstore_q : GCCBuiltin<"__builtin_ia32_maskstoreq">,
   2088         Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty],
   2089                   [IntrArgMemOnly]>;
   2090   def int_x86_avx2_maskstore_d_256 :
   2091         GCCBuiltin<"__builtin_ia32_maskstored256">,
   2092         Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty],
   2093                   [IntrArgMemOnly]>;
   2094   def int_x86_avx2_maskstore_q_256 :
   2095         GCCBuiltin<"__builtin_ia32_maskstoreq256">,
   2096         Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty],
   2097                   [IntrArgMemOnly]>;
   2098 }
   2099 
   2100 // Variable bit shift ops
   2101 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2102   def int_x86_avx2_psllv_d : GCCBuiltin<"__builtin_ia32_psllv4si">,
   2103               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   2104                         [IntrNoMem]>;
   2105   def int_x86_avx2_psllv_d_256 : GCCBuiltin<"__builtin_ia32_psllv8si">,
   2106               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
   2107                         [IntrNoMem]>;
   2108   def int_x86_avx2_psllv_q : GCCBuiltin<"__builtin_ia32_psllv2di">,
   2109               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   2110                         [IntrNoMem]>;
   2111   def int_x86_avx2_psllv_q_256 : GCCBuiltin<"__builtin_ia32_psllv4di">,
   2112               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
   2113                         [IntrNoMem]>;
   2114 
   2115   def int_x86_avx512_psllv_d_512 : GCCBuiltin<"__builtin_ia32_psllv16si">,
   2116               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
   2117                         [IntrNoMem]>;
   2118   def int_x86_avx512_psllv_q_512 : GCCBuiltin<"__builtin_ia32_psllv8di">,
   2119               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
   2120                         [IntrNoMem]>;
   2121 
   2122   def int_x86_avx2_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv4si">,
   2123               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   2124                         [IntrNoMem]>;
   2125   def int_x86_avx2_psrlv_d_256 : GCCBuiltin<"__builtin_ia32_psrlv8si">,
   2126               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
   2127                         [IntrNoMem]>;
   2128   def int_x86_avx2_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv2di">,
   2129               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   2130                         [IntrNoMem]>;
   2131   def int_x86_avx2_psrlv_q_256 : GCCBuiltin<"__builtin_ia32_psrlv4di">,
   2132               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
   2133                         [IntrNoMem]>;
   2134 
   2135   def int_x86_avx512_psrlv_d_512 : GCCBuiltin<"__builtin_ia32_psrlv16si">,
   2136               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
   2137                         [IntrNoMem]>;
   2138   def int_x86_avx512_psrlv_q_512 : GCCBuiltin<"__builtin_ia32_psrlv8di">,
   2139               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
   2140                         [IntrNoMem]>;
   2141 
   2142   def int_x86_avx2_psrav_d : GCCBuiltin<"__builtin_ia32_psrav4si">,
   2143               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   2144                         [IntrNoMem]>;
   2145   def int_x86_avx2_psrav_d_256 : GCCBuiltin<"__builtin_ia32_psrav8si">,
   2146               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
   2147                         [IntrNoMem]>;
   2148 
   2149   def int_x86_avx512_psrav_d_512 : GCCBuiltin<"__builtin_ia32_psrav16si">,
   2150               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
   2151                         [IntrNoMem]>;
   2152   def int_x86_avx512_psrav_q_128 : GCCBuiltin<"__builtin_ia32_psravq128">,
   2153               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   2154                         [IntrNoMem]>;
   2155   def int_x86_avx512_psrav_q_256 : GCCBuiltin<"__builtin_ia32_psravq256">,
   2156               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
   2157                         [IntrNoMem]>;
   2158   def int_x86_avx512_psrav_q_512 : GCCBuiltin<"__builtin_ia32_psrav8di">,
   2159               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty],
   2160                         [IntrNoMem]>;
   2161 
   2162   def int_x86_avx512_psllv_w_128 : GCCBuiltin<"__builtin_ia32_psllv8hi">,
   2163               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
   2164                         [IntrNoMem]>;
   2165   def int_x86_avx512_psllv_w_256 : GCCBuiltin<"__builtin_ia32_psllv16hi">,
   2166               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty],
   2167                         [IntrNoMem]>;
   2168   def int_x86_avx512_psllv_w_512 : GCCBuiltin<"__builtin_ia32_psllv32hi">,
   2169               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
   2170                         [IntrNoMem]>;
   2171 
   2172   def int_x86_avx512_psrlv_w_128 : GCCBuiltin<"__builtin_ia32_psrlv8hi">,
   2173               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
   2174                         [IntrNoMem]>;
   2175   def int_x86_avx512_psrlv_w_256 : GCCBuiltin<"__builtin_ia32_psrlv16hi">,
   2176               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty],
   2177                         [IntrNoMem]>;
   2178   def int_x86_avx512_psrlv_w_512 : GCCBuiltin<"__builtin_ia32_psrlv32hi">,
   2179               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
   2180                         [IntrNoMem]>;
   2181 
   2182   def int_x86_avx512_psrav_w_128 : GCCBuiltin<"__builtin_ia32_psrav8hi">,
   2183               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
   2184                         [IntrNoMem]>;
   2185   def int_x86_avx512_psrav_w_256 : GCCBuiltin<"__builtin_ia32_psrav16hi">,
   2186               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty],
   2187                         [IntrNoMem]>;
   2188   def int_x86_avx512_psrav_w_512 : GCCBuiltin<"__builtin_ia32_psrav32hi">,
   2189               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
   2190                         [IntrNoMem]>;
   2191 
   2192   def int_x86_avx512_mask_prorv_d_128 : GCCBuiltin<"__builtin_ia32_prorvd128_mask">,
   2193               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
   2194                          llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2195   def int_x86_avx512_mask_prorv_d_256 : GCCBuiltin<"__builtin_ia32_prorvd256_mask">,
   2196               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   2197                          llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2198   def int_x86_avx512_mask_prorv_d_512 : GCCBuiltin<"__builtin_ia32_prorvd512_mask">,
   2199               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   2200                          llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   2201   def int_x86_avx512_mask_prorv_q_128 : GCCBuiltin<"__builtin_ia32_prorvq128_mask">,
   2202               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
   2203                          llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2204   def int_x86_avx512_mask_prorv_q_256 : GCCBuiltin<"__builtin_ia32_prorvq256_mask">,
   2205               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   2206                          llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2207   def int_x86_avx512_mask_prorv_q_512 : GCCBuiltin<"__builtin_ia32_prorvq512_mask">,
   2208               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   2209                          llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2210 
   2211    def int_x86_avx512_mask_prol_d_128 : GCCBuiltin<"__builtin_ia32_prold128_mask">,
   2212               Intrinsic<[llvm_v4i32_ty] , [llvm_v4i32_ty,
   2213                          llvm_i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2214   def int_x86_avx512_mask_prol_d_256 : GCCBuiltin<"__builtin_ia32_prold256_mask">,
   2215               Intrinsic<[llvm_v8i32_ty] , [llvm_v8i32_ty,
   2216                          llvm_i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2217   def int_x86_avx512_mask_prol_d_512 : GCCBuiltin<"__builtin_ia32_prold512_mask">,
   2218               Intrinsic<[llvm_v16i32_ty] , [llvm_v16i32_ty,
   2219                          llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   2220   def int_x86_avx512_mask_prol_q_128 : GCCBuiltin<"__builtin_ia32_prolq128_mask">,
   2221               Intrinsic<[llvm_v2i64_ty] , [llvm_v2i64_ty,
   2222                          llvm_i32_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2223   def int_x86_avx512_mask_prol_q_256 : GCCBuiltin<"__builtin_ia32_prolq256_mask">,
   2224               Intrinsic<[llvm_v4i64_ty] , [llvm_v4i64_ty,
   2225                          llvm_i32_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2226   def int_x86_avx512_mask_prol_q_512 : GCCBuiltin<"__builtin_ia32_prolq512_mask">,
   2227               Intrinsic<[llvm_v8i64_ty] , [llvm_v8i64_ty,
   2228                          llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2229 
   2230 
   2231   def int_x86_avx512_mask_prolv_d_128 : GCCBuiltin<"__builtin_ia32_prolvd128_mask">,
   2232               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
   2233                          llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2234   def int_x86_avx512_mask_prolv_d_256 : GCCBuiltin<"__builtin_ia32_prolvd256_mask">,
   2235               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   2236                          llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2237   def int_x86_avx512_mask_prolv_d_512 : GCCBuiltin<"__builtin_ia32_prolvd512_mask">,
   2238               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   2239                          llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   2240   def int_x86_avx512_mask_prolv_q_128 : GCCBuiltin<"__builtin_ia32_prolvq128_mask">,
   2241               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
   2242                          llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2243   def int_x86_avx512_mask_prolv_q_256 : GCCBuiltin<"__builtin_ia32_prolvq256_mask">,
   2244               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   2245                          llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2246   def int_x86_avx512_mask_prolv_q_512 : GCCBuiltin<"__builtin_ia32_prolvq512_mask">,
   2247               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   2248                          llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2249   def int_x86_avx512_mask_pror_d_128 : GCCBuiltin<"__builtin_ia32_prord128_mask">,
   2250               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
   2251                          llvm_i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2252   def int_x86_avx512_mask_pror_d_256 : GCCBuiltin<"__builtin_ia32_prord256_mask">,
   2253               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   2254                          llvm_i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   2255   def int_x86_avx512_mask_pror_d_512 : GCCBuiltin<"__builtin_ia32_prord512_mask">,
   2256               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   2257                          llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   2258   def int_x86_avx512_mask_pror_q_128 : GCCBuiltin<"__builtin_ia32_prorq128_mask">,
   2259               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
   2260                          llvm_i32_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2261   def int_x86_avx512_mask_pror_q_256 : GCCBuiltin<"__builtin_ia32_prorq256_mask">,
   2262               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   2263                          llvm_i32_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2264   def int_x86_avx512_mask_pror_q_512 : GCCBuiltin<"__builtin_ia32_prorq512_mask">,
   2265               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   2266                          llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2267 
   2268 }
   2269 
   2270 // Gather ops
   2271 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2272   def int_x86_avx2_gather_d_pd : GCCBuiltin<"__builtin_ia32_gatherd_pd">,
   2273       Intrinsic<[llvm_v2f64_ty],
   2274         [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i8_ty],
   2275         [IntrReadMem, IntrArgMemOnly]>;
   2276   def int_x86_avx2_gather_d_pd_256 : GCCBuiltin<"__builtin_ia32_gatherd_pd256">,
   2277       Intrinsic<[llvm_v4f64_ty],
   2278         [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i8_ty],
   2279         [IntrReadMem, IntrArgMemOnly]>;
   2280   def int_x86_avx2_gather_q_pd : GCCBuiltin<"__builtin_ia32_gatherq_pd">,
   2281       Intrinsic<[llvm_v2f64_ty],
   2282         [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
   2283         [IntrReadMem, IntrArgMemOnly]>;
   2284   def int_x86_avx2_gather_q_pd_256 : GCCBuiltin<"__builtin_ia32_gatherq_pd256">,
   2285       Intrinsic<[llvm_v4f64_ty],
   2286         [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
   2287         [IntrReadMem, IntrArgMemOnly]>;
   2288   def int_x86_avx2_gather_d_ps : GCCBuiltin<"__builtin_ia32_gatherd_ps">,
   2289       Intrinsic<[llvm_v4f32_ty],
   2290         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
   2291         [IntrReadMem, IntrArgMemOnly]>;
   2292   def int_x86_avx2_gather_d_ps_256 : GCCBuiltin<"__builtin_ia32_gatherd_ps256">,
   2293       Intrinsic<[llvm_v8f32_ty],
   2294         [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
   2295         [IntrReadMem, IntrArgMemOnly]>;
   2296   def int_x86_avx2_gather_q_ps : GCCBuiltin<"__builtin_ia32_gatherq_ps">,
   2297       Intrinsic<[llvm_v4f32_ty],
   2298         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty],
   2299         [IntrReadMem, IntrArgMemOnly]>;
   2300   def int_x86_avx2_gather_q_ps_256 : GCCBuiltin<"__builtin_ia32_gatherq_ps256">,
   2301       Intrinsic<[llvm_v4f32_ty],
   2302         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty],
   2303         [IntrReadMem, IntrArgMemOnly]>;
   2304 
   2305   def int_x86_avx2_gather_d_q : GCCBuiltin<"__builtin_ia32_gatherd_q">,
   2306       Intrinsic<[llvm_v2i64_ty],
   2307         [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i8_ty],
   2308         [IntrReadMem, IntrArgMemOnly]>;
   2309   def int_x86_avx2_gather_d_q_256 : GCCBuiltin<"__builtin_ia32_gatherd_q256">,
   2310       Intrinsic<[llvm_v4i64_ty],
   2311         [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i8_ty],
   2312         [IntrReadMem, IntrArgMemOnly]>;
   2313   def int_x86_avx2_gather_q_q : GCCBuiltin<"__builtin_ia32_gatherq_q">,
   2314       Intrinsic<[llvm_v2i64_ty],
   2315         [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
   2316         [IntrReadMem, IntrArgMemOnly]>;
   2317   def int_x86_avx2_gather_q_q_256 : GCCBuiltin<"__builtin_ia32_gatherq_q256">,
   2318       Intrinsic<[llvm_v4i64_ty],
   2319         [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
   2320         [IntrReadMem, IntrArgMemOnly]>;
   2321   def int_x86_avx2_gather_d_d : GCCBuiltin<"__builtin_ia32_gatherd_d">,
   2322       Intrinsic<[llvm_v4i32_ty],
   2323         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
   2324         [IntrReadMem, IntrArgMemOnly]>;
   2325   def int_x86_avx2_gather_d_d_256 : GCCBuiltin<"__builtin_ia32_gatherd_d256">,
   2326       Intrinsic<[llvm_v8i32_ty],
   2327         [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
   2328         [IntrReadMem, IntrArgMemOnly]>;
   2329   def int_x86_avx2_gather_q_d : GCCBuiltin<"__builtin_ia32_gatherq_d">,
   2330       Intrinsic<[llvm_v4i32_ty],
   2331         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   2332         [IntrReadMem, IntrArgMemOnly]>;
   2333   def int_x86_avx2_gather_q_d_256 : GCCBuiltin<"__builtin_ia32_gatherq_d256">,
   2334       Intrinsic<[llvm_v4i32_ty],
   2335         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   2336         [IntrReadMem, IntrArgMemOnly]>;
   2337 }
   2338 
   2339 // Misc.
   2340 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2341   def int_x86_avx2_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb256">,
   2342               Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty], [IntrNoMem]>;
   2343   def int_x86_avx2_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb256">,
   2344               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   2345                          llvm_v32i8_ty], [IntrNoMem]>;
   2346   def int_x86_avx2_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw256">,
   2347               Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
   2348                          llvm_i8_ty], [IntrNoMem, Commutative]>;
   2349   def int_x86_avx2_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa256">,
   2350               Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
   2351 }
   2352 
   2353 //===----------------------------------------------------------------------===//
   2354 // FMA3 and FMA4
   2355 
   2356 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2357   def int_x86_fma_vfmadd_ss : GCCBuiltin<"__builtin_ia32_vfmaddss">,
   2358               Intrinsic<[llvm_v4f32_ty],
   2359                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2360                         [IntrNoMem]>;
   2361   def int_x86_fma_vfmadd_sd : GCCBuiltin<"__builtin_ia32_vfmaddsd">,
   2362               Intrinsic<[llvm_v2f64_ty],
   2363                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2364                         [IntrNoMem]>;
   2365   def int_x86_fma_vfmadd_ps : GCCBuiltin<"__builtin_ia32_vfmaddps">,
   2366               Intrinsic<[llvm_v4f32_ty],
   2367                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2368                         [IntrNoMem]>;
   2369   def int_x86_fma_vfmadd_pd : GCCBuiltin<"__builtin_ia32_vfmaddpd">,
   2370               Intrinsic<[llvm_v2f64_ty],
   2371                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2372                         [IntrNoMem]>;
   2373   def int_x86_fma_vfmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfmaddps256">,
   2374               Intrinsic<[llvm_v8f32_ty],
   2375                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2376                         [IntrNoMem]>;
   2377   def int_x86_fma_vfmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfmaddpd256">,
   2378               Intrinsic<[llvm_v4f64_ty],
   2379                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2380                         [IntrNoMem]>;
   2381 
   2382   def int_x86_fma_vfmsub_ss : GCCBuiltin<"__builtin_ia32_vfmsubss">,
   2383               Intrinsic<[llvm_v4f32_ty],
   2384                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2385                         [IntrNoMem]>;
   2386   def int_x86_fma_vfmsub_sd : GCCBuiltin<"__builtin_ia32_vfmsubsd">,
   2387               Intrinsic<[llvm_v2f64_ty],
   2388                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2389                         [IntrNoMem]>;
   2390   def int_x86_fma_vfmsub_ps : GCCBuiltin<"__builtin_ia32_vfmsubps">,
   2391               Intrinsic<[llvm_v4f32_ty],
   2392                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2393                         [IntrNoMem]>;
   2394   def int_x86_fma_vfmsub_pd : GCCBuiltin<"__builtin_ia32_vfmsubpd">,
   2395               Intrinsic<[llvm_v2f64_ty],
   2396                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2397                         [IntrNoMem]>;
   2398   def int_x86_fma_vfmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfmsubps256">,
   2399               Intrinsic<[llvm_v8f32_ty],
   2400                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2401                         [IntrNoMem]>;
   2402   def int_x86_fma_vfmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfmsubpd256">,
   2403               Intrinsic<[llvm_v4f64_ty],
   2404                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2405                         [IntrNoMem]>;
   2406   def int_x86_fma_vfnmadd_ss : GCCBuiltin<"__builtin_ia32_vfnmaddss">,
   2407               Intrinsic<[llvm_v4f32_ty],
   2408                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2409                         [IntrNoMem]>;
   2410   def int_x86_fma_vfnmadd_sd : GCCBuiltin<"__builtin_ia32_vfnmaddsd">,
   2411               Intrinsic<[llvm_v2f64_ty],
   2412                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2413                         [IntrNoMem]>;
   2414   def int_x86_fma_vfnmadd_ps : GCCBuiltin<"__builtin_ia32_vfnmaddps">,
   2415               Intrinsic<[llvm_v4f32_ty],
   2416                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2417                         [IntrNoMem]>;
   2418   def int_x86_fma_vfnmadd_pd : GCCBuiltin<"__builtin_ia32_vfnmaddpd">,
   2419               Intrinsic<[llvm_v2f64_ty],
   2420                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2421                         [IntrNoMem]>;
   2422   def int_x86_fma_vfnmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmaddps256">,
   2423               Intrinsic<[llvm_v8f32_ty],
   2424                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2425                         [IntrNoMem]>;
   2426   def int_x86_fma_vfnmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmaddpd256">,
   2427               Intrinsic<[llvm_v4f64_ty],
   2428                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2429                         [IntrNoMem]>;
   2430   def int_x86_fma_vfnmsub_ss : GCCBuiltin<"__builtin_ia32_vfnmsubss">,
   2431               Intrinsic<[llvm_v4f32_ty],
   2432                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2433                         [IntrNoMem]>;
   2434   def int_x86_fma_vfnmsub_sd : GCCBuiltin<"__builtin_ia32_vfnmsubsd">,
   2435               Intrinsic<[llvm_v2f64_ty],
   2436                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2437                         [IntrNoMem]>;
   2438   def int_x86_fma_vfnmsub_ps : GCCBuiltin<"__builtin_ia32_vfnmsubps">,
   2439               Intrinsic<[llvm_v4f32_ty],
   2440                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2441                         [IntrNoMem]>;
   2442   def int_x86_fma_vfnmsub_pd : GCCBuiltin<"__builtin_ia32_vfnmsubpd">,
   2443               Intrinsic<[llvm_v2f64_ty],
   2444                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2445                         [IntrNoMem]>;
   2446   def int_x86_fma_vfnmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmsubps256">,
   2447               Intrinsic<[llvm_v8f32_ty],
   2448                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2449                         [IntrNoMem]>;
   2450   def int_x86_fma_vfnmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmsubpd256">,
   2451               Intrinsic<[llvm_v4f64_ty],
   2452                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2453                         [IntrNoMem]>;
   2454   def int_x86_fma_vfmaddsub_ps : GCCBuiltin<"__builtin_ia32_vfmaddsubps">,
   2455               Intrinsic<[llvm_v4f32_ty],
   2456                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2457                         [IntrNoMem]>;
   2458   def int_x86_fma_vfmaddsub_pd : GCCBuiltin<"__builtin_ia32_vfmaddsubpd">,
   2459               Intrinsic<[llvm_v2f64_ty],
   2460                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2461                         [IntrNoMem]>;
   2462   def int_x86_fma_vfmaddsub_ps_256 :
   2463                GCCBuiltin<"__builtin_ia32_vfmaddsubps256">,
   2464               Intrinsic<[llvm_v8f32_ty],
   2465                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2466                         [IntrNoMem]>;
   2467   def int_x86_fma_vfmaddsub_pd_256 :
   2468               GCCBuiltin<"__builtin_ia32_vfmaddsubpd256">,
   2469               Intrinsic<[llvm_v4f64_ty],
   2470                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2471                         [IntrNoMem]>;
   2472   def int_x86_fma_vfmsubadd_ps : GCCBuiltin<"__builtin_ia32_vfmsubaddps">,
   2473               Intrinsic<[llvm_v4f32_ty],
   2474                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2475                         [IntrNoMem]>;
   2476   def int_x86_fma_vfmsubadd_pd : GCCBuiltin<"__builtin_ia32_vfmsubaddpd">,
   2477               Intrinsic<[llvm_v2f64_ty],
   2478                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2479                         [IntrNoMem]>;
   2480   def int_x86_fma_vfmsubadd_ps_256 :
   2481               GCCBuiltin<"__builtin_ia32_vfmsubaddps256">,
   2482               Intrinsic<[llvm_v8f32_ty],
   2483                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2484                         [IntrNoMem]>;
   2485   def int_x86_fma_vfmsubadd_pd_256 :
   2486               GCCBuiltin<"__builtin_ia32_vfmsubaddpd256">,
   2487               Intrinsic<[llvm_v4f64_ty],
   2488                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2489                         [IntrNoMem]>;
   2490 
   2491   def int_x86_avx512_mask_vfmadd_pd_128 :
   2492          GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask">,
   2493           Intrinsic<[llvm_v2f64_ty],
   2494           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2495           [IntrNoMem]>;
   2496 
   2497   def int_x86_avx512_mask3_vfmadd_pd_128 :
   2498          GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask3">,
   2499           Intrinsic<[llvm_v2f64_ty],
   2500           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2501           [IntrNoMem]>;
   2502 
   2503   def int_x86_avx512_maskz_vfmadd_pd_128 :
   2504          GCCBuiltin<"__builtin_ia32_vfmaddpd128_maskz">,
   2505           Intrinsic<[llvm_v2f64_ty],
   2506           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2507           [IntrNoMem]>;
   2508 
   2509   def int_x86_avx512_mask_vfmadd_pd_256 :
   2510          GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask">,
   2511           Intrinsic<[llvm_v4f64_ty],
   2512           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2513           [IntrNoMem]>;
   2514 
   2515   def int_x86_avx512_mask3_vfmadd_pd_256 :
   2516          GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask3">,
   2517           Intrinsic<[llvm_v4f64_ty],
   2518           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2519           [IntrNoMem]>;
   2520 
   2521   def int_x86_avx512_maskz_vfmadd_pd_256 :
   2522          GCCBuiltin<"__builtin_ia32_vfmaddpd256_maskz">,
   2523           Intrinsic<[llvm_v4f64_ty],
   2524           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2525           [IntrNoMem]>;
   2526 
   2527   def int_x86_avx512_mask_vfmadd_pd_512 :
   2528          GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask">,
   2529           Intrinsic<[llvm_v8f64_ty],
   2530           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2531           llvm_i32_ty], [IntrNoMem]>;
   2532 
   2533   def int_x86_avx512_mask3_vfmadd_pd_512 :
   2534          GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask3">,
   2535           Intrinsic<[llvm_v8f64_ty],
   2536           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2537           llvm_i32_ty], [IntrNoMem]>;
   2538 
   2539   def int_x86_avx512_maskz_vfmadd_pd_512 :
   2540          GCCBuiltin<"__builtin_ia32_vfmaddpd512_maskz">,
   2541           Intrinsic<[llvm_v8f64_ty],
   2542           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2543           llvm_i32_ty], [IntrNoMem]>;
   2544 
   2545   def int_x86_avx512_mask_vfmadd_ps_128 :
   2546          GCCBuiltin<"__builtin_ia32_vfmaddps128_mask">,
   2547           Intrinsic<[llvm_v4f32_ty],
   2548           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2549           [IntrNoMem]>;
   2550 
   2551   def int_x86_avx512_mask3_vfmadd_ps_128 :
   2552          GCCBuiltin<"__builtin_ia32_vfmaddps128_mask3">,
   2553           Intrinsic<[llvm_v4f32_ty],
   2554           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2555           [IntrNoMem]>;
   2556 
   2557   def int_x86_avx512_maskz_vfmadd_ps_128 :
   2558          GCCBuiltin<"__builtin_ia32_vfmaddps128_maskz">,
   2559           Intrinsic<[llvm_v4f32_ty],
   2560           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2561           [IntrNoMem]>;
   2562 
   2563   def int_x86_avx512_mask_vfmadd_ps_256 :
   2564          GCCBuiltin<"__builtin_ia32_vfmaddps256_mask">,
   2565           Intrinsic<[llvm_v8f32_ty],
   2566           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2567           [IntrNoMem]>;
   2568 
   2569   def int_x86_avx512_mask3_vfmadd_ps_256 :
   2570          GCCBuiltin<"__builtin_ia32_vfmaddps256_mask3">,
   2571           Intrinsic<[llvm_v8f32_ty],
   2572           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2573           [IntrNoMem]>;
   2574 
   2575   def int_x86_avx512_maskz_vfmadd_ps_256 :
   2576          GCCBuiltin<"__builtin_ia32_vfmaddps256_maskz">,
   2577           Intrinsic<[llvm_v8f32_ty],
   2578           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2579           [IntrNoMem]>;
   2580 
   2581   def int_x86_avx512_mask_vfmadd_ps_512 :
   2582          GCCBuiltin<"__builtin_ia32_vfmaddps512_mask">,
   2583           Intrinsic<[llvm_v16f32_ty],
   2584           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2585           llvm_i32_ty], [IntrNoMem]>;
   2586 
   2587   def int_x86_avx512_mask3_vfmadd_ps_512 :
   2588          GCCBuiltin<"__builtin_ia32_vfmaddps512_mask3">,
   2589           Intrinsic<[llvm_v16f32_ty],
   2590           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2591           llvm_i32_ty], [IntrNoMem]>;
   2592 
   2593   def int_x86_avx512_maskz_vfmadd_ps_512 :
   2594          GCCBuiltin<"__builtin_ia32_vfmaddps512_maskz">,
   2595           Intrinsic<[llvm_v16f32_ty],
   2596           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2597           llvm_i32_ty], [IntrNoMem]>;
   2598 
   2599   def int_x86_avx512_mask_vfmaddsub_pd_128 :
   2600          GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask">,
   2601           Intrinsic<[llvm_v2f64_ty],
   2602           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2603           [IntrNoMem]>;
   2604 
   2605   def int_x86_avx512_mask3_vfmaddsub_pd_128 :
   2606          GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask3">,
   2607           Intrinsic<[llvm_v2f64_ty],
   2608           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2609           [IntrNoMem]>;
   2610 
   2611   def int_x86_avx512_maskz_vfmaddsub_pd_128 :
   2612          GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_maskz">,
   2613           Intrinsic<[llvm_v2f64_ty],
   2614           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2615           [IntrNoMem]>;
   2616 
   2617   def int_x86_avx512_mask_vfmaddsub_pd_256 :
   2618          GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask">,
   2619           Intrinsic<[llvm_v4f64_ty],
   2620           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2621           [IntrNoMem]>;
   2622 
   2623   def int_x86_avx512_mask3_vfmaddsub_pd_256 :
   2624          GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask3">,
   2625           Intrinsic<[llvm_v4f64_ty],
   2626           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2627           [IntrNoMem]>;
   2628 
   2629   def int_x86_avx512_maskz_vfmaddsub_pd_256 :
   2630          GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_maskz">,
   2631           Intrinsic<[llvm_v4f64_ty],
   2632           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2633           [IntrNoMem]>;
   2634 
   2635   def int_x86_avx512_mask_vfmaddsub_pd_512 :
   2636          GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask">,
   2637           Intrinsic<[llvm_v8f64_ty],
   2638           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2639           llvm_i32_ty], [IntrNoMem]>;
   2640 
   2641   def int_x86_avx512_mask3_vfmaddsub_pd_512 :
   2642          GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask3">,
   2643           Intrinsic<[llvm_v8f64_ty],
   2644           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2645           llvm_i32_ty], [IntrNoMem]>;
   2646 
   2647   def int_x86_avx512_maskz_vfmaddsub_pd_512 :
   2648          GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_maskz">,
   2649           Intrinsic<[llvm_v8f64_ty],
   2650           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2651           llvm_i32_ty], [IntrNoMem]>;
   2652 
   2653   def int_x86_avx512_mask_vfmaddsub_ps_128 :
   2654          GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask">,
   2655           Intrinsic<[llvm_v4f32_ty],
   2656           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2657           [IntrNoMem]>;
   2658 
   2659   def int_x86_avx512_mask3_vfmaddsub_ps_128 :
   2660          GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask3">,
   2661           Intrinsic<[llvm_v4f32_ty],
   2662           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2663           [IntrNoMem]>;
   2664 
   2665   def int_x86_avx512_maskz_vfmaddsub_ps_128 :
   2666          GCCBuiltin<"__builtin_ia32_vfmaddsubps128_maskz">,
   2667           Intrinsic<[llvm_v4f32_ty],
   2668           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2669           [IntrNoMem]>;
   2670 
   2671   def int_x86_avx512_mask_vfmaddsub_ps_256 :
   2672          GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask">,
   2673           Intrinsic<[llvm_v8f32_ty],
   2674           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2675           [IntrNoMem]>;
   2676 
   2677   def int_x86_avx512_mask3_vfmaddsub_ps_256 :
   2678          GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask3">,
   2679           Intrinsic<[llvm_v8f32_ty],
   2680           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2681           [IntrNoMem]>;
   2682 
   2683   def int_x86_avx512_maskz_vfmaddsub_ps_256 :
   2684          GCCBuiltin<"__builtin_ia32_vfmaddsubps256_maskz">,
   2685           Intrinsic<[llvm_v8f32_ty],
   2686           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2687           [IntrNoMem]>;
   2688 
   2689   def int_x86_avx512_mask_vfmaddsub_ps_512 :
   2690          GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask">,
   2691           Intrinsic<[llvm_v16f32_ty],
   2692           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2693           llvm_i32_ty], [IntrNoMem]>;
   2694 
   2695   def int_x86_avx512_mask3_vfmaddsub_ps_512 :
   2696          GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask3">,
   2697           Intrinsic<[llvm_v16f32_ty],
   2698           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2699           llvm_i32_ty], [IntrNoMem]>;
   2700 
   2701   def int_x86_avx512_maskz_vfmaddsub_ps_512 :
   2702          GCCBuiltin<"__builtin_ia32_vfmaddsubps512_maskz">,
   2703           Intrinsic<[llvm_v16f32_ty],
   2704           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2705           llvm_i32_ty], [IntrNoMem]>;
   2706 
   2707 
   2708   def int_x86_avx512_mask_vfmadd_sd :
   2709          GCCBuiltin<"__builtin_ia32_vfmaddsd3_mask">,
   2710           Intrinsic<[llvm_v2f64_ty],
   2711           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
   2712           llvm_i32_ty], [IntrNoMem]>;
   2713 
   2714   def int_x86_avx512_mask_vfmadd_ss :
   2715          GCCBuiltin<"__builtin_ia32_vfmaddss3_mask">,
   2716           Intrinsic<[llvm_v4f32_ty],
   2717           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
   2718           llvm_i32_ty], [IntrNoMem]>;
   2719 
   2720   def int_x86_avx512_maskz_vfmadd_sd :
   2721          GCCBuiltin<"__builtin_ia32_vfmaddsd3_maskz">,
   2722           Intrinsic<[llvm_v2f64_ty],
   2723           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
   2724           llvm_i32_ty], [IntrNoMem]>;
   2725 
   2726   def int_x86_avx512_maskz_vfmadd_ss :
   2727          GCCBuiltin<"__builtin_ia32_vfmaddss3_maskz">,
   2728           Intrinsic<[llvm_v4f32_ty],
   2729           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
   2730           llvm_i32_ty], [IntrNoMem]>;
   2731 
   2732   def int_x86_avx512_mask3_vfmadd_sd :
   2733          GCCBuiltin<"__builtin_ia32_vfmaddsd3_mask3">,
   2734           Intrinsic<[llvm_v2f64_ty],
   2735           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
   2736           llvm_i32_ty], [IntrNoMem]>;
   2737 
   2738   def int_x86_avx512_mask3_vfmadd_ss :
   2739          GCCBuiltin<"__builtin_ia32_vfmaddss3_mask3">,
   2740           Intrinsic<[llvm_v4f32_ty],
   2741           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
   2742           llvm_i32_ty], [IntrNoMem]>;
   2743 
   2744   def int_x86_avx512_mask3_vfmsub_sd :
   2745          GCCBuiltin<"__builtin_ia32_vfmsubsd3_mask3">,
   2746           Intrinsic<[llvm_v2f64_ty],
   2747           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
   2748           llvm_i32_ty], [IntrNoMem]>;
   2749 
   2750   def int_x86_avx512_mask3_vfmsub_ss :
   2751          GCCBuiltin<"__builtin_ia32_vfmsubss3_mask3">,
   2752           Intrinsic<[llvm_v4f32_ty],
   2753           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
   2754           llvm_i32_ty], [IntrNoMem]>;
   2755 
   2756   def int_x86_avx512_mask3_vfmsub_pd_128 :
   2757          GCCBuiltin<"__builtin_ia32_vfmsubpd128_mask3">,
   2758           Intrinsic<[llvm_v2f64_ty],
   2759           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2760           [IntrNoMem]>;
   2761 
   2762   def int_x86_avx512_mask3_vfmsub_pd_256 :
   2763          GCCBuiltin<"__builtin_ia32_vfmsubpd256_mask3">,
   2764           Intrinsic<[llvm_v4f64_ty],
   2765           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2766           [IntrNoMem]>;
   2767 
   2768   def int_x86_avx512_mask3_vfmsub_pd_512 :
   2769          GCCBuiltin<"__builtin_ia32_vfmsubpd512_mask3">,
   2770           Intrinsic<[llvm_v8f64_ty],
   2771           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2772           llvm_i32_ty], [IntrNoMem]>;
   2773 
   2774   def int_x86_avx512_mask3_vfmsub_ps_128 :
   2775          GCCBuiltin<"__builtin_ia32_vfmsubps128_mask3">,
   2776           Intrinsic<[llvm_v4f32_ty],
   2777           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2778           [IntrNoMem]>;
   2779 
   2780   def int_x86_avx512_mask3_vfmsub_ps_256 :
   2781          GCCBuiltin<"__builtin_ia32_vfmsubps256_mask3">,
   2782           Intrinsic<[llvm_v8f32_ty],
   2783           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2784           [IntrNoMem]>;
   2785 
   2786   def int_x86_avx512_mask3_vfmsub_ps_512 :
   2787          GCCBuiltin<"__builtin_ia32_vfmsubps512_mask3">,
   2788           Intrinsic<[llvm_v16f32_ty],
   2789           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2790           llvm_i32_ty], [IntrNoMem]>;
   2791 
   2792   def int_x86_avx512_mask3_vfmsubadd_pd_128 :
   2793          GCCBuiltin<"__builtin_ia32_vfmsubaddpd128_mask3">,
   2794           Intrinsic<[llvm_v2f64_ty],
   2795           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2796           [IntrNoMem]>;
   2797 
   2798   def int_x86_avx512_mask3_vfmsubadd_pd_256 :
   2799          GCCBuiltin<"__builtin_ia32_vfmsubaddpd256_mask3">,
   2800           Intrinsic<[llvm_v4f64_ty],
   2801           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2802           [IntrNoMem]>;
   2803 
   2804   def int_x86_avx512_mask3_vfmsubadd_pd_512 :
   2805          GCCBuiltin<"__builtin_ia32_vfmsubaddpd512_mask3">,
   2806           Intrinsic<[llvm_v8f64_ty],
   2807           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2808           llvm_i32_ty], [IntrNoMem]>;
   2809 
   2810   def int_x86_avx512_mask3_vfmsubadd_ps_128 :
   2811          GCCBuiltin<"__builtin_ia32_vfmsubaddps128_mask3">,
   2812           Intrinsic<[llvm_v4f32_ty],
   2813           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2814           [IntrNoMem]>;
   2815 
   2816   def int_x86_avx512_mask3_vfmsubadd_ps_256 :
   2817          GCCBuiltin<"__builtin_ia32_vfmsubaddps256_mask3">,
   2818           Intrinsic<[llvm_v8f32_ty],
   2819           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2820           [IntrNoMem]>;
   2821 
   2822   def int_x86_avx512_mask3_vfmsubadd_ps_512 :
   2823          GCCBuiltin<"__builtin_ia32_vfmsubaddps512_mask3">,
   2824           Intrinsic<[llvm_v16f32_ty],
   2825           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2826           llvm_i32_ty], [IntrNoMem]>;
   2827 
   2828   def int_x86_avx512_mask_vfnmadd_pd_128 :
   2829          GCCBuiltin<"__builtin_ia32_vfnmaddpd128_mask">,
   2830           Intrinsic<[llvm_v2f64_ty],
   2831           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2832           [IntrNoMem]>;
   2833 
   2834   def int_x86_avx512_mask_vfnmadd_pd_256 :
   2835          GCCBuiltin<"__builtin_ia32_vfnmaddpd256_mask">,
   2836           Intrinsic<[llvm_v4f64_ty],
   2837           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2838           [IntrNoMem]>;
   2839 
   2840   def int_x86_avx512_mask_vfnmadd_pd_512 :
   2841          GCCBuiltin<"__builtin_ia32_vfnmaddpd512_mask">,
   2842           Intrinsic<[llvm_v8f64_ty],
   2843           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2844           llvm_i32_ty], [IntrNoMem]>;
   2845 
   2846   def int_x86_avx512_mask_vfnmadd_ps_128 :
   2847          GCCBuiltin<"__builtin_ia32_vfnmaddps128_mask">,
   2848           Intrinsic<[llvm_v4f32_ty],
   2849           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2850           [IntrNoMem]>;
   2851 
   2852   def int_x86_avx512_mask_vfnmadd_ps_256 :
   2853          GCCBuiltin<"__builtin_ia32_vfnmaddps256_mask">,
   2854           Intrinsic<[llvm_v8f32_ty],
   2855           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2856           [IntrNoMem]>;
   2857 
   2858   def int_x86_avx512_mask_vfnmadd_ps_512 :
   2859          GCCBuiltin<"__builtin_ia32_vfnmaddps512_mask">,
   2860           Intrinsic<[llvm_v16f32_ty],
   2861           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2862           llvm_i32_ty], [IntrNoMem]>;
   2863 
   2864   def int_x86_avx512_mask3_vfnmsub_sd :
   2865          GCCBuiltin<"__builtin_ia32_vfnmsubsd3_mask3">,
   2866           Intrinsic<[llvm_v2f64_ty],
   2867           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
   2868           llvm_i32_ty], [IntrNoMem]>;
   2869 
   2870   def int_x86_avx512_mask3_vfnmsub_ss :
   2871          GCCBuiltin<"__builtin_ia32_vfnmsubss3_mask3">,
   2872           Intrinsic<[llvm_v4f32_ty],
   2873           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
   2874           llvm_i32_ty], [IntrNoMem]>;
   2875 
   2876   def int_x86_avx512_mask_vfnmsub_pd_128 :
   2877          GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask">,
   2878           Intrinsic<[llvm_v2f64_ty],
   2879           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2880           [IntrNoMem]>;
   2881 
   2882   def int_x86_avx512_mask3_vfnmsub_pd_128 :
   2883          GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask3">,
   2884           Intrinsic<[llvm_v2f64_ty],
   2885           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   2886           [IntrNoMem]>;
   2887 
   2888   def int_x86_avx512_mask_vfnmsub_pd_256 :
   2889          GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask">,
   2890           Intrinsic<[llvm_v4f64_ty],
   2891           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2892           [IntrNoMem]>;
   2893 
   2894   def int_x86_avx512_mask3_vfnmsub_pd_256 :
   2895          GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask3">,
   2896           Intrinsic<[llvm_v4f64_ty],
   2897           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   2898           [IntrNoMem]>;
   2899 
   2900   def int_x86_avx512_mask_vfnmsub_pd_512 :
   2901          GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask">,
   2902           Intrinsic<[llvm_v8f64_ty],
   2903           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2904           llvm_i32_ty], [IntrNoMem]>;
   2905 
   2906   def int_x86_avx512_mask3_vfnmsub_pd_512 :
   2907          GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask3">,
   2908           Intrinsic<[llvm_v8f64_ty],
   2909           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
   2910           llvm_i32_ty], [IntrNoMem]>;
   2911 
   2912   def int_x86_avx512_mask_vfnmsub_ps_128 :
   2913          GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask">,
   2914           Intrinsic<[llvm_v4f32_ty],
   2915           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2916           [IntrNoMem]>;
   2917 
   2918   def int_x86_avx512_mask3_vfnmsub_ps_128 :
   2919          GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask3">,
   2920           Intrinsic<[llvm_v4f32_ty],
   2921           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   2922           [IntrNoMem]>;
   2923 
   2924   def int_x86_avx512_mask_vfnmsub_ps_256 :
   2925          GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask">,
   2926           Intrinsic<[llvm_v8f32_ty],
   2927           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2928           [IntrNoMem]>;
   2929 
   2930   def int_x86_avx512_mask3_vfnmsub_ps_256 :
   2931          GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask3">,
   2932           Intrinsic<[llvm_v8f32_ty],
   2933           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   2934           [IntrNoMem]>;
   2935 
   2936   def int_x86_avx512_mask_vfnmsub_ps_512 :
   2937          GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask">,
   2938           Intrinsic<[llvm_v16f32_ty],
   2939           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2940           llvm_i32_ty], [IntrNoMem]>;
   2941 
   2942   def int_x86_avx512_mask3_vfnmsub_ps_512 :
   2943          GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask3">,
   2944           Intrinsic<[llvm_v16f32_ty],
   2945           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
   2946           llvm_i32_ty], [IntrNoMem]>;
   2947 
   2948   def int_x86_avx512_mask_vpmadd52h_uq_128 :
   2949               GCCBuiltin<"__builtin_ia32_vpmadd52huq128_mask">,
   2950               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   2951                          llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2952   def int_x86_avx512_maskz_vpmadd52h_uq_128 :
   2953               GCCBuiltin<"__builtin_ia32_vpmadd52huq128_maskz">,
   2954               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   2955                          llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2956   def int_x86_avx512_mask_vpmadd52l_uq_128 :
   2957               GCCBuiltin<"__builtin_ia32_vpmadd52luq128_mask">,
   2958               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   2959                          llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2960   def int_x86_avx512_maskz_vpmadd52l_uq_128 :
   2961               GCCBuiltin<"__builtin_ia32_vpmadd52luq128_maskz">,
   2962               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   2963                          llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2964   def int_x86_avx512_mask_vpmadd52h_uq_256 :
   2965               GCCBuiltin<"__builtin_ia32_vpmadd52huq256_mask">,
   2966               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
   2967                          llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2968   def int_x86_avx512_maskz_vpmadd52h_uq_256 :
   2969               GCCBuiltin<"__builtin_ia32_vpmadd52huq256_maskz">,
   2970               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
   2971                          llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2972   def int_x86_avx512_mask_vpmadd52l_uq_256 :
   2973               GCCBuiltin<"__builtin_ia32_vpmadd52luq256_mask">,
   2974               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
   2975                          llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2976   def int_x86_avx512_maskz_vpmadd52l_uq_256 :
   2977               GCCBuiltin<"__builtin_ia32_vpmadd52luq256_maskz">,
   2978               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
   2979                          llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2980   def int_x86_avx512_mask_vpmadd52h_uq_512 :
   2981               GCCBuiltin<"__builtin_ia32_vpmadd52huq512_mask">,
   2982               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   2983                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2984   def int_x86_avx512_maskz_vpmadd52h_uq_512 :
   2985               GCCBuiltin<"__builtin_ia32_vpmadd52huq512_maskz">,
   2986               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   2987                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2988   def int_x86_avx512_mask_vpmadd52l_uq_512 :
   2989               GCCBuiltin<"__builtin_ia32_vpmadd52luq512_mask">,
   2990               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   2991                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2992   def int_x86_avx512_maskz_vpmadd52l_uq_512 :
   2993               GCCBuiltin<"__builtin_ia32_vpmadd52luq512_maskz">,
   2994               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   2995                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   2996 }
   2997 
   2998 //===----------------------------------------------------------------------===//
   2999 // XOP
   3000 
   3001 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3002   def int_x86_xop_vpermil2pd : GCCBuiltin<"__builtin_ia32_vpermil2pd">,
   3003               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   3004                                           llvm_v2i64_ty, llvm_i8_ty],
   3005                         [IntrNoMem]>;
   3006 
   3007   def int_x86_xop_vpermil2pd_256 :
   3008               GCCBuiltin<"__builtin_ia32_vpermil2pd256">,
   3009               Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   3010                                           llvm_v4i64_ty, llvm_i8_ty],
   3011                         [IntrNoMem]>;
   3012 
   3013   def int_x86_xop_vpermil2ps : GCCBuiltin<"__builtin_ia32_vpermil2ps">,
   3014               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   3015                                           llvm_v4i32_ty, llvm_i8_ty],
   3016                         [IntrNoMem]>;
   3017   def int_x86_xop_vpermil2ps_256 :
   3018               GCCBuiltin<"__builtin_ia32_vpermil2ps256">,
   3019               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   3020                                           llvm_v8i32_ty, llvm_i8_ty],
   3021                         [IntrNoMem]>;
   3022 
   3023   def int_x86_xop_vfrcz_pd : GCCBuiltin<"__builtin_ia32_vfrczpd">,
   3024               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   3025   def int_x86_xop_vfrcz_ps : GCCBuiltin<"__builtin_ia32_vfrczps">,
   3026               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   3027   def int_x86_xop_vfrcz_sd : GCCBuiltin<"__builtin_ia32_vfrczsd">,
   3028               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   3029   def int_x86_xop_vfrcz_ss : GCCBuiltin<"__builtin_ia32_vfrczss">,
   3030               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   3031   def int_x86_xop_vfrcz_pd_256 : GCCBuiltin<"__builtin_ia32_vfrczpd256">,
   3032               Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   3033   def int_x86_xop_vfrcz_ps_256 : GCCBuiltin<"__builtin_ia32_vfrczps256">,
   3034               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   3035 
   3036   def int_x86_xop_vpcomb : GCCBuiltin<"__builtin_ia32_vpcomb">,
   3037               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
   3038                          llvm_i8_ty], [IntrNoMem]>;
   3039   def int_x86_xop_vpcomw : GCCBuiltin<"__builtin_ia32_vpcomw">,
   3040               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   3041                          llvm_i8_ty], [IntrNoMem]>;
   3042   def int_x86_xop_vpcomd : GCCBuiltin<"__builtin_ia32_vpcomd">,
   3043               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
   3044                          llvm_i8_ty], [IntrNoMem]>;
   3045   def int_x86_xop_vpcomq : GCCBuiltin<"__builtin_ia32_vpcomq">,
   3046               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   3047                          llvm_i8_ty], [IntrNoMem]>;
   3048   def int_x86_xop_vpcomub : GCCBuiltin<"__builtin_ia32_vpcomub">,
   3049               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
   3050                          llvm_i8_ty], [IntrNoMem]>;
   3051   def int_x86_xop_vpcomuw : GCCBuiltin<"__builtin_ia32_vpcomuw">,
   3052               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   3053                          llvm_i8_ty], [IntrNoMem]>;
   3054   def int_x86_xop_vpcomud : GCCBuiltin<"__builtin_ia32_vpcomud">,
   3055               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
   3056                          llvm_i8_ty], [IntrNoMem]>;
   3057   def int_x86_xop_vpcomuq : GCCBuiltin<"__builtin_ia32_vpcomuq">,
   3058               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   3059                          llvm_i8_ty], [IntrNoMem]>;
   3060 
   3061   def int_x86_xop_vphaddbd :
   3062               GCCBuiltin<"__builtin_ia32_vphaddbd">,
   3063               Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   3064   def int_x86_xop_vphaddbq :
   3065               GCCBuiltin<"__builtin_ia32_vphaddbq">,
   3066               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   3067   def int_x86_xop_vphaddbw :
   3068               GCCBuiltin<"__builtin_ia32_vphaddbw">,
   3069               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   3070   def int_x86_xop_vphadddq :
   3071               GCCBuiltin<"__builtin_ia32_vphadddq">,
   3072               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   3073   def int_x86_xop_vphaddubd :
   3074               GCCBuiltin<"__builtin_ia32_vphaddubd">,
   3075               Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   3076   def int_x86_xop_vphaddubq :
   3077               GCCBuiltin<"__builtin_ia32_vphaddubq">,
   3078               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   3079   def int_x86_xop_vphaddubw :
   3080               GCCBuiltin<"__builtin_ia32_vphaddubw">,
   3081               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   3082   def int_x86_xop_vphaddudq :
   3083               GCCBuiltin<"__builtin_ia32_vphaddudq">,
   3084               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   3085   def int_x86_xop_vphadduwd :
   3086               GCCBuiltin<"__builtin_ia32_vphadduwd">,
   3087               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   3088   def int_x86_xop_vphadduwq :
   3089               GCCBuiltin<"__builtin_ia32_vphadduwq">,
   3090               Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   3091   def int_x86_xop_vphaddwd :
   3092               GCCBuiltin<"__builtin_ia32_vphaddwd">,
   3093               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   3094   def int_x86_xop_vphaddwq :
   3095               GCCBuiltin<"__builtin_ia32_vphaddwq">,
   3096               Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   3097   def int_x86_xop_vphsubbw :
   3098               GCCBuiltin<"__builtin_ia32_vphsubbw">,
   3099               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   3100   def int_x86_xop_vphsubdq :
   3101               GCCBuiltin<"__builtin_ia32_vphsubdq">,
   3102               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   3103   def int_x86_xop_vphsubwd :
   3104               GCCBuiltin<"__builtin_ia32_vphsubwd">,
   3105               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   3106   def int_x86_xop_vpmacsdd :
   3107               GCCBuiltin<"__builtin_ia32_vpmacsdd">,
   3108               Intrinsic<[llvm_v4i32_ty],
   3109                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
   3110                         [IntrNoMem]>;
   3111   def int_x86_xop_vpmacsdqh :
   3112               GCCBuiltin<"__builtin_ia32_vpmacsdqh">,
   3113               Intrinsic<[llvm_v2i64_ty],
   3114                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
   3115                         [IntrNoMem]>;
   3116   def int_x86_xop_vpmacsdql :
   3117               GCCBuiltin<"__builtin_ia32_vpmacsdql">,
   3118               Intrinsic<[llvm_v2i64_ty],
   3119                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
   3120                         [IntrNoMem]>;
   3121   def int_x86_xop_vpmacssdd :
   3122               GCCBuiltin<"__builtin_ia32_vpmacssdd">,
   3123               Intrinsic<[llvm_v4i32_ty],
   3124                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
   3125                         [IntrNoMem]>;
   3126   def int_x86_xop_vpmacssdqh :
   3127               GCCBuiltin<"__builtin_ia32_vpmacssdqh">,
   3128               Intrinsic<[llvm_v2i64_ty],
   3129                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
   3130                         [IntrNoMem]>;
   3131   def int_x86_xop_vpmacssdql :
   3132               GCCBuiltin<"__builtin_ia32_vpmacssdql">,
   3133               Intrinsic<[llvm_v2i64_ty],
   3134                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
   3135                         [IntrNoMem]>;
   3136   def int_x86_xop_vpmacsswd :
   3137               GCCBuiltin<"__builtin_ia32_vpmacsswd">,
   3138               Intrinsic<[llvm_v4i32_ty],
   3139                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
   3140                         [IntrNoMem]>;
   3141   def int_x86_xop_vpmacssww :
   3142               GCCBuiltin<"__builtin_ia32_vpmacssww">,
   3143               Intrinsic<[llvm_v8i16_ty],
   3144                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
   3145                         [IntrNoMem]>;
   3146   def int_x86_xop_vpmacswd :
   3147               GCCBuiltin<"__builtin_ia32_vpmacswd">,
   3148               Intrinsic<[llvm_v4i32_ty],
   3149                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
   3150                         [IntrNoMem]>;
   3151   def int_x86_xop_vpmacsww :
   3152               GCCBuiltin<"__builtin_ia32_vpmacsww">,
   3153               Intrinsic<[llvm_v8i16_ty],
   3154                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
   3155                         [IntrNoMem]>;
   3156   def int_x86_xop_vpmadcsswd :
   3157               GCCBuiltin<"__builtin_ia32_vpmadcsswd">,
   3158               Intrinsic<[llvm_v4i32_ty],
   3159                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
   3160                         [IntrNoMem]>;
   3161   def int_x86_xop_vpmadcswd :
   3162               GCCBuiltin<"__builtin_ia32_vpmadcswd">,
   3163               Intrinsic<[llvm_v4i32_ty],
   3164                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
   3165                         [IntrNoMem]>;
   3166   def int_x86_xop_vpperm :
   3167               GCCBuiltin<"__builtin_ia32_vpperm">,
   3168               Intrinsic<[llvm_v16i8_ty],
   3169                         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
   3170                         [IntrNoMem]>;
   3171 
   3172   def int_x86_xop_vprotb : GCCBuiltin<"__builtin_ia32_vprotb">,
   3173               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
   3174                         [IntrNoMem]>;
   3175   def int_x86_xop_vprotd : GCCBuiltin<"__builtin_ia32_vprotd">,
   3176               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   3177                         [IntrNoMem]>;
   3178   def int_x86_xop_vprotq : GCCBuiltin<"__builtin_ia32_vprotq">,
   3179               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   3180                         [IntrNoMem]>;
   3181   def int_x86_xop_vprotw : GCCBuiltin<"__builtin_ia32_vprotw">,
   3182               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
   3183                         [IntrNoMem]>;
   3184   def int_x86_xop_vprotbi : GCCBuiltin<"__builtin_ia32_vprotbi">,
   3185               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i8_ty],
   3186                         [IntrNoMem]>;
   3187   def int_x86_xop_vprotdi : GCCBuiltin<"__builtin_ia32_vprotdi">,
   3188               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
   3189                         [IntrNoMem]>;
   3190   def int_x86_xop_vprotqi : GCCBuiltin<"__builtin_ia32_vprotqi">,
   3191               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
   3192                         [IntrNoMem]>;
   3193   def int_x86_xop_vprotwi : GCCBuiltin<"__builtin_ia32_vprotwi">,
   3194               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
   3195                         [IntrNoMem]>;
   3196 
   3197   def int_x86_xop_vpshab :
   3198               GCCBuiltin<"__builtin_ia32_vpshab">,
   3199               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
   3200                         [IntrNoMem]>;
   3201   def int_x86_xop_vpshad :
   3202               GCCBuiltin<"__builtin_ia32_vpshad">,
   3203               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   3204                         [IntrNoMem]>;
   3205   def int_x86_xop_vpshaq :
   3206               GCCBuiltin<"__builtin_ia32_vpshaq">,
   3207               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   3208                         [IntrNoMem]>;
   3209   def int_x86_xop_vpshaw :
   3210               GCCBuiltin<"__builtin_ia32_vpshaw">,
   3211               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
   3212                         [IntrNoMem]>;
   3213   def int_x86_xop_vpshlb :
   3214               GCCBuiltin<"__builtin_ia32_vpshlb">,
   3215               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
   3216                         [IntrNoMem]>;
   3217   def int_x86_xop_vpshld :
   3218               GCCBuiltin<"__builtin_ia32_vpshld">,
   3219               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   3220                         [IntrNoMem]>;
   3221   def int_x86_xop_vpshlq :
   3222               GCCBuiltin<"__builtin_ia32_vpshlq">,
   3223               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   3224                         [IntrNoMem]>;
   3225   def int_x86_xop_vpshlw :
   3226               GCCBuiltin<"__builtin_ia32_vpshlw">,
   3227               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
   3228                         [IntrNoMem]>;
   3229 }
   3230 
   3231 //===----------------------------------------------------------------------===//
   3232 // MMX
   3233 
   3234 // Empty MMX state op.
   3235 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3236   def int_x86_mmx_emms  : GCCBuiltin<"__builtin_ia32_emms">,
   3237               Intrinsic<[], [], []>;
   3238   def int_x86_mmx_femms : GCCBuiltin<"__builtin_ia32_femms">,
   3239               Intrinsic<[], [], []>;
   3240 }
   3241 
   3242 // Integer arithmetic ops.
   3243 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3244   // Addition
   3245   def int_x86_mmx_padd_b : GCCBuiltin<"__builtin_ia32_paddb">,
   3246               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3247                         [IntrNoMem, Commutative]>;
   3248   def int_x86_mmx_padd_w : GCCBuiltin<"__builtin_ia32_paddw">,
   3249               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3250                         [IntrNoMem, Commutative]>;
   3251   def int_x86_mmx_padd_d : GCCBuiltin<"__builtin_ia32_paddd">,
   3252               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3253                         [IntrNoMem, Commutative]>;
   3254   def int_x86_mmx_padd_q : GCCBuiltin<"__builtin_ia32_paddq">,
   3255               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3256                         [IntrNoMem, Commutative]>;
   3257 
   3258   def int_x86_mmx_padds_b : GCCBuiltin<"__builtin_ia32_paddsb">,
   3259               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3260                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3261   def int_x86_mmx_padds_w : GCCBuiltin<"__builtin_ia32_paddsw">,
   3262               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3263                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3264 
   3265   def int_x86_mmx_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb">,
   3266               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3267                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3268   def int_x86_mmx_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw">,
   3269               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3270                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3271 
   3272   // Subtraction
   3273   def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">,
   3274               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3275                         [IntrNoMem]>;
   3276   def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">,
   3277               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3278                         [IntrNoMem]>;
   3279   def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">,
   3280               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3281                         [IntrNoMem]>;
   3282   def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">,
   3283               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3284                         [IntrNoMem]>;
   3285 
   3286   def int_x86_mmx_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb">,
   3287               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3288                          llvm_x86mmx_ty], [IntrNoMem]>;
   3289   def int_x86_mmx_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw">,
   3290               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3291                          llvm_x86mmx_ty], [IntrNoMem]>;
   3292 
   3293   def int_x86_mmx_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb">,
   3294               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3295                          llvm_x86mmx_ty], [IntrNoMem]>;
   3296   def int_x86_mmx_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw">,
   3297               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3298                          llvm_x86mmx_ty], [IntrNoMem]>;
   3299 
   3300   // Multiplication
   3301   def int_x86_mmx_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw">,
   3302               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3303                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3304   def int_x86_mmx_pmull_w : GCCBuiltin<"__builtin_ia32_pmullw">,
   3305               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3306                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3307   def int_x86_mmx_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw">,
   3308               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3309                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3310   def int_x86_mmx_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq">,
   3311               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3312                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3313   def int_x86_mmx_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd">,
   3314               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3315                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3316 
   3317   // Bitwise operations
   3318   def int_x86_mmx_pand : GCCBuiltin<"__builtin_ia32_pand">,
   3319               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3320                         [IntrNoMem, Commutative]>;
   3321   def int_x86_mmx_pandn : GCCBuiltin<"__builtin_ia32_pandn">,
   3322               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3323                         [IntrNoMem]>;
   3324   def int_x86_mmx_por : GCCBuiltin<"__builtin_ia32_por">,
   3325               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3326                         [IntrNoMem, Commutative]>;
   3327   def int_x86_mmx_pxor : GCCBuiltin<"__builtin_ia32_pxor">,
   3328               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3329                         [IntrNoMem, Commutative]>;
   3330 
   3331   // Averages
   3332   def int_x86_mmx_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb">,
   3333               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3334                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3335   def int_x86_mmx_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw">,
   3336               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3337                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3338 
   3339   // Maximum
   3340   def int_x86_mmx_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub">,
   3341               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3342                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3343   def int_x86_mmx_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw">,
   3344               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3345                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3346 
   3347   // Minimum
   3348   def int_x86_mmx_pminu_b : GCCBuiltin<"__builtin_ia32_pminub">,
   3349               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3350                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3351   def int_x86_mmx_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw">,
   3352               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3353                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3354 
   3355   // Packed sum of absolute differences
   3356   def int_x86_mmx_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw">,
   3357               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3358                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3359 }
   3360 
   3361 // Integer shift ops.
   3362 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3363   // Shift left logical
   3364   def int_x86_mmx_psll_w : GCCBuiltin<"__builtin_ia32_psllw">,
   3365               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3366                          llvm_x86mmx_ty], [IntrNoMem]>;
   3367   def int_x86_mmx_psll_d : GCCBuiltin<"__builtin_ia32_pslld">,
   3368               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3369                          llvm_x86mmx_ty], [IntrNoMem]>;
   3370   def int_x86_mmx_psll_q : GCCBuiltin<"__builtin_ia32_psllq">,
   3371               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3372                          llvm_x86mmx_ty], [IntrNoMem]>;
   3373 
   3374   def int_x86_mmx_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw">,
   3375               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3376                          llvm_x86mmx_ty], [IntrNoMem]>;
   3377   def int_x86_mmx_psrl_d : GCCBuiltin<"__builtin_ia32_psrld">,
   3378               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3379                          llvm_x86mmx_ty], [IntrNoMem]>;
   3380   def int_x86_mmx_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq">,
   3381               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3382                          llvm_x86mmx_ty], [IntrNoMem]>;
   3383 
   3384   def int_x86_mmx_psra_w : GCCBuiltin<"__builtin_ia32_psraw">,
   3385               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3386                          llvm_x86mmx_ty], [IntrNoMem]>;
   3387   def int_x86_mmx_psra_d : GCCBuiltin<"__builtin_ia32_psrad">,
   3388               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3389                          llvm_x86mmx_ty], [IntrNoMem]>;
   3390 
   3391   def int_x86_mmx_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi">,
   3392               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3393                          llvm_i32_ty], [IntrNoMem]>;
   3394   def int_x86_mmx_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi">,
   3395               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3396                          llvm_i32_ty], [IntrNoMem]>;
   3397   def int_x86_mmx_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi">,
   3398               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3399                          llvm_i32_ty], [IntrNoMem]>;
   3400 
   3401   def int_x86_mmx_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi">,
   3402               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3403                          llvm_i32_ty], [IntrNoMem]>;
   3404   def int_x86_mmx_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi">,
   3405               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3406                          llvm_i32_ty], [IntrNoMem]>;
   3407   def int_x86_mmx_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi">,
   3408               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3409                          llvm_i32_ty], [IntrNoMem]>;
   3410 
   3411   def int_x86_mmx_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi">,
   3412               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3413                          llvm_i32_ty], [IntrNoMem]>;
   3414   def int_x86_mmx_psrai_d : GCCBuiltin<"__builtin_ia32_psradi">,
   3415               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3416                          llvm_i32_ty], [IntrNoMem]>;
   3417 }
   3418 // Permute
   3419 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3420   def int_x86_avx512_mask_permvar_df_256 : GCCBuiltin<"__builtin_ia32_permvardf256_mask">,
   3421               Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   3422                         llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],  [IntrNoMem]>;
   3423   def int_x86_avx512_mask_permvar_df_512 : GCCBuiltin<"__builtin_ia32_permvardf512_mask">,
   3424               Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty,
   3425                         llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty],  [IntrNoMem]>;
   3426   def int_x86_avx512_mask_permvar_di_256 : GCCBuiltin<"__builtin_ia32_permvardi256_mask">,
   3427               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   3428                         llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],  [IntrNoMem]>;
   3429   def int_x86_avx512_mask_permvar_di_512 : GCCBuiltin<"__builtin_ia32_permvardi512_mask">,
   3430               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   3431                         llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],  [IntrNoMem]>;
   3432   def int_x86_avx512_mask_permvar_hi_128 : GCCBuiltin<"__builtin_ia32_permvarhi128_mask">,
   3433               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
   3434                         llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],  [IntrNoMem]>;
   3435   def int_x86_avx512_mask_permvar_hi_256 : GCCBuiltin<"__builtin_ia32_permvarhi256_mask">,
   3436               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   3437                         llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],  [IntrNoMem]>;
   3438   def int_x86_avx512_mask_permvar_hi_512 : GCCBuiltin<"__builtin_ia32_permvarhi512_mask">,
   3439               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
   3440                         llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],  [IntrNoMem]>;
   3441   def int_x86_avx512_mask_permvar_qi_128 : GCCBuiltin<"__builtin_ia32_permvarqi128_mask">,
   3442               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
   3443                         llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],  [IntrNoMem]>;
   3444   def int_x86_avx512_mask_permvar_qi_256 : GCCBuiltin<"__builtin_ia32_permvarqi256_mask">,
   3445               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   3446                         llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],  [IntrNoMem]>;
   3447   def int_x86_avx512_mask_permvar_qi_512 : GCCBuiltin<"__builtin_ia32_permvarqi512_mask">,
   3448               Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty,
   3449                         llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],  [IntrNoMem]>;
   3450   def int_x86_avx512_mask_permvar_sf_256 : GCCBuiltin<"__builtin_ia32_permvarsf256_mask">,
   3451               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   3452                         llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],  [IntrNoMem]>;
   3453   def int_x86_avx512_mask_permvar_sf_512 : GCCBuiltin<"__builtin_ia32_permvarsf512_mask">,
   3454               Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty,
   3455                         llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty],  [IntrNoMem]>;
   3456   def int_x86_avx512_mask_permvar_si_256 : GCCBuiltin<"__builtin_ia32_permvarsi256_mask">,
   3457               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   3458                         llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],  [IntrNoMem]>;
   3459   def int_x86_avx512_mask_permvar_si_512 : GCCBuiltin<"__builtin_ia32_permvarsi512_mask">,
   3460               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   3461                         llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],  [IntrNoMem]>;
   3462 }
   3463 // Pack ops.
   3464 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3465   def int_x86_mmx_packsswb : GCCBuiltin<"__builtin_ia32_packsswb">,
   3466               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3467                          llvm_x86mmx_ty], [IntrNoMem]>;
   3468   def int_x86_mmx_packssdw : GCCBuiltin<"__builtin_ia32_packssdw">,
   3469               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3470                          llvm_x86mmx_ty], [IntrNoMem]>;
   3471   def int_x86_mmx_packuswb : GCCBuiltin<"__builtin_ia32_packuswb">,
   3472               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3473                          llvm_x86mmx_ty], [IntrNoMem]>;
   3474 }
   3475 
   3476 // Unpacking ops.
   3477 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3478   def int_x86_mmx_punpckhbw : GCCBuiltin<"__builtin_ia32_punpckhbw">,
   3479               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3480                         [IntrNoMem]>;
   3481   def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">,
   3482               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3483                         [IntrNoMem]>;
   3484   def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">,
   3485               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3486                         [IntrNoMem]>;
   3487   def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">,
   3488               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3489                         [IntrNoMem]>;
   3490   def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">,
   3491               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3492                         [IntrNoMem]>;
   3493   def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">,
   3494               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   3495                         [IntrNoMem]>;
   3496 }
   3497 
   3498 // Integer comparison ops
   3499 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3500   def int_x86_mmx_pcmpeq_b : GCCBuiltin<"__builtin_ia32_pcmpeqb">,
   3501               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3502                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3503   def int_x86_mmx_pcmpeq_w : GCCBuiltin<"__builtin_ia32_pcmpeqw">,
   3504               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3505                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3506   def int_x86_mmx_pcmpeq_d : GCCBuiltin<"__builtin_ia32_pcmpeqd">,
   3507               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3508                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   3509 
   3510   def int_x86_mmx_pcmpgt_b : GCCBuiltin<"__builtin_ia32_pcmpgtb">,
   3511               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3512                          llvm_x86mmx_ty], [IntrNoMem]>;
   3513   def int_x86_mmx_pcmpgt_w : GCCBuiltin<"__builtin_ia32_pcmpgtw">,
   3514               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3515                          llvm_x86mmx_ty], [IntrNoMem]>;
   3516   def int_x86_mmx_pcmpgt_d : GCCBuiltin<"__builtin_ia32_pcmpgtd">,
   3517               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3518                          llvm_x86mmx_ty], [IntrNoMem]>;
   3519 }
   3520 
   3521 // Misc.
   3522 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3523   def int_x86_mmx_maskmovq : GCCBuiltin<"__builtin_ia32_maskmovq">,
   3524               Intrinsic<[], [llvm_x86mmx_ty, llvm_x86mmx_ty, llvm_ptr_ty], []>;
   3525 
   3526   def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">,
   3527               Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
   3528 
   3529   def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">,
   3530               Intrinsic<[], [llvm_ptrx86mmx_ty, llvm_x86mmx_ty], []>;
   3531 
   3532   def int_x86_mmx_palignr_b : GCCBuiltin<"__builtin_ia32_palignr">,
   3533               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3534                         llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem]>;
   3535 
   3536   def int_x86_mmx_pextr_w : GCCBuiltin<"__builtin_ia32_vec_ext_v4hi">,
   3537               Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty],
   3538                         [IntrNoMem]>;
   3539 
   3540   def int_x86_mmx_pinsr_w : GCCBuiltin<"__builtin_ia32_vec_set_v4hi">,
   3541               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   3542                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   3543 }
   3544 
   3545 //===----------------------------------------------------------------------===//
   3546 // BMI
   3547 
   3548 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3549   def int_x86_bmi_bextr_32 : GCCBuiltin<"__builtin_ia32_bextr_u32">,
   3550               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   3551   def int_x86_bmi_bextr_64 : GCCBuiltin<"__builtin_ia32_bextr_u64">,
   3552               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   3553   def int_x86_bmi_bzhi_32 : GCCBuiltin<"__builtin_ia32_bzhi_si">,
   3554               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   3555   def int_x86_bmi_bzhi_64 : GCCBuiltin<"__builtin_ia32_bzhi_di">,
   3556               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   3557   def int_x86_bmi_pdep_32 : GCCBuiltin<"__builtin_ia32_pdep_si">,
   3558               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   3559   def int_x86_bmi_pdep_64 : GCCBuiltin<"__builtin_ia32_pdep_di">,
   3560               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   3561   def int_x86_bmi_pext_32 : GCCBuiltin<"__builtin_ia32_pext_si">,
   3562               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   3563   def int_x86_bmi_pext_64 : GCCBuiltin<"__builtin_ia32_pext_di">,
   3564               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   3565 }
   3566 
   3567 //===----------------------------------------------------------------------===//
   3568 // FS/GS Base
   3569 
   3570 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3571   def int_x86_rdfsbase_32 : GCCBuiltin<"__builtin_ia32_rdfsbase32">,
   3572               Intrinsic<[llvm_i32_ty], []>;
   3573   def int_x86_rdgsbase_32 : GCCBuiltin<"__builtin_ia32_rdgsbase32">,
   3574               Intrinsic<[llvm_i32_ty], []>;
   3575   def int_x86_rdfsbase_64 : GCCBuiltin<"__builtin_ia32_rdfsbase64">,
   3576               Intrinsic<[llvm_i64_ty], []>;
   3577   def int_x86_rdgsbase_64 : GCCBuiltin<"__builtin_ia32_rdgsbase64">,
   3578               Intrinsic<[llvm_i64_ty], []>;
   3579   def int_x86_wrfsbase_32 : GCCBuiltin<"__builtin_ia32_wrfsbase32">,
   3580               Intrinsic<[], [llvm_i32_ty]>;
   3581   def int_x86_wrgsbase_32 : GCCBuiltin<"__builtin_ia32_wrgsbase32">,
   3582               Intrinsic<[], [llvm_i32_ty]>;
   3583   def int_x86_wrfsbase_64 : GCCBuiltin<"__builtin_ia32_wrfsbase64">,
   3584               Intrinsic<[], [llvm_i64_ty]>;
   3585   def int_x86_wrgsbase_64 : GCCBuiltin<"__builtin_ia32_wrgsbase64">,
   3586               Intrinsic<[], [llvm_i64_ty]>;
   3587 }
   3588 
   3589 //===----------------------------------------------------------------------===//
   3590 // FXSR
   3591 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3592   def int_x86_fxrstor : GCCBuiltin<"__builtin_ia32_fxrstor">,
   3593               Intrinsic<[], [llvm_ptr_ty], []>;
   3594   def int_x86_fxrstor64 : GCCBuiltin<"__builtin_ia32_fxrstor64">,
   3595               Intrinsic<[], [llvm_ptr_ty], []>;
   3596   def int_x86_fxsave : GCCBuiltin<"__builtin_ia32_fxsave">,
   3597               Intrinsic<[], [llvm_ptr_ty], []>;
   3598   def int_x86_fxsave64 : GCCBuiltin<"__builtin_ia32_fxsave64">,
   3599               Intrinsic<[], [llvm_ptr_ty], []>;
   3600 }
   3601 
   3602 //===----------------------------------------------------------------------===//
   3603 // XSAVE
   3604 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3605   def int_x86_xsave :
   3606               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3607   def int_x86_xsave64 :
   3608               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3609   def int_x86_xrstor :
   3610               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3611   def int_x86_xrstor64 :
   3612               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3613   def int_x86_xsaveopt :
   3614               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3615   def int_x86_xsaveopt64 :
   3616               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3617   def int_x86_xrstors :
   3618               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3619   def int_x86_xrstors64 :
   3620               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3621   def int_x86_xsavec :
   3622               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3623   def int_x86_xsavec64 :
   3624               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3625   def int_x86_xsaves :
   3626               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3627   def int_x86_xsaves64 :
   3628               Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3629   def int_x86_xgetbv :
   3630               Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>;
   3631   def int_x86_xsetbv :
   3632               Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
   3633 }
   3634 
   3635 //===----------------------------------------------------------------------===//
   3636 // CLFLUSHOPT
   3637 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3638   def int_x86_clflushopt : GCCBuiltin<"__builtin_ia32_clflushopt">,
   3639               Intrinsic<[], [llvm_ptr_ty], []>;
   3640 }
   3641 
   3642 //===----------------------------------------------------------------------===//
   3643 // Support protection key
   3644 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3645   def int_x86_rdpkru : GCCBuiltin <"__builtin_ia32_rdpkru">,
   3646               Intrinsic<[llvm_i32_ty], [], []>;
   3647   def int_x86_wrpkru : GCCBuiltin<"__builtin_ia32_wrpkru">,
   3648               Intrinsic<[], [llvm_i32_ty], []>;
   3649 }
   3650 //===----------------------------------------------------------------------===//
   3651 // Half float conversion
   3652 
   3653 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3654   def int_x86_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps">,
   3655               Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   3656   def int_x86_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256">,
   3657               Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   3658   def int_x86_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph">,
   3659               Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty],
   3660                         [IntrNoMem]>;
   3661   def int_x86_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256">,
   3662               Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty],
   3663                         [IntrNoMem]>;
   3664   def int_x86_avx512_mask_vcvtph2ps_512 : GCCBuiltin<"__builtin_ia32_vcvtph2ps512_mask">,
   3665               Intrinsic<[llvm_v16f32_ty], [llvm_v16i16_ty, llvm_v16f32_ty,
   3666                                            llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   3667   def int_x86_avx512_mask_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256_mask">,
   3668               Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty, llvm_v8f32_ty,
   3669                                            llvm_i8_ty], [IntrNoMem]>;
   3670   def int_x86_avx512_mask_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps_mask">,
   3671               Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty, llvm_v4f32_ty,
   3672                                            llvm_i8_ty], [IntrNoMem]>;
   3673   def int_x86_avx512_mask_vcvtps2ph_512 : GCCBuiltin<"__builtin_ia32_vcvtps2ph512_mask">,
   3674               Intrinsic<[llvm_v16i16_ty], [llvm_v16f32_ty, llvm_i32_ty,
   3675                                            llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   3676   def int_x86_avx512_mask_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256_mask">,
   3677               Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty,
   3678                                            llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   3679   def int_x86_avx512_mask_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph_mask">,
   3680               Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty,
   3681                                            llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   3682 }
   3683 
   3684 //===----------------------------------------------------------------------===//
   3685 // TBM
   3686 
   3687 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3688   def int_x86_tbm_bextri_u32 : GCCBuiltin<"__builtin_ia32_bextri_u32">,
   3689         Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   3690   def int_x86_tbm_bextri_u64 : GCCBuiltin<"__builtin_ia32_bextri_u64">,
   3691         Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   3692 }
   3693 
   3694 //===----------------------------------------------------------------------===//
   3695 // RDRAND intrinsics - Return a random value and whether it is valid.
   3696 // RDSEED intrinsics - Return a NIST SP800-90B & C compliant random value and
   3697 // whether it is valid.
   3698 
   3699 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3700   // These are declared side-effecting so they don't get eliminated by CSE or
   3701   // LICM.
   3702   def int_x86_rdrand_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
   3703   def int_x86_rdrand_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
   3704   def int_x86_rdrand_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
   3705   def int_x86_rdseed_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
   3706   def int_x86_rdseed_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
   3707   def int_x86_rdseed_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
   3708 }
   3709 
   3710 //===----------------------------------------------------------------------===//
   3711 // ADX
   3712 
   3713 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3714   def int_x86_addcarryx_u32: GCCBuiltin<"__builtin_ia32_addcarryx_u32">,
   3715         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
   3716                                  llvm_ptr_ty], [IntrArgMemOnly]>;
   3717   def int_x86_addcarryx_u64: GCCBuiltin<"__builtin_ia32_addcarryx_u64">,
   3718         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
   3719                                  llvm_ptr_ty], [IntrArgMemOnly]>;
   3720   def int_x86_addcarry_u32: GCCBuiltin<"__builtin_ia32_addcarry_u32">,
   3721         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
   3722                                  llvm_ptr_ty], [IntrArgMemOnly]>;
   3723   def int_x86_addcarry_u64: GCCBuiltin<"__builtin_ia32_addcarry_u64">,
   3724         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
   3725                                  llvm_ptr_ty], [IntrArgMemOnly]>;
   3726   def int_x86_subborrow_u32: GCCBuiltin<"__builtin_ia32_subborrow_u32">,
   3727         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i32_ty, llvm_i32_ty,
   3728                                  llvm_ptr_ty], [IntrArgMemOnly]>;
   3729   def int_x86_subborrow_u64: GCCBuiltin<"__builtin_ia32_subborrow_u64">,
   3730         Intrinsic<[llvm_i8_ty], [llvm_i8_ty, llvm_i64_ty, llvm_i64_ty,
   3731                                  llvm_ptr_ty], [IntrArgMemOnly]>;
   3732 }
   3733 
   3734 //===----------------------------------------------------------------------===//
   3735 // RTM intrinsics. Transactional Memory support.
   3736 
   3737 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3738   def int_x86_xbegin : GCCBuiltin<"__builtin_ia32_xbegin">,
   3739               Intrinsic<[llvm_i32_ty], [], []>;
   3740   def int_x86_xend : GCCBuiltin<"__builtin_ia32_xend">,
   3741               Intrinsic<[], [], []>;
   3742   def int_x86_xabort : GCCBuiltin<"__builtin_ia32_xabort">,
   3743               Intrinsic<[], [llvm_i8_ty], []>;
   3744   def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">,
   3745               Intrinsic<[llvm_i32_ty], [], []>;
   3746 }
   3747 
   3748 //===----------------------------------------------------------------------===//
   3749 // AVX512
   3750 
   3751 // Mask ops
   3752 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3753   // Mask instructions
   3754   // 16-bit mask
   3755   def int_x86_avx512_kand_w : GCCBuiltin<"__builtin_ia32_kandhi">,
   3756               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   3757                          [IntrNoMem]>;
   3758   def int_x86_avx512_kandn_w : GCCBuiltin<"__builtin_ia32_kandnhi">,
   3759               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   3760                          [IntrNoMem]>;
   3761   def int_x86_avx512_knot_w : GCCBuiltin<"__builtin_ia32_knothi">,
   3762               Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem]>;
   3763   def int_x86_avx512_kor_w : GCCBuiltin<"__builtin_ia32_korhi">,
   3764               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   3765                          [IntrNoMem]>;
   3766   def int_x86_avx512_kxor_w : GCCBuiltin<"__builtin_ia32_kxorhi">,
   3767               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   3768                          [IntrNoMem]>;
   3769   def int_x86_avx512_kxnor_w : GCCBuiltin<"__builtin_ia32_kxnorhi">,
   3770               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   3771                          [IntrNoMem]>;
   3772   def int_x86_avx512_kunpck_bw : GCCBuiltin<"__builtin_ia32_kunpckhi">,
   3773               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   3774                          [IntrNoMem]>;
   3775   def int_x86_avx512_kunpck_wd : GCCBuiltin<"__builtin_ia32_kunpcksi">,
   3776               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
   3777                          [IntrNoMem]>;
   3778   def int_x86_avx512_kunpck_dq : GCCBuiltin<"__builtin_ia32_kunpckdi">,
   3779               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
   3780                          [IntrNoMem]>;
   3781   def int_x86_avx512_kortestz_w : GCCBuiltin<"__builtin_ia32_kortestzhi">,
   3782               Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
   3783                         [IntrNoMem]>;
   3784   def int_x86_avx512_kortestc_w : GCCBuiltin<"__builtin_ia32_kortestchi">,
   3785               Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
   3786                         [IntrNoMem]>;
   3787 }
   3788 
   3789 // Conversion ops
   3790 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3791   def int_x86_avx512_cvttss2si : GCCBuiltin<"__builtin_ia32_vcvttss2si32">,
   3792               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
   3793   def int_x86_avx512_cvttss2si64 : GCCBuiltin<"__builtin_ia32_vcvttss2si64">,
   3794               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
   3795   def int_x86_avx512_cvttss2usi : GCCBuiltin<"__builtin_ia32_vcvttss2usi32">,
   3796               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
   3797   def int_x86_avx512_cvttss2usi64 : GCCBuiltin<"__builtin_ia32_vcvttss2usi64">,
   3798               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
   3799   def int_x86_avx512_cvtusi2ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss32">,
   3800               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
   3801                          llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   3802   def int_x86_avx512_cvtusi642ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss64">,
   3803               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
   3804                          llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
   3805   def int_x86_avx512_cvttsd2si : GCCBuiltin<"__builtin_ia32_vcvttsd2si32">,
   3806               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
   3807   def int_x86_avx512_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_vcvttsd2si64">,
   3808               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
   3809   def int_x86_avx512_cvttsd2usi : GCCBuiltin<"__builtin_ia32_vcvttsd2usi32">,
   3810               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
   3811   def int_x86_avx512_cvttsd2usi64 : GCCBuiltin<"__builtin_ia32_vcvttsd2usi64">,
   3812               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
   3813   def int_x86_avx512_cvtusi2sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd32">,
   3814               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
   3815                          llvm_i32_ty], [IntrNoMem]>;
   3816   def int_x86_avx512_cvtusi642sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd64">,
   3817               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
   3818                          llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
   3819   def int_x86_avx512_vcvtss2usi32 : GCCBuiltin<"__builtin_ia32_vcvtss2usi32">,
   3820               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
   3821   def int_x86_avx512_vcvtss2usi64 : GCCBuiltin<"__builtin_ia32_vcvtss2usi64">,
   3822               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
   3823   def int_x86_avx512_vcvtss2si32 : GCCBuiltin<"__builtin_ia32_vcvtss2si32">,
   3824               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
   3825   def int_x86_avx512_vcvtss2si64 : GCCBuiltin<"__builtin_ia32_vcvtss2si64">,
   3826               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty, llvm_i32_ty], [IntrNoMem]>;
   3827   def int_x86_avx512_vcvtsd2usi32 : GCCBuiltin<"__builtin_ia32_vcvtsd2usi32">,
   3828               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
   3829   def int_x86_avx512_vcvtsd2usi64 : GCCBuiltin<"__builtin_ia32_vcvtsd2usi64">,
   3830               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
   3831   def int_x86_avx512_vcvtsd2si32 : GCCBuiltin<"__builtin_ia32_vcvtsd2si32">,
   3832               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
   3833   def int_x86_avx512_vcvtsd2si64 : GCCBuiltin<"__builtin_ia32_vcvtsd2si64">,
   3834               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
   3835   def int_x86_avx512_cvtsi2ss32 : GCCBuiltin<"__builtin_ia32_cvtsi2ss32">,
   3836               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
   3837                          llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   3838   def int_x86_avx512_cvtsi2ss64 : GCCBuiltin<"__builtin_ia32_cvtsi2ss64">,
   3839               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
   3840                          llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
   3841   def int_x86_avx512_cvtsi2sd64 : GCCBuiltin<"__builtin_ia32_cvtsi2sd64">,
   3842               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
   3843                          llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
   3844 
   3845   def int_x86_avx512_cvtb2mask_128 : GCCBuiltin<"__builtin_ia32_cvtb2mask128">,
   3846               Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   3847   def int_x86_avx512_cvtb2mask_256 : GCCBuiltin<"__builtin_ia32_cvtb2mask256">,
   3848               Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty], [IntrNoMem]>;
   3849   def int_x86_avx512_cvtb2mask_512 : GCCBuiltin<"__builtin_ia32_cvtb2mask512">,
   3850               Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty], [IntrNoMem]>;
   3851 
   3852   def int_x86_avx512_cvtw2mask_128 : GCCBuiltin<"__builtin_ia32_cvtw2mask128">,
   3853               Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   3854   def int_x86_avx512_cvtw2mask_256 : GCCBuiltin<"__builtin_ia32_cvtw2mask256">,
   3855               Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty], [IntrNoMem]>;
   3856   def int_x86_avx512_cvtw2mask_512 : GCCBuiltin<"__builtin_ia32_cvtw2mask512">,
   3857               Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty], [IntrNoMem]>;
   3858 
   3859   def int_x86_avx512_cvtd2mask_128 : GCCBuiltin<"__builtin_ia32_cvtd2mask128">,
   3860               Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   3861   def int_x86_avx512_cvtd2mask_256 : GCCBuiltin<"__builtin_ia32_cvtd2mask256">,
   3862               Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty], [IntrNoMem]>;
   3863   def int_x86_avx512_cvtd2mask_512 : GCCBuiltin<"__builtin_ia32_cvtd2mask512">,
   3864               Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty], [IntrNoMem]>;
   3865 
   3866   def int_x86_avx512_cvtq2mask_128 : GCCBuiltin<"__builtin_ia32_cvtq2mask128">,
   3867               Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty], [IntrNoMem]>;
   3868   def int_x86_avx512_cvtq2mask_256 : GCCBuiltin<"__builtin_ia32_cvtq2mask256">,
   3869               Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty], [IntrNoMem]>;
   3870   def int_x86_avx512_cvtq2mask_512 : GCCBuiltin<"__builtin_ia32_cvtq2mask512">,
   3871               Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty], [IntrNoMem]>;
   3872 
   3873 }
   3874 
   3875 // Pack ops.
   3876 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3877   def int_x86_avx512_packsswb_512 : GCCBuiltin<"__builtin_ia32_packsswb512">,
   3878               Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty],
   3879                         [IntrNoMem]>;
   3880   def int_x86_avx512_packssdw_512 : GCCBuiltin<"__builtin_ia32_packssdw512">,
   3881               Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
   3882                          [IntrNoMem]>;
   3883   def int_x86_avx512_packuswb_512 : GCCBuiltin<"__builtin_ia32_packuswb512">,
   3884               Intrinsic<[llvm_v64i8_ty], [llvm_v32i16_ty,llvm_v32i16_ty],
   3885                          [IntrNoMem]>;
   3886   def int_x86_avx512_packusdw_512 : GCCBuiltin<"__builtin_ia32_packusdw512">,
   3887               Intrinsic<[llvm_v32i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty],
   3888                          [IntrNoMem]>;
   3889 }
   3890 
   3891 // Vector convert
   3892 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3893   def int_x86_avx512_mask_cvtdq2ps_128 :
   3894         GCCBuiltin<"__builtin_ia32_cvtdq2ps128_mask">,
   3895           Intrinsic<[llvm_v4f32_ty],
   3896           [llvm_v4i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   3897           [IntrNoMem]>;
   3898 
   3899   def int_x86_avx512_mask_cvtdq2ps_256 :
   3900         GCCBuiltin<"__builtin_ia32_cvtdq2ps256_mask">,
   3901           Intrinsic<[llvm_v8f32_ty],
   3902           [llvm_v8i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   3903           [IntrNoMem]>;
   3904 
   3905   def int_x86_avx512_mask_cvtdq2ps_512 :
   3906         GCCBuiltin<"__builtin_ia32_cvtdq2ps512_mask">,
   3907           Intrinsic<[llvm_v16f32_ty],
   3908           [llvm_v16i32_ty, llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty],
   3909           [IntrNoMem]>;
   3910 
   3911   def int_x86_avx512_mask_cvtpd2dq_128 :
   3912         GCCBuiltin<"__builtin_ia32_cvtpd2dq128_mask">,
   3913           Intrinsic<[llvm_v4i32_ty],
   3914           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
   3915           [IntrNoMem]>;
   3916 
   3917   def int_x86_avx512_mask_cvtpd2dq_256 :
   3918         GCCBuiltin<"__builtin_ia32_cvtpd2dq256_mask">,
   3919           Intrinsic<[llvm_v4i32_ty],
   3920           [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
   3921           [IntrNoMem]>;
   3922 
   3923   def int_x86_avx512_mask_cvtpd2dq_512 :
   3924         GCCBuiltin<"__builtin_ia32_cvtpd2dq512_mask">,
   3925           Intrinsic<[llvm_v8i32_ty],
   3926           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
   3927           [IntrNoMem]>;
   3928 
   3929   def int_x86_avx512_mask_cvtpd2ps_256 :
   3930         GCCBuiltin<"__builtin_ia32_cvtpd2ps256_mask">,
   3931           Intrinsic<[llvm_v4f32_ty],
   3932           [llvm_v4f64_ty, llvm_v4f32_ty,  llvm_i8_ty],
   3933           [IntrNoMem]>;
   3934 
   3935   def int_x86_avx512_mask_cvtpd2ps_512 :
   3936         GCCBuiltin<"__builtin_ia32_cvtpd2ps512_mask">,
   3937           Intrinsic<[llvm_v8f32_ty],
   3938           [llvm_v8f64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
   3939           [IntrNoMem]>;
   3940 
   3941   def int_x86_avx512_mask_cvtsd2ss_round :
   3942         GCCBuiltin<"__builtin_ia32_cvtsd2ss_round_mask">,
   3943           Intrinsic<[llvm_v4f32_ty],
   3944           [llvm_v4f32_ty, llvm_v2f64_ty, llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
   3945           [IntrNoMem]>;
   3946 
   3947   def int_x86_avx512_mask_cvtss2sd_round :
   3948         GCCBuiltin<"__builtin_ia32_cvtss2sd_round_mask">,
   3949           Intrinsic<[llvm_v2f64_ty],
   3950           [llvm_v2f64_ty, llvm_v4f32_ty, llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
   3951           [IntrNoMem]>;
   3952 
   3953   def int_x86_avx512_mask_cvtpd2ps :
   3954         GCCBuiltin<"__builtin_ia32_cvtpd2ps_mask">,
   3955           Intrinsic<[llvm_v4f32_ty],
   3956           [llvm_v2f64_ty, llvm_v4f32_ty,  llvm_i8_ty],
   3957           [IntrNoMem]>;
   3958 
   3959   def int_x86_avx512_mask_cvtpd2qq_128 :
   3960         GCCBuiltin<"__builtin_ia32_cvtpd2qq128_mask">,
   3961           Intrinsic<[llvm_v2i64_ty],
   3962           [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
   3963           [IntrNoMem]>;
   3964 
   3965   def int_x86_avx512_mask_cvtpd2qq_256 :
   3966         GCCBuiltin<"__builtin_ia32_cvtpd2qq256_mask">,
   3967           Intrinsic<[llvm_v4i64_ty],
   3968           [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
   3969           [IntrNoMem]>;
   3970 
   3971   def int_x86_avx512_mask_cvtpd2qq_512 :
   3972         GCCBuiltin<"__builtin_ia32_cvtpd2qq512_mask">,
   3973           Intrinsic<[llvm_v8i64_ty],
   3974           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
   3975           [IntrNoMem]>;
   3976 
   3977   def int_x86_avx512_mask_cvtpd2udq_128 :
   3978         GCCBuiltin<"__builtin_ia32_cvtpd2udq128_mask">,
   3979           Intrinsic<[llvm_v4i32_ty],
   3980           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
   3981           [IntrNoMem]>;
   3982 
   3983   def int_x86_avx512_mask_cvtpd2udq_256 :
   3984         GCCBuiltin<"__builtin_ia32_cvtpd2udq256_mask">,
   3985           Intrinsic<[llvm_v4i32_ty],
   3986           [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
   3987           [IntrNoMem]>;
   3988 
   3989   def int_x86_avx512_mask_cvtpd2udq_512 :
   3990         GCCBuiltin<"__builtin_ia32_cvtpd2udq512_mask">,
   3991           Intrinsic<[llvm_v8i32_ty],
   3992           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
   3993           [IntrNoMem]>;
   3994 
   3995   def int_x86_avx512_mask_cvtpd2uqq_128 :
   3996         GCCBuiltin<"__builtin_ia32_cvtpd2uqq128_mask">,
   3997           Intrinsic<[llvm_v2i64_ty],
   3998           [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
   3999           [IntrNoMem]>;
   4000 
   4001   def int_x86_avx512_mask_cvtpd2uqq_256 :
   4002         GCCBuiltin<"__builtin_ia32_cvtpd2uqq256_mask">,
   4003           Intrinsic<[llvm_v4i64_ty],
   4004           [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
   4005           [IntrNoMem]>;
   4006 
   4007   def int_x86_avx512_mask_cvtpd2uqq_512 :
   4008         GCCBuiltin<"__builtin_ia32_cvtpd2uqq512_mask">,
   4009           Intrinsic<[llvm_v8i64_ty],
   4010           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4011           [IntrNoMem]>;
   4012 
   4013   def int_x86_avx512_mask_cvtps2dq_128 :
   4014         GCCBuiltin<"__builtin_ia32_cvtps2dq128_mask">,
   4015           Intrinsic<[llvm_v4i32_ty],
   4016           [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
   4017           [IntrNoMem]>;
   4018 
   4019   def int_x86_avx512_mask_cvtps2dq_256 :
   4020         GCCBuiltin<"__builtin_ia32_cvtps2dq256_mask">,
   4021           Intrinsic<[llvm_v8i32_ty],
   4022           [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
   4023           [IntrNoMem]>;
   4024 
   4025   def int_x86_avx512_mask_cvtps2dq_512 :
   4026         GCCBuiltin<"__builtin_ia32_cvtps2dq512_mask">,
   4027           Intrinsic<[llvm_v16i32_ty],
   4028           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
   4029           [IntrNoMem]>;
   4030 
   4031   def int_x86_avx512_mask_cvtps2pd_128 :
   4032         GCCBuiltin<"__builtin_ia32_cvtps2pd128_mask">,
   4033           Intrinsic<[llvm_v2f64_ty],
   4034           [llvm_v4f32_ty, llvm_v2f64_ty,  llvm_i8_ty],
   4035           [IntrNoMem]>;
   4036 
   4037   def int_x86_avx512_mask_cvtps2pd_256 :
   4038         GCCBuiltin<"__builtin_ia32_cvtps2pd256_mask">,
   4039           Intrinsic<[llvm_v4f64_ty],
   4040           [llvm_v4f32_ty, llvm_v4f64_ty,  llvm_i8_ty],
   4041           [IntrNoMem]>;
   4042 
   4043   def int_x86_avx512_mask_cvtps2pd_512 :
   4044         GCCBuiltin<"__builtin_ia32_cvtps2pd512_mask">,
   4045           Intrinsic<[llvm_v8f64_ty],
   4046           [llvm_v8f32_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4047           [IntrNoMem]>;
   4048 
   4049   def int_x86_avx512_mask_cvtps2qq_128 :
   4050         GCCBuiltin<"__builtin_ia32_cvtps2qq128_mask">,
   4051           Intrinsic<[llvm_v2i64_ty],
   4052           [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
   4053           [IntrNoMem]>;
   4054 
   4055   def int_x86_avx512_mask_cvtps2qq_256 :
   4056         GCCBuiltin<"__builtin_ia32_cvtps2qq256_mask">,
   4057           Intrinsic<[llvm_v4i64_ty],
   4058           [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
   4059           [IntrNoMem]>;
   4060 
   4061   def int_x86_avx512_mask_cvtps2qq_512 :
   4062         GCCBuiltin<"__builtin_ia32_cvtps2qq512_mask">,
   4063           Intrinsic<[llvm_v8i64_ty],
   4064           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4065           [IntrNoMem]>;
   4066 
   4067   def int_x86_avx512_mask_cvtps2udq_128 :
   4068         GCCBuiltin<"__builtin_ia32_cvtps2udq128_mask">,
   4069           Intrinsic<[llvm_v4i32_ty],
   4070           [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
   4071           [IntrNoMem]>;
   4072 
   4073   def int_x86_avx512_mask_cvtps2udq_256 :
   4074         GCCBuiltin<"__builtin_ia32_cvtps2udq256_mask">,
   4075           Intrinsic<[llvm_v8i32_ty],
   4076           [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
   4077           [IntrNoMem]>;
   4078 
   4079   def int_x86_avx512_mask_cvtps2udq_512 :
   4080         GCCBuiltin<"__builtin_ia32_cvtps2udq512_mask">,
   4081           Intrinsic<[llvm_v16i32_ty],
   4082           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
   4083           [IntrNoMem]>;
   4084 
   4085   def int_x86_avx512_mask_cvtps2uqq_128 :
   4086         GCCBuiltin<"__builtin_ia32_cvtps2uqq128_mask">,
   4087           Intrinsic<[llvm_v2i64_ty],
   4088           [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
   4089           [IntrNoMem]>;
   4090 
   4091   def int_x86_avx512_mask_cvtps2uqq_256 :
   4092         GCCBuiltin<"__builtin_ia32_cvtps2uqq256_mask">,
   4093           Intrinsic<[llvm_v4i64_ty],
   4094           [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
   4095           [IntrNoMem]>;
   4096 
   4097   def int_x86_avx512_mask_cvtps2uqq_512 :
   4098         GCCBuiltin<"__builtin_ia32_cvtps2uqq512_mask">,
   4099           Intrinsic<[llvm_v8i64_ty],
   4100           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4101           [IntrNoMem]>;
   4102 
   4103   def int_x86_avx512_mask_cvtqq2pd_128 :
   4104         GCCBuiltin<"__builtin_ia32_cvtqq2pd128_mask">,
   4105           Intrinsic<[llvm_v2f64_ty],
   4106           [llvm_v2i64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   4107           [IntrNoMem]>;
   4108 
   4109   def int_x86_avx512_mask_cvtqq2pd_256 :
   4110         GCCBuiltin<"__builtin_ia32_cvtqq2pd256_mask">,
   4111           Intrinsic<[llvm_v4f64_ty],
   4112           [llvm_v4i64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   4113           [IntrNoMem]>;
   4114 
   4115   def int_x86_avx512_mask_cvtqq2pd_512 :
   4116         GCCBuiltin<"__builtin_ia32_cvtqq2pd512_mask">,
   4117           Intrinsic<[llvm_v8f64_ty],
   4118           [llvm_v8i64_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4119           [IntrNoMem]>;
   4120 
   4121   def int_x86_avx512_mask_cvtqq2ps_128 :
   4122         GCCBuiltin<"__builtin_ia32_cvtqq2ps128_mask">,
   4123           Intrinsic<[llvm_v4f32_ty],
   4124           [llvm_v2i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
   4125           [IntrNoMem]>;
   4126 
   4127   def int_x86_avx512_mask_cvtqq2ps_256 :
   4128         GCCBuiltin<"__builtin_ia32_cvtqq2ps256_mask">,
   4129           Intrinsic<[llvm_v4f32_ty],
   4130           [llvm_v4i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
   4131           [IntrNoMem]>;
   4132 
   4133   def int_x86_avx512_mask_cvtqq2ps_512 :
   4134         GCCBuiltin<"__builtin_ia32_cvtqq2ps512_mask">,
   4135           Intrinsic<[llvm_v8f32_ty],
   4136           [llvm_v8i64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
   4137           [IntrNoMem]>;
   4138 
   4139   def int_x86_avx512_mask_cvttpd2dq_128 :
   4140         GCCBuiltin<"__builtin_ia32_cvttpd2dq128_mask">,
   4141           Intrinsic<[llvm_v4i32_ty],
   4142           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
   4143           [IntrNoMem]>;
   4144 
   4145   def int_x86_avx512_mask_cvttpd2dq_256 :
   4146         GCCBuiltin<"__builtin_ia32_cvttpd2dq256_mask">,
   4147           Intrinsic<[llvm_v4i32_ty],
   4148           [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
   4149           [IntrNoMem]>;
   4150 
   4151   def int_x86_avx512_mask_cvttpd2dq_512 :
   4152         GCCBuiltin<"__builtin_ia32_cvttpd2dq512_mask">,
   4153           Intrinsic<[llvm_v8i32_ty],
   4154           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
   4155           [IntrNoMem]>;
   4156 
   4157   def int_x86_avx512_mask_cvttpd2qq_128 :
   4158         GCCBuiltin<"__builtin_ia32_cvttpd2qq128_mask">,
   4159           Intrinsic<[llvm_v2i64_ty],
   4160           [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
   4161           [IntrNoMem]>;
   4162 
   4163   def int_x86_avx512_mask_cvttpd2qq_256 :
   4164         GCCBuiltin<"__builtin_ia32_cvttpd2qq256_mask">,
   4165           Intrinsic<[llvm_v4i64_ty],
   4166           [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
   4167           [IntrNoMem]>;
   4168 
   4169   def int_x86_avx512_mask_cvttpd2qq_512 :
   4170         GCCBuiltin<"__builtin_ia32_cvttpd2qq512_mask">,
   4171           Intrinsic<[llvm_v8i64_ty],
   4172           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4173           [IntrNoMem]>;
   4174 
   4175   def int_x86_avx512_mask_cvttpd2udq_128 :
   4176         GCCBuiltin<"__builtin_ia32_cvttpd2udq128_mask">,
   4177           Intrinsic<[llvm_v4i32_ty],
   4178           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
   4179           [IntrNoMem]>;
   4180 
   4181   def int_x86_avx512_mask_cvttpd2udq_256 :
   4182         GCCBuiltin<"__builtin_ia32_cvttpd2udq256_mask">,
   4183           Intrinsic<[llvm_v4i32_ty],
   4184           [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
   4185           [IntrNoMem]>;
   4186 
   4187   def int_x86_avx512_mask_cvttpd2udq_512 :
   4188         GCCBuiltin<"__builtin_ia32_cvttpd2udq512_mask">,
   4189           Intrinsic<[llvm_v8i32_ty],
   4190           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
   4191           [IntrNoMem]>;
   4192 
   4193   def int_x86_avx512_mask_cvttpd2uqq_128 :
   4194         GCCBuiltin<"__builtin_ia32_cvttpd2uqq128_mask">,
   4195           Intrinsic<[llvm_v2i64_ty],
   4196           [llvm_v2f64_ty, llvm_v2i64_ty,  llvm_i8_ty],
   4197           [IntrNoMem]>;
   4198 
   4199   def int_x86_avx512_mask_cvttpd2uqq_256 :
   4200         GCCBuiltin<"__builtin_ia32_cvttpd2uqq256_mask">,
   4201           Intrinsic<[llvm_v4i64_ty],
   4202           [llvm_v4f64_ty, llvm_v4i64_ty,  llvm_i8_ty],
   4203           [IntrNoMem]>;
   4204 
   4205   def int_x86_avx512_mask_cvttpd2uqq_512 :
   4206         GCCBuiltin<"__builtin_ia32_cvttpd2uqq512_mask">,
   4207           Intrinsic<[llvm_v8i64_ty],
   4208           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4209           [IntrNoMem]>;
   4210 
   4211   def int_x86_avx512_mask_cvttps2dq_128 :
   4212         GCCBuiltin<"__builtin_ia32_cvttps2dq128_mask">,
   4213           Intrinsic<[llvm_v4i32_ty],
   4214           [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
   4215           [IntrNoMem]>;
   4216 
   4217   def int_x86_avx512_mask_cvttps2dq_256 :
   4218         GCCBuiltin<"__builtin_ia32_cvttps2dq256_mask">,
   4219           Intrinsic<[llvm_v8i32_ty],
   4220           [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
   4221           [IntrNoMem]>;
   4222 
   4223   def int_x86_avx512_mask_cvttps2dq_512 :
   4224         GCCBuiltin<"__builtin_ia32_cvttps2dq512_mask">,
   4225           Intrinsic<[llvm_v16i32_ty],
   4226           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
   4227           [IntrNoMem]>;
   4228 
   4229   def int_x86_avx512_mask_cvttps2qq_128 :
   4230         GCCBuiltin<"__builtin_ia32_cvttps2qq128_mask">,
   4231           Intrinsic<[llvm_v2i64_ty],
   4232           [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
   4233           [IntrNoMem]>;
   4234 
   4235   def int_x86_avx512_mask_cvttps2qq_256 :
   4236         GCCBuiltin<"__builtin_ia32_cvttps2qq256_mask">,
   4237           Intrinsic<[llvm_v4i64_ty],
   4238           [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
   4239           [IntrNoMem]>;
   4240 
   4241   def int_x86_avx512_mask_cvttps2qq_512 :
   4242         GCCBuiltin<"__builtin_ia32_cvttps2qq512_mask">,
   4243           Intrinsic<[llvm_v8i64_ty],
   4244           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4245           [IntrNoMem]>;
   4246 
   4247   def int_x86_avx512_mask_cvttps2udq_128 :
   4248         GCCBuiltin<"__builtin_ia32_cvttps2udq128_mask">,
   4249           Intrinsic<[llvm_v4i32_ty],
   4250           [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
   4251           [IntrNoMem]>;
   4252 
   4253   def int_x86_avx512_mask_cvttps2udq_256 :
   4254         GCCBuiltin<"__builtin_ia32_cvttps2udq256_mask">,
   4255           Intrinsic<[llvm_v8i32_ty],
   4256           [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
   4257           [IntrNoMem]>;
   4258 
   4259   def int_x86_avx512_mask_cvttps2udq_512 :
   4260         GCCBuiltin<"__builtin_ia32_cvttps2udq512_mask">,
   4261           Intrinsic<[llvm_v16i32_ty],
   4262           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
   4263           [IntrNoMem]>;
   4264 
   4265   def int_x86_avx512_mask_cvttps2uqq_128 :
   4266         GCCBuiltin<"__builtin_ia32_cvttps2uqq128_mask">,
   4267           Intrinsic<[llvm_v2i64_ty],
   4268           [llvm_v4f32_ty, llvm_v2i64_ty,  llvm_i8_ty],
   4269           [IntrNoMem]>;
   4270 
   4271   def int_x86_avx512_mask_cvttps2uqq_256 :
   4272         GCCBuiltin<"__builtin_ia32_cvttps2uqq256_mask">,
   4273           Intrinsic<[llvm_v4i64_ty],
   4274           [llvm_v4f32_ty, llvm_v4i64_ty,  llvm_i8_ty],
   4275           [IntrNoMem]>;
   4276 
   4277   def int_x86_avx512_mask_cvttps2uqq_512 :
   4278         GCCBuiltin<"__builtin_ia32_cvttps2uqq512_mask">,
   4279           Intrinsic<[llvm_v8i64_ty],
   4280           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4281           [IntrNoMem]>;
   4282 
   4283   def int_x86_avx512_mask_cvtudq2ps_128 :
   4284         GCCBuiltin<"__builtin_ia32_cvtudq2ps128_mask">,
   4285           Intrinsic<[llvm_v4f32_ty],
   4286           [llvm_v4i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   4287           [IntrNoMem]>;
   4288 
   4289   def int_x86_avx512_mask_cvtudq2ps_256 :
   4290         GCCBuiltin<"__builtin_ia32_cvtudq2ps256_mask">,
   4291           Intrinsic<[llvm_v8f32_ty],
   4292           [llvm_v8i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   4293           [IntrNoMem]>;
   4294 
   4295   def int_x86_avx512_mask_cvtudq2ps_512 :
   4296         GCCBuiltin<"__builtin_ia32_cvtudq2ps512_mask">,
   4297           Intrinsic<[llvm_v16f32_ty],
   4298           [llvm_v16i32_ty, llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty],
   4299           [IntrNoMem]>;
   4300 
   4301   def int_x86_avx512_mask_cvtuqq2pd_128 :
   4302         GCCBuiltin<"__builtin_ia32_cvtuqq2pd128_mask">,
   4303           Intrinsic<[llvm_v2f64_ty],
   4304           [llvm_v2i64_ty, llvm_v2f64_ty,  llvm_i8_ty],
   4305           [IntrNoMem]>;
   4306 
   4307   def int_x86_avx512_mask_cvtuqq2pd_256 :
   4308         GCCBuiltin<"__builtin_ia32_cvtuqq2pd256_mask">,
   4309           Intrinsic<[llvm_v4f64_ty],
   4310           [llvm_v4i64_ty, llvm_v4f64_ty,  llvm_i8_ty],
   4311           [IntrNoMem]>;
   4312 
   4313   def int_x86_avx512_mask_cvtuqq2pd_512 :
   4314         GCCBuiltin<"__builtin_ia32_cvtuqq2pd512_mask">,
   4315           Intrinsic<[llvm_v8f64_ty],
   4316           [llvm_v8i64_ty, llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty],
   4317           [IntrNoMem]>;
   4318 
   4319   def int_x86_avx512_mask_cvtuqq2ps_128 :
   4320         GCCBuiltin<"__builtin_ia32_cvtuqq2ps128_mask">,
   4321           Intrinsic<[llvm_v4f32_ty],
   4322           [llvm_v2i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
   4323           [IntrNoMem]>;
   4324 
   4325   def int_x86_avx512_mask_cvtuqq2ps_256 :
   4326         GCCBuiltin<"__builtin_ia32_cvtuqq2ps256_mask">,
   4327           Intrinsic<[llvm_v4f32_ty],
   4328           [llvm_v4i64_ty, llvm_v4f32_ty,  llvm_i8_ty],
   4329           [IntrNoMem]>;
   4330 
   4331   def int_x86_avx512_mask_cvtuqq2ps_512 :
   4332         GCCBuiltin<"__builtin_ia32_cvtuqq2ps512_mask">,
   4333           Intrinsic<[llvm_v8f32_ty],
   4334           [llvm_v8i64_ty, llvm_v8f32_ty,  llvm_i8_ty,  llvm_i32_ty],
   4335           [IntrNoMem]>;
   4336 
   4337   def int_x86_avx512_mask_rndscale_pd_128 : GCCBuiltin<"__builtin_ia32_rndscalepd_128_mask">,
   4338         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty,
   4339                                      llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
   4340   def int_x86_avx512_mask_rndscale_pd_256 : GCCBuiltin<"__builtin_ia32_rndscalepd_256_mask">,
   4341         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty,
   4342                                      llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
   4343   def int_x86_avx512_mask_rndscale_pd_512 : GCCBuiltin<"__builtin_ia32_rndscalepd_mask">,
   4344         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
   4345                                      llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4346   def int_x86_avx512_mask_rndscale_ps_128 : GCCBuiltin<"__builtin_ia32_rndscaleps_128_mask">,
   4347         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty,
   4348                                      llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
   4349   def int_x86_avx512_mask_rndscale_ps_256 : GCCBuiltin<"__builtin_ia32_rndscaleps_256_mask">,
   4350         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty,
   4351                                      llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
   4352   def int_x86_avx512_mask_rndscale_ps_512 : GCCBuiltin<"__builtin_ia32_rndscaleps_mask">,
   4353         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
   4354                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4355   def int_x86_avx512_mask_reduce_pd_128 : GCCBuiltin<"__builtin_ia32_reducepd128_mask">,
   4356         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_i32_ty,
   4357                                      llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
   4358   def int_x86_avx512_mask_reduce_pd_256 : GCCBuiltin<"__builtin_ia32_reducepd256_mask">,
   4359         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_i32_ty,
   4360                                      llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
   4361   def int_x86_avx512_mask_reduce_pd_512 : GCCBuiltin<"__builtin_ia32_reducepd512_mask">,
   4362         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
   4363                                      llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4364   def int_x86_avx512_mask_reduce_ps_128 : GCCBuiltin<"__builtin_ia32_reduceps128_mask">,
   4365         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty,
   4366                                      llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
   4367   def int_x86_avx512_mask_reduce_ps_256 : GCCBuiltin<"__builtin_ia32_reduceps256_mask">,
   4368         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_i32_ty,
   4369                                      llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
   4370   def int_x86_avx512_mask_reduce_ps_512 : GCCBuiltin<"__builtin_ia32_reduceps512_mask">,
   4371         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
   4372                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4373 def int_x86_avx512_mask_range_pd_128 : GCCBuiltin<"__builtin_ia32_rangepd128_mask">,
   4374         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty,
   4375                                     llvm_v2f64_ty,  llvm_i8_ty], [IntrNoMem]>;
   4376 def int_x86_avx512_mask_range_pd_256 : GCCBuiltin<"__builtin_ia32_rangepd256_mask">,
   4377         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty, llvm_i32_ty,
   4378                                     llvm_v4f64_ty,  llvm_i8_ty], [IntrNoMem]>;
   4379 def int_x86_avx512_mask_range_pd_512 : GCCBuiltin<"__builtin_ia32_rangepd512_mask">,
   4380         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty,
   4381                                     llvm_v8f64_ty,  llvm_i8_ty,  llvm_i32_ty], [IntrNoMem]>;
   4382 def int_x86_avx512_mask_range_ps_128 : GCCBuiltin<"__builtin_ia32_rangeps128_mask">,
   4383         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty,
   4384                                     llvm_v4f32_ty,  llvm_i8_ty], [IntrNoMem]>;
   4385 def int_x86_avx512_mask_range_ps_256 : GCCBuiltin<"__builtin_ia32_rangeps256_mask">,
   4386         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty, llvm_i32_ty,
   4387                                     llvm_v8f32_ty,  llvm_i8_ty], [IntrNoMem]>;
   4388 def int_x86_avx512_mask_range_ps_512 : GCCBuiltin<"__builtin_ia32_rangeps512_mask">,
   4389         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty,
   4390                                      llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty], [IntrNoMem]>;
   4391 }
   4392 
   4393 // Vector load with broadcast
   4394 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   4395   def int_x86_avx512_vbroadcast_ss_512 :
   4396         GCCBuiltin<"__builtin_ia32_vbroadcastss512">,
   4397         Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
   4398 
   4399   def int_x86_avx512_vbroadcast_sd_512 :
   4400         GCCBuiltin<"__builtin_ia32_vbroadcastsd512">,
   4401         Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
   4402 
   4403   def int_x86_avx512_mask_broadcastf32x2_256 :
   4404           GCCBuiltin<"__builtin_ia32_broadcastf32x2_256_mask">,
   4405           Intrinsic<[llvm_v8f32_ty],
   4406                     [llvm_v4f32_ty, llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
   4407 
   4408   def int_x86_avx512_mask_broadcastf32x2_512 :
   4409           GCCBuiltin<"__builtin_ia32_broadcastf32x2_512_mask">,
   4410           Intrinsic<[llvm_v16f32_ty],
   4411                     [llvm_v4f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
   4412 
   4413   def int_x86_avx512_mask_broadcasti32x2_128 :
   4414           GCCBuiltin<"__builtin_ia32_broadcasti32x2_128_mask">,
   4415           Intrinsic<[llvm_v4i32_ty],
   4416                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
   4417 
   4418   def int_x86_avx512_mask_broadcasti32x2_256 :
   4419           GCCBuiltin<"__builtin_ia32_broadcasti32x2_256_mask">,
   4420           Intrinsic<[llvm_v8i32_ty],
   4421                     [llvm_v4i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   4422 
   4423   def int_x86_avx512_mask_broadcasti32x2_512 :
   4424           GCCBuiltin<"__builtin_ia32_broadcasti32x2_512_mask">,
   4425           Intrinsic<[llvm_v16i32_ty],
   4426                     [llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   4427 
   4428   def int_x86_avx512_mask_broadcastf32x4_256 :
   4429             GCCBuiltin<"__builtin_ia32_broadcastf32x4_256_mask">,
   4430             Intrinsic<[llvm_v8f32_ty],
   4431                     [llvm_v4f32_ty, llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
   4432 
   4433   def int_x86_avx512_mask_broadcastf32x4_512 :
   4434           GCCBuiltin<"__builtin_ia32_broadcastf32x4_512">,
   4435           Intrinsic<[llvm_v16f32_ty],
   4436                     [llvm_v4f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
   4437 
   4438   def int_x86_avx512_mask_broadcastf32x8_512 :
   4439           GCCBuiltin<"__builtin_ia32_broadcastf32x8_512_mask">,
   4440           Intrinsic<[llvm_v16f32_ty],
   4441                     [llvm_v8f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
   4442 
   4443   def int_x86_avx512_mask_broadcastf64x2_256 :
   4444           GCCBuiltin<"__builtin_ia32_broadcastf64x2_256_mask">,
   4445           Intrinsic<[llvm_v4f64_ty],
   4446                     [llvm_v2f64_ty, llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
   4447 
   4448   def int_x86_avx512_mask_broadcastf64x2_512 :
   4449           GCCBuiltin<"__builtin_ia32_broadcastf64x2_512_mask">,
   4450           Intrinsic<[llvm_v8f64_ty],
   4451                     [llvm_v2f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
   4452 
   4453   def int_x86_avx512_mask_broadcastf64x4_512 :
   4454           GCCBuiltin<"__builtin_ia32_broadcastf64x4_512">,
   4455           Intrinsic<[llvm_v8f64_ty],
   4456                     [llvm_v4f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
   4457 
   4458   def int_x86_avx512_mask_broadcasti32x4_256 :
   4459           GCCBuiltin<"__builtin_ia32_broadcasti32x4_256_mask">,
   4460           Intrinsic<[llvm_v8i32_ty],
   4461                     [llvm_v4i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   4462 
   4463   def int_x86_avx512_mask_broadcasti32x4_512 :
   4464           GCCBuiltin<"__builtin_ia32_broadcasti32x4_512">,
   4465           Intrinsic<[llvm_v16i32_ty],
   4466                     [llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   4467 
   4468   def int_x86_avx512_mask_broadcasti32x8_512 :
   4469           GCCBuiltin<"__builtin_ia32_broadcasti32x8_512_mask">,
   4470           Intrinsic<[llvm_v16i32_ty],
   4471                     [llvm_v8i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   4472 
   4473   def int_x86_avx512_mask_broadcasti64x2_256 :
   4474           GCCBuiltin<"__builtin_ia32_broadcasti64x2_256_mask">,
   4475           Intrinsic<[llvm_v4i64_ty],
   4476                     [llvm_v2i64_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   4477 
   4478   def int_x86_avx512_mask_broadcasti64x2_512 :
   4479           GCCBuiltin<"__builtin_ia32_broadcasti64x2_512_mask">,
   4480           Intrinsic<[llvm_v8i64_ty],
   4481                     [llvm_v2i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   4482 
   4483   def int_x86_avx512_mask_broadcasti64x4_512 :
   4484           GCCBuiltin<"__builtin_ia32_broadcasti64x4_512">,
   4485           Intrinsic<[llvm_v8i64_ty],
   4486                     [llvm_v4i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   4487 
   4488    def int_x86_avx512_broadcastmw_512 :
   4489           GCCBuiltin<"__builtin_ia32_broadcastmw512">,
   4490           Intrinsic<[llvm_v16i32_ty], [llvm_i16_ty], [IntrNoMem]>;
   4491    def int_x86_avx512_broadcastmw_256 :
   4492           GCCBuiltin<"__builtin_ia32_broadcastmw256">,
   4493           Intrinsic<[llvm_v8i32_ty], [llvm_i16_ty], [IntrNoMem]>;
   4494    def int_x86_avx512_broadcastmw_128 :
   4495           GCCBuiltin<"__builtin_ia32_broadcastmw128">,
   4496           Intrinsic<[llvm_v4i32_ty], [llvm_i16_ty], [IntrNoMem]>;
   4497    def int_x86_avx512_broadcastmb_512 :
   4498           GCCBuiltin<"__builtin_ia32_broadcastmb512">,
   4499           Intrinsic<[llvm_v8i64_ty], [llvm_i8_ty], [IntrNoMem]>;
   4500    def int_x86_avx512_broadcastmb_256 :
   4501           GCCBuiltin<"__builtin_ia32_broadcastmb256">,
   4502           Intrinsic<[llvm_v4i64_ty], [llvm_i8_ty], [IntrNoMem]>;
   4503    def int_x86_avx512_broadcastmb_128 :
   4504           GCCBuiltin<"__builtin_ia32_broadcastmb128">,
   4505           Intrinsic<[llvm_v2i64_ty], [llvm_i8_ty], [IntrNoMem]>;
   4506 }
   4507 
   4508 // Arithmetic ops
   4509 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   4510 
   4511   def int_x86_avx512_mask_add_ps_512 : GCCBuiltin<"__builtin_ia32_addps512_mask">,
   4512           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4513                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4514   def int_x86_avx512_mask_add_pd_512 : GCCBuiltin<"__builtin_ia32_addpd512_mask">,
   4515           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4516                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4517   def int_x86_avx512_mask_sub_ps_512 : GCCBuiltin<"__builtin_ia32_subps512_mask">,
   4518           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4519                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4520   def int_x86_avx512_mask_sub_pd_512 : GCCBuiltin<"__builtin_ia32_subpd512_mask">,
   4521           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4522                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4523   def int_x86_avx512_mask_mul_ps_512 : GCCBuiltin<"__builtin_ia32_mulps512_mask">,
   4524           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4525                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4526   def int_x86_avx512_mask_mul_pd_512 : GCCBuiltin<"__builtin_ia32_mulpd512_mask">,
   4527           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4528                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4529   def int_x86_avx512_mask_div_ps_512 : GCCBuiltin<"__builtin_ia32_divps512_mask">,
   4530           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4531                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4532   def int_x86_avx512_mask_div_pd_512 : GCCBuiltin<"__builtin_ia32_divpd512_mask">,
   4533           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4534                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4535   def int_x86_avx512_mask_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512_mask">,
   4536           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4537                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4538   def int_x86_avx512_mask_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512_mask">,
   4539           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4540                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4541   def int_x86_avx512_mask_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512_mask">,
   4542           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4543                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4544   def int_x86_avx512_mask_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512_mask">,
   4545           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4546                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4547 
   4548   def int_x86_avx512_mask_add_ss_round : GCCBuiltin<"__builtin_ia32_addss_round_mask">,
   4549           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4550                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4551   def int_x86_avx512_mask_div_ss_round : GCCBuiltin<"__builtin_ia32_divss_round_mask">,
   4552           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4553                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4554   def int_x86_avx512_mask_mul_ss_round : GCCBuiltin<"__builtin_ia32_mulss_round_mask">,
   4555           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4556                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4557   def int_x86_avx512_mask_sub_ss_round : GCCBuiltin<"__builtin_ia32_subss_round_mask">,
   4558           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4559                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4560   def int_x86_avx512_mask_max_ss_round : GCCBuiltin<"__builtin_ia32_maxss_round_mask">,
   4561           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4562                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4563   def int_x86_avx512_mask_min_ss_round : GCCBuiltin<"__builtin_ia32_minss_round_mask">,
   4564           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4565                      llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4566   def int_x86_avx512_mask_add_sd_round : GCCBuiltin<"__builtin_ia32_addsd_round_mask">,
   4567           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4568                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4569   def int_x86_avx512_mask_div_sd_round : GCCBuiltin<"__builtin_ia32_divsd_round_mask">,
   4570           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4571                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4572   def int_x86_avx512_mask_mul_sd_round : GCCBuiltin<"__builtin_ia32_mulsd_round_mask">,
   4573           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4574                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4575   def int_x86_avx512_mask_sub_sd_round : GCCBuiltin<"__builtin_ia32_subsd_round_mask">,
   4576           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4577                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4578   def int_x86_avx512_mask_max_sd_round : GCCBuiltin<"__builtin_ia32_maxsd_round_mask">,
   4579           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4580                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4581   def int_x86_avx512_mask_min_sd_round : GCCBuiltin<"__builtin_ia32_minsd_round_mask">,
   4582           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4583                      llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4584 
   4585   def int_x86_avx512_mask_rndscale_ss : GCCBuiltin<"__builtin_ia32_rndscaless_round_mask">,
   4586           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
   4587                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
   4588                                      [IntrNoMem]>;
   4589   def int_x86_avx512_mask_rndscale_sd : GCCBuiltin<"__builtin_ia32_rndscalesd_round_mask">,
   4590           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
   4591                                       llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
   4592                                      [IntrNoMem]>;
   4593   def int_x86_avx512_mask_range_ss : GCCBuiltin<"__builtin_ia32_rangess128_round_mask">,
   4594           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
   4595                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
   4596                                      [IntrNoMem]>;
   4597   def int_x86_avx512_mask_range_sd : GCCBuiltin<"__builtin_ia32_rangesd128_round_mask">,
   4598           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
   4599                                       llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
   4600                                      [IntrNoMem]>;
   4601   def int_x86_avx512_mask_reduce_ss : GCCBuiltin<"__builtin_ia32_reducess_mask">,
   4602           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
   4603                                      llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
   4604                                      [IntrNoMem]>;
   4605   def int_x86_avx512_mask_reduce_sd : GCCBuiltin<"__builtin_ia32_reducesd_mask">,
   4606           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
   4607                                       llvm_i8_ty, llvm_i32_ty, llvm_i32_ty],
   4608                                      [IntrNoMem]>;
   4609   def int_x86_avx512_mask_scalef_sd : GCCBuiltin<"__builtin_ia32_scalefsd_round_mask">,
   4610           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4611                                       llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4612   def int_x86_avx512_mask_scalef_ss : GCCBuiltin<"__builtin_ia32_scalefss_round_mask">,
   4613           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4614                                       llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4615   def int_x86_avx512_mask_scalef_pd_128 : GCCBuiltin<"__builtin_ia32_scalefpd128_mask">,
   4616           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4617                     llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
   4618   def int_x86_avx512_mask_scalef_pd_256 : GCCBuiltin<"__builtin_ia32_scalefpd256_mask">,
   4619           Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   4620                     llvm_v4f64_ty, llvm_i8_ty],[IntrNoMem]>;
   4621   def int_x86_avx512_mask_scalef_pd_512 : GCCBuiltin<"__builtin_ia32_scalefpd512_mask">,
   4622           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4623                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4624   def int_x86_avx512_mask_scalef_ps_128 : GCCBuiltin<"__builtin_ia32_scalefps128_mask">,
   4625           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4626                     llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
   4627   def int_x86_avx512_mask_scalef_ps_256 : GCCBuiltin<"__builtin_ia32_scalefps256_mask">,
   4628           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   4629                     llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
   4630   def int_x86_avx512_mask_scalef_ps_512 : GCCBuiltin<"__builtin_ia32_scalefps512_mask">,
   4631           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4632                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4633 
   4634   def int_x86_avx512_mask_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss_round_mask">,
   4635         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
   4636                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4637   def int_x86_avx512_mask_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtsd_round_mask">,
   4638         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
   4639                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4640 
   4641   def int_x86_avx512_mask_sqrt_pd_128 : GCCBuiltin<"__builtin_ia32_sqrtpd128_mask">,
   4642         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4643                                     llvm_i8_ty], [IntrNoMem]>;
   4644   def int_x86_avx512_mask_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256_mask">,
   4645         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   4646                                     llvm_i8_ty], [IntrNoMem]>;
   4647   def int_x86_avx512_mask_sqrt_pd_512 : GCCBuiltin<"__builtin_ia32_sqrtpd512_mask">,
   4648         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4649                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4650   def int_x86_avx512_mask_sqrt_ps_128 : GCCBuiltin<"__builtin_ia32_sqrtps128_mask">,
   4651         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4652                                      llvm_i8_ty], [IntrNoMem]>;
   4653   def int_x86_avx512_mask_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256_mask">,
   4654         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   4655                                      llvm_i8_ty], [IntrNoMem]>;
   4656   def int_x86_avx512_mask_sqrt_ps_512 : GCCBuiltin<"__builtin_ia32_sqrtps512_mask">,
   4657         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4658                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4659   def int_x86_avx512_mask_fixupimm_pd_128 :
   4660          GCCBuiltin<"__builtin_ia32_fixupimmpd128_mask">,
   4661           Intrinsic<[llvm_v2f64_ty],
   4662           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty],
   4663           [IntrNoMem]>;
   4664   def int_x86_avx512_maskz_fixupimm_pd_128 :
   4665          GCCBuiltin<"__builtin_ia32_fixupimmpd128_maskz">,
   4666           Intrinsic<[llvm_v2f64_ty],
   4667           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty],
   4668           [IntrNoMem]>;
   4669   def int_x86_avx512_mask_fixupimm_pd_256 :
   4670          GCCBuiltin<"__builtin_ia32_fixupimmpd256_mask">,
   4671           Intrinsic<[llvm_v4f64_ty],
   4672           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_i8_ty],
   4673           [IntrNoMem]>;
   4674   def int_x86_avx512_maskz_fixupimm_pd_256 :
   4675          GCCBuiltin<"__builtin_ia32_fixupimmpd256_maskz">,
   4676           Intrinsic<[llvm_v4f64_ty],
   4677           [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_i8_ty],
   4678           [IntrNoMem]>;
   4679   def int_x86_avx512_mask_fixupimm_pd_512 :
   4680          GCCBuiltin<"__builtin_ia32_fixupimmpd512_mask">,
   4681           Intrinsic<[llvm_v8f64_ty],
   4682           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_i8_ty,
   4683           llvm_i32_ty], [IntrNoMem]>;
   4684   def int_x86_avx512_maskz_fixupimm_pd_512 :
   4685          GCCBuiltin<"__builtin_ia32_fixupimmpd512_maskz">,
   4686           Intrinsic<[llvm_v8f64_ty],
   4687           [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_i8_ty,
   4688           llvm_i32_ty], [IntrNoMem]>;
   4689   def int_x86_avx512_mask_fixupimm_ps_128 :
   4690          GCCBuiltin<"__builtin_ia32_fixupimmps128_mask">,
   4691           Intrinsic<[llvm_v4f32_ty],
   4692           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty],
   4693           [IntrNoMem]>;
   4694   def int_x86_avx512_maskz_fixupimm_ps_128 :
   4695          GCCBuiltin<"__builtin_ia32_fixupimmps128_maskz">,
   4696           Intrinsic<[llvm_v4f32_ty],
   4697           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty],
   4698           [IntrNoMem]>;
   4699   def int_x86_avx512_mask_fixupimm_ps_256 :
   4700          GCCBuiltin<"__builtin_ia32_fixupimmps256_mask">,
   4701           Intrinsic<[llvm_v8f32_ty],
   4702           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_i8_ty],
   4703           [IntrNoMem]>;
   4704   def int_x86_avx512_maskz_fixupimm_ps_256 :
   4705          GCCBuiltin<"__builtin_ia32_fixupimmps256_maskz">,
   4706           Intrinsic<[llvm_v8f32_ty],
   4707           [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_i8_ty],
   4708           [IntrNoMem]>;
   4709   def int_x86_avx512_mask_fixupimm_ps_512 :
   4710          GCCBuiltin<"__builtin_ia32_fixupimmps512_mask">,
   4711           Intrinsic<[llvm_v16f32_ty],
   4712           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16i32_ty, llvm_i32_ty,
   4713           llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4714   def int_x86_avx512_maskz_fixupimm_ps_512 :
   4715          GCCBuiltin<"__builtin_ia32_fixupimmps512_maskz">,
   4716           Intrinsic<[llvm_v16f32_ty],
   4717           [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16i32_ty, llvm_i32_ty,
   4718           llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4719   def int_x86_avx512_mask_fixupimm_sd :
   4720          GCCBuiltin<"__builtin_ia32_fixupimmsd_mask">,
   4721           Intrinsic<[llvm_v2f64_ty],
   4722           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty,
   4723           llvm_i32_ty], [IntrNoMem]>;
   4724   def int_x86_avx512_maskz_fixupimm_sd :
   4725          GCCBuiltin<"__builtin_ia32_fixupimmsd_maskz">,
   4726           Intrinsic<[llvm_v2f64_ty],
   4727           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_i8_ty,
   4728           llvm_i32_ty], [IntrNoMem]>;
   4729   def int_x86_avx512_mask_fixupimm_ss :
   4730          GCCBuiltin<"__builtin_ia32_fixupimmss_mask">,
   4731           Intrinsic<[llvm_v4f32_ty],
   4732           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty,
   4733           llvm_i32_ty], [IntrNoMem]>;
   4734   def int_x86_avx512_maskz_fixupimm_ss :
   4735          GCCBuiltin<"__builtin_ia32_fixupimmss_maskz">,
   4736           Intrinsic<[llvm_v4f32_ty],
   4737           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_i8_ty,
   4738           llvm_i32_ty], [IntrNoMem]>;
   4739   def int_x86_avx512_mask_getexp_pd_128 : GCCBuiltin<"__builtin_ia32_getexppd128_mask">,
   4740         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4741                                     llvm_i8_ty], [IntrNoMem]>;
   4742   def int_x86_avx512_mask_getexp_pd_256 : GCCBuiltin<"__builtin_ia32_getexppd256_mask">,
   4743         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   4744                                     llvm_i8_ty], [IntrNoMem]>;
   4745   def int_x86_avx512_mask_getexp_pd_512 : GCCBuiltin<"__builtin_ia32_getexppd512_mask">,
   4746         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4747                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4748   def int_x86_avx512_mask_getexp_ps_128 : GCCBuiltin<"__builtin_ia32_getexpps128_mask">,
   4749         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4750                                      llvm_i8_ty], [IntrNoMem]>;
   4751   def int_x86_avx512_mask_getexp_ps_256 : GCCBuiltin<"__builtin_ia32_getexpps256_mask">,
   4752         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   4753                                      llvm_i8_ty], [IntrNoMem]>;
   4754   def int_x86_avx512_mask_getexp_ps_512 : GCCBuiltin<"__builtin_ia32_getexpps512_mask">,
   4755         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4756                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4757 
   4758   def int_x86_avx512_mask_getexp_ss : GCCBuiltin<"__builtin_ia32_getexpss128_round_mask">,
   4759         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
   4760                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4761   def int_x86_avx512_mask_getexp_sd : GCCBuiltin<"__builtin_ia32_getexpsd128_round_mask">,
   4762         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
   4763                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4764 
   4765   def int_x86_avx512_mask_getmant_pd_128 :
   4766          GCCBuiltin<"__builtin_ia32_getmantpd128_mask">,
   4767           Intrinsic<[llvm_v2f64_ty],
   4768           [llvm_v2f64_ty,llvm_i32_ty, llvm_v2f64_ty,  llvm_i8_ty],
   4769           [IntrNoMem]>;
   4770 
   4771   def int_x86_avx512_mask_getmant_pd_256 :
   4772          GCCBuiltin<"__builtin_ia32_getmantpd256_mask">,
   4773           Intrinsic<[llvm_v4f64_ty],
   4774           [llvm_v4f64_ty,llvm_i32_ty, llvm_v4f64_ty,  llvm_i8_ty],
   4775           [IntrNoMem]>;
   4776 
   4777   def int_x86_avx512_mask_getmant_pd_512 :
   4778          GCCBuiltin<"__builtin_ia32_getmantpd512_mask">,
   4779           Intrinsic<[llvm_v8f64_ty],
   4780           [llvm_v8f64_ty,llvm_i32_ty, llvm_v8f64_ty,  llvm_i8_ty,llvm_i32_ty ],
   4781           [IntrNoMem]>;
   4782 
   4783   def int_x86_avx512_mask_getmant_ps_128 :
   4784          GCCBuiltin<"__builtin_ia32_getmantps128_mask">,
   4785           Intrinsic<[llvm_v4f32_ty],
   4786           [llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
   4787           [IntrNoMem]>;
   4788 
   4789   def int_x86_avx512_mask_getmant_ps_256 :
   4790          GCCBuiltin<"__builtin_ia32_getmantps256_mask">,
   4791           Intrinsic<[llvm_v8f32_ty],
   4792           [llvm_v8f32_ty, llvm_i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
   4793           [IntrNoMem]>;
   4794 
   4795   def int_x86_avx512_mask_getmant_ps_512 :
   4796          GCCBuiltin<"__builtin_ia32_getmantps512_mask">,
   4797           Intrinsic<[llvm_v16f32_ty],
   4798           [llvm_v16f32_ty,llvm_i32_ty, llvm_v16f32_ty,llvm_i16_ty,llvm_i32_ty],
   4799           [IntrNoMem]>;
   4800 
   4801   def int_x86_avx512_mask_getmant_ss :
   4802          GCCBuiltin<"__builtin_ia32_getmantss_round_mask">,
   4803           Intrinsic<[llvm_v4f32_ty],
   4804           [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty, llvm_v4f32_ty,
   4805            llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4806 
   4807   def int_x86_avx512_mask_getmant_sd :
   4808          GCCBuiltin<"__builtin_ia32_getmantsd_round_mask">,
   4809           Intrinsic<[llvm_v2f64_ty],
   4810           [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty, llvm_v2f64_ty,
   4811            llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4812 
   4813   def int_x86_avx512_rsqrt14_ss : GCCBuiltin<"__builtin_ia32_rsqrt14ss_mask">,
   4814         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
   4815                                     llvm_i8_ty], [IntrNoMem]>;
   4816   def int_x86_avx512_rsqrt14_sd : GCCBuiltin<"__builtin_ia32_rsqrt14sd_mask">,
   4817         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
   4818                                     llvm_i8_ty], [IntrNoMem]>;
   4819 
   4820   def int_x86_avx512_rsqrt14_pd_128 : GCCBuiltin<"__builtin_ia32_rsqrt14pd128_mask">,
   4821         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4822                                     llvm_i8_ty], [IntrNoMem]>;
   4823   def int_x86_avx512_rsqrt14_pd_256 : GCCBuiltin<"__builtin_ia32_rsqrt14pd256_mask">,
   4824         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   4825                                     llvm_i8_ty], [IntrNoMem]>;
   4826   def int_x86_avx512_rsqrt14_pd_512 : GCCBuiltin<"__builtin_ia32_rsqrt14pd512_mask">,
   4827         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4828                                     llvm_i8_ty], [IntrNoMem]>;
   4829   def int_x86_avx512_rsqrt14_ps_128 : GCCBuiltin<"__builtin_ia32_rsqrt14ps128_mask">,
   4830         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4831                                      llvm_i8_ty], [IntrNoMem]>;
   4832   def int_x86_avx512_rsqrt14_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrt14ps256_mask">,
   4833           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   4834                                      llvm_i8_ty], [IntrNoMem]>;
   4835   def int_x86_avx512_rsqrt14_ps_512 : GCCBuiltin<"__builtin_ia32_rsqrt14ps512_mask">,
   4836         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4837                                      llvm_i16_ty], [IntrNoMem]>;
   4838   def int_x86_avx512_rcp14_ss : GCCBuiltin<"__builtin_ia32_rcp14ss_mask">,
   4839         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
   4840                                     llvm_i8_ty], [IntrNoMem]>;
   4841   def int_x86_avx512_rcp14_sd : GCCBuiltin<"__builtin_ia32_rcp14sd_mask">,
   4842         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
   4843                                     llvm_i8_ty], [IntrNoMem]>;
   4844 
   4845   def int_x86_avx512_rcp14_pd_128 : GCCBuiltin<"__builtin_ia32_rcp14pd128_mask">,
   4846         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4847                                     llvm_i8_ty], [IntrNoMem]>;
   4848   def int_x86_avx512_rcp14_pd_256 : GCCBuiltin<"__builtin_ia32_rcp14pd256_mask">,
   4849         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   4850                                     llvm_i8_ty], [IntrNoMem]>;
   4851   def int_x86_avx512_rcp14_pd_512 : GCCBuiltin<"__builtin_ia32_rcp14pd512_mask">,
   4852         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4853                                     llvm_i8_ty], [IntrNoMem]>;
   4854   def int_x86_avx512_rcp14_ps_128 : GCCBuiltin<"__builtin_ia32_rcp14ps128_mask">,
   4855         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4856                                      llvm_i8_ty], [IntrNoMem]>;
   4857   def int_x86_avx512_rcp14_ps_256 : GCCBuiltin<"__builtin_ia32_rcp14ps256_mask">,
   4858           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   4859                                      llvm_i8_ty], [IntrNoMem]>;
   4860   def int_x86_avx512_rcp14_ps_512 : GCCBuiltin<"__builtin_ia32_rcp14ps512_mask">,
   4861         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4862                                      llvm_i16_ty], [IntrNoMem]>;
   4863 
   4864   def int_x86_avx512_rcp28_ps : GCCBuiltin<"__builtin_ia32_rcp28ps_mask">,
   4865             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4866                                          llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4867   def int_x86_avx512_rcp28_pd : GCCBuiltin<"__builtin_ia32_rcp28pd_mask">,
   4868             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4869                                         llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4870   def int_x86_avx512_exp2_ps : GCCBuiltin<"__builtin_ia32_exp2ps_mask">,
   4871             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4872                                          llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4873   def int_x86_avx512_exp2_pd : GCCBuiltin<"__builtin_ia32_exp2pd_mask">,
   4874             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4875                                         llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4876 
   4877   def int_x86_avx512_rcp28_ss : GCCBuiltin<"__builtin_ia32_rcp28ss_round_mask">,
   4878             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4879                                         llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
   4880                       [IntrNoMem]>;
   4881   def int_x86_avx512_rcp28_sd : GCCBuiltin<"__builtin_ia32_rcp28sd_round_mask">,
   4882             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4883                                         llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
   4884                       [IntrNoMem]>;
   4885   def int_x86_avx512_rsqrt28_ps : GCCBuiltin<"__builtin_ia32_rsqrt28ps_mask">,
   4886             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   4887                                          llvm_i16_ty, llvm_i32_ty],
   4888                       [IntrNoMem]>;
   4889   def int_x86_avx512_rsqrt28_pd : GCCBuiltin<"__builtin_ia32_rsqrt28pd_mask">,
   4890             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   4891                                         llvm_i8_ty, llvm_i32_ty],
   4892                       [IntrNoMem]>;
   4893   def int_x86_avx512_rsqrt28_ss : GCCBuiltin<"__builtin_ia32_rsqrt28ss_round_mask">,
   4894             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   4895                                         llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
   4896                       [IntrNoMem]>;
   4897   def int_x86_avx512_rsqrt28_sd : GCCBuiltin<"__builtin_ia32_rsqrt28sd_round_mask">,
   4898             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   4899                                         llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
   4900                       [IntrNoMem]>;
   4901   def int_x86_avx512_psad_bw_512 : GCCBuiltin<"__builtin_ia32_psadbw512">,
   4902               Intrinsic<[llvm_v8i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty],
   4903                         [IntrNoMem, Commutative]>;
   4904 }
   4905 // Integer arithmetic ops
   4906 let TargetPrefix = "x86" in {
   4907   def int_x86_avx512_mask_padds_b_128 : GCCBuiltin<"__builtin_ia32_paddsb128_mask">,
   4908           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
   4909                      llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
   4910   def int_x86_avx512_mask_padds_b_256 : GCCBuiltin<"__builtin_ia32_paddsb256_mask">,
   4911           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
   4912                      llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4913   def int_x86_avx512_mask_padds_b_512 : GCCBuiltin<"__builtin_ia32_paddsb512_mask">,
   4914           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
   4915                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
   4916   def int_x86_avx512_mask_padds_w_128 : GCCBuiltin<"__builtin_ia32_paddsw128_mask">,
   4917           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   4918                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   4919   def int_x86_avx512_mask_padds_w_256 : GCCBuiltin<"__builtin_ia32_paddsw256_mask">,
   4920           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
   4921                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   4922   def int_x86_avx512_mask_padds_w_512 : GCCBuiltin<"__builtin_ia32_paddsw512_mask">,
   4923           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
   4924                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4925   def int_x86_avx512_mask_paddus_b_128 : GCCBuiltin<"__builtin_ia32_paddusb128_mask">,
   4926           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
   4927                      llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
   4928   def int_x86_avx512_mask_paddus_b_256 : GCCBuiltin<"__builtin_ia32_paddusb256_mask">,
   4929           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
   4930                      llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4931   def int_x86_avx512_mask_paddus_b_512 : GCCBuiltin<"__builtin_ia32_paddusb512_mask">,
   4932           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
   4933                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
   4934   def int_x86_avx512_mask_paddus_w_128 : GCCBuiltin<"__builtin_ia32_paddusw128_mask">,
   4935           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   4936                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   4937   def int_x86_avx512_mask_paddus_w_256 : GCCBuiltin<"__builtin_ia32_paddusw256_mask">,
   4938           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
   4939                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   4940   def int_x86_avx512_mask_paddus_w_512 : GCCBuiltin<"__builtin_ia32_paddusw512_mask">,
   4941           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
   4942                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4943   def int_x86_avx512_mask_psubs_b_128 : GCCBuiltin<"__builtin_ia32_psubsb128_mask">,
   4944           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
   4945                      llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
   4946   def int_x86_avx512_mask_psubs_b_256 : GCCBuiltin<"__builtin_ia32_psubsb256_mask">,
   4947           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
   4948                      llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4949   def int_x86_avx512_mask_psubs_b_512 : GCCBuiltin<"__builtin_ia32_psubsb512_mask">,
   4950           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
   4951                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
   4952   def int_x86_avx512_mask_psubs_w_128 : GCCBuiltin<"__builtin_ia32_psubsw128_mask">,
   4953           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   4954                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   4955   def int_x86_avx512_mask_psubs_w_256 : GCCBuiltin<"__builtin_ia32_psubsw256_mask">,
   4956           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
   4957                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   4958   def int_x86_avx512_mask_psubs_w_512 : GCCBuiltin<"__builtin_ia32_psubsw512_mask">,
   4959           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
   4960                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4961   def int_x86_avx512_mask_psubus_b_128 : GCCBuiltin<"__builtin_ia32_psubusb128_mask">,
   4962           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
   4963                      llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
   4964   def int_x86_avx512_mask_psubus_b_256 : GCCBuiltin<"__builtin_ia32_psubusb256_mask">,
   4965           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
   4966                      llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
   4967   def int_x86_avx512_mask_psubus_b_512 : GCCBuiltin<"__builtin_ia32_psubusb512_mask">,
   4968           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
   4969                      llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
   4970   def int_x86_avx512_mask_psubus_w_128 : GCCBuiltin<"__builtin_ia32_psubusw128_mask">,
   4971           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   4972                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   4973   def int_x86_avx512_mask_psubus_w_256 : GCCBuiltin<"__builtin_ia32_psubusw256_mask">,
   4974           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
   4975                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   4976   def int_x86_avx512_mask_psubus_w_512 : GCCBuiltin<"__builtin_ia32_psubusw512_mask">,
   4977           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
   4978                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4979   def int_x86_avx512_pmulu_dq_512 : GCCBuiltin<"__builtin_ia32_pmuludq512">,
   4980               Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty], [IntrNoMem]>;
   4981   def int_x86_avx512_pmul_dq_512 : GCCBuiltin<"__builtin_ia32_pmuldq512">,
   4982               Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty], [IntrNoMem]>;
   4983   def int_x86_avx512_mask_pmulhu_w_512 : GCCBuiltin<"__builtin_ia32_pmulhuw512_mask">,
   4984               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
   4985                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4986   def int_x86_avx512_mask_pmulh_w_512 : GCCBuiltin<"__builtin_ia32_pmulhw512_mask">,
   4987               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
   4988                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   4989   def int_x86_avx512_mask_pmulhu_w_128 : GCCBuiltin<"__builtin_ia32_pmulhuw128_mask">,
   4990               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   4991                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   4992   def int_x86_avx512_mask_pmulhu_w_256 : GCCBuiltin<"__builtin_ia32_pmulhuw256_mask">,
   4993               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
   4994                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   4995   def int_x86_avx512_mask_pmulh_w_128 : GCCBuiltin<"__builtin_ia32_pmulhw128_mask">,
   4996               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   4997                      llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   4998   def int_x86_avx512_mask_pmulh_w_256 : GCCBuiltin<"__builtin_ia32_pmulhw256_mask">,
   4999               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
   5000                      llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   5001   def int_x86_avx512_mask_pavg_b_512 : GCCBuiltin<"__builtin_ia32_pavgb512_mask">,
   5002           Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
   5003                     llvm_v64i8_ty, llvm_i64_ty], [IntrNoMem]>;
   5004   def int_x86_avx512_mask_pavg_w_512 : GCCBuiltin<"__builtin_ia32_pavgw512_mask">,
   5005           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
   5006                     llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
   5007   def int_x86_avx512_mask_pavg_b_128 : GCCBuiltin<"__builtin_ia32_pavgb128_mask">,
   5008           Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
   5009                     llvm_v16i8_ty, llvm_i16_ty], [IntrNoMem]>;
   5010   def int_x86_avx512_mask_pavg_b_256 : GCCBuiltin<"__builtin_ia32_pavgb256_mask">,
   5011           Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
   5012                     llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
   5013   def int_x86_avx512_mask_pavg_w_128 : GCCBuiltin<"__builtin_ia32_pavgw128_mask">,
   5014           Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   5015                     llvm_v8i16_ty, llvm_i8_ty], [IntrNoMem]>;
   5016   def int_x86_avx512_mask_pavg_w_256 : GCCBuiltin<"__builtin_ia32_pavgw256_mask">,
   5017           Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
   5018                     llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   5019   def int_x86_avx512_mask_pmaddw_d_128 :
   5020          GCCBuiltin<"__builtin_ia32_pmaddwd128_mask">,
   5021           Intrinsic<[llvm_v4i32_ty],
   5022           [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty,  llvm_i8_ty],
   5023           [IntrNoMem]>;
   5024   def int_x86_avx512_mask_pmaddw_d_256 :
   5025          GCCBuiltin<"__builtin_ia32_pmaddwd256_mask">,
   5026           Intrinsic<[llvm_v8i32_ty],
   5027           [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v8i32_ty,  llvm_i8_ty],
   5028           [IntrNoMem]>;
   5029   def int_x86_avx512_mask_pmaddw_d_512 :
   5030          GCCBuiltin<"__builtin_ia32_pmaddwd512_mask">,
   5031           Intrinsic<[llvm_v16i32_ty],
   5032           [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v16i32_ty,  llvm_i16_ty],
   5033           [IntrNoMem]>;
   5034   def int_x86_avx512_mask_pmaddubs_w_128 :
   5035          GCCBuiltin<"__builtin_ia32_pmaddubsw128_mask">,
   5036           Intrinsic<[llvm_v8i16_ty],
   5037           [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v8i16_ty,  llvm_i8_ty],
   5038           [IntrNoMem]>;
   5039   def int_x86_avx512_mask_pmaddubs_w_256 :
   5040          GCCBuiltin<"__builtin_ia32_pmaddubsw256_mask">,
   5041           Intrinsic<[llvm_v16i16_ty],
   5042           [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v16i16_ty,  llvm_i16_ty],
   5043           [IntrNoMem]>;
   5044   def int_x86_avx512_mask_pmaddubs_w_512 :
   5045          GCCBuiltin<"__builtin_ia32_pmaddubsw512_mask">,
   5046           Intrinsic<[llvm_v32i16_ty],
   5047           [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v32i16_ty,  llvm_i32_ty],
   5048           [IntrNoMem]>;
   5049 
   5050   def int_x86_avx512_mask_dbpsadbw_128 :
   5051          GCCBuiltin<"__builtin_ia32_dbpsadbw128_mask">,
   5052           Intrinsic<[llvm_v8i16_ty],
   5053           [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, llvm_v8i16_ty,
   5054            llvm_i8_ty], [IntrNoMem]>;
   5055 
   5056   def int_x86_avx512_mask_dbpsadbw_256 :
   5057          GCCBuiltin<"__builtin_ia32_dbpsadbw256_mask">,
   5058           Intrinsic<[llvm_v16i16_ty],
   5059           [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty, llvm_v16i16_ty,
   5060            llvm_i16_ty], [IntrNoMem]>;
   5061 
   5062   def int_x86_avx512_mask_dbpsadbw_512 :
   5063          GCCBuiltin<"__builtin_ia32_dbpsadbw512_mask">,
   5064           Intrinsic<[llvm_v32i16_ty],
   5065           [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty, llvm_v32i16_ty,
   5066            llvm_i32_ty], [IntrNoMem]>;
   5067 }
   5068 
   5069 // Gather and Scatter ops
   5070 let TargetPrefix = "x86" in {
   5071   def int_x86_avx512_gather_dpd_512  : GCCBuiltin<"__builtin_ia32_gathersiv8df">,
   5072           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
   5073                      llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
   5074                     [IntrReadMem, IntrArgMemOnly]>;
   5075   def int_x86_avx512_gather_dps_512  : GCCBuiltin<"__builtin_ia32_gathersiv16sf">,
   5076           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty,
   5077                      llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
   5078                     [IntrReadMem, IntrArgMemOnly]>;
   5079   def int_x86_avx512_gather_qpd_512  : GCCBuiltin<"__builtin_ia32_gatherdiv8df">,
   5080           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
   5081                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
   5082                     [IntrReadMem, IntrArgMemOnly]>;
   5083   def int_x86_avx512_gather_qps_512  : GCCBuiltin<"__builtin_ia32_gatherdiv16sf">,
   5084           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty,
   5085                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
   5086                     [IntrReadMem, IntrArgMemOnly]>;
   5087 
   5088 
   5089   def int_x86_avx512_gather_dpq_512  : GCCBuiltin<"__builtin_ia32_gathersiv8di">,
   5090           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
   5091                      llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
   5092                     [IntrReadMem, IntrArgMemOnly]>;
   5093   def int_x86_avx512_gather_dpi_512  : GCCBuiltin<"__builtin_ia32_gathersiv16si">,
   5094           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty,
   5095                      llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
   5096                     [IntrReadMem, IntrArgMemOnly]>;
   5097   def int_x86_avx512_gather_qpq_512  : GCCBuiltin<"__builtin_ia32_gatherdiv8di">,
   5098           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
   5099                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
   5100                     [IntrReadMem, IntrArgMemOnly]>;
   5101   def int_x86_avx512_gather_qpi_512  : GCCBuiltin<"__builtin_ia32_gatherdiv16si">,
   5102           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty,
   5103                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
   5104                     [IntrReadMem, IntrArgMemOnly]>;
   5105 
   5106   def int_x86_avx512_gather3div2_df :
   5107         GCCBuiltin<"__builtin_ia32_gather3div2df">,
   5108           Intrinsic<[llvm_v2f64_ty],
   5109           [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
   5110           [IntrReadMem, IntrArgMemOnly]>;
   5111 
   5112   def int_x86_avx512_gather3div2_di :
   5113         GCCBuiltin<"__builtin_ia32_gather3div2di">,
   5114           Intrinsic<[llvm_v2i64_ty],
   5115           [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
   5116           [IntrReadMem, IntrArgMemOnly]>;
   5117 
   5118   def int_x86_avx512_gather3div4_df :
   5119         GCCBuiltin<"__builtin_ia32_gather3div4df">,
   5120           Intrinsic<[llvm_v4f64_ty],
   5121           [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
   5122           [IntrReadMem, IntrArgMemOnly]>;
   5123 
   5124   def int_x86_avx512_gather3div4_di :
   5125         GCCBuiltin<"__builtin_ia32_gather3div4di">,
   5126           Intrinsic<[llvm_v4i64_ty],
   5127           [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
   5128           [IntrReadMem, IntrArgMemOnly]>;
   5129 
   5130   def int_x86_avx512_gather3div4_sf :
   5131         GCCBuiltin<"__builtin_ia32_gather3div4sf">,
   5132           Intrinsic<[llvm_v4f32_ty],
   5133           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
   5134           [IntrReadMem, IntrArgMemOnly]>;
   5135 
   5136   def int_x86_avx512_gather3div4_si :
   5137         GCCBuiltin<"__builtin_ia32_gather3div4si">,
   5138           Intrinsic<[llvm_v4i32_ty],
   5139           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty, llvm_i32_ty],
   5140           [IntrReadMem, IntrArgMemOnly]>;
   5141 
   5142   def int_x86_avx512_gather3div8_sf :
   5143         GCCBuiltin<"__builtin_ia32_gather3div8sf">,
   5144           Intrinsic<[llvm_v4f32_ty],
   5145           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
   5146           [IntrReadMem, IntrArgMemOnly]>;
   5147 
   5148   def int_x86_avx512_gather3div8_si :
   5149         GCCBuiltin<"__builtin_ia32_gather3div8si">,
   5150           Intrinsic<[llvm_v4i32_ty],
   5151           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty, llvm_i32_ty],
   5152           [IntrReadMem, IntrArgMemOnly]>;
   5153 
   5154   def int_x86_avx512_gather3siv2_df :
   5155         GCCBuiltin<"__builtin_ia32_gather3siv2df">,
   5156           Intrinsic<[llvm_v2f64_ty],
   5157           [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
   5158           [IntrReadMem, IntrArgMemOnly]>;
   5159 
   5160   def int_x86_avx512_gather3siv2_di :
   5161         GCCBuiltin<"__builtin_ia32_gather3siv2di">,
   5162           Intrinsic<[llvm_v2i64_ty],
   5163           [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
   5164           [IntrReadMem, IntrArgMemOnly]>;
   5165 
   5166   def int_x86_avx512_gather3siv4_df :
   5167         GCCBuiltin<"__builtin_ia32_gather3siv4df">,
   5168           Intrinsic<[llvm_v4f64_ty],
   5169           [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
   5170           [IntrReadMem, IntrArgMemOnly]>;
   5171 
   5172   def int_x86_avx512_gather3siv4_di :
   5173         GCCBuiltin<"__builtin_ia32_gather3siv4di">,
   5174           Intrinsic<[llvm_v4i64_ty],
   5175           [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
   5176           [IntrReadMem, IntrArgMemOnly]>;
   5177 
   5178   def int_x86_avx512_gather3siv4_sf :
   5179         GCCBuiltin<"__builtin_ia32_gather3siv4sf">,
   5180           Intrinsic<[llvm_v4f32_ty],
   5181           [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
   5182           [IntrReadMem, IntrArgMemOnly]>;
   5183 
   5184   def int_x86_avx512_gather3siv4_si :
   5185         GCCBuiltin<"__builtin_ia32_gather3siv4si">,
   5186           Intrinsic<[llvm_v4i32_ty],
   5187           [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty, llvm_i32_ty],
   5188           [IntrReadMem, IntrArgMemOnly]>;
   5189 
   5190   def int_x86_avx512_gather3siv8_sf :
   5191         GCCBuiltin<"__builtin_ia32_gather3siv8sf">,
   5192           Intrinsic<[llvm_v8f32_ty],
   5193           [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
   5194           [IntrReadMem, IntrArgMemOnly]>;
   5195 
   5196   def int_x86_avx512_gather3siv8_si :
   5197         GCCBuiltin<"__builtin_ia32_gather3siv8si">,
   5198           Intrinsic<[llvm_v8i32_ty],
   5199           [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
   5200           [IntrReadMem, IntrArgMemOnly]>;
   5201 
   5202 // scatter
   5203   def int_x86_avx512_scatter_dpd_512  : GCCBuiltin<"__builtin_ia32_scattersiv8df">,
   5204           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
   5205                         llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty],
   5206                     [IntrArgMemOnly]>;
   5207   def int_x86_avx512_scatter_dps_512  : GCCBuiltin<"__builtin_ia32_scattersiv16sf">,
   5208           Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
   5209                        llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty],
   5210                     [IntrArgMemOnly]>;
   5211   def int_x86_avx512_scatter_qpd_512  : GCCBuiltin<"__builtin_ia32_scatterdiv8df">,
   5212           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
   5213                      llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty],
   5214                     [IntrArgMemOnly]>;
   5215   def int_x86_avx512_scatter_qps_512  : GCCBuiltin<"__builtin_ia32_scatterdiv16sf">,
   5216           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
   5217                      llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty],
   5218                     [IntrArgMemOnly]>;
   5219 
   5220 
   5221   def int_x86_avx512_scatter_dpq_512  : GCCBuiltin<"__builtin_ia32_scattersiv8di">,
   5222           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
   5223                          llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty],
   5224                     [IntrArgMemOnly]>;
   5225   def int_x86_avx512_scatter_dpi_512  : GCCBuiltin<"__builtin_ia32_scattersiv16si">,
   5226           Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
   5227                      llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty],
   5228                     [IntrArgMemOnly]>;
   5229   def int_x86_avx512_scatter_qpq_512  : GCCBuiltin<"__builtin_ia32_scatterdiv8di">,
   5230           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,llvm_v8i64_ty, llvm_v8i64_ty,
   5231                          llvm_i32_ty],
   5232                     [IntrArgMemOnly]>;
   5233   def int_x86_avx512_scatter_qpi_512  : GCCBuiltin<"__builtin_ia32_scatterdiv16si">,
   5234           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8i32_ty,
   5235                          llvm_i32_ty],
   5236                     [IntrArgMemOnly]>;
   5237 
   5238   def int_x86_avx512_scatterdiv2_df :
   5239        GCCBuiltin<"__builtin_ia32_scatterdiv2df">,
   5240         Intrinsic<[],
   5241         [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i32_ty],
   5242         [IntrArgMemOnly]>;
   5243 
   5244   def int_x86_avx512_scatterdiv2_di :
   5245         GCCBuiltin<"__builtin_ia32_scatterdiv2di">,
   5246           Intrinsic<[],
   5247           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
   5248           [IntrArgMemOnly]>;
   5249 
   5250   def int_x86_avx512_scatterdiv4_df :
   5251         GCCBuiltin<"__builtin_ia32_scatterdiv4df">,
   5252           Intrinsic<[],
   5253           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i32_ty],
   5254           [IntrArgMemOnly]>;
   5255 
   5256   def int_x86_avx512_scatterdiv4_di :
   5257         GCCBuiltin<"__builtin_ia32_scatterdiv4di">,
   5258           Intrinsic<[],
   5259           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty],
   5260           [IntrArgMemOnly]>;
   5261 
   5262   def int_x86_avx512_scatterdiv4_sf :
   5263         GCCBuiltin<"__builtin_ia32_scatterdiv4sf">,
   5264           Intrinsic<[],
   5265           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i32_ty],
   5266           [IntrArgMemOnly]>;
   5267 
   5268   def int_x86_avx512_scatterdiv4_si :
   5269         GCCBuiltin<"__builtin_ia32_scatterdiv4si">,
   5270           Intrinsic<[],
   5271           [llvm_ptr_ty, llvm_i8_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i32_ty],
   5272           [IntrArgMemOnly]>;
   5273 
   5274   def int_x86_avx512_scatterdiv8_sf :
   5275         GCCBuiltin<"__builtin_ia32_scatterdiv8sf">,
   5276           Intrinsic<[],
   5277           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i32_ty],
   5278           [IntrArgMemOnly]>;
   5279 
   5280   def int_x86_avx512_scatterdiv8_si :
   5281         GCCBuiltin<"__builtin_ia32_scatterdiv8si">,
   5282           Intrinsic<[],
   5283           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i32_ty],
   5284           [IntrArgMemOnly]>;
   5285 
   5286   def int_x86_avx512_scattersiv2_df :
   5287         GCCBuiltin<"__builtin_ia32_scattersiv2df">,
   5288           Intrinsic<[],
   5289           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i32_ty],
   5290           [IntrArgMemOnly]>;
   5291 
   5292   def int_x86_avx512_scattersiv2_di :
   5293         GCCBuiltin<"__builtin_ia32_scattersiv2di">,
   5294           Intrinsic<[],
   5295           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i32_ty],
   5296           [IntrArgMemOnly]>;
   5297 
   5298   def int_x86_avx512_scattersiv4_df :
   5299         GCCBuiltin<"__builtin_ia32_scattersiv4df">,
   5300           Intrinsic<[],
   5301           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i32_ty],
   5302           [IntrArgMemOnly]>;
   5303 
   5304   def int_x86_avx512_scattersiv4_di :
   5305         GCCBuiltin<"__builtin_ia32_scattersiv4di">,
   5306           Intrinsic<[],
   5307           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i32_ty],
   5308           [IntrArgMemOnly]>;
   5309 
   5310   def int_x86_avx512_scattersiv4_sf :
   5311         GCCBuiltin<"__builtin_ia32_scattersiv4sf">,
   5312           Intrinsic<[],
   5313           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i32_ty],
   5314           [IntrArgMemOnly]>;
   5315 
   5316   def int_x86_avx512_scattersiv4_si :
   5317         GCCBuiltin<"__builtin_ia32_scattersiv4si">,
   5318           Intrinsic<[],
   5319           [llvm_ptr_ty, llvm_i8_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
   5320           [IntrArgMemOnly]>;
   5321 
   5322   def int_x86_avx512_scattersiv8_sf :
   5323         GCCBuiltin<"__builtin_ia32_scattersiv8sf">,
   5324           Intrinsic<[],
   5325           [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i32_ty],
   5326           [IntrArgMemOnly]>;
   5327 
   5328   def int_x86_avx512_scattersiv8_si :
   5329         GCCBuiltin<"__builtin_ia32_scattersiv8si">,
   5330           Intrinsic<[],
   5331           [llvm_ptr_ty, llvm_i8_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty],
   5332           [IntrArgMemOnly]>;
   5333 
   5334   // gather prefetch
   5335   def int_x86_avx512_gatherpf_dpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfdpd">,
   5336           Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
   5337                      llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
   5338   def int_x86_avx512_gatherpf_dps_512  : GCCBuiltin<"__builtin_ia32_gatherpfdps">,
   5339           Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
   5340                      llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
   5341   def int_x86_avx512_gatherpf_qpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfqpd">,
   5342           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
   5343                      llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
   5344   def int_x86_avx512_gatherpf_qps_512  : GCCBuiltin<"__builtin_ia32_gatherpfqps">,
   5345           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
   5346                      llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
   5347 
   5348   // scatter prefetch
   5349   def int_x86_avx512_scatterpf_dpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfdpd">,
   5350           Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
   5351                      llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
   5352   def int_x86_avx512_scatterpf_dps_512  : GCCBuiltin<"__builtin_ia32_scatterpfdps">,
   5353           Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
   5354                      llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
   5355   def int_x86_avx512_scatterpf_qpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfqpd">,
   5356           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
   5357                      llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
   5358   def int_x86_avx512_scatterpf_qps_512  : GCCBuiltin<"__builtin_ia32_scatterpfqps">,
   5359           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
   5360                      llvm_i32_ty, llvm_i32_ty], [IntrArgMemOnly]>;
   5361 }
   5362 
   5363 // AVX-512 conflict detection instruction
   5364 // Instructions that count the number of leading zero bits
   5365 let TargetPrefix = "x86" in {
   5366   def int_x86_avx512_mask_conflict_d_128 :
   5367           GCCBuiltin<"__builtin_ia32_vpconflictsi_128_mask">,
   5368           Intrinsic<[llvm_v4i32_ty],
   5369                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
   5370                     [IntrNoMem]>;
   5371   def int_x86_avx512_mask_conflict_d_256 :
   5372           GCCBuiltin<"__builtin_ia32_vpconflictsi_256_mask">,
   5373           Intrinsic<[llvm_v8i32_ty],
   5374                     [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
   5375                     [IntrNoMem]>;
   5376   def int_x86_avx512_mask_conflict_d_512 :
   5377           GCCBuiltin<"__builtin_ia32_vpconflictsi_512_mask">,
   5378           Intrinsic<[llvm_v16i32_ty],
   5379                     [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
   5380                     [IntrNoMem]>;
   5381 
   5382   def int_x86_avx512_mask_conflict_q_128 :
   5383           GCCBuiltin<"__builtin_ia32_vpconflictdi_128_mask">,
   5384           Intrinsic<[llvm_v2i64_ty],
   5385                     [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
   5386                     [IntrNoMem]>;
   5387   def int_x86_avx512_mask_conflict_q_256 :
   5388           GCCBuiltin<"__builtin_ia32_vpconflictdi_256_mask">,
   5389           Intrinsic<[llvm_v4i64_ty],
   5390                     [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
   5391                     [IntrNoMem]>;
   5392   def int_x86_avx512_mask_conflict_q_512 :
   5393           GCCBuiltin<"__builtin_ia32_vpconflictdi_512_mask">,
   5394           Intrinsic<[llvm_v8i64_ty],
   5395                     [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
   5396                     [IntrNoMem]>;
   5397 }
   5398 
   5399 // Compares
   5400 let TargetPrefix = "x86" in {
   5401   // 512-bit
   5402   def int_x86_avx512_vcomi_sd : GCCBuiltin<"__builtin_ia32_vcomisd">,
   5403               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
   5404                          llvm_v2f64_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   5405   def int_x86_avx512_vcomi_ss : GCCBuiltin<"__builtin_ia32_vcomiss">,
   5406               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
   5407                          llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   5408 
   5409   def int_x86_avx512_mask_cmp_b_512:
   5410         Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty,
   5411                   llvm_i64_ty], [IntrNoMem]>;
   5412   def int_x86_avx512_mask_cmp_w_512:
   5413         Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty,
   5414                   llvm_i32_ty], [IntrNoMem]>;
   5415   def int_x86_avx512_mask_cmp_d_512:
   5416         Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
   5417                   llvm_i16_ty], [IntrNoMem ]>;
   5418   def int_x86_avx512_mask_cmp_q_512:
   5419         Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
   5420                   llvm_i8_ty], [IntrNoMem]>;
   5421 
   5422   def int_x86_avx512_mask_ucmp_b_512:
   5423         Intrinsic<[llvm_i64_ty], [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty,
   5424                   llvm_i64_ty], [IntrNoMem]>;
   5425   def int_x86_avx512_mask_ucmp_w_512:
   5426         Intrinsic<[llvm_i32_ty], [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty,
   5427                   llvm_i32_ty], [IntrNoMem]>;
   5428   def int_x86_avx512_mask_ucmp_d_512:
   5429         Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
   5430                   llvm_i16_ty], [IntrNoMem]>;
   5431   def int_x86_avx512_mask_ucmp_q_512:
   5432         Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
   5433                   llvm_i8_ty], [IntrNoMem]>;
   5434 
   5435   // 256-bit
   5436   def int_x86_avx512_mask_cmp_b_256:
   5437         Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty,
   5438                   llvm_i32_ty], [IntrNoMem]>;
   5439   def int_x86_avx512_mask_cmp_w_256:
   5440         Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty,
   5441                   llvm_i16_ty], [IntrNoMem]>;
   5442   def int_x86_avx512_mask_cmp_d_256:
   5443         Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
   5444                   llvm_i8_ty], [IntrNoMem]>;
   5445   def int_x86_avx512_mask_cmp_q_256:
   5446         Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
   5447                   llvm_i8_ty], [IntrNoMem]>;
   5448 
   5449   def int_x86_avx512_mask_ucmp_b_256:
   5450         Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty,
   5451                   llvm_i32_ty], [IntrNoMem]>;
   5452   def int_x86_avx512_mask_ucmp_w_256:
   5453         Intrinsic<[llvm_i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty,
   5454                   llvm_i16_ty], [IntrNoMem]>;
   5455   def int_x86_avx512_mask_ucmp_d_256:
   5456         Intrinsic<[llvm_i8_ty], [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
   5457                   llvm_i8_ty], [IntrNoMem]>;
   5458   def int_x86_avx512_mask_ucmp_q_256:
   5459         Intrinsic<[llvm_i8_ty], [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
   5460                   llvm_i8_ty], [IntrNoMem]>;
   5461 
   5462   // 128-bit
   5463   def int_x86_avx512_mask_cmp_b_128:
   5464         Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
   5465                   llvm_i16_ty], [IntrNoMem]>;
   5466   def int_x86_avx512_mask_cmp_w_128:
   5467         Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty,
   5468                   llvm_i8_ty], [IntrNoMem]>;
   5469   def int_x86_avx512_mask_cmp_d_128:
   5470         Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
   5471                   llvm_i8_ty], [IntrNoMem]>;
   5472   def int_x86_avx512_mask_cmp_q_128:
   5473         Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
   5474                   llvm_i8_ty], [IntrNoMem]>;
   5475 
   5476   def int_x86_avx512_mask_ucmp_b_128:
   5477         Intrinsic<[llvm_i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty,
   5478                   llvm_i16_ty], [IntrNoMem]>;
   5479   def int_x86_avx512_mask_ucmp_w_128:
   5480         Intrinsic<[llvm_i8_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty,
   5481                   llvm_i8_ty], [IntrNoMem]>;
   5482   def int_x86_avx512_mask_ucmp_d_128:
   5483         Intrinsic<[llvm_i8_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
   5484                   llvm_i8_ty], [IntrNoMem]>;
   5485   def int_x86_avx512_mask_ucmp_q_128:
   5486         Intrinsic<[llvm_i8_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
   5487                   llvm_i8_ty], [IntrNoMem]>;
   5488 }
   5489 
   5490 // Compress, Expand
   5491 let TargetPrefix = "x86" in {
   5492   def int_x86_avx512_mask_compress_ps_512 :
   5493                              GCCBuiltin<"__builtin_ia32_compresssf512_mask">,
   5494         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   5495                    llvm_i16_ty], [IntrNoMem]>;
   5496   def int_x86_avx512_mask_compress_pd_512 :
   5497                              GCCBuiltin<"__builtin_ia32_compressdf512_mask">,
   5498         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   5499                    llvm_i8_ty], [IntrNoMem]>;
   5500   def int_x86_avx512_mask_compress_ps_256 :
   5501                              GCCBuiltin<"__builtin_ia32_compresssf256_mask">,
   5502         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   5503                    llvm_i8_ty], [IntrNoMem]>;
   5504   def int_x86_avx512_mask_compress_pd_256 :
   5505                              GCCBuiltin<"__builtin_ia32_compressdf256_mask">,
   5506         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   5507                    llvm_i8_ty], [IntrNoMem]>;
   5508   def int_x86_avx512_mask_compress_ps_128 :
   5509                              GCCBuiltin<"__builtin_ia32_compresssf128_mask">,
   5510         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   5511                    llvm_i8_ty], [IntrNoMem]>;
   5512   def int_x86_avx512_mask_compress_pd_128 :
   5513                              GCCBuiltin<"__builtin_ia32_compressdf128_mask">,
   5514         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   5515                    llvm_i8_ty], [IntrNoMem]>;
   5516 
   5517   def int_x86_avx512_mask_compress_store_ps_512 :
   5518                             GCCBuiltin<"__builtin_ia32_compressstoresf512_mask">,
   5519         Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty,
   5520                    llvm_i16_ty], [IntrArgMemOnly]>;
   5521   def int_x86_avx512_mask_compress_store_pd_512 :
   5522                             GCCBuiltin<"__builtin_ia32_compressstoredf512_mask">,
   5523         Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty,
   5524                    llvm_i8_ty], [IntrArgMemOnly]>;
   5525   def int_x86_avx512_mask_compress_store_ps_256 :
   5526                             GCCBuiltin<"__builtin_ia32_compressstoresf256_mask">,
   5527         Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty,
   5528                    llvm_i8_ty], [IntrArgMemOnly]>;
   5529   def int_x86_avx512_mask_compress_store_pd_256 :
   5530                             GCCBuiltin<"__builtin_ia32_compressstoredf256_mask">,
   5531         Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty,
   5532                    llvm_i8_ty], [IntrArgMemOnly]>;
   5533   def int_x86_avx512_mask_compress_store_ps_128 :
   5534                             GCCBuiltin<"__builtin_ia32_compressstoresf128_mask">,
   5535         Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty,
   5536                    llvm_i8_ty], [IntrArgMemOnly]>;
   5537   def int_x86_avx512_mask_compress_store_pd_128 :
   5538                             GCCBuiltin<"__builtin_ia32_compressstoredf128_mask">,
   5539         Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty,
   5540                    llvm_i8_ty], [IntrArgMemOnly]>;
   5541 
   5542   def int_x86_avx512_mask_compress_d_512 :
   5543                              GCCBuiltin<"__builtin_ia32_compresssi512_mask">,
   5544         Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   5545                    llvm_i16_ty], [IntrNoMem]>;
   5546   def int_x86_avx512_mask_compress_q_512 :
   5547                              GCCBuiltin<"__builtin_ia32_compressdi512_mask">,
   5548         Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   5549                    llvm_i8_ty], [IntrNoMem]>;
   5550   def int_x86_avx512_mask_compress_d_256 :
   5551                              GCCBuiltin<"__builtin_ia32_compresssi256_mask">,
   5552         Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
   5553                    llvm_i8_ty], [IntrNoMem]>;
   5554   def int_x86_avx512_mask_compress_q_256 :
   5555                              GCCBuiltin<"__builtin_ia32_compressdi256_mask">,
   5556         Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
   5557                    llvm_i8_ty], [IntrNoMem]>;
   5558   def int_x86_avx512_mask_compress_d_128 :
   5559                              GCCBuiltin<"__builtin_ia32_compresssi128_mask">,
   5560         Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
   5561                    llvm_i8_ty], [IntrNoMem]>;
   5562   def int_x86_avx512_mask_compress_q_128 :
   5563                              GCCBuiltin<"__builtin_ia32_compressdi128_mask">,
   5564         Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   5565                    llvm_i8_ty], [IntrNoMem]>;
   5566 
   5567   def int_x86_avx512_mask_compress_store_d_512 :
   5568                             GCCBuiltin<"__builtin_ia32_compressstoresi512_mask">,
   5569         Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty,
   5570                    llvm_i16_ty], [IntrArgMemOnly]>;
   5571   def int_x86_avx512_mask_compress_store_q_512 :
   5572                             GCCBuiltin<"__builtin_ia32_compressstoredi512_mask">,
   5573         Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty,
   5574                    llvm_i8_ty], [IntrArgMemOnly]>;
   5575   def int_x86_avx512_mask_compress_store_d_256 :
   5576                             GCCBuiltin<"__builtin_ia32_compressstoresi256_mask">,
   5577         Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty,
   5578                    llvm_i8_ty], [IntrArgMemOnly]>;
   5579   def int_x86_avx512_mask_compress_store_q_256 :
   5580                             GCCBuiltin<"__builtin_ia32_compressstoredi256_mask">,
   5581         Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty,
   5582                    llvm_i8_ty], [IntrArgMemOnly]>;
   5583   def int_x86_avx512_mask_compress_store_d_128 :
   5584                             GCCBuiltin<"__builtin_ia32_compressstoresi128_mask">,
   5585         Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty,
   5586                    llvm_i8_ty], [IntrArgMemOnly]>;
   5587   def int_x86_avx512_mask_compress_store_q_128 :
   5588                             GCCBuiltin<"__builtin_ia32_compressstoredi128_mask">,
   5589         Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty,
   5590                    llvm_i8_ty], [IntrArgMemOnly]>;
   5591 
   5592 // expand
   5593   def int_x86_avx512_mask_expand_ps_512 :
   5594                              GCCBuiltin<"__builtin_ia32_expandsf512_mask">,
   5595         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   5596                    llvm_i16_ty], [IntrNoMem]>;
   5597   def int_x86_avx512_mask_expand_pd_512 :
   5598                              GCCBuiltin<"__builtin_ia32_expanddf512_mask">,
   5599         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   5600                    llvm_i8_ty], [IntrNoMem]>;
   5601   def int_x86_avx512_mask_expand_ps_256 :
   5602                              GCCBuiltin<"__builtin_ia32_expandsf256_mask">,
   5603         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   5604                    llvm_i8_ty], [IntrNoMem]>;
   5605   def int_x86_avx512_mask_expand_pd_256 :
   5606                              GCCBuiltin<"__builtin_ia32_expanddf256_mask">,
   5607         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   5608                    llvm_i8_ty], [IntrNoMem]>;
   5609   def int_x86_avx512_mask_expand_ps_128 :
   5610                              GCCBuiltin<"__builtin_ia32_expandsf128_mask">,
   5611         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   5612                    llvm_i8_ty], [IntrNoMem]>;
   5613   def int_x86_avx512_mask_expand_pd_128 :
   5614                              GCCBuiltin<"__builtin_ia32_expanddf128_mask">,
   5615         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   5616                    llvm_i8_ty], [IntrNoMem]>;
   5617 
   5618   def int_x86_avx512_mask_expand_load_ps_512 :
   5619                             GCCBuiltin<"__builtin_ia32_expandloadsf512_mask">,
   5620         Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty,
   5621                    llvm_i16_ty], [IntrReadMem, IntrArgMemOnly]>;
   5622   def int_x86_avx512_mask_expand_load_pd_512 :
   5623                             GCCBuiltin<"__builtin_ia32_expandloaddf512_mask">,
   5624         Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty,
   5625                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5626   def int_x86_avx512_mask_expand_load_ps_256 :
   5627                             GCCBuiltin<"__builtin_ia32_expandloadsf256_mask">,
   5628         Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8f32_ty,
   5629                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5630   def int_x86_avx512_mask_expand_load_pd_256 :
   5631                             GCCBuiltin<"__builtin_ia32_expandloaddf256_mask">,
   5632         Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4f64_ty,
   5633                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5634   def int_x86_avx512_mask_expand_load_ps_128 :
   5635                             GCCBuiltin<"__builtin_ia32_expandloadsf128_mask">,
   5636         Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4f32_ty,
   5637                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5638   def int_x86_avx512_mask_expand_load_pd_128 :
   5639                             GCCBuiltin<"__builtin_ia32_expandloaddf128_mask">,
   5640         Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2f64_ty,
   5641                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5642 
   5643   def int_x86_avx512_mask_expand_d_512 :
   5644                              GCCBuiltin<"__builtin_ia32_expandsi512_mask">,
   5645         Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   5646                    llvm_i16_ty], [IntrNoMem]>;
   5647   def int_x86_avx512_mask_expand_q_512 :
   5648                              GCCBuiltin<"__builtin_ia32_expanddi512_mask">,
   5649         Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   5650                    llvm_i8_ty], [IntrNoMem]>;
   5651   def int_x86_avx512_mask_expand_d_256 :
   5652                              GCCBuiltin<"__builtin_ia32_expandsi256_mask">,
   5653         Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
   5654                    llvm_i8_ty], [IntrNoMem]>;
   5655   def int_x86_avx512_mask_expand_q_256 :
   5656                              GCCBuiltin<"__builtin_ia32_expanddi256_mask">,
   5657         Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
   5658                    llvm_i8_ty], [IntrNoMem]>;
   5659   def int_x86_avx512_mask_expand_d_128 :
   5660                              GCCBuiltin<"__builtin_ia32_expandsi128_mask">,
   5661         Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
   5662                    llvm_i8_ty], [IntrNoMem]>;
   5663   def int_x86_avx512_mask_expand_q_128 :
   5664                              GCCBuiltin<"__builtin_ia32_expanddi128_mask">,
   5665         Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   5666                    llvm_i8_ty], [IntrNoMem]>;
   5667 
   5668   def int_x86_avx512_mask_expand_load_d_512 :
   5669                             GCCBuiltin<"__builtin_ia32_expandloadsi512_mask">,
   5670         Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty,
   5671                    llvm_i16_ty], [IntrReadMem, IntrArgMemOnly]>;
   5672   def int_x86_avx512_mask_expand_load_q_512 :
   5673                             GCCBuiltin<"__builtin_ia32_expandloaddi512_mask">,
   5674         Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty,
   5675                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5676   def int_x86_avx512_mask_expand_load_d_256 :
   5677                             GCCBuiltin<"__builtin_ia32_expandloadsi256_mask">,
   5678         Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty,
   5679                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5680   def int_x86_avx512_mask_expand_load_q_256 :
   5681                             GCCBuiltin<"__builtin_ia32_expandloaddi256_mask">,
   5682         Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty,
   5683                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5684   def int_x86_avx512_mask_expand_load_d_128 :
   5685                             GCCBuiltin<"__builtin_ia32_expandloadsi128_mask">,
   5686         Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty,
   5687                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5688   def int_x86_avx512_mask_expand_load_q_128 :
   5689                             GCCBuiltin<"__builtin_ia32_expandloaddi128_mask">,
   5690         Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty,
   5691                    llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
   5692 
   5693 }
   5694 
   5695 // truncate
   5696 let TargetPrefix = "x86" in {
   5697   def int_x86_avx512_mask_pmov_qb_128 :
   5698           GCCBuiltin<"__builtin_ia32_pmovqb128_mask">,
   5699           Intrinsic<[llvm_v16i8_ty],
   5700                     [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty],
   5701                     [IntrNoMem]>;
   5702   def int_x86_avx512_mask_pmov_qb_mem_128 :
   5703           GCCBuiltin<"__builtin_ia32_pmovqb128mem_mask">,
   5704           Intrinsic<[],
   5705                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
   5706                     [IntrArgMemOnly]>;
   5707   def int_x86_avx512_mask_pmovs_qb_128 :
   5708           GCCBuiltin<"__builtin_ia32_pmovsqb128_mask">,
   5709           Intrinsic<[llvm_v16i8_ty],
   5710                     [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty],
   5711                     [IntrNoMem]>;
   5712   def int_x86_avx512_mask_pmovs_qb_mem_128 :
   5713           GCCBuiltin<"__builtin_ia32_pmovsqb128mem_mask">,
   5714           Intrinsic<[],
   5715                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
   5716                     [IntrArgMemOnly]>;
   5717   def int_x86_avx512_mask_pmovus_qb_128 :
   5718           GCCBuiltin<"__builtin_ia32_pmovusqb128_mask">,
   5719           Intrinsic<[llvm_v16i8_ty],
   5720                     [llvm_v2i64_ty, llvm_v16i8_ty, llvm_i8_ty],
   5721                     [IntrNoMem]>;
   5722   def int_x86_avx512_mask_pmovus_qb_mem_128 :
   5723           GCCBuiltin<"__builtin_ia32_pmovusqb128mem_mask">,
   5724           Intrinsic<[],
   5725                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
   5726                     [IntrArgMemOnly]>;
   5727   def int_x86_avx512_mask_pmov_qb_256 :
   5728           GCCBuiltin<"__builtin_ia32_pmovqb256_mask">,
   5729           Intrinsic<[llvm_v16i8_ty],
   5730                     [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty],
   5731                     [IntrNoMem]>;
   5732   def int_x86_avx512_mask_pmov_qb_mem_256 :
   5733           GCCBuiltin<"__builtin_ia32_pmovqb256mem_mask">,
   5734           Intrinsic<[],
   5735                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
   5736                     [IntrArgMemOnly]>;
   5737   def int_x86_avx512_mask_pmovs_qb_256 :
   5738           GCCBuiltin<"__builtin_ia32_pmovsqb256_mask">,
   5739           Intrinsic<[llvm_v16i8_ty],
   5740                     [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty],
   5741                     [IntrNoMem]>;
   5742   def int_x86_avx512_mask_pmovs_qb_mem_256 :
   5743           GCCBuiltin<"__builtin_ia32_pmovsqb256mem_mask">,
   5744           Intrinsic<[],
   5745                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
   5746                     [IntrArgMemOnly]>;
   5747   def int_x86_avx512_mask_pmovus_qb_256 :
   5748           GCCBuiltin<"__builtin_ia32_pmovusqb256_mask">,
   5749           Intrinsic<[llvm_v16i8_ty],
   5750                     [llvm_v4i64_ty, llvm_v16i8_ty, llvm_i8_ty],
   5751                     [IntrNoMem]>;
   5752   def int_x86_avx512_mask_pmovus_qb_mem_256 :
   5753           GCCBuiltin<"__builtin_ia32_pmovusqb256mem_mask">,
   5754           Intrinsic<[],
   5755                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
   5756                     [IntrArgMemOnly]>;
   5757   def int_x86_avx512_mask_pmov_qb_512 :
   5758           GCCBuiltin<"__builtin_ia32_pmovqb512_mask">,
   5759           Intrinsic<[llvm_v16i8_ty],
   5760                     [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty],
   5761                     [IntrNoMem]>;
   5762   def int_x86_avx512_mask_pmov_qb_mem_512 :
   5763           GCCBuiltin<"__builtin_ia32_pmovqb512mem_mask">,
   5764           Intrinsic<[],
   5765                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   5766                     [IntrArgMemOnly]>;
   5767   def int_x86_avx512_mask_pmovs_qb_512 :
   5768           GCCBuiltin<"__builtin_ia32_pmovsqb512_mask">,
   5769           Intrinsic<[llvm_v16i8_ty],
   5770                     [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty],
   5771                     [IntrNoMem]>;
   5772   def int_x86_avx512_mask_pmovs_qb_mem_512 :
   5773           GCCBuiltin<"__builtin_ia32_pmovsqb512mem_mask">,
   5774           Intrinsic<[],
   5775                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   5776                     [IntrArgMemOnly]>;
   5777   def int_x86_avx512_mask_pmovus_qb_512 :
   5778           GCCBuiltin<"__builtin_ia32_pmovusqb512_mask">,
   5779           Intrinsic<[llvm_v16i8_ty],
   5780                     [llvm_v8i64_ty, llvm_v16i8_ty, llvm_i8_ty],
   5781                     [IntrNoMem]>;
   5782   def int_x86_avx512_mask_pmovus_qb_mem_512 :
   5783           GCCBuiltin<"__builtin_ia32_pmovusqb512mem_mask">,
   5784           Intrinsic<[],
   5785                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   5786                     [IntrArgMemOnly]>;
   5787   def int_x86_avx512_mask_pmov_qw_128 :
   5788           GCCBuiltin<"__builtin_ia32_pmovqw128_mask">,
   5789           Intrinsic<[llvm_v8i16_ty],
   5790                     [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty],
   5791                     [IntrNoMem]>;
   5792   def int_x86_avx512_mask_pmov_qw_mem_128 :
   5793           GCCBuiltin<"__builtin_ia32_pmovqw128mem_mask">,
   5794           Intrinsic<[],
   5795                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
   5796                     [IntrArgMemOnly]>;
   5797   def int_x86_avx512_mask_pmovs_qw_128 :
   5798           GCCBuiltin<"__builtin_ia32_pmovsqw128_mask">,
   5799           Intrinsic<[llvm_v8i16_ty],
   5800                     [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty],
   5801                     [IntrNoMem]>;
   5802   def int_x86_avx512_mask_pmovs_qw_mem_128 :
   5803           GCCBuiltin<"__builtin_ia32_pmovsqw128mem_mask">,
   5804           Intrinsic<[],
   5805                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
   5806                     [IntrArgMemOnly]>;
   5807   def int_x86_avx512_mask_pmovus_qw_128 :
   5808           GCCBuiltin<"__builtin_ia32_pmovusqw128_mask">,
   5809           Intrinsic<[llvm_v8i16_ty],
   5810                     [llvm_v2i64_ty, llvm_v8i16_ty, llvm_i8_ty],
   5811                     [IntrNoMem]>;
   5812   def int_x86_avx512_mask_pmovus_qw_mem_128 :
   5813           GCCBuiltin<"__builtin_ia32_pmovusqw128mem_mask">,
   5814           Intrinsic<[],
   5815                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
   5816                     [IntrArgMemOnly]>;
   5817   def int_x86_avx512_mask_pmov_qw_256 :
   5818           GCCBuiltin<"__builtin_ia32_pmovqw256_mask">,
   5819           Intrinsic<[llvm_v8i16_ty],
   5820                     [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty],
   5821                     [IntrNoMem]>;
   5822   def int_x86_avx512_mask_pmov_qw_mem_256 :
   5823           GCCBuiltin<"__builtin_ia32_pmovqw256mem_mask">,
   5824           Intrinsic<[],
   5825                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
   5826                     [IntrArgMemOnly]>;
   5827   def int_x86_avx512_mask_pmovs_qw_256 :
   5828           GCCBuiltin<"__builtin_ia32_pmovsqw256_mask">,
   5829           Intrinsic<[llvm_v8i16_ty],
   5830                     [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty],
   5831                     [IntrNoMem]>;
   5832   def int_x86_avx512_mask_pmovs_qw_mem_256 :
   5833           GCCBuiltin<"__builtin_ia32_pmovsqw256mem_mask">,
   5834           Intrinsic<[],
   5835                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
   5836                     [IntrArgMemOnly]>;
   5837   def int_x86_avx512_mask_pmovus_qw_256 :
   5838           GCCBuiltin<"__builtin_ia32_pmovusqw256_mask">,
   5839           Intrinsic<[llvm_v8i16_ty],
   5840                     [llvm_v4i64_ty, llvm_v8i16_ty, llvm_i8_ty],
   5841                     [IntrNoMem]>;
   5842   def int_x86_avx512_mask_pmovus_qw_mem_256 :
   5843           GCCBuiltin<"__builtin_ia32_pmovusqw256mem_mask">,
   5844           Intrinsic<[],
   5845                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
   5846                     [IntrArgMemOnly]>;
   5847   def int_x86_avx512_mask_pmov_qw_512 :
   5848           GCCBuiltin<"__builtin_ia32_pmovqw512_mask">,
   5849           Intrinsic<[llvm_v8i16_ty],
   5850                     [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
   5851                     [IntrNoMem]>;
   5852   def int_x86_avx512_mask_pmov_qw_mem_512 :
   5853           GCCBuiltin<"__builtin_ia32_pmovqw512mem_mask">,
   5854           Intrinsic<[],
   5855                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   5856                     [IntrArgMemOnly]>;
   5857   def int_x86_avx512_mask_pmovs_qw_512 :
   5858           GCCBuiltin<"__builtin_ia32_pmovsqw512_mask">,
   5859           Intrinsic<[llvm_v8i16_ty],
   5860                     [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
   5861                     [IntrNoMem]>;
   5862   def int_x86_avx512_mask_pmovs_qw_mem_512 :
   5863           GCCBuiltin<"__builtin_ia32_pmovsqw512mem_mask">,
   5864           Intrinsic<[],
   5865                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   5866                     [IntrArgMemOnly]>;
   5867   def int_x86_avx512_mask_pmovus_qw_512 :
   5868           GCCBuiltin<"__builtin_ia32_pmovusqw512_mask">,
   5869           Intrinsic<[llvm_v8i16_ty],
   5870                     [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
   5871                     [IntrNoMem]>;
   5872   def int_x86_avx512_mask_pmovus_qw_mem_512 :
   5873           GCCBuiltin<"__builtin_ia32_pmovusqw512mem_mask">,
   5874           Intrinsic<[],
   5875                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   5876                     [IntrArgMemOnly]>;
   5877   def int_x86_avx512_mask_pmov_qd_128 :
   5878           GCCBuiltin<"__builtin_ia32_pmovqd128_mask">,
   5879           Intrinsic<[llvm_v4i32_ty],
   5880                     [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   5881                     [IntrNoMem]>;
   5882   def int_x86_avx512_mask_pmov_qd_mem_128 :
   5883           GCCBuiltin<"__builtin_ia32_pmovqd128mem_mask">,
   5884           Intrinsic<[],
   5885                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
   5886                     [IntrArgMemOnly]>;
   5887   def int_x86_avx512_mask_pmovs_qd_128 :
   5888           GCCBuiltin<"__builtin_ia32_pmovsqd128_mask">,
   5889           Intrinsic<[llvm_v4i32_ty],
   5890                     [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   5891                     [IntrNoMem]>;
   5892   def int_x86_avx512_mask_pmovs_qd_mem_128 :
   5893           GCCBuiltin<"__builtin_ia32_pmovsqd128mem_mask">,
   5894           Intrinsic<[],
   5895                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
   5896                     [IntrArgMemOnly]>;
   5897   def int_x86_avx512_mask_pmovus_qd_128 :
   5898           GCCBuiltin<"__builtin_ia32_pmovusqd128_mask">,
   5899           Intrinsic<[llvm_v4i32_ty],
   5900                     [llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   5901                     [IntrNoMem]>;
   5902   def int_x86_avx512_mask_pmovus_qd_mem_128 :
   5903           GCCBuiltin<"__builtin_ia32_pmovusqd128mem_mask">,
   5904           Intrinsic<[],
   5905                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
   5906                     [IntrArgMemOnly]>;
   5907   def int_x86_avx512_mask_pmov_qd_256 :
   5908           GCCBuiltin<"__builtin_ia32_pmovqd256_mask">,
   5909           Intrinsic<[llvm_v4i32_ty],
   5910                     [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   5911                     [IntrNoMem]>;
   5912   def int_x86_avx512_mask_pmov_qd_mem_256 :
   5913           GCCBuiltin<"__builtin_ia32_pmovqd256mem_mask">,
   5914           Intrinsic<[],
   5915                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
   5916                     [IntrArgMemOnly]>;
   5917   def int_x86_avx512_mask_pmovs_qd_256 :
   5918           GCCBuiltin<"__builtin_ia32_pmovsqd256_mask">,
   5919           Intrinsic<[llvm_v4i32_ty],
   5920                     [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   5921                     [IntrNoMem]>;
   5922   def int_x86_avx512_mask_pmovs_qd_mem_256 :
   5923           GCCBuiltin<"__builtin_ia32_pmovsqd256mem_mask">,
   5924           Intrinsic<[],
   5925                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
   5926                     [IntrArgMemOnly]>;
   5927   def int_x86_avx512_mask_pmovus_qd_256 :
   5928           GCCBuiltin<"__builtin_ia32_pmovusqd256_mask">,
   5929           Intrinsic<[llvm_v4i32_ty],
   5930                     [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   5931                     [IntrNoMem]>;
   5932   def int_x86_avx512_mask_pmovus_qd_mem_256 :
   5933           GCCBuiltin<"__builtin_ia32_pmovusqd256mem_mask">,
   5934           Intrinsic<[],
   5935                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
   5936                     [IntrArgMemOnly]>;
   5937   def int_x86_avx512_mask_pmov_qd_512 :
   5938           GCCBuiltin<"__builtin_ia32_pmovqd512_mask">,
   5939           Intrinsic<[llvm_v8i32_ty],
   5940                     [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
   5941                     [IntrNoMem]>;
   5942   def int_x86_avx512_mask_pmov_qd_mem_512 :
   5943           GCCBuiltin<"__builtin_ia32_pmovqd512mem_mask">,
   5944           Intrinsic<[],
   5945                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   5946                     [IntrArgMemOnly]>;
   5947   def int_x86_avx512_mask_pmovs_qd_512 :
   5948           GCCBuiltin<"__builtin_ia32_pmovsqd512_mask">,
   5949           Intrinsic<[llvm_v8i32_ty],
   5950                     [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
   5951                     [IntrNoMem]>;
   5952   def int_x86_avx512_mask_pmovs_qd_mem_512 :
   5953           GCCBuiltin<"__builtin_ia32_pmovsqd512mem_mask">,
   5954           Intrinsic<[],
   5955                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   5956                     [IntrArgMemOnly]>;
   5957   def int_x86_avx512_mask_pmovus_qd_512 :
   5958           GCCBuiltin<"__builtin_ia32_pmovusqd512_mask">,
   5959           Intrinsic<[llvm_v8i32_ty],
   5960                     [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
   5961                     [IntrNoMem]>;
   5962   def int_x86_avx512_mask_pmovus_qd_mem_512 :
   5963           GCCBuiltin<"__builtin_ia32_pmovusqd512mem_mask">,
   5964           Intrinsic<[],
   5965                     [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   5966                     [IntrArgMemOnly]>;
   5967   def int_x86_avx512_mask_pmov_db_128 :
   5968           GCCBuiltin<"__builtin_ia32_pmovdb128_mask">,
   5969           Intrinsic<[llvm_v16i8_ty],
   5970                     [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty],
   5971                     [IntrNoMem]>;
   5972   def int_x86_avx512_mask_pmov_db_mem_128 :
   5973           GCCBuiltin<"__builtin_ia32_pmovdb128mem_mask">,
   5974           Intrinsic<[],
   5975                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
   5976                     [IntrArgMemOnly]>;
   5977   def int_x86_avx512_mask_pmovs_db_128 :
   5978           GCCBuiltin<"__builtin_ia32_pmovsdb128_mask">,
   5979           Intrinsic<[llvm_v16i8_ty],
   5980                     [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty],
   5981                     [IntrNoMem]>;
   5982   def int_x86_avx512_mask_pmovs_db_mem_128 :
   5983           GCCBuiltin<"__builtin_ia32_pmovsdb128mem_mask">,
   5984           Intrinsic<[],
   5985                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
   5986                     [IntrArgMemOnly]>;
   5987   def int_x86_avx512_mask_pmovus_db_128 :
   5988           GCCBuiltin<"__builtin_ia32_pmovusdb128_mask">,
   5989           Intrinsic<[llvm_v16i8_ty],
   5990                     [llvm_v4i32_ty, llvm_v16i8_ty, llvm_i8_ty],
   5991                     [IntrNoMem]>;
   5992   def int_x86_avx512_mask_pmovus_db_mem_128 :
   5993           GCCBuiltin<"__builtin_ia32_pmovusdb128mem_mask">,
   5994           Intrinsic<[],
   5995                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
   5996                     [IntrArgMemOnly]>;
   5997   def int_x86_avx512_mask_pmov_db_256 :
   5998           GCCBuiltin<"__builtin_ia32_pmovdb256_mask">,
   5999           Intrinsic<[llvm_v16i8_ty],
   6000                     [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty],
   6001                     [IntrNoMem]>;
   6002   def int_x86_avx512_mask_pmov_db_mem_256 :
   6003           GCCBuiltin<"__builtin_ia32_pmovdb256mem_mask">,
   6004           Intrinsic<[],
   6005                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
   6006                     [IntrArgMemOnly]>;
   6007   def int_x86_avx512_mask_pmovs_db_256 :
   6008           GCCBuiltin<"__builtin_ia32_pmovsdb256_mask">,
   6009           Intrinsic<[llvm_v16i8_ty],
   6010                     [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty],
   6011                     [IntrNoMem]>;
   6012   def int_x86_avx512_mask_pmovs_db_mem_256 :
   6013           GCCBuiltin<"__builtin_ia32_pmovsdb256mem_mask">,
   6014           Intrinsic<[],
   6015                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
   6016                     [IntrArgMemOnly]>;
   6017   def int_x86_avx512_mask_pmovus_db_256 :
   6018           GCCBuiltin<"__builtin_ia32_pmovusdb256_mask">,
   6019           Intrinsic<[llvm_v16i8_ty],
   6020                     [llvm_v8i32_ty, llvm_v16i8_ty, llvm_i8_ty],
   6021                     [IntrNoMem]>;
   6022   def int_x86_avx512_mask_pmovus_db_mem_256 :
   6023           GCCBuiltin<"__builtin_ia32_pmovusdb256mem_mask">,
   6024           Intrinsic<[],
   6025                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
   6026                     [IntrArgMemOnly]>;
   6027   def int_x86_avx512_mask_pmov_db_512 :
   6028           GCCBuiltin<"__builtin_ia32_pmovdb512_mask">,
   6029           Intrinsic<[llvm_v16i8_ty],
   6030                     [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
   6031                     [IntrNoMem]>;
   6032   def int_x86_avx512_mask_pmov_db_mem_512 :
   6033           GCCBuiltin<"__builtin_ia32_pmovdb512mem_mask">,
   6034           Intrinsic<[],
   6035                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
   6036                     [IntrArgMemOnly]>;
   6037   def int_x86_avx512_mask_pmovs_db_512 :
   6038           GCCBuiltin<"__builtin_ia32_pmovsdb512_mask">,
   6039           Intrinsic<[llvm_v16i8_ty],
   6040                     [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
   6041                     [IntrNoMem]>;
   6042   def int_x86_avx512_mask_pmovs_db_mem_512 :
   6043           GCCBuiltin<"__builtin_ia32_pmovsdb512mem_mask">,
   6044           Intrinsic<[],
   6045                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
   6046                     [IntrArgMemOnly]>;
   6047   def int_x86_avx512_mask_pmovus_db_512 :
   6048           GCCBuiltin<"__builtin_ia32_pmovusdb512_mask">,
   6049           Intrinsic<[llvm_v16i8_ty],
   6050                     [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
   6051                     [IntrNoMem]>;
   6052   def int_x86_avx512_mask_pmovus_db_mem_512 :
   6053           GCCBuiltin<"__builtin_ia32_pmovusdb512mem_mask">,
   6054           Intrinsic<[],
   6055                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
   6056                     [IntrArgMemOnly]>;
   6057   def int_x86_avx512_mask_pmov_dw_128 :
   6058           GCCBuiltin<"__builtin_ia32_pmovdw128_mask">,
   6059           Intrinsic<[llvm_v8i16_ty],
   6060                     [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty],
   6061                     [IntrNoMem]>;
   6062   def int_x86_avx512_mask_pmov_dw_mem_128 :
   6063           GCCBuiltin<"__builtin_ia32_pmovdw128mem_mask">,
   6064           Intrinsic<[],
   6065                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
   6066                     [IntrArgMemOnly]>;
   6067   def int_x86_avx512_mask_pmovs_dw_128 :
   6068           GCCBuiltin<"__builtin_ia32_pmovsdw128_mask">,
   6069           Intrinsic<[llvm_v8i16_ty],
   6070                     [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty],
   6071                     [IntrNoMem]>;
   6072   def int_x86_avx512_mask_pmovs_dw_mem_128 :
   6073           GCCBuiltin<"__builtin_ia32_pmovsdw128mem_mask">,
   6074           Intrinsic<[],
   6075                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
   6076                     [IntrArgMemOnly]>;
   6077   def int_x86_avx512_mask_pmovus_dw_128 :
   6078           GCCBuiltin<"__builtin_ia32_pmovusdw128_mask">,
   6079           Intrinsic<[llvm_v8i16_ty],
   6080                     [llvm_v4i32_ty, llvm_v8i16_ty, llvm_i8_ty],
   6081                     [IntrNoMem]>;
   6082   def int_x86_avx512_mask_pmovus_dw_mem_128 :
   6083           GCCBuiltin<"__builtin_ia32_pmovusdw128mem_mask">,
   6084           Intrinsic<[],
   6085                     [llvm_ptr_ty, llvm_v4i32_ty, llvm_i8_ty],
   6086                     [IntrArgMemOnly]>;
   6087   def int_x86_avx512_mask_pmov_dw_256 :
   6088           GCCBuiltin<"__builtin_ia32_pmovdw256_mask">,
   6089           Intrinsic<[llvm_v8i16_ty],
   6090                     [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty],
   6091                     [IntrNoMem]>;
   6092   def int_x86_avx512_mask_pmov_dw_mem_256 :
   6093           GCCBuiltin<"__builtin_ia32_pmovdw256mem_mask">,
   6094           Intrinsic<[],
   6095                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
   6096                     [IntrArgMemOnly]>;
   6097   def int_x86_avx512_mask_pmovs_dw_256 :
   6098           GCCBuiltin<"__builtin_ia32_pmovsdw256_mask">,
   6099           Intrinsic<[llvm_v8i16_ty],
   6100                     [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty],
   6101                     [IntrNoMem]>;
   6102   def int_x86_avx512_mask_pmovs_dw_mem_256 :
   6103           GCCBuiltin<"__builtin_ia32_pmovsdw256mem_mask">,
   6104           Intrinsic<[],
   6105                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
   6106                     [IntrArgMemOnly]>;
   6107   def int_x86_avx512_mask_pmovus_dw_256 :
   6108           GCCBuiltin<"__builtin_ia32_pmovusdw256_mask">,
   6109           Intrinsic<[llvm_v8i16_ty],
   6110                     [llvm_v8i32_ty, llvm_v8i16_ty, llvm_i8_ty],
   6111                     [IntrNoMem]>;
   6112   def int_x86_avx512_mask_pmovus_dw_mem_256 :
   6113           GCCBuiltin<"__builtin_ia32_pmovusdw256mem_mask">,
   6114           Intrinsic<[],
   6115                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
   6116                     [IntrArgMemOnly]>;
   6117   def int_x86_avx512_mask_pmov_dw_512 :
   6118           GCCBuiltin<"__builtin_ia32_pmovdw512_mask">,
   6119           Intrinsic<[llvm_v16i16_ty],
   6120                     [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
   6121                     [IntrNoMem]>;
   6122   def int_x86_avx512_mask_pmov_dw_mem_512 :
   6123           GCCBuiltin<"__builtin_ia32_pmovdw512mem_mask">,
   6124           Intrinsic<[],
   6125                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
   6126                     [IntrArgMemOnly]>;
   6127   def int_x86_avx512_mask_pmovs_dw_512 :
   6128           GCCBuiltin<"__builtin_ia32_pmovsdw512_mask">,
   6129           Intrinsic<[llvm_v16i16_ty],
   6130                     [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
   6131                     [IntrNoMem]>;
   6132   def int_x86_avx512_mask_pmovs_dw_mem_512 :
   6133           GCCBuiltin<"__builtin_ia32_pmovsdw512mem_mask">,
   6134           Intrinsic<[],
   6135                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
   6136                     [IntrArgMemOnly]>;
   6137   def int_x86_avx512_mask_pmovus_dw_512 :
   6138           GCCBuiltin<"__builtin_ia32_pmovusdw512_mask">,
   6139           Intrinsic<[llvm_v16i16_ty],
   6140                     [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
   6141                     [IntrNoMem]>;
   6142   def int_x86_avx512_mask_pmovus_dw_mem_512 :
   6143           GCCBuiltin<"__builtin_ia32_pmovusdw512mem_mask">,
   6144           Intrinsic<[],
   6145                     [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
   6146                     [IntrArgMemOnly]>;
   6147   def int_x86_avx512_mask_pmov_wb_128 :
   6148           GCCBuiltin<"__builtin_ia32_pmovwb128_mask">,
   6149           Intrinsic<[llvm_v16i8_ty],
   6150                     [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty],
   6151                     [IntrNoMem]>;
   6152   def int_x86_avx512_mask_pmov_wb_mem_128 :
   6153           GCCBuiltin<"__builtin_ia32_pmovwb128mem_mask">,
   6154           Intrinsic<[],
   6155                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
   6156                     [IntrArgMemOnly]>;
   6157   def int_x86_avx512_mask_pmovs_wb_128 :
   6158           GCCBuiltin<"__builtin_ia32_pmovswb128_mask">,
   6159           Intrinsic<[llvm_v16i8_ty],
   6160                     [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty],
   6161                     [IntrNoMem]>;
   6162   def int_x86_avx512_mask_pmovs_wb_mem_128 :
   6163           GCCBuiltin<"__builtin_ia32_pmovswb128mem_mask">,
   6164           Intrinsic<[],
   6165                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
   6166                     [IntrArgMemOnly]>;
   6167   def int_x86_avx512_mask_pmovus_wb_128 :
   6168           GCCBuiltin<"__builtin_ia32_pmovuswb128_mask">,
   6169           Intrinsic<[llvm_v16i8_ty],
   6170                     [llvm_v8i16_ty, llvm_v16i8_ty, llvm_i8_ty],
   6171                     [IntrNoMem]>;
   6172   def int_x86_avx512_mask_pmovus_wb_mem_128 :
   6173           GCCBuiltin<"__builtin_ia32_pmovuswb128mem_mask">,
   6174           Intrinsic<[],
   6175                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
   6176                     [IntrArgMemOnly]>;
   6177   def int_x86_avx512_mask_pmov_wb_256 :
   6178           GCCBuiltin<"__builtin_ia32_pmovwb256_mask">,
   6179           Intrinsic<[llvm_v16i8_ty],
   6180                     [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
   6181                     [IntrNoMem]>;
   6182   def int_x86_avx512_mask_pmov_wb_mem_256 :
   6183           GCCBuiltin<"__builtin_ia32_pmovwb256mem_mask">,
   6184           Intrinsic<[],
   6185                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
   6186                     [IntrArgMemOnly]>;
   6187   def int_x86_avx512_mask_pmovs_wb_256 :
   6188           GCCBuiltin<"__builtin_ia32_pmovswb256_mask">,
   6189           Intrinsic<[llvm_v16i8_ty],
   6190                     [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
   6191                     [IntrNoMem]>;
   6192   def int_x86_avx512_mask_pmovs_wb_mem_256 :
   6193           GCCBuiltin<"__builtin_ia32_pmovswb256mem_mask">,
   6194           Intrinsic<[],
   6195                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
   6196                     [IntrArgMemOnly]>;
   6197   def int_x86_avx512_mask_pmovus_wb_256 :
   6198           GCCBuiltin<"__builtin_ia32_pmovuswb256_mask">,
   6199           Intrinsic<[llvm_v16i8_ty],
   6200                     [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
   6201                     [IntrNoMem]>;
   6202   def int_x86_avx512_mask_pmovus_wb_mem_256 :
   6203           GCCBuiltin<"__builtin_ia32_pmovuswb256mem_mask">,
   6204           Intrinsic<[],
   6205                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
   6206                     [IntrArgMemOnly]>;
   6207   def int_x86_avx512_mask_pmov_wb_512 :
   6208           GCCBuiltin<"__builtin_ia32_pmovwb512_mask">,
   6209           Intrinsic<[llvm_v32i8_ty],
   6210                     [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
   6211                     [IntrNoMem]>;
   6212   def int_x86_avx512_mask_pmov_wb_mem_512 :
   6213           GCCBuiltin<"__builtin_ia32_pmovwb512mem_mask">,
   6214           Intrinsic<[],
   6215                     [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
   6216                     [IntrArgMemOnly]>;
   6217   def int_x86_avx512_mask_pmovs_wb_512 :
   6218           GCCBuiltin<"__builtin_ia32_pmovswb512_mask">,
   6219           Intrinsic<[llvm_v32i8_ty],
   6220                     [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
   6221                     [IntrNoMem]>;
   6222   def int_x86_avx512_mask_pmovs_wb_mem_512 :
   6223           GCCBuiltin<"__builtin_ia32_pmovswb512mem_mask">,
   6224           Intrinsic<[],
   6225                     [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
   6226                     [IntrArgMemOnly]>;
   6227   def int_x86_avx512_mask_pmovus_wb_512 :
   6228           GCCBuiltin<"__builtin_ia32_pmovuswb512_mask">,
   6229           Intrinsic<[llvm_v32i8_ty],
   6230                     [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
   6231                     [IntrNoMem]>;
   6232   def int_x86_avx512_mask_pmovus_wb_mem_512 :
   6233           GCCBuiltin<"__builtin_ia32_pmovuswb512mem_mask">,
   6234           Intrinsic<[],
   6235                     [llvm_ptr_ty, llvm_v32i16_ty, llvm_i32_ty],
   6236                     [IntrArgMemOnly]>;
   6237 }
   6238 
   6239 // Bitwise ternary logic
   6240 let TargetPrefix = "x86" in {
   6241   def int_x86_avx512_mask_pternlog_d_128 :
   6242           GCCBuiltin<"__builtin_ia32_pternlogd128_mask">,
   6243           Intrinsic<[llvm_v4i32_ty],
   6244                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
   6245                      llvm_i8_ty], [IntrNoMem]>;
   6246 
   6247   def int_x86_avx512_maskz_pternlog_d_128 :
   6248           GCCBuiltin<"__builtin_ia32_pternlogd128_maskz">,
   6249           Intrinsic<[llvm_v4i32_ty],
   6250                     [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
   6251                      llvm_i8_ty], [IntrNoMem]>;
   6252 
   6253   def int_x86_avx512_mask_pternlog_d_256 :
   6254           GCCBuiltin<"__builtin_ia32_pternlogd256_mask">,
   6255           Intrinsic<[llvm_v8i32_ty],
   6256                     [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
   6257                      llvm_i8_ty], [IntrNoMem]>;
   6258 
   6259   def int_x86_avx512_maskz_pternlog_d_256 :
   6260           GCCBuiltin<"__builtin_ia32_pternlogd256_maskz">,
   6261           Intrinsic<[llvm_v8i32_ty],
   6262                     [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
   6263                      llvm_i8_ty], [IntrNoMem]>;
   6264 
   6265   def int_x86_avx512_mask_pternlog_d_512 :
   6266           GCCBuiltin<"__builtin_ia32_pternlogd512_mask">,
   6267           Intrinsic<[llvm_v16i32_ty],
   6268                     [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
   6269                      llvm_i16_ty], [IntrNoMem]>;
   6270 
   6271   def int_x86_avx512_maskz_pternlog_d_512 :
   6272           GCCBuiltin<"__builtin_ia32_pternlogd512_maskz">,
   6273           Intrinsic<[llvm_v16i32_ty],
   6274                     [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
   6275                      llvm_i16_ty], [IntrNoMem]>;
   6276 
   6277   def int_x86_avx512_mask_pternlog_q_128 :
   6278           GCCBuiltin<"__builtin_ia32_pternlogq128_mask">,
   6279           Intrinsic<[llvm_v2i64_ty],
   6280                     [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
   6281                      llvm_i8_ty], [IntrNoMem]>;
   6282 
   6283   def int_x86_avx512_maskz_pternlog_q_128 :
   6284           GCCBuiltin<"__builtin_ia32_pternlogq128_maskz">,
   6285           Intrinsic<[llvm_v2i64_ty],
   6286                     [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
   6287                      llvm_i8_ty], [IntrNoMem]>;
   6288 
   6289   def int_x86_avx512_mask_pternlog_q_256 :
   6290           GCCBuiltin<"__builtin_ia32_pternlogq256_mask">,
   6291           Intrinsic<[llvm_v4i64_ty],
   6292                     [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
   6293                      llvm_i8_ty], [IntrNoMem]>;
   6294 
   6295   def int_x86_avx512_maskz_pternlog_q_256 :
   6296           GCCBuiltin<"__builtin_ia32_pternlogq256_maskz">,
   6297           Intrinsic<[llvm_v4i64_ty],
   6298                     [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
   6299                      llvm_i8_ty], [IntrNoMem]>;
   6300 
   6301   def int_x86_avx512_mask_pternlog_q_512 :
   6302           GCCBuiltin<"__builtin_ia32_pternlogq512_mask">,
   6303           Intrinsic<[llvm_v8i64_ty],
   6304                     [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
   6305                      llvm_i8_ty], [IntrNoMem]>;
   6306 
   6307   def int_x86_avx512_maskz_pternlog_q_512 :
   6308           GCCBuiltin<"__builtin_ia32_pternlogq512_maskz">,
   6309           Intrinsic<[llvm_v8i64_ty],
   6310                     [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
   6311                      llvm_i8_ty], [IntrNoMem]>;
   6312 }
   6313 
   6314 // Misc.
   6315 let TargetPrefix = "x86" in {
   6316   def int_x86_avx512_mask_cmp_ps_512 :
   6317         GCCBuiltin<"__builtin_ia32_cmpps512_mask">,
   6318               Intrinsic<[llvm_i16_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   6319                          llvm_i32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   6320   def int_x86_avx512_mask_cmp_pd_512 :
   6321         GCCBuiltin<"__builtin_ia32_cmppd512_mask">,
   6322               Intrinsic<[llvm_i8_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   6323                          llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   6324   def int_x86_avx512_mask_cmp_ps_256 :
   6325         GCCBuiltin<"__builtin_ia32_cmpps256_mask">,
   6326               Intrinsic<[llvm_i8_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   6327                          llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
   6328   def int_x86_avx512_mask_cmp_pd_256 :
   6329         GCCBuiltin<"__builtin_ia32_cmppd256_mask">,
   6330               Intrinsic<[llvm_i8_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   6331                          llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
   6332   def int_x86_avx512_mask_cmp_ps_128 :
   6333         GCCBuiltin<"__builtin_ia32_cmpps128_mask">,
   6334             Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   6335                        llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
   6336   def int_x86_avx512_mask_cmp_pd_128 :
   6337         GCCBuiltin<"__builtin_ia32_cmppd128_mask">,
   6338             Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   6339                        llvm_i32_ty, llvm_i8_ty], [IntrNoMem]>;
   6340   def int_x86_avx512_mask_cmp_ss :
   6341         GCCBuiltin<"__builtin_ia32_cmpss_mask">,
   6342               Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   6343                          llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   6344   def int_x86_avx512_mask_cmp_sd :
   6345         GCCBuiltin<"__builtin_ia32_cmpsd_mask">,
   6346               Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   6347                          llvm_i32_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   6348 
   6349   def int_x86_avx512_movntdqa :
   6350         GCCBuiltin<"__builtin_ia32_movntdqa512">,
   6351             Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
   6352 }
   6353 
   6354 //===----------------------------------------------------------------------===//
   6355 // SHA intrinsics
   6356 let TargetPrefix = "x86" in {
   6357   def int_x86_sha1rnds4 : GCCBuiltin<"__builtin_ia32_sha1rnds4">,
   6358         Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
   6359                   [IntrNoMem]>;
   6360   def int_x86_sha1nexte : GCCBuiltin<"__builtin_ia32_sha1nexte">,
   6361       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   6362   def int_x86_sha1msg1 : GCCBuiltin<"__builtin_ia32_sha1msg1">,
   6363       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   6364   def int_x86_sha1msg2 : GCCBuiltin<"__builtin_ia32_sha1msg2">,
   6365       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   6366   def int_x86_sha256rnds2 : GCCBuiltin<"__builtin_ia32_sha256rnds2">,
   6367       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
   6368                 [IntrNoMem]>;
   6369   def int_x86_sha256msg1 : GCCBuiltin<"__builtin_ia32_sha256msg1">,
   6370       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   6371   def int_x86_sha256msg2 : GCCBuiltin<"__builtin_ia32_sha256msg2">,
   6372       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   6373 }
   6374 
   6375 //===----------------------------------------------------------------------===//
   6376 // Thread synchronization ops with timer.
   6377 let TargetPrefix = "x86" in {
   6378   def int_x86_monitorx
   6379       : GCCBuiltin<"__builtin_ia32_monitorx">,
   6380         Intrinsic<[], [ llvm_ptr_ty, llvm_i32_ty, llvm_i32_ty ], []>;
   6381   def int_x86_mwaitx
   6382       : GCCBuiltin<"__builtin_ia32_mwaitx">,
   6383         Intrinsic<[], [ llvm_i32_ty, llvm_i32_ty, llvm_i32_ty ], []>;
   6384 }
   6385 
   6386 //===----------------------------------------------------------------------===//
   6387 // Cache-line zero
   6388 let TargetPrefix = "x86" in {
   6389   def int_x86_clzero : GCCBuiltin<"__builtin_ia32_clzero">,
   6390       Intrinsic<[], [llvm_ptr_ty], []>;
   6391 }
   6392