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 // Read Time Stamp Counter.
     22 let TargetPrefix = "x86" in {
     23   def int_x86_rdtsc : GCCBuiltin<"__builtin_ia32_rdtsc">,
     24               Intrinsic<[llvm_i64_ty], [], []>;
     25   def int_x86_rdtscp : GCCBuiltin<"__builtin_ia32_rdtscp">,
     26               Intrinsic<[llvm_i64_ty], [llvm_ptr_ty], [IntrReadWriteArgMem]>;
     27 }
     28 
     29 // Read Performance-Monitoring Counter.
     30 let TargetPrefix = "x86" in {
     31   def int_x86_rdpmc : GCCBuiltin<"__builtin_ia32_rdpmc">,
     32               Intrinsic<[llvm_i64_ty], [llvm_i32_ty], []>;
     33 }
     34 
     35 //===----------------------------------------------------------------------===//
     36 // 3DNow!
     37 
     38 let TargetPrefix = "x86" in {
     39   def int_x86_3dnow_pavgusb : GCCBuiltin<"__builtin_ia32_pavgusb">,
     40               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     41                         [IntrNoMem]>;
     42   def int_x86_3dnow_pf2id : GCCBuiltin<"__builtin_ia32_pf2id">,
     43               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
     44   def int_x86_3dnow_pfacc : GCCBuiltin<"__builtin_ia32_pfacc">,
     45               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     46                         [IntrNoMem]>;
     47   def int_x86_3dnow_pfadd : GCCBuiltin<"__builtin_ia32_pfadd">,
     48               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     49                         [IntrNoMem]>;
     50   def int_x86_3dnow_pfcmpeq : GCCBuiltin<"__builtin_ia32_pfcmpeq">,
     51               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     52                         [IntrNoMem]>;
     53   def int_x86_3dnow_pfcmpge : GCCBuiltin<"__builtin_ia32_pfcmpge">,
     54               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     55                         [IntrNoMem]>;
     56   def int_x86_3dnow_pfcmpgt : GCCBuiltin<"__builtin_ia32_pfcmpgt">,
     57               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     58                         [IntrNoMem]>;
     59   def int_x86_3dnow_pfmax : GCCBuiltin<"__builtin_ia32_pfmax">,
     60               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     61                         [IntrNoMem]>;
     62   def int_x86_3dnow_pfmin : GCCBuiltin<"__builtin_ia32_pfmin">,
     63               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     64                         [IntrNoMem]>;
     65   def int_x86_3dnow_pfmul : GCCBuiltin<"__builtin_ia32_pfmul">,
     66               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     67                         [IntrNoMem]>;
     68   def int_x86_3dnow_pfrcp : GCCBuiltin<"__builtin_ia32_pfrcp">,
     69               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
     70   def int_x86_3dnow_pfrcpit1 : GCCBuiltin<"__builtin_ia32_pfrcpit1">,
     71               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     72                         [IntrNoMem]>;
     73   def int_x86_3dnow_pfrcpit2 : GCCBuiltin<"__builtin_ia32_pfrcpit2">,
     74               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     75                         [IntrNoMem]>;
     76   def int_x86_3dnow_pfrsqrt : GCCBuiltin<"__builtin_ia32_pfrsqrt">,
     77               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
     78   def int_x86_3dnow_pfrsqit1 : GCCBuiltin<"__builtin_ia32_pfrsqit1">,
     79               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     80                         [IntrNoMem]>;
     81   def int_x86_3dnow_pfsub : GCCBuiltin<"__builtin_ia32_pfsub">,
     82               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     83                         [IntrNoMem]>;
     84   def int_x86_3dnow_pfsubr : GCCBuiltin<"__builtin_ia32_pfsubr">,
     85               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     86                         [IntrNoMem]>;
     87   def int_x86_3dnow_pi2fd : GCCBuiltin<"__builtin_ia32_pi2fd">,
     88               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
     89   def int_x86_3dnow_pmulhrw : GCCBuiltin<"__builtin_ia32_pmulhrw">,
     90               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
     91                         [IntrNoMem]>;
     92 }
     93 
     94 //===----------------------------------------------------------------------===//
     95 // 3DNow! extensions
     96 
     97 let TargetPrefix = "x86" in {
     98   def int_x86_3dnowa_pf2iw : GCCBuiltin<"__builtin_ia32_pf2iw">,
     99               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    100   def int_x86_3dnowa_pfnacc : GCCBuiltin<"__builtin_ia32_pfnacc">,
    101               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    102                         [IntrNoMem]>;
    103   def int_x86_3dnowa_pfpnacc : GCCBuiltin<"__builtin_ia32_pfpnacc">,
    104               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
    105                         [IntrNoMem]>;
    106   def int_x86_3dnowa_pi2fw : GCCBuiltin<"__builtin_ia32_pi2fw">,
    107               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    108   def int_x86_3dnowa_pswapd :
    109               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    110 }
    111 
    112 //===----------------------------------------------------------------------===//
    113 // SSE1
    114 
    115 // Arithmetic ops
    116 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    117   def int_x86_sse_add_ss : GCCBuiltin<"__builtin_ia32_addss">,
    118               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    119                          llvm_v4f32_ty], [IntrNoMem]>;
    120   def int_x86_sse_sub_ss : GCCBuiltin<"__builtin_ia32_subss">,
    121               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    122                          llvm_v4f32_ty], [IntrNoMem]>;
    123   def int_x86_sse_mul_ss : GCCBuiltin<"__builtin_ia32_mulss">,
    124               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    125                          llvm_v4f32_ty], [IntrNoMem]>;
    126   def int_x86_sse_div_ss : GCCBuiltin<"__builtin_ia32_divss">,
    127               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    128                          llvm_v4f32_ty], [IntrNoMem]>;
    129   def int_x86_sse_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss">,
    130               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    131                         [IntrNoMem]>;
    132   def int_x86_sse_sqrt_ps : GCCBuiltin<"__builtin_ia32_sqrtps">,
    133               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    134                         [IntrNoMem]>;
    135   def int_x86_sse_rcp_ss : GCCBuiltin<"__builtin_ia32_rcpss">,
    136               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    137                         [IntrNoMem]>;
    138   def int_x86_sse_rcp_ps : GCCBuiltin<"__builtin_ia32_rcpps">,
    139               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    140                         [IntrNoMem]>;
    141   def int_x86_sse_rsqrt_ss : GCCBuiltin<"__builtin_ia32_rsqrtss">,
    142               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    143                         [IntrNoMem]>;
    144   def int_x86_sse_rsqrt_ps : GCCBuiltin<"__builtin_ia32_rsqrtps">,
    145               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
    146                         [IntrNoMem]>;
    147   def int_x86_sse_min_ss : GCCBuiltin<"__builtin_ia32_minss">,
    148               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    149                          llvm_v4f32_ty], [IntrNoMem]>;
    150   def int_x86_sse_min_ps : GCCBuiltin<"__builtin_ia32_minps">,
    151               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    152                          llvm_v4f32_ty], [IntrNoMem]>;
    153   def int_x86_sse_max_ss : GCCBuiltin<"__builtin_ia32_maxss">,
    154               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    155                          llvm_v4f32_ty], [IntrNoMem]>;
    156   def int_x86_sse_max_ps : GCCBuiltin<"__builtin_ia32_maxps">,
    157               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    158                          llvm_v4f32_ty], [IntrNoMem]>;
    159 }
    160 
    161 // Comparison ops
    162 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    163   def int_x86_sse_cmp_ss : GCCBuiltin<"__builtin_ia32_cmpss">,
    164               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    165                          llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
    166   def int_x86_sse_cmp_ps : GCCBuiltin<"__builtin_ia32_cmpps">,
    167               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    168                          llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
    169   def int_x86_sse_comieq_ss : GCCBuiltin<"__builtin_ia32_comieq">,
    170               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    171                          llvm_v4f32_ty], [IntrNoMem]>;
    172   def int_x86_sse_comilt_ss : GCCBuiltin<"__builtin_ia32_comilt">,
    173               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    174                          llvm_v4f32_ty], [IntrNoMem]>;
    175   def int_x86_sse_comile_ss : GCCBuiltin<"__builtin_ia32_comile">,
    176               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    177                          llvm_v4f32_ty], [IntrNoMem]>;
    178   def int_x86_sse_comigt_ss : GCCBuiltin<"__builtin_ia32_comigt">,
    179               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    180                          llvm_v4f32_ty], [IntrNoMem]>;
    181   def int_x86_sse_comige_ss : GCCBuiltin<"__builtin_ia32_comige">,
    182               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    183                          llvm_v4f32_ty], [IntrNoMem]>;
    184   def int_x86_sse_comineq_ss : GCCBuiltin<"__builtin_ia32_comineq">,
    185               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    186                          llvm_v4f32_ty], [IntrNoMem]>;
    187   def int_x86_sse_ucomieq_ss : GCCBuiltin<"__builtin_ia32_ucomieq">,
    188               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    189                          llvm_v4f32_ty], [IntrNoMem]>;
    190   def int_x86_sse_ucomilt_ss : GCCBuiltin<"__builtin_ia32_ucomilt">,
    191               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    192                          llvm_v4f32_ty], [IntrNoMem]>;
    193   def int_x86_sse_ucomile_ss : GCCBuiltin<"__builtin_ia32_ucomile">,
    194               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    195                          llvm_v4f32_ty], [IntrNoMem]>;
    196   def int_x86_sse_ucomigt_ss : GCCBuiltin<"__builtin_ia32_ucomigt">,
    197               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    198                          llvm_v4f32_ty], [IntrNoMem]>;
    199   def int_x86_sse_ucomige_ss : GCCBuiltin<"__builtin_ia32_ucomige">,
    200               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    201                          llvm_v4f32_ty], [IntrNoMem]>;
    202   def int_x86_sse_ucomineq_ss : GCCBuiltin<"__builtin_ia32_ucomineq">,
    203               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
    204                          llvm_v4f32_ty], [IntrNoMem]>;
    205 }
    206 
    207 
    208 // Conversion ops
    209 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    210   def int_x86_sse_cvtss2si : GCCBuiltin<"__builtin_ia32_cvtss2si">,
    211               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    212   def int_x86_sse_cvtss2si64 : GCCBuiltin<"__builtin_ia32_cvtss2si64">,
    213               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    214   def int_x86_sse_cvttss2si : GCCBuiltin<"__builtin_ia32_cvttss2si">,
    215               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    216   def int_x86_sse_cvttss2si64 : GCCBuiltin<"__builtin_ia32_cvttss2si64">,
    217               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    218   def int_x86_sse_cvtsi2ss : GCCBuiltin<"__builtin_ia32_cvtsi2ss">,
    219               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    220                          llvm_i32_ty], [IntrNoMem]>;
    221   def int_x86_sse_cvtsi642ss : GCCBuiltin<"__builtin_ia32_cvtsi642ss">,
    222               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    223                          llvm_i64_ty], [IntrNoMem]>;
    224 
    225   def int_x86_sse_cvtps2pi : GCCBuiltin<"__builtin_ia32_cvtps2pi">,
    226               Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    227   def int_x86_sse_cvttps2pi: GCCBuiltin<"__builtin_ia32_cvttps2pi">,
    228               Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    229   def int_x86_sse_cvtpi2ps : GCCBuiltin<"__builtin_ia32_cvtpi2ps">,
    230               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    231                          llvm_x86mmx_ty], [IntrNoMem]>;
    232 }
    233 
    234 // SIMD store ops
    235 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    236   def int_x86_sse_storeu_ps : GCCBuiltin<"__builtin_ia32_storeups">,
    237               Intrinsic<[], [llvm_ptr_ty,
    238                          llvm_v4f32_ty], [IntrReadWriteArgMem]>;
    239 }
    240 
    241 // Cacheability support ops
    242 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    243   def int_x86_sse_sfence : GCCBuiltin<"__builtin_ia32_sfence">,
    244               Intrinsic<[], [], []>;
    245 }
    246 
    247 // Control register.
    248 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    249   def int_x86_sse_stmxcsr :
    250               Intrinsic<[], [llvm_ptr_ty], []>;
    251   def int_x86_sse_ldmxcsr :
    252               Intrinsic<[], [llvm_ptr_ty], []>;
    253 }
    254 
    255 // Misc.
    256 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    257   def int_x86_sse_movmsk_ps : GCCBuiltin<"__builtin_ia32_movmskps">,
    258               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    259 }
    260 
    261 //===----------------------------------------------------------------------===//
    262 // SSE2
    263 
    264 // FP arithmetic ops
    265 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    266   def int_x86_sse2_add_sd : GCCBuiltin<"__builtin_ia32_addsd">,
    267               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    268                          llvm_v2f64_ty], [IntrNoMem]>;
    269   def int_x86_sse2_sub_sd : GCCBuiltin<"__builtin_ia32_subsd">,
    270               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    271                          llvm_v2f64_ty], [IntrNoMem]>;
    272   def int_x86_sse2_mul_sd : GCCBuiltin<"__builtin_ia32_mulsd">,
    273               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    274                          llvm_v2f64_ty], [IntrNoMem]>;
    275   def int_x86_sse2_div_sd : GCCBuiltin<"__builtin_ia32_divsd">,
    276               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    277                          llvm_v2f64_ty], [IntrNoMem]>;
    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 : GCCBuiltin<"__builtin_ia32_cmppd">,
    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_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub128">,
    389               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    390                          llvm_v16i8_ty], [IntrNoMem, Commutative]>;
    391   def int_x86_sse2_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw128">,
    392               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    393                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    394   def int_x86_sse2_pminu_b : GCCBuiltin<"__builtin_ia32_pminub128">,
    395               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    396                          llvm_v16i8_ty], [IntrNoMem, Commutative]>;
    397   def int_x86_sse2_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw128">,
    398               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    399                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    400   def int_x86_sse2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw128">,
    401               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty,
    402                          llvm_v16i8_ty], [IntrNoMem, Commutative]>;
    403 }
    404 
    405 // Integer shift ops.
    406 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    407   def int_x86_sse2_psll_w : GCCBuiltin<"__builtin_ia32_psllw128">,
    408               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    409                          llvm_v8i16_ty], [IntrNoMem]>;
    410   def int_x86_sse2_psll_d : GCCBuiltin<"__builtin_ia32_pslld128">,
    411               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    412                          llvm_v4i32_ty], [IntrNoMem]>;
    413   def int_x86_sse2_psll_q : GCCBuiltin<"__builtin_ia32_psllq128">,
    414               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    415                          llvm_v2i64_ty], [IntrNoMem]>;
    416   def int_x86_sse2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw128">,
    417               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    418                          llvm_v8i16_ty], [IntrNoMem]>;
    419   def int_x86_sse2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld128">,
    420               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    421                          llvm_v4i32_ty], [IntrNoMem]>;
    422   def int_x86_sse2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq128">,
    423               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    424                          llvm_v2i64_ty], [IntrNoMem]>;
    425   def int_x86_sse2_psra_w : GCCBuiltin<"__builtin_ia32_psraw128">,
    426               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    427                          llvm_v8i16_ty], [IntrNoMem]>;
    428   def int_x86_sse2_psra_d : GCCBuiltin<"__builtin_ia32_psrad128">,
    429               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    430                          llvm_v4i32_ty], [IntrNoMem]>;
    431 
    432   def int_x86_sse2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi128">,
    433               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    434                          llvm_i32_ty], [IntrNoMem]>;
    435   def int_x86_sse2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi128">,
    436               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    437                          llvm_i32_ty], [IntrNoMem]>;
    438   def int_x86_sse2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi128">,
    439               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    440                          llvm_i32_ty], [IntrNoMem]>;
    441   def int_x86_sse2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi128">,
    442               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    443                          llvm_i32_ty], [IntrNoMem]>;
    444   def int_x86_sse2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi128">,
    445               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    446                          llvm_i32_ty], [IntrNoMem]>;
    447   def int_x86_sse2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi128">,
    448               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    449                          llvm_i32_ty], [IntrNoMem]>;
    450   def int_x86_sse2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi128">,
    451               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    452                          llvm_i32_ty], [IntrNoMem]>;
    453   def int_x86_sse2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi128">,
    454               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    455                          llvm_i32_ty], [IntrNoMem]>;
    456 
    457   def int_x86_sse2_psll_dq : GCCBuiltin<"__builtin_ia32_pslldqi128">,
    458               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    459                          llvm_i32_ty], [IntrNoMem]>;
    460   def int_x86_sse2_psrl_dq : GCCBuiltin<"__builtin_ia32_psrldqi128">,
    461               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    462                          llvm_i32_ty], [IntrNoMem]>;
    463   def int_x86_sse2_psll_dq_bs : GCCBuiltin<"__builtin_ia32_pslldqi128_byteshift">,
    464               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    465                          llvm_i32_ty], [IntrNoMem]>;
    466   def int_x86_sse2_psrl_dq_bs : GCCBuiltin<"__builtin_ia32_psrldqi128_byteshift">,
    467               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
    468                          llvm_i32_ty], [IntrNoMem]>;
    469 }
    470 
    471 // Conversion ops
    472 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    473   def int_x86_sse2_cvtdq2pd : GCCBuiltin<"__builtin_ia32_cvtdq2pd">,
    474               Intrinsic<[llvm_v2f64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
    475   def int_x86_sse2_cvtdq2ps : GCCBuiltin<"__builtin_ia32_cvtdq2ps">,
    476               Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
    477   def int_x86_sse2_cvtpd2dq : GCCBuiltin<"__builtin_ia32_cvtpd2dq">,
    478               Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    479   def int_x86_sse2_cvttpd2dq : GCCBuiltin<"__builtin_ia32_cvttpd2dq">,
    480               Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    481   def int_x86_sse2_cvtpd2ps : GCCBuiltin<"__builtin_ia32_cvtpd2ps">,
    482               Intrinsic<[llvm_v4f32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    483   def int_x86_sse2_cvtps2dq : GCCBuiltin<"__builtin_ia32_cvtps2dq">,
    484               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    485   def int_x86_sse2_cvttps2dq : GCCBuiltin<"__builtin_ia32_cvttps2dq">,
    486               Intrinsic<[llvm_v4i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    487   def int_x86_sse2_cvtps2pd : GCCBuiltin<"__builtin_ia32_cvtps2pd">,
    488               Intrinsic<[llvm_v2f64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
    489   def int_x86_sse2_cvtsd2si : GCCBuiltin<"__builtin_ia32_cvtsd2si">,
    490               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    491   def int_x86_sse2_cvtsd2si64 : GCCBuiltin<"__builtin_ia32_cvtsd2si64">,
    492               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    493   def int_x86_sse2_cvttsd2si : GCCBuiltin<"__builtin_ia32_cvttsd2si">,
    494               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    495   def int_x86_sse2_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_cvttsd2si64">,
    496               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    497   def int_x86_sse2_cvtsi2sd : GCCBuiltin<"__builtin_ia32_cvtsi2sd">,
    498               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    499                          llvm_i32_ty], [IntrNoMem]>;
    500   def int_x86_sse2_cvtsi642sd : GCCBuiltin<"__builtin_ia32_cvtsi642sd">,
    501               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    502                          llvm_i64_ty], [IntrNoMem]>;
    503   def int_x86_sse2_cvtsd2ss : GCCBuiltin<"__builtin_ia32_cvtsd2ss">,
    504               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    505                          llvm_v2f64_ty], [IntrNoMem]>;
    506   def int_x86_sse2_cvtss2sd : GCCBuiltin<"__builtin_ia32_cvtss2sd">,
    507               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    508                          llvm_v4f32_ty], [IntrNoMem]>;
    509   def int_x86_sse_cvtpd2pi : GCCBuiltin<"__builtin_ia32_cvtpd2pi">,
    510               Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    511   def int_x86_sse_cvttpd2pi: GCCBuiltin<"__builtin_ia32_cvttpd2pi">,
    512               Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    513   def int_x86_sse_cvtpi2pd : GCCBuiltin<"__builtin_ia32_cvtpi2pd">,
    514               Intrinsic<[llvm_v2f64_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    515 }
    516 
    517 // SIMD store ops
    518 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    519   def int_x86_sse2_storeu_pd : GCCBuiltin<"__builtin_ia32_storeupd">,
    520               Intrinsic<[], [llvm_ptr_ty,
    521                          llvm_v2f64_ty], [IntrReadWriteArgMem]>;
    522   def int_x86_sse2_storeu_dq : GCCBuiltin<"__builtin_ia32_storedqu">,
    523               Intrinsic<[], [llvm_ptr_ty,
    524                          llvm_v16i8_ty], [IntrReadWriteArgMem]>;
    525   def int_x86_sse2_storel_dq : GCCBuiltin<"__builtin_ia32_storelv4si">,
    526               Intrinsic<[], [llvm_ptr_ty,
    527                          llvm_v4i32_ty], [IntrReadWriteArgMem]>;
    528 }
    529 
    530 // Misc.
    531 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    532   def int_x86_sse2_packsswb_128 : GCCBuiltin<"__builtin_ia32_packsswb128">,
    533               Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
    534                          llvm_v8i16_ty], [IntrNoMem]>;
    535   def int_x86_sse2_packssdw_128 : GCCBuiltin<"__builtin_ia32_packssdw128">,
    536               Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty,
    537                          llvm_v4i32_ty], [IntrNoMem]>;
    538   def int_x86_sse2_packuswb_128 : GCCBuiltin<"__builtin_ia32_packuswb128">,
    539               Intrinsic<[llvm_v16i8_ty], [llvm_v8i16_ty,
    540                          llvm_v8i16_ty], [IntrNoMem]>;
    541   def int_x86_sse2_movmsk_pd : GCCBuiltin<"__builtin_ia32_movmskpd">,
    542               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
    543   def int_x86_sse2_pmovmskb_128 : GCCBuiltin<"__builtin_ia32_pmovmskb128">,
    544               Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
    545   def int_x86_sse2_maskmov_dqu : GCCBuiltin<"__builtin_ia32_maskmovdqu">,
    546               Intrinsic<[], [llvm_v16i8_ty,
    547                          llvm_v16i8_ty, llvm_ptr_ty], []>;
    548   def int_x86_sse2_clflush : GCCBuiltin<"__builtin_ia32_clflush">,
    549               Intrinsic<[], [llvm_ptr_ty], []>;
    550   def int_x86_sse2_lfence : GCCBuiltin<"__builtin_ia32_lfence">,
    551               Intrinsic<[], [], []>;
    552   def int_x86_sse2_mfence : GCCBuiltin<"__builtin_ia32_mfence">,
    553               Intrinsic<[], [], []>;
    554   def int_x86_sse2_pause : GCCBuiltin<"__builtin_ia32_pause">,
    555               Intrinsic<[], [], []>;
    556 }
    557 
    558 //===----------------------------------------------------------------------===//
    559 // SSE3
    560 
    561 // Addition / subtraction ops.
    562 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    563   def int_x86_sse3_addsub_ps : GCCBuiltin<"__builtin_ia32_addsubps">,
    564               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    565                          llvm_v4f32_ty], [IntrNoMem]>;
    566   def int_x86_sse3_addsub_pd : GCCBuiltin<"__builtin_ia32_addsubpd">,
    567               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    568                          llvm_v2f64_ty], [IntrNoMem]>;
    569 }
    570 
    571 // Horizontal ops.
    572 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    573   def int_x86_sse3_hadd_ps : GCCBuiltin<"__builtin_ia32_haddps">,
    574               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    575                          llvm_v4f32_ty], [IntrNoMem]>;
    576   def int_x86_sse3_hadd_pd : GCCBuiltin<"__builtin_ia32_haddpd">,
    577               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    578                          llvm_v2f64_ty], [IntrNoMem]>;
    579   def int_x86_sse3_hsub_ps : GCCBuiltin<"__builtin_ia32_hsubps">,
    580               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    581                          llvm_v4f32_ty], [IntrNoMem]>;
    582   def int_x86_sse3_hsub_pd : GCCBuiltin<"__builtin_ia32_hsubpd">,
    583               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    584                          llvm_v2f64_ty], [IntrNoMem]>;
    585 }
    586 
    587 // Specialized unaligned load.
    588 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    589   def int_x86_sse3_ldu_dq : GCCBuiltin<"__builtin_ia32_lddqu">,
    590               Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
    591 }
    592 
    593 // Thread synchronization ops.
    594 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    595   def int_x86_sse3_monitor : GCCBuiltin<"__builtin_ia32_monitor">,
    596               Intrinsic<[], [llvm_ptr_ty,
    597                          llvm_i32_ty, llvm_i32_ty], []>;
    598   def int_x86_sse3_mwait : GCCBuiltin<"__builtin_ia32_mwait">,
    599               Intrinsic<[], [llvm_i32_ty,
    600                          llvm_i32_ty], []>;
    601 }
    602 
    603 //===----------------------------------------------------------------------===//
    604 // SSSE3
    605 
    606 // Horizontal arithmetic ops
    607 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    608   def int_x86_ssse3_phadd_w         : GCCBuiltin<"__builtin_ia32_phaddw">,
    609               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    610                          llvm_x86mmx_ty], [IntrNoMem]>;
    611   def int_x86_ssse3_phadd_w_128     : GCCBuiltin<"__builtin_ia32_phaddw128">,
    612               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    613                          llvm_v8i16_ty], [IntrNoMem]>;
    614 
    615   def int_x86_ssse3_phadd_d         : GCCBuiltin<"__builtin_ia32_phaddd">,
    616               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    617                          llvm_x86mmx_ty], [IntrNoMem]>;
    618   def int_x86_ssse3_phadd_d_128     : GCCBuiltin<"__builtin_ia32_phaddd128">,
    619               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    620                          llvm_v4i32_ty], [IntrNoMem]>;
    621 
    622   def int_x86_ssse3_phadd_sw        : GCCBuiltin<"__builtin_ia32_phaddsw">,
    623               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    624                          llvm_x86mmx_ty], [IntrNoMem]>;
    625   def int_x86_ssse3_phadd_sw_128    : GCCBuiltin<"__builtin_ia32_phaddsw128">,
    626               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    627                          llvm_v8i16_ty], [IntrNoMem]>;
    628 
    629   def int_x86_ssse3_phsub_w         : GCCBuiltin<"__builtin_ia32_phsubw">,
    630               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    631                          llvm_x86mmx_ty], [IntrNoMem]>;
    632   def int_x86_ssse3_phsub_w_128     : GCCBuiltin<"__builtin_ia32_phsubw128">,
    633               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    634                          llvm_v8i16_ty], [IntrNoMem]>;
    635 
    636   def int_x86_ssse3_phsub_d         : GCCBuiltin<"__builtin_ia32_phsubd">,
    637               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    638                          llvm_x86mmx_ty], [IntrNoMem]>;
    639   def int_x86_ssse3_phsub_d_128     : GCCBuiltin<"__builtin_ia32_phsubd128">,
    640               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    641                          llvm_v4i32_ty], [IntrNoMem]>;
    642 
    643   def int_x86_ssse3_phsub_sw        : GCCBuiltin<"__builtin_ia32_phsubsw">,
    644               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    645                          llvm_x86mmx_ty], [IntrNoMem]>;
    646   def int_x86_ssse3_phsub_sw_128    : GCCBuiltin<"__builtin_ia32_phsubsw128">,
    647               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    648                          llvm_v8i16_ty], [IntrNoMem]>;
    649 
    650   def int_x86_ssse3_pmadd_ub_sw     : GCCBuiltin<"__builtin_ia32_pmaddubsw">,
    651               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    652                          llvm_x86mmx_ty], [IntrNoMem]>;
    653   def int_x86_ssse3_pmadd_ub_sw_128 : GCCBuiltin<"__builtin_ia32_pmaddubsw128">,
    654               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty,
    655                          llvm_v16i8_ty], [IntrNoMem]>;
    656 }
    657 
    658 // Packed multiply high with round and scale
    659 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    660   def int_x86_ssse3_pmul_hr_sw      : GCCBuiltin<"__builtin_ia32_pmulhrsw">,
    661               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    662                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
    663   def int_x86_ssse3_pmul_hr_sw_128  : GCCBuiltin<"__builtin_ia32_pmulhrsw128">,
    664               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    665                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
    666 }
    667 
    668 // Shuffle ops
    669 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    670   def int_x86_ssse3_pshuf_b         : GCCBuiltin<"__builtin_ia32_pshufb">,
    671               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    672                          llvm_x86mmx_ty], [IntrNoMem]>;
    673   def int_x86_ssse3_pshuf_b_128     : GCCBuiltin<"__builtin_ia32_pshufb128">,
    674               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    675                          llvm_v16i8_ty], [IntrNoMem]>;
    676   def int_x86_sse2_pshuf_d          : GCCBuiltin<"__builtin_ia32_pshufd">,
    677               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
    678                          [IntrNoMem]>;
    679   def int_x86_sse2_pshufl_w         : GCCBuiltin<"__builtin_ia32_pshuflw">,
    680               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
    681                          [IntrNoMem]>;
    682   def int_x86_sse2_pshufh_w         : GCCBuiltin<"__builtin_ia32_pshufhw">,
    683               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
    684                          [IntrNoMem]>;
    685   def int_x86_sse_pshuf_w           : GCCBuiltin<"__builtin_ia32_pshufw">,
    686               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_i8_ty],
    687                          [IntrNoMem]>;
    688 }
    689 
    690 // Sign ops
    691 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    692   def int_x86_ssse3_psign_b         : GCCBuiltin<"__builtin_ia32_psignb">,
    693               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    694                          llvm_x86mmx_ty], [IntrNoMem]>;
    695   def int_x86_ssse3_psign_b_128     : GCCBuiltin<"__builtin_ia32_psignb128">,
    696               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
    697                          llvm_v16i8_ty], [IntrNoMem]>;
    698 
    699   def int_x86_ssse3_psign_w         : GCCBuiltin<"__builtin_ia32_psignw">,
    700               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    701                          llvm_x86mmx_ty], [IntrNoMem]>;
    702   def int_x86_ssse3_psign_w_128     : GCCBuiltin<"__builtin_ia32_psignw128">,
    703               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
    704                          llvm_v8i16_ty], [IntrNoMem]>;
    705 
    706   def int_x86_ssse3_psign_d         : GCCBuiltin<"__builtin_ia32_psignd">,
    707               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
    708                          llvm_x86mmx_ty], [IntrNoMem]>;
    709   def int_x86_ssse3_psign_d_128     : GCCBuiltin<"__builtin_ia32_psignd128">,
    710               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
    711                          llvm_v4i32_ty], [IntrNoMem]>;
    712 }
    713 
    714 // Absolute value ops
    715 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    716   def int_x86_ssse3_pabs_b     : GCCBuiltin<"__builtin_ia32_pabsb">,
    717               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    718   def int_x86_ssse3_pabs_b_128 : GCCBuiltin<"__builtin_ia32_pabsb128">,
    719               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
    720 
    721   def int_x86_ssse3_pabs_w     : GCCBuiltin<"__builtin_ia32_pabsw">,
    722               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    723   def int_x86_ssse3_pabs_w_128 : GCCBuiltin<"__builtin_ia32_pabsw128">,
    724               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
    725 
    726   def int_x86_ssse3_pabs_d     : GCCBuiltin<"__builtin_ia32_pabsd">,
    727               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
    728   def int_x86_ssse3_pabs_d_128 : GCCBuiltin<"__builtin_ia32_pabsd128">,
    729               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
    730 }
    731 
    732 //===----------------------------------------------------------------------===//
    733 // SSE4.1
    734 
    735 // FP rounding ops
    736 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    737   def int_x86_sse41_round_ss        : GCCBuiltin<"__builtin_ia32_roundss">,
    738               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
    739                          llvm_i32_ty], [IntrNoMem]>;
    740   def int_x86_sse41_round_ps        : GCCBuiltin<"__builtin_ia32_roundps">,
    741               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
    742                          llvm_i32_ty], [IntrNoMem]>;
    743   def int_x86_sse41_round_sd        : GCCBuiltin<"__builtin_ia32_roundsd">,
    744               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
    745                          llvm_i32_ty], [IntrNoMem]>;
    746   def int_x86_sse41_round_pd        : GCCBuiltin<"__builtin_ia32_roundpd">,
    747               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
    748                          llvm_i32_ty], [IntrNoMem]>;
    749 }
    750 
    751 // Vector sign and zero extend
    752 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    753   def int_x86_sse41_pmovsxbd        : GCCBuiltin<"__builtin_ia32_pmovsxbd128">,
    754               Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty],
    755                         [IntrNoMem]>;
    756   def int_x86_sse41_pmovsxbq        : GCCBuiltin<"__builtin_ia32_pmovsxbq128">,
    757               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty],
    758                         [IntrNoMem]>;
    759   def int_x86_sse41_pmovsxbw        : GCCBuiltin<"__builtin_ia32_pmovsxbw128">,
    760               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty],
    761                         [IntrNoMem]>;
    762   def int_x86_sse41_pmovsxdq        : GCCBuiltin<"__builtin_ia32_pmovsxdq128">,
    763               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty],
    764                         [IntrNoMem]>;
    765   def int_x86_sse41_pmovsxwd        : GCCBuiltin<"__builtin_ia32_pmovsxwd128">,
    766               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty],
    767                         [IntrNoMem]>;
    768   def int_x86_sse41_pmovsxwq        : GCCBuiltin<"__builtin_ia32_pmovsxwq128">,
    769               Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty],
    770                         [IntrNoMem]>;
    771   def int_x86_sse41_pmovzxbd        : GCCBuiltin<"__builtin_ia32_pmovzxbd128">,
    772               Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty],
    773                         [IntrNoMem]>;
    774   def int_x86_sse41_pmovzxbq        : GCCBuiltin<"__builtin_ia32_pmovzxbq128">,
    775               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty],
    776                         [IntrNoMem]>;
    777   def int_x86_sse41_pmovzxbw        : GCCBuiltin<"__builtin_ia32_pmovzxbw128">,
    778               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty],
    779                         [IntrNoMem]>;
    780   def int_x86_sse41_pmovzxdq        : GCCBuiltin<"__builtin_ia32_pmovzxdq128">,
    781               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty],
    782                         [IntrNoMem]>;
    783   def int_x86_sse41_pmovzxwd        : GCCBuiltin<"__builtin_ia32_pmovzxwd128">,
    784               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty],
    785                         [IntrNoMem]>;
    786   def int_x86_sse41_pmovzxwq        : GCCBuiltin<"__builtin_ia32_pmovzxwq128">,
    787               Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty],
    788                         [IntrNoMem]>;
    789 }
    790 
    791 // Vector min element
    792 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    793   def int_x86_sse41_phminposuw     : GCCBuiltin<"__builtin_ia32_phminposuw128">,
    794               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty],
    795                         [IntrNoMem]>;
    796 }
    797 
    798 // Vector compare, min, max
    799 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    800   def int_x86_sse41_pmaxsb          : GCCBuiltin<"__builtin_ia32_pmaxsb128">,
    801               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    802                         [IntrNoMem, Commutative]>;
    803   def int_x86_sse41_pmaxsd          : GCCBuiltin<"__builtin_ia32_pmaxsd128">,
    804               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    805                         [IntrNoMem, Commutative]>;
    806   def int_x86_sse41_pmaxud          : GCCBuiltin<"__builtin_ia32_pmaxud128">,
    807               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    808                         [IntrNoMem, Commutative]>;
    809   def int_x86_sse41_pmaxuw          : GCCBuiltin<"__builtin_ia32_pmaxuw128">,
    810               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    811                         [IntrNoMem, Commutative]>;
    812   def int_x86_sse41_pminsb          : GCCBuiltin<"__builtin_ia32_pminsb128">,
    813               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
    814                         [IntrNoMem, Commutative]>;
    815   def int_x86_sse41_pminsd          : GCCBuiltin<"__builtin_ia32_pminsd128">,
    816               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    817                         [IntrNoMem, Commutative]>;
    818   def int_x86_sse41_pminud          : GCCBuiltin<"__builtin_ia32_pminud128">,
    819               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    820                         [IntrNoMem, Commutative]>;
    821   def int_x86_sse41_pminuw          : GCCBuiltin<"__builtin_ia32_pminuw128">,
    822               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
    823                         [IntrNoMem, Commutative]>;
    824 }
    825 
    826 // Advanced Encryption Standard (AES) Instructions
    827 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    828   def int_x86_aesni_aesimc          : GCCBuiltin<"__builtin_ia32_aesimc128">,
    829               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty],
    830                         [IntrNoMem]>;
    831   def int_x86_aesni_aesenc          : GCCBuiltin<"__builtin_ia32_aesenc128">,
    832               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    833                         [IntrNoMem]>;
    834   def int_x86_aesni_aesenclast : GCCBuiltin<"__builtin_ia32_aesenclast128">,
    835               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    836                         [IntrNoMem]>;
    837   def int_x86_aesni_aesdec          : GCCBuiltin<"__builtin_ia32_aesdec128">,
    838               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    839                         [IntrNoMem]>;
    840   def int_x86_aesni_aesdeclast : GCCBuiltin<"__builtin_ia32_aesdeclast128">,
    841               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    842                         [IntrNoMem]>;
    843   def int_x86_aesni_aeskeygenassist :
    844               GCCBuiltin<"__builtin_ia32_aeskeygenassist128">,
    845               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
    846                         [IntrNoMem]>;
    847 }
    848 
    849 // PCLMUL instruction
    850 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
    851   def int_x86_pclmulqdq : GCCBuiltin<"__builtin_ia32_pclmulqdq128">,
    852           Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
    853                     [IntrNoMem]>;
    854 }
    855 
    856 // Vector pack
    857 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    858   def int_x86_sse41_packusdw        : GCCBuiltin<"__builtin_ia32_packusdw128">,
    859               Intrinsic<[llvm_v8i16_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    860                         [IntrNoMem]>;
    861 }
    862 
    863 // Vector multiply
    864 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    865   def int_x86_sse41_pmuldq          : GCCBuiltin<"__builtin_ia32_pmuldq128">,
    866               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
    867                         [IntrNoMem, Commutative]>;
    868 }
    869 
    870 // Vector extract
    871 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    872   def int_x86_sse41_pextrb         :
    873               Intrinsic<[llvm_i32_ty], [llvm_v16i8_ty, llvm_i32_ty],
    874                         [IntrNoMem]>;
    875   def int_x86_sse41_pextrd         :
    876               Intrinsic<[llvm_i32_ty], [llvm_v4i32_ty, llvm_i32_ty],
    877                         [IntrNoMem]>;
    878   def int_x86_sse41_pextrq         :
    879               Intrinsic<[llvm_i64_ty], [llvm_v2i64_ty, llvm_i32_ty],
    880                         [IntrNoMem]>;
    881   def int_x86_sse41_extractps      : GCCBuiltin<"__builtin_ia32_extractps128">,
    882               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty, llvm_i32_ty],
    883                         [IntrNoMem]>;
    884 }
    885 
    886 // Vector insert
    887 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    888   def int_x86_sse41_insertps       : GCCBuiltin<"__builtin_ia32_insertps128">,
    889           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_i32_ty],
    890                     [IntrNoMem]>;
    891 }
    892 
    893 // Vector blend
    894 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    895   def int_x86_sse41_pblendvb         : GCCBuiltin<"__builtin_ia32_pblendvb128">,
    896         Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_v16i8_ty],
    897                   [IntrNoMem]>;
    898   def int_x86_sse41_pblendw          : GCCBuiltin<"__builtin_ia32_pblendw128">,
    899         Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty],
    900                   [IntrNoMem]>;
    901   def int_x86_sse41_blendpd          : GCCBuiltin<"__builtin_ia32_blendpd">,
    902         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_i32_ty],
    903                   [IntrNoMem]>;
    904   def int_x86_sse41_blendps          : GCCBuiltin<"__builtin_ia32_blendps">,
    905         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_i32_ty],
    906                   [IntrNoMem]>;
    907   def int_x86_sse41_blendvpd         : GCCBuiltin<"__builtin_ia32_blendvpd">,
    908         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,llvm_v2f64_ty],
    909                   [IntrNoMem]>;
    910   def int_x86_sse41_blendvps         : GCCBuiltin<"__builtin_ia32_blendvps">,
    911         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_v4f32_ty],
    912                   [IntrNoMem]>;
    913 }
    914 
    915 // Vector dot product
    916 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    917   def int_x86_sse41_dppd            : GCCBuiltin<"__builtin_ia32_dppd">,
    918           Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,llvm_i32_ty],
    919                     [IntrNoMem, Commutative]>;
    920   def int_x86_sse41_dpps            : GCCBuiltin<"__builtin_ia32_dpps">,
    921           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,llvm_i32_ty],
    922                     [IntrNoMem, Commutative]>;
    923 }
    924 
    925 // Vector sum of absolute differences
    926 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    927   def int_x86_sse41_mpsadbw         : GCCBuiltin<"__builtin_ia32_mpsadbw128">,
    928           Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty, llvm_v16i8_ty,llvm_i32_ty],
    929                     [IntrNoMem, Commutative]>;
    930 }
    931 
    932 // Cacheability support ops
    933 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
    934   def int_x86_sse41_movntdqa        : GCCBuiltin<"__builtin_ia32_movntdqa">,
    935           Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
    936 }
    937 
    938 // Test instruction with bitwise comparison.
    939 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
    940   def int_x86_sse41_ptestz          : GCCBuiltin<"__builtin_ia32_ptestz128">,
    941           Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    942                     [IntrNoMem]>;
    943   def int_x86_sse41_ptestc          : GCCBuiltin<"__builtin_ia32_ptestc128">,
    944           Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    945                     [IntrNoMem]>;
    946   def int_x86_sse41_ptestnzc        : GCCBuiltin<"__builtin_ia32_ptestnzc128">,
    947           Intrinsic<[llvm_i32_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
    948                     [IntrNoMem]>;
    949 }
    950 
    951 //===----------------------------------------------------------------------===//
    952 // SSE4.2
    953 
    954 // Miscellaneous
    955 // CRC Instruction
    956 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
    957   def int_x86_sse42_crc32_32_8       : GCCBuiltin<"__builtin_ia32_crc32qi">,
    958           Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i8_ty],
    959                     [IntrNoMem]>;
    960   def int_x86_sse42_crc32_32_16      : GCCBuiltin<"__builtin_ia32_crc32hi">,
    961           Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i16_ty],
    962                     [IntrNoMem]>;
    963   def int_x86_sse42_crc32_32_32      : GCCBuiltin<"__builtin_ia32_crc32si">,
    964           Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
    965                     [IntrNoMem]>;
    966   def int_x86_sse42_crc32_64_64      : GCCBuiltin<"__builtin_ia32_crc32di">,
    967           Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
    968                     [IntrNoMem]>;
    969 }
    970 
    971 // String/text processing ops.
    972 let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
    973   def int_x86_sse42_pcmpistrm128  : GCCBuiltin<"__builtin_ia32_pcmpistrm128">,
    974     Intrinsic<[llvm_v16i8_ty],
    975         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    976         [IntrNoMem]>;
    977   def int_x86_sse42_pcmpistri128  : GCCBuiltin<"__builtin_ia32_pcmpistri128">,
    978     Intrinsic<[llvm_i32_ty],
    979         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    980         [IntrNoMem]>;
    981   def int_x86_sse42_pcmpistria128 : GCCBuiltin<"__builtin_ia32_pcmpistria128">,
    982     Intrinsic<[llvm_i32_ty],
    983         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    984         [IntrNoMem]>;
    985   def int_x86_sse42_pcmpistric128 : GCCBuiltin<"__builtin_ia32_pcmpistric128">,
    986     Intrinsic<[llvm_i32_ty],
    987         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    988         [IntrNoMem]>;
    989   def int_x86_sse42_pcmpistrio128 : GCCBuiltin<"__builtin_ia32_pcmpistrio128">,
    990     Intrinsic<[llvm_i32_ty],
    991         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    992         [IntrNoMem]>;
    993   def int_x86_sse42_pcmpistris128 : GCCBuiltin<"__builtin_ia32_pcmpistris128">,
    994     Intrinsic<[llvm_i32_ty],
    995         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
    996         [IntrNoMem]>;
    997   def int_x86_sse42_pcmpistriz128 : GCCBuiltin<"__builtin_ia32_pcmpistriz128">,
    998     Intrinsic<[llvm_i32_ty],
    999         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i8_ty],
   1000         [IntrNoMem]>;
   1001   def int_x86_sse42_pcmpestrm128  : GCCBuiltin<"__builtin_ia32_pcmpestrm128">,
   1002     Intrinsic<[llvm_v16i8_ty],
   1003         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
   1004          llvm_i8_ty],
   1005         [IntrNoMem]>;
   1006   def int_x86_sse42_pcmpestri128  : GCCBuiltin<"__builtin_ia32_pcmpestri128">,
   1007     Intrinsic<[llvm_i32_ty],
   1008         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
   1009          llvm_i8_ty],
   1010         [IntrNoMem]>;
   1011   def int_x86_sse42_pcmpestria128 : GCCBuiltin<"__builtin_ia32_pcmpestria128">,
   1012     Intrinsic<[llvm_i32_ty],
   1013         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
   1014          llvm_i8_ty],
   1015         [IntrNoMem]>;
   1016   def int_x86_sse42_pcmpestric128 : GCCBuiltin<"__builtin_ia32_pcmpestric128">,
   1017     Intrinsic<[llvm_i32_ty],
   1018         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
   1019          llvm_i8_ty],
   1020         [IntrNoMem]>;
   1021   def int_x86_sse42_pcmpestrio128 : GCCBuiltin<"__builtin_ia32_pcmpestrio128">,
   1022     Intrinsic<[llvm_i32_ty],
   1023         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
   1024          llvm_i8_ty],
   1025         [IntrNoMem]>;
   1026   def int_x86_sse42_pcmpestris128 : GCCBuiltin<"__builtin_ia32_pcmpestris128">,
   1027     Intrinsic<[llvm_i32_ty],
   1028         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
   1029          llvm_i8_ty],
   1030         [IntrNoMem]>;
   1031   def int_x86_sse42_pcmpestriz128 : GCCBuiltin<"__builtin_ia32_pcmpestriz128">,
   1032     Intrinsic<[llvm_i32_ty],
   1033         [llvm_v16i8_ty, llvm_i32_ty, llvm_v16i8_ty, llvm_i32_ty,
   1034          llvm_i8_ty],
   1035         [IntrNoMem]>;
   1036 }
   1037 
   1038 //===----------------------------------------------------------------------===//
   1039 // SSE4A
   1040 
   1041 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1042   def int_x86_sse4a_extrqi : GCCBuiltin<"__builtin_ia32_extrqi">,
   1043     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty, llvm_i8_ty],
   1044               [IntrNoMem]>;
   1045   def int_x86_sse4a_extrq  : GCCBuiltin<"__builtin_ia32_extrq">,
   1046     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v16i8_ty], [IntrNoMem]>;
   1047 
   1048   def int_x86_sse4a_insertqi : GCCBuiltin<"__builtin_ia32_insertqi">,
   1049     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   1050                                 llvm_i8_ty, llvm_i8_ty], [IntrNoMem]>;
   1051   def int_x86_sse4a_insertq  : GCCBuiltin<"__builtin_ia32_insertq">,
   1052     Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
   1053 
   1054   def int_x86_sse4a_movnt_ss : GCCBuiltin<"__builtin_ia32_movntss">,
   1055     Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty], []>;
   1056   def int_x86_sse4a_movnt_sd : GCCBuiltin<"__builtin_ia32_movntsd">,
   1057     Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty], []>;
   1058 }
   1059 
   1060 //===----------------------------------------------------------------------===//
   1061 // AVX
   1062 
   1063 // Arithmetic ops
   1064 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1065   def int_x86_avx_addsub_pd_256 : GCCBuiltin<"__builtin_ia32_addsubpd256">,
   1066         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1067                   llvm_v4f64_ty], [IntrNoMem]>;
   1068   def int_x86_avx_addsub_ps_256 : GCCBuiltin<"__builtin_ia32_addsubps256">,
   1069         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1070                   llvm_v8f32_ty], [IntrNoMem]>;
   1071   def int_x86_avx_max_pd_256 : GCCBuiltin<"__builtin_ia32_maxpd256">,
   1072         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1073                   llvm_v4f64_ty], [IntrNoMem]>;
   1074   def int_x86_avx_max_ps_256 : GCCBuiltin<"__builtin_ia32_maxps256">,
   1075         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1076                   llvm_v8f32_ty], [IntrNoMem]>;
   1077   def int_x86_avx_min_pd_256 : GCCBuiltin<"__builtin_ia32_minpd256">,
   1078         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1079                   llvm_v4f64_ty], [IntrNoMem]>;
   1080   def int_x86_avx_min_ps_256 : GCCBuiltin<"__builtin_ia32_minps256">,
   1081         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1082                   llvm_v8f32_ty], [IntrNoMem]>;
   1083 
   1084   def int_x86_avx_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256">,
   1085         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   1086   def int_x86_avx_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256">,
   1087         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   1088 
   1089   def int_x86_avx_rsqrt_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrtps256">,
   1090         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   1091 
   1092   def int_x86_avx_rcp_ps_256 : GCCBuiltin<"__builtin_ia32_rcpps256">,
   1093         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   1094 
   1095   def int_x86_avx_round_pd_256 : GCCBuiltin<"__builtin_ia32_roundpd256">,
   1096         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1097                   llvm_i32_ty], [IntrNoMem]>;
   1098   def int_x86_avx_round_ps_256 : GCCBuiltin<"__builtin_ia32_roundps256">,
   1099         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1100                   llvm_i32_ty], [IntrNoMem]>;
   1101 }
   1102 
   1103 // Horizontal ops
   1104 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1105   def int_x86_avx_hadd_pd_256 : GCCBuiltin<"__builtin_ia32_haddpd256">,
   1106         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1107                   llvm_v4f64_ty], [IntrNoMem]>;
   1108   def int_x86_avx_hsub_ps_256 : GCCBuiltin<"__builtin_ia32_hsubps256">,
   1109         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1110                   llvm_v8f32_ty], [IntrNoMem]>;
   1111   def int_x86_avx_hsub_pd_256 : GCCBuiltin<"__builtin_ia32_hsubpd256">,
   1112         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1113                   llvm_v4f64_ty], [IntrNoMem]>;
   1114   def int_x86_avx_hadd_ps_256 : GCCBuiltin<"__builtin_ia32_haddps256">,
   1115         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1116                   llvm_v8f32_ty], [IntrNoMem]>;
   1117 }
   1118 
   1119 // Vector permutation
   1120 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1121   def int_x86_avx_vpermilvar_pd : GCCBuiltin<"__builtin_ia32_vpermilvarpd">,
   1122         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
   1123                   llvm_v2i64_ty], [IntrNoMem]>;
   1124   def int_x86_avx_vpermilvar_ps : GCCBuiltin<"__builtin_ia32_vpermilvarps">,
   1125         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
   1126                   llvm_v4i32_ty], [IntrNoMem]>;
   1127 
   1128   def int_x86_avx_vpermilvar_pd_256 :
   1129         GCCBuiltin<"__builtin_ia32_vpermilvarpd256">,
   1130         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4i64_ty], [IntrNoMem]>;
   1131   def int_x86_avx_vpermilvar_ps_256 :
   1132         GCCBuiltin<"__builtin_ia32_vpermilvarps256">,
   1133         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty], [IntrNoMem]>;
   1134 
   1135   def int_x86_avx_vperm2f128_pd_256 :
   1136         GCCBuiltin<"__builtin_ia32_vperm2f128_pd256">,
   1137         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1138                   llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
   1139   def int_x86_avx_vperm2f128_ps_256 :
   1140         GCCBuiltin<"__builtin_ia32_vperm2f128_ps256">,
   1141         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1142                   llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
   1143   def int_x86_avx_vperm2f128_si_256 :
   1144         GCCBuiltin<"__builtin_ia32_vperm2f128_si256">,
   1145         Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1146                   llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   1147 
   1148   def int_x86_avx512_mask_vpermt_d_512:
   1149         GCCBuiltin<"__builtin_ia32_vpermt2vard512_mask">,
   1150         Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   1151                   llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   1152 
   1153   def int_x86_avx512_mask_vpermt_q_512:
   1154         GCCBuiltin<"__builtin_ia32_vpermt2varq512_mask">,
   1155         Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   1156                   llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1157 
   1158   def int_x86_avx512_mask_vpermt_ps_512:
   1159         GCCBuiltin<"__builtin_ia32_vpermt2varps512_mask">,
   1160         Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty,
   1161                   llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
   1162 
   1163   def int_x86_avx512_mask_vpermt_pd_512:
   1164         GCCBuiltin<"__builtin_ia32_vpermt2varpd512_mask">,
   1165         Intrinsic<[llvm_v8f64_ty], [llvm_v8i64_ty,
   1166                   llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
   1167 
   1168 }
   1169 
   1170 // Vector blend
   1171 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1172   def int_x86_avx_blend_pd_256 : GCCBuiltin<"__builtin_ia32_blendpd256">,
   1173         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1174                   llvm_v4f64_ty, llvm_i32_ty], [IntrNoMem]>;
   1175   def int_x86_avx_blend_ps_256 : GCCBuiltin<"__builtin_ia32_blendps256">,
   1176         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1177                   llvm_v8f32_ty, llvm_i32_ty], [IntrNoMem]>;
   1178   def int_x86_avx_blendv_pd_256 : GCCBuiltin<"__builtin_ia32_blendvpd256">,
   1179         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1180                   llvm_v4f64_ty, llvm_v4f64_ty], [IntrNoMem]>;
   1181   def int_x86_avx_blendv_ps_256 : GCCBuiltin<"__builtin_ia32_blendvps256">,
   1182         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1183                   llvm_v8f32_ty, llvm_v8f32_ty], [IntrNoMem]>;
   1184 }
   1185 
   1186 // Vector dot product
   1187 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1188   def int_x86_avx_dp_ps_256 : GCCBuiltin<"__builtin_ia32_dpps256">,
   1189         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1190                   llvm_v8f32_ty, llvm_i32_ty], [IntrNoMem]>;
   1191 }
   1192 
   1193 // Vector compare
   1194 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1195   def int_x86_avx_cmp_pd_256 : GCCBuiltin<"__builtin_ia32_cmppd256">,
   1196         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1197                   llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
   1198   def int_x86_avx_cmp_ps_256 : GCCBuiltin<"__builtin_ia32_cmpps256">,
   1199         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1200                   llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
   1201 }
   1202 
   1203 // Vector extract and insert
   1204 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1205   def int_x86_avx_vextractf128_pd_256 :
   1206         GCCBuiltin<"__builtin_ia32_vextractf128_pd256">,
   1207         Intrinsic<[llvm_v2f64_ty], [llvm_v4f64_ty, llvm_i8_ty], [IntrNoMem]>;
   1208   def int_x86_avx_vextractf128_ps_256 :
   1209         GCCBuiltin<"__builtin_ia32_vextractf128_ps256">,
   1210         Intrinsic<[llvm_v4f32_ty], [llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;
   1211   def int_x86_avx_vextractf128_si_256 :
   1212         GCCBuiltin<"__builtin_ia32_vextractf128_si256">,
   1213         Intrinsic<[llvm_v4i32_ty], [llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
   1214 
   1215   def int_x86_avx_vinsertf128_pd_256 :
   1216         GCCBuiltin<"__builtin_ia32_vinsertf128_pd256">,
   1217         Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
   1218                   llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
   1219   def int_x86_avx_vinsertf128_ps_256 :
   1220         GCCBuiltin<"__builtin_ia32_vinsertf128_ps256">,
   1221         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
   1222                   llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
   1223   def int_x86_avx_vinsertf128_si_256 :
   1224         GCCBuiltin<"__builtin_ia32_vinsertf128_si256">,
   1225         Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1226                   llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
   1227 }
   1228 
   1229 // Vector convert
   1230 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1231   def int_x86_avx_cvtdq2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtdq2pd256">,
   1232         Intrinsic<[llvm_v4f64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   1233   def int_x86_avx_cvtdq2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtdq2ps256">,
   1234         Intrinsic<[llvm_v8f32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
   1235   def int_x86_avx_cvt_pd2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtpd2ps256">,
   1236         Intrinsic<[llvm_v4f32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   1237   def int_x86_avx_cvt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvtps2dq256">,
   1238         Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   1239   def int_x86_avx_cvt_ps2_pd_256 : GCCBuiltin<"__builtin_ia32_cvtps2pd256">,
   1240         Intrinsic<[llvm_v4f64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   1241   def int_x86_avx_cvtt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvttpd2dq256">,
   1242         Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   1243   def int_x86_avx_cvt_pd2dq_256 : GCCBuiltin<"__builtin_ia32_cvtpd2dq256">,
   1244         Intrinsic<[llvm_v4i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   1245   def int_x86_avx_cvtt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvttps2dq256">,
   1246         Intrinsic<[llvm_v8i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   1247 }
   1248 
   1249 // Vector bit test
   1250 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1251   def int_x86_avx_vtestz_pd : GCCBuiltin<"__builtin_ia32_vtestzpd">,
   1252         Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
   1253                   llvm_v2f64_ty], [IntrNoMem]>;
   1254   def int_x86_avx_vtestc_pd : GCCBuiltin<"__builtin_ia32_vtestcpd">,
   1255         Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
   1256                   llvm_v2f64_ty], [IntrNoMem]>;
   1257   def int_x86_avx_vtestnzc_pd : GCCBuiltin<"__builtin_ia32_vtestnzcpd">,
   1258         Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty,
   1259                   llvm_v2f64_ty], [IntrNoMem]>;
   1260   def int_x86_avx_vtestz_ps : GCCBuiltin<"__builtin_ia32_vtestzps">,
   1261         Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
   1262                   llvm_v4f32_ty], [IntrNoMem]>;
   1263   def int_x86_avx_vtestc_ps : GCCBuiltin<"__builtin_ia32_vtestcps">,
   1264         Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
   1265                   llvm_v4f32_ty], [IntrNoMem]>;
   1266   def int_x86_avx_vtestnzc_ps : GCCBuiltin<"__builtin_ia32_vtestnzcps">,
   1267         Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty,
   1268                   llvm_v4f32_ty], [IntrNoMem]>;
   1269   def int_x86_avx_vtestz_pd_256 : GCCBuiltin<"__builtin_ia32_vtestzpd256">,
   1270         Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
   1271                   llvm_v4f64_ty], [IntrNoMem]>;
   1272   def int_x86_avx_vtestc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestcpd256">,
   1273         Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
   1274                   llvm_v4f64_ty], [IntrNoMem]>;
   1275   def int_x86_avx_vtestnzc_pd_256 : GCCBuiltin<"__builtin_ia32_vtestnzcpd256">,
   1276         Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty,
   1277                   llvm_v4f64_ty], [IntrNoMem]>;
   1278   def int_x86_avx_vtestz_ps_256 : GCCBuiltin<"__builtin_ia32_vtestzps256">,
   1279         Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
   1280                   llvm_v8f32_ty], [IntrNoMem]>;
   1281   def int_x86_avx_vtestc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestcps256">,
   1282         Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
   1283                   llvm_v8f32_ty], [IntrNoMem]>;
   1284   def int_x86_avx_vtestnzc_ps_256 : GCCBuiltin<"__builtin_ia32_vtestnzcps256">,
   1285         Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty,
   1286                   llvm_v8f32_ty], [IntrNoMem]>;
   1287   def int_x86_avx_ptestz_256 : GCCBuiltin<"__builtin_ia32_ptestz256">,
   1288         Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
   1289                   llvm_v4i64_ty], [IntrNoMem]>;
   1290   def int_x86_avx_ptestc_256 : GCCBuiltin<"__builtin_ia32_ptestc256">,
   1291         Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
   1292                   llvm_v4i64_ty], [IntrNoMem]>;
   1293   def int_x86_avx_ptestnzc_256 : GCCBuiltin<"__builtin_ia32_ptestnzc256">,
   1294         Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
   1295                   llvm_v4i64_ty], [IntrNoMem]>;
   1296   def int_x86_avx512_mask_ptestm_d_512 : GCCBuiltin<"__builtin_ia32_ptestmd512">,
   1297         Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   1298                   llvm_i16_ty], [IntrNoMem]>;
   1299   def int_x86_avx512_mask_ptestm_q_512 : GCCBuiltin<"__builtin_ia32_ptestmq512">,
   1300         Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   1301                   llvm_i8_ty], [IntrNoMem]>;
   1302 }
   1303 
   1304 // Vector extract sign mask
   1305 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1306   def int_x86_avx_movmsk_pd_256 : GCCBuiltin<"__builtin_ia32_movmskpd256">,
   1307         Intrinsic<[llvm_i32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   1308   def int_x86_avx_movmsk_ps_256 : GCCBuiltin<"__builtin_ia32_movmskps256">,
   1309         Intrinsic<[llvm_i32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   1310 }
   1311 
   1312 // Vector zero
   1313 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1314   def int_x86_avx_vzeroall : GCCBuiltin<"__builtin_ia32_vzeroall">,
   1315         Intrinsic<[], [], []>;
   1316   def int_x86_avx_vzeroupper : GCCBuiltin<"__builtin_ia32_vzeroupper">,
   1317         Intrinsic<[], [], []>;
   1318 }
   1319 
   1320 // Vector load with broadcast
   1321 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1322   def int_x86_avx_vbroadcastf128_pd_256 :
   1323         GCCBuiltin<"__builtin_ia32_vbroadcastf128_pd256">,
   1324         Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
   1325   def int_x86_avx_vbroadcastf128_ps_256 :
   1326         GCCBuiltin<"__builtin_ia32_vbroadcastf128_ps256">,
   1327         Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
   1328 }
   1329 
   1330 // SIMD load ops
   1331 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1332   def int_x86_avx_ldu_dq_256 : GCCBuiltin<"__builtin_ia32_lddqu256">,
   1333         Intrinsic<[llvm_v32i8_ty], [llvm_ptr_ty], [IntrReadMem]>;
   1334 }
   1335 
   1336 // SIMD store ops
   1337 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1338   def int_x86_avx_storeu_pd_256 : GCCBuiltin<"__builtin_ia32_storeupd256">,
   1339         Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty], [IntrReadWriteArgMem]>;
   1340   def int_x86_avx_storeu_ps_256 : GCCBuiltin<"__builtin_ia32_storeups256">,
   1341         Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty], [IntrReadWriteArgMem]>;
   1342   def int_x86_avx_storeu_dq_256 : GCCBuiltin<"__builtin_ia32_storedqu256">,
   1343         Intrinsic<[], [llvm_ptr_ty, llvm_v32i8_ty], [IntrReadWriteArgMem]>;
   1344 }
   1345 
   1346 // Conditional load ops
   1347 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1348   def int_x86_avx_maskload_pd : GCCBuiltin<"__builtin_ia32_maskloadpd">,
   1349         Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2f64_ty],
   1350                   [IntrReadArgMem]>;
   1351   def int_x86_avx_maskload_ps : GCCBuiltin<"__builtin_ia32_maskloadps">,
   1352         Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4f32_ty],
   1353                   [IntrReadArgMem]>;
   1354   def int_x86_avx_maskload_pd_256 : GCCBuiltin<"__builtin_ia32_maskloadpd256">,
   1355         Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4f64_ty],
   1356                   [IntrReadArgMem]>;
   1357   def int_x86_avx_maskload_ps_256 : GCCBuiltin<"__builtin_ia32_maskloadps256">,
   1358         Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8f32_ty],
   1359                   [IntrReadArgMem]>;
   1360   def int_x86_avx512_mask_loadu_ps_512 : GCCBuiltin<"__builtin_ia32_loadups512_mask">,
   1361         Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
   1362                   [IntrReadArgMem]>;
   1363   def int_x86_avx512_mask_loadu_pd_512 : GCCBuiltin<"__builtin_ia32_loadupd512_mask">,
   1364         Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
   1365                   [IntrReadArgMem]>;
   1366 }
   1367 
   1368 // Conditional store ops
   1369 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1370   def int_x86_avx_maskstore_pd : GCCBuiltin<"__builtin_ia32_maskstorepd">,
   1371         Intrinsic<[], [llvm_ptr_ty,
   1372                   llvm_v2f64_ty, llvm_v2f64_ty], [IntrReadWriteArgMem]>;
   1373   def int_x86_avx_maskstore_ps : GCCBuiltin<"__builtin_ia32_maskstoreps">,
   1374         Intrinsic<[], [llvm_ptr_ty,
   1375                   llvm_v4f32_ty, llvm_v4f32_ty], [IntrReadWriteArgMem]>;
   1376   def int_x86_avx_maskstore_pd_256 :
   1377         GCCBuiltin<"__builtin_ia32_maskstorepd256">,
   1378         Intrinsic<[], [llvm_ptr_ty,
   1379                   llvm_v4f64_ty, llvm_v4f64_ty], [IntrReadWriteArgMem]>;
   1380   def int_x86_avx_maskstore_ps_256 :
   1381         GCCBuiltin<"__builtin_ia32_maskstoreps256">,
   1382         Intrinsic<[], [llvm_ptr_ty,
   1383                   llvm_v8f32_ty, llvm_v8f32_ty], [IntrReadWriteArgMem]>;
   1384   def int_x86_avx512_mask_storeu_ps_512 :
   1385         GCCBuiltin<"__builtin_ia32_storeups512_mask">,
   1386         Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty, llvm_i16_ty],
   1387                   [IntrReadWriteArgMem]>;
   1388   def int_x86_avx512_mask_storeu_pd_512 :
   1389         GCCBuiltin<"__builtin_ia32_storeupd512_mask">,
   1390         Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty, llvm_i8_ty],
   1391                   [IntrReadWriteArgMem]>;
   1392 }
   1393 
   1394 //===----------------------------------------------------------------------===//
   1395 // AVX2
   1396 
   1397 // Integer arithmetic ops.
   1398 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1399   def int_x86_avx2_padds_b : GCCBuiltin<"__builtin_ia32_paddsb256">,
   1400               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1401                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1402   def int_x86_avx2_padds_w : GCCBuiltin<"__builtin_ia32_paddsw256">,
   1403               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1404                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1405   def int_x86_avx2_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb256">,
   1406               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1407                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1408   def int_x86_avx2_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw256">,
   1409               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1410                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1411   def int_x86_avx2_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb256">,
   1412               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1413                          llvm_v32i8_ty], [IntrNoMem]>;
   1414   def int_x86_avx2_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw256">,
   1415               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1416                          llvm_v16i16_ty], [IntrNoMem]>;
   1417   def int_x86_avx2_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb256">,
   1418               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1419                          llvm_v32i8_ty], [IntrNoMem]>;
   1420   def int_x86_avx2_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw256">,
   1421               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1422                          llvm_v16i16_ty], [IntrNoMem]>;
   1423   def int_x86_avx2_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw256">,
   1424               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1425                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1426   def int_x86_avx2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw256">,
   1427               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1428                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1429   def int_x86_avx2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq256">,
   1430               Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
   1431                          llvm_v8i32_ty], [IntrNoMem, Commutative]>;
   1432   def int_x86_avx2_pmul_dq : GCCBuiltin<"__builtin_ia32_pmuldq256">,
   1433               Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
   1434                          llvm_v8i32_ty], [IntrNoMem, Commutative]>;
   1435   def int_x86_avx2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd256">,
   1436               Intrinsic<[llvm_v8i32_ty], [llvm_v16i16_ty,
   1437                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1438   def int_x86_avx2_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb256">,
   1439               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1440                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1441   def int_x86_avx2_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw256">,
   1442               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1443                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1444   def int_x86_avx2_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw256">,
   1445               Intrinsic<[llvm_v4i64_ty], [llvm_v32i8_ty,
   1446                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1447   def int_x86_avx512_mask_pmulu_dq_512 : GCCBuiltin<"__builtin_ia32_pmuludq512_mask">,
   1448               Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   1449                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1450   def int_x86_avx512_mask_pmul_dq_512 : GCCBuiltin<"__builtin_ia32_pmuldq512_mask">,
   1451               Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   1452                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1453 }
   1454 
   1455 // Vector min, max
   1456 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1457   def int_x86_avx2_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub256">,
   1458               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1459                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1460   def int_x86_avx2_pmaxu_w : GCCBuiltin<"__builtin_ia32_pmaxuw256">,
   1461               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1462                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1463   def int_x86_avx2_pmaxu_d : GCCBuiltin<"__builtin_ia32_pmaxud256">,
   1464               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1465                          llvm_v8i32_ty], [IntrNoMem, Commutative]>;
   1466   def int_x86_avx2_pmaxs_b : GCCBuiltin<"__builtin_ia32_pmaxsb256">,
   1467               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1468                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1469   def int_x86_avx2_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw256">,
   1470               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1471                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1472   def int_x86_avx2_pmaxs_d : GCCBuiltin<"__builtin_ia32_pmaxsd256">,
   1473               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1474                          llvm_v8i32_ty], [IntrNoMem, Commutative]>;
   1475   def int_x86_avx2_pminu_b : GCCBuiltin<"__builtin_ia32_pminub256">,
   1476               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1477                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1478   def int_x86_avx2_pminu_w : GCCBuiltin<"__builtin_ia32_pminuw256">,
   1479               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1480                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1481   def int_x86_avx2_pminu_d : GCCBuiltin<"__builtin_ia32_pminud256">,
   1482               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1483                          llvm_v8i32_ty], [IntrNoMem, Commutative]>;
   1484   def int_x86_avx2_pmins_b : GCCBuiltin<"__builtin_ia32_pminsb256">,
   1485               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1486                          llvm_v32i8_ty], [IntrNoMem, Commutative]>;
   1487   def int_x86_avx2_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw256">,
   1488               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1489                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1490   def int_x86_avx2_pmins_d : GCCBuiltin<"__builtin_ia32_pminsd256">,
   1491               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1492                          llvm_v8i32_ty], [IntrNoMem, Commutative]>;
   1493   def int_x86_avx512_mask_pmaxu_d_512 : GCCBuiltin<"__builtin_ia32_pmaxud512_mask">,
   1494               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   1495                          llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   1496   def int_x86_avx512_mask_pmaxs_d_512 : GCCBuiltin<"__builtin_ia32_pmaxsd512_mask">,
   1497               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   1498                          llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   1499   def int_x86_avx512_mask_pmaxu_q_512 : GCCBuiltin<"__builtin_ia32_pmaxuq512_mask">,
   1500               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   1501                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1502   def int_x86_avx512_mask_pmaxs_q_512 : GCCBuiltin<"__builtin_ia32_pmaxsq512_mask">,
   1503               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   1504                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1505   def int_x86_avx512_mask_pminu_d_512 : GCCBuiltin<"__builtin_ia32_pminud512_mask">,
   1506               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   1507                          llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   1508   def int_x86_avx512_mask_pmins_d_512 : GCCBuiltin<"__builtin_ia32_pminsd512_mask">,
   1509               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   1510                          llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
   1511   def int_x86_avx512_mask_pminu_q_512 : GCCBuiltin<"__builtin_ia32_pminuq512_mask">,
   1512               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   1513                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1514   def int_x86_avx512_mask_pmins_q_512 : GCCBuiltin<"__builtin_ia32_pminsq512_mask">,
   1515               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   1516                          llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1517 }
   1518 
   1519 // Integer shift ops.
   1520 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1521   def int_x86_avx2_psll_w : GCCBuiltin<"__builtin_ia32_psllw256">,
   1522               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1523                          llvm_v8i16_ty], [IntrNoMem]>;
   1524   def int_x86_avx2_psll_d : GCCBuiltin<"__builtin_ia32_pslld256">,
   1525               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1526                          llvm_v4i32_ty], [IntrNoMem]>;
   1527   def int_x86_avx2_psll_q : GCCBuiltin<"__builtin_ia32_psllq256">,
   1528               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1529                          llvm_v2i64_ty], [IntrNoMem]>;
   1530   def int_x86_avx2_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw256">,
   1531               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1532                          llvm_v8i16_ty], [IntrNoMem]>;
   1533   def int_x86_avx2_psrl_d : GCCBuiltin<"__builtin_ia32_psrld256">,
   1534               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1535                          llvm_v4i32_ty], [IntrNoMem]>;
   1536   def int_x86_avx2_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq256">,
   1537               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1538                          llvm_v2i64_ty], [IntrNoMem]>;
   1539   def int_x86_avx2_psra_w : GCCBuiltin<"__builtin_ia32_psraw256">,
   1540               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1541                          llvm_v8i16_ty], [IntrNoMem]>;
   1542   def int_x86_avx2_psra_d : GCCBuiltin<"__builtin_ia32_psrad256">,
   1543               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1544                          llvm_v4i32_ty], [IntrNoMem]>;
   1545 
   1546   def int_x86_avx2_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi256">,
   1547               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1548                          llvm_i32_ty], [IntrNoMem]>;
   1549   def int_x86_avx2_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi256">,
   1550               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1551                          llvm_i32_ty], [IntrNoMem]>;
   1552   def int_x86_avx2_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi256">,
   1553               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1554                          llvm_i32_ty], [IntrNoMem]>;
   1555   def int_x86_avx2_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi256">,
   1556               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1557                          llvm_i32_ty], [IntrNoMem]>;
   1558   def int_x86_avx2_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi256">,
   1559               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1560                          llvm_i32_ty], [IntrNoMem]>;
   1561   def int_x86_avx2_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi256">,
   1562               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1563                          llvm_i32_ty], [IntrNoMem]>;
   1564   def int_x86_avx2_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi256">,
   1565               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1566                          llvm_i32_ty], [IntrNoMem]>;
   1567   def int_x86_avx2_psrai_d : GCCBuiltin<"__builtin_ia32_psradi256">,
   1568               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1569                          llvm_i32_ty], [IntrNoMem]>;
   1570 
   1571   def int_x86_avx2_psll_dq : GCCBuiltin<"__builtin_ia32_pslldqi256">,
   1572               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1573                          llvm_i32_ty], [IntrNoMem]>;
   1574   def int_x86_avx2_psrl_dq : GCCBuiltin<"__builtin_ia32_psrldqi256">,
   1575               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1576                          llvm_i32_ty], [IntrNoMem]>;
   1577   def int_x86_avx2_psll_dq_bs : GCCBuiltin<"__builtin_ia32_pslldqi256_byteshift">,
   1578               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1579                          llvm_i32_ty], [IntrNoMem]>;
   1580   def int_x86_avx2_psrl_dq_bs : GCCBuiltin<"__builtin_ia32_psrldqi256_byteshift">,
   1581               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1582                          llvm_i32_ty], [IntrNoMem]>;
   1583 }
   1584 
   1585 // Pack ops.
   1586 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1587   def int_x86_avx2_packsswb : GCCBuiltin<"__builtin_ia32_packsswb256">,
   1588               Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
   1589                          llvm_v16i16_ty], [IntrNoMem]>;
   1590   def int_x86_avx2_packssdw : GCCBuiltin<"__builtin_ia32_packssdw256">,
   1591               Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
   1592                          llvm_v8i32_ty], [IntrNoMem]>;
   1593   def int_x86_avx2_packuswb : GCCBuiltin<"__builtin_ia32_packuswb256">,
   1594               Intrinsic<[llvm_v32i8_ty], [llvm_v16i16_ty,
   1595                          llvm_v16i16_ty], [IntrNoMem]>;
   1596   def int_x86_avx2_packusdw : GCCBuiltin<"__builtin_ia32_packusdw256">,
   1597               Intrinsic<[llvm_v16i16_ty], [llvm_v8i32_ty,
   1598                          llvm_v8i32_ty], [IntrNoMem]>;
   1599 }
   1600 
   1601 // Absolute value ops
   1602 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1603   def int_x86_avx2_pabs_b : GCCBuiltin<"__builtin_ia32_pabsb256">,
   1604               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty], [IntrNoMem]>;
   1605   def int_x86_avx2_pabs_w : GCCBuiltin<"__builtin_ia32_pabsw256">,
   1606               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty], [IntrNoMem]>;
   1607   def int_x86_avx2_pabs_d : GCCBuiltin<"__builtin_ia32_pabsd256">,
   1608               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
   1609   def int_x86_avx512_mask_pabs_d_512 : GCCBuiltin<"__builtin_ia32_pabsd512_mask">,
   1610               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   1611                                            llvm_i16_ty], [IntrNoMem]>;
   1612   def int_x86_avx512_mask_pabs_q_512 : GCCBuiltin<"__builtin_ia32_pabsq512_mask">,
   1613               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   1614                                           llvm_i8_ty], [IntrNoMem]>;
   1615 }
   1616 
   1617 // Horizontal arithmetic ops
   1618 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1619   def int_x86_avx2_phadd_w : GCCBuiltin<"__builtin_ia32_phaddw256">,
   1620               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1621                          llvm_v16i16_ty], [IntrNoMem]>;
   1622   def int_x86_avx2_phadd_d : GCCBuiltin<"__builtin_ia32_phaddd256">,
   1623               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1624                          llvm_v8i32_ty], [IntrNoMem]>;
   1625   def int_x86_avx2_phadd_sw : GCCBuiltin<"__builtin_ia32_phaddsw256">,
   1626               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1627                          llvm_v16i16_ty], [IntrNoMem]>;
   1628   def int_x86_avx2_phsub_w : GCCBuiltin<"__builtin_ia32_phsubw256">,
   1629               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1630                          llvm_v16i16_ty], [IntrNoMem]>;
   1631   def int_x86_avx2_phsub_d : GCCBuiltin<"__builtin_ia32_phsubd256">,
   1632               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1633                          llvm_v8i32_ty], [IntrNoMem]>;
   1634   def int_x86_avx2_phsub_sw : GCCBuiltin<"__builtin_ia32_phsubsw256">,
   1635               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1636                          llvm_v16i16_ty], [IntrNoMem]>;
   1637   def int_x86_avx2_pmadd_ub_sw : GCCBuiltin<"__builtin_ia32_pmaddubsw256">,
   1638               Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty,
   1639                          llvm_v32i8_ty], [IntrNoMem]>;
   1640 }
   1641 
   1642 // Sign ops
   1643 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1644   def int_x86_avx2_psign_b : GCCBuiltin<"__builtin_ia32_psignb256">,
   1645               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1646                          llvm_v32i8_ty], [IntrNoMem]>;
   1647   def int_x86_avx2_psign_w : GCCBuiltin<"__builtin_ia32_psignw256">,
   1648               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1649                          llvm_v16i16_ty], [IntrNoMem]>;
   1650   def int_x86_avx2_psign_d : GCCBuiltin<"__builtin_ia32_psignd256">,
   1651               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
   1652                          llvm_v8i32_ty], [IntrNoMem]>;
   1653 }
   1654 
   1655 // Packed multiply high with round and scale
   1656 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1657   def int_x86_avx2_pmul_hr_sw : GCCBuiltin<"__builtin_ia32_pmulhrsw256">,
   1658               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
   1659                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
   1660 }
   1661 
   1662 // Vector sign and zero extend
   1663 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1664   def int_x86_avx2_pmovsxbd : GCCBuiltin<"__builtin_ia32_pmovsxbd256">,
   1665               Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty],
   1666                         [IntrNoMem]>;
   1667   def int_x86_avx2_pmovsxbq : GCCBuiltin<"__builtin_ia32_pmovsxbq256">,
   1668               Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty],
   1669                         [IntrNoMem]>;
   1670   def int_x86_avx2_pmovsxbw : GCCBuiltin<"__builtin_ia32_pmovsxbw256">,
   1671               Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty],
   1672                         [IntrNoMem]>;
   1673   def int_x86_avx2_pmovsxdq : GCCBuiltin<"__builtin_ia32_pmovsxdq256">,
   1674               Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty],
   1675                         [IntrNoMem]>;
   1676   def int_x86_avx2_pmovsxwd : GCCBuiltin<"__builtin_ia32_pmovsxwd256">,
   1677               Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty],
   1678                         [IntrNoMem]>;
   1679   def int_x86_avx2_pmovsxwq : GCCBuiltin<"__builtin_ia32_pmovsxwq256">,
   1680               Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty],
   1681                         [IntrNoMem]>;
   1682   def int_x86_avx2_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd256">,
   1683               Intrinsic<[llvm_v8i32_ty], [llvm_v16i8_ty],
   1684                         [IntrNoMem]>;
   1685   def int_x86_avx2_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq256">,
   1686               Intrinsic<[llvm_v4i64_ty], [llvm_v16i8_ty],
   1687                         [IntrNoMem]>;
   1688   def int_x86_avx2_pmovzxbw : GCCBuiltin<"__builtin_ia32_pmovzxbw256">,
   1689               Intrinsic<[llvm_v16i16_ty], [llvm_v16i8_ty],
   1690                         [IntrNoMem]>;
   1691   def int_x86_avx2_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq256">,
   1692               Intrinsic<[llvm_v4i64_ty], [llvm_v4i32_ty],
   1693                         [IntrNoMem]>;
   1694   def int_x86_avx2_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd256">,
   1695               Intrinsic<[llvm_v8i32_ty], [llvm_v8i16_ty],
   1696                         [IntrNoMem]>;
   1697   def int_x86_avx2_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq256">,
   1698               Intrinsic<[llvm_v4i64_ty], [llvm_v8i16_ty],
   1699                         [IntrNoMem]>;
   1700 }
   1701 
   1702 // Vector blend
   1703 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1704   def int_x86_avx2_pblendvb : GCCBuiltin<"__builtin_ia32_pblendvb256">,
   1705               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
   1706                          llvm_v32i8_ty], [IntrNoMem]>;
   1707   def int_x86_avx2_pblendw : GCCBuiltin<"__builtin_ia32_pblendw256">,
   1708               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty, llvm_v16i16_ty,
   1709                          llvm_i32_ty], [IntrNoMem]>;
   1710   def int_x86_avx2_pblendd_128 : GCCBuiltin<"__builtin_ia32_pblendd128">,
   1711               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
   1712                          llvm_i32_ty], [IntrNoMem]>;
   1713   def int_x86_avx2_pblendd_256 : GCCBuiltin<"__builtin_ia32_pblendd256">,
   1714               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
   1715                          llvm_i32_ty], [IntrNoMem]>;
   1716 }
   1717 
   1718 // Vector load with broadcast
   1719 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1720   def int_x86_avx2_vbroadcast_ss_ps :
   1721               GCCBuiltin<"__builtin_ia32_vbroadcastss_ps">,
   1722               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   1723   def int_x86_avx2_vbroadcast_sd_pd_256 :
   1724               GCCBuiltin<"__builtin_ia32_vbroadcastsd_pd256">,
   1725               Intrinsic<[llvm_v4f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   1726   def int_x86_avx2_vbroadcast_ss_ps_256 :
   1727               GCCBuiltin<"__builtin_ia32_vbroadcastss_ps256">,
   1728               Intrinsic<[llvm_v8f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   1729   def int_x86_avx2_vbroadcasti128 :
   1730               Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
   1731   def int_x86_avx2_pbroadcastb_128 :
   1732               GCCBuiltin<"__builtin_ia32_pbroadcastb128">,
   1733               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   1734   def int_x86_avx2_pbroadcastb_256 :
   1735               GCCBuiltin<"__builtin_ia32_pbroadcastb256">,
   1736               Intrinsic<[llvm_v32i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   1737   def int_x86_avx2_pbroadcastw_128 :
   1738               GCCBuiltin<"__builtin_ia32_pbroadcastw128">,
   1739               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   1740   def int_x86_avx2_pbroadcastw_256 :
   1741               GCCBuiltin<"__builtin_ia32_pbroadcastw256">,
   1742               Intrinsic<[llvm_v16i16_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   1743   def int_x86_avx2_pbroadcastd_128 :
   1744               GCCBuiltin<"__builtin_ia32_pbroadcastd128">,
   1745               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   1746   def int_x86_avx2_pbroadcastd_256 :
   1747               GCCBuiltin<"__builtin_ia32_pbroadcastd256">,
   1748               Intrinsic<[llvm_v8i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   1749   def int_x86_avx2_pbroadcastq_128 :
   1750               GCCBuiltin<"__builtin_ia32_pbroadcastq128">,
   1751               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
   1752   def int_x86_avx2_pbroadcastq_256 :
   1753               GCCBuiltin<"__builtin_ia32_pbroadcastq256">,
   1754               Intrinsic<[llvm_v4i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
   1755   def int_x86_avx512_mask_pbroadcast_d_gpr_512 :
   1756               GCCBuiltin<"__builtin_ia32_pbroadcastd512_gpr_mask">,
   1757               Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty, llvm_v16i32_ty,
   1758               llvm_i16_ty], [IntrNoMem]>;
   1759   def int_x86_avx512_mask_pbroadcast_q_gpr_512 :
   1760               GCCBuiltin<"__builtin_ia32_pbroadcastq512_gpr_mask">,
   1761               Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty,
   1762               llvm_i8_ty], [IntrNoMem]>;
   1763   def int_x86_avx512_mask_pbroadcast_q_mem_512 :
   1764               GCCBuiltin<"__builtin_ia32_pbroadcastq512_mem_mask">,
   1765               Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty, llvm_v8i64_ty,
   1766               llvm_i8_ty], [IntrNoMem]>;
   1767 }
   1768 
   1769 // Vector permutation
   1770 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1771   def int_x86_avx2_permd : GCCBuiltin<"__builtin_ia32_permvarsi256">,
   1772               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
   1773                         [IntrNoMem]>;
   1774   def int_x86_avx2_permps : GCCBuiltin<"__builtin_ia32_permvarsf256">,
   1775               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty],
   1776                         [IntrNoMem]>;
   1777   def int_x86_avx2_vperm2i128 : GCCBuiltin<"__builtin_ia32_permti256">,
   1778               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1779                          llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1780 }
   1781 
   1782 // Vector extract and insert
   1783 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1784   def int_x86_avx2_vextracti128 : GCCBuiltin<"__builtin_ia32_extract128i256">,
   1785               Intrinsic<[llvm_v2i64_ty], [llvm_v4i64_ty,
   1786                          llvm_i8_ty], [IntrNoMem]>;
   1787   def int_x86_avx2_vinserti128 : GCCBuiltin<"__builtin_ia32_insert128i256">,
   1788               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
   1789                          llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
   1790 }
   1791 
   1792 // Conditional load ops
   1793 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1794   def int_x86_avx2_maskload_d : GCCBuiltin<"__builtin_ia32_maskloadd">,
   1795         Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty],
   1796                   [IntrReadArgMem]>;
   1797   def int_x86_avx2_maskload_q : GCCBuiltin<"__builtin_ia32_maskloadq">,
   1798         Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty],
   1799                   [IntrReadArgMem]>;
   1800   def int_x86_avx2_maskload_d_256 : GCCBuiltin<"__builtin_ia32_maskloadd256">,
   1801         Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty],
   1802                   [IntrReadArgMem]>;
   1803   def int_x86_avx2_maskload_q_256 : GCCBuiltin<"__builtin_ia32_maskloadq256">,
   1804         Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty],
   1805                   [IntrReadArgMem]>;
   1806   def int_x86_avx512_mask_loadu_d_512 : GCCBuiltin<"__builtin_ia32_loaddqusi512_mask">,
   1807         Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
   1808                   [IntrReadArgMem]>;
   1809   def int_x86_avx512_mask_loadu_q_512 : GCCBuiltin<"__builtin_ia32_loaddqudi512_mask">,
   1810         Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   1811                   [IntrReadArgMem]>;
   1812 }
   1813 
   1814 // Conditional store ops
   1815 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1816   def int_x86_avx2_maskstore_d : GCCBuiltin<"__builtin_ia32_maskstored">,
   1817         Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty],
   1818                   [IntrReadWriteArgMem]>;
   1819   def int_x86_avx2_maskstore_q : GCCBuiltin<"__builtin_ia32_maskstoreq">,
   1820         Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty],
   1821                   [IntrReadWriteArgMem]>;
   1822   def int_x86_avx2_maskstore_d_256 :
   1823         GCCBuiltin<"__builtin_ia32_maskstored256">,
   1824         Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty],
   1825                   [IntrReadWriteArgMem]>;
   1826   def int_x86_avx2_maskstore_q_256 :
   1827         GCCBuiltin<"__builtin_ia32_maskstoreq256">,
   1828         Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty],
   1829                   [IntrReadWriteArgMem]>;
   1830   def int_x86_avx512_mask_storeu_d_512 :
   1831         GCCBuiltin<"__builtin_ia32_storedqusi512_mask">,
   1832         Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty, llvm_i16_ty],
   1833                   [IntrReadWriteArgMem]>;
   1834   def int_x86_avx512_mask_storeu_q_512 :
   1835         GCCBuiltin<"__builtin_ia32_storedqudi512_mask">,
   1836         Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty, llvm_i8_ty],
   1837                   [IntrReadWriteArgMem]>;
   1838 }
   1839 
   1840 // Variable bit shift ops
   1841 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1842   def int_x86_avx2_psllv_d : GCCBuiltin<"__builtin_ia32_psllv4si">,
   1843               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   1844                         [IntrNoMem]>;
   1845   def int_x86_avx2_psllv_d_256 : GCCBuiltin<"__builtin_ia32_psllv8si">,
   1846               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
   1847                         [IntrNoMem]>;
   1848   def int_x86_avx2_psllv_q : GCCBuiltin<"__builtin_ia32_psllv2di">,
   1849               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   1850                         [IntrNoMem]>;
   1851   def int_x86_avx2_psllv_q_256 : GCCBuiltin<"__builtin_ia32_psllv4di">,
   1852               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
   1853                         [IntrNoMem]>;
   1854 
   1855   def int_x86_avx2_psrlv_d : GCCBuiltin<"__builtin_ia32_psrlv4si">,
   1856               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   1857                         [IntrNoMem]>;
   1858   def int_x86_avx2_psrlv_d_256 : GCCBuiltin<"__builtin_ia32_psrlv8si">,
   1859               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
   1860                         [IntrNoMem]>;
   1861   def int_x86_avx2_psrlv_q : GCCBuiltin<"__builtin_ia32_psrlv2di">,
   1862               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   1863                         [IntrNoMem]>;
   1864   def int_x86_avx2_psrlv_q_256 : GCCBuiltin<"__builtin_ia32_psrlv4di">,
   1865               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty],
   1866                         [IntrNoMem]>;
   1867 
   1868   def int_x86_avx2_psrav_d : GCCBuiltin<"__builtin_ia32_psrav4si">,
   1869               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   1870                         [IntrNoMem]>;
   1871   def int_x86_avx2_psrav_d_256 : GCCBuiltin<"__builtin_ia32_psrav8si">,
   1872               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty],
   1873                         [IntrNoMem]>;
   1874 }
   1875 
   1876 // Gather ops
   1877 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1878   def int_x86_avx2_gather_d_pd : GCCBuiltin<"__builtin_ia32_gatherd_pd">,
   1879       Intrinsic<[llvm_v2f64_ty],
   1880         [llvm_v2f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2f64_ty, llvm_i8_ty],
   1881         [IntrReadArgMem]>;
   1882   def int_x86_avx2_gather_d_pd_256 : GCCBuiltin<"__builtin_ia32_gatherd_pd256">,
   1883       Intrinsic<[llvm_v4f64_ty],
   1884         [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f64_ty, llvm_i8_ty],
   1885         [IntrReadArgMem]>;
   1886   def int_x86_avx2_gather_q_pd : GCCBuiltin<"__builtin_ia32_gatherq_pd">,
   1887       Intrinsic<[llvm_v2f64_ty],
   1888         [llvm_v2f64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
   1889         [IntrReadArgMem]>;
   1890   def int_x86_avx2_gather_q_pd_256 : GCCBuiltin<"__builtin_ia32_gatherq_pd256">,
   1891       Intrinsic<[llvm_v4f64_ty],
   1892         [llvm_v4f64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
   1893         [IntrReadArgMem]>;
   1894   def int_x86_avx2_gather_d_ps : GCCBuiltin<"__builtin_ia32_gatherd_ps">,
   1895       Intrinsic<[llvm_v4f32_ty],
   1896         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
   1897         [IntrReadArgMem]>;
   1898   def int_x86_avx2_gather_d_ps_256 : GCCBuiltin<"__builtin_ia32_gatherd_ps256">,
   1899       Intrinsic<[llvm_v8f32_ty],
   1900         [llvm_v8f32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
   1901         [IntrReadArgMem]>;
   1902   def int_x86_avx2_gather_q_ps : GCCBuiltin<"__builtin_ia32_gatherq_ps">,
   1903       Intrinsic<[llvm_v4f32_ty],
   1904         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4f32_ty, llvm_i8_ty],
   1905         [IntrReadArgMem]>;
   1906   def int_x86_avx2_gather_q_ps_256 : GCCBuiltin<"__builtin_ia32_gatherq_ps256">,
   1907       Intrinsic<[llvm_v4f32_ty],
   1908         [llvm_v4f32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4f32_ty, llvm_i8_ty],
   1909         [IntrReadArgMem]>;
   1910 
   1911   def int_x86_avx2_gather_d_q : GCCBuiltin<"__builtin_ia32_gatherd_q">,
   1912       Intrinsic<[llvm_v2i64_ty],
   1913         [llvm_v2i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v2i64_ty, llvm_i8_ty],
   1914         [IntrReadArgMem]>;
   1915   def int_x86_avx2_gather_d_q_256 : GCCBuiltin<"__builtin_ia32_gatherd_q256">,
   1916       Intrinsic<[llvm_v4i64_ty],
   1917         [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i64_ty, llvm_i8_ty],
   1918         [IntrReadArgMem]>;
   1919   def int_x86_avx2_gather_q_q : GCCBuiltin<"__builtin_ia32_gatherq_q">,
   1920       Intrinsic<[llvm_v2i64_ty],
   1921         [llvm_v2i64_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
   1922         [IntrReadArgMem]>;
   1923   def int_x86_avx2_gather_q_q_256 : GCCBuiltin<"__builtin_ia32_gatherq_q256">,
   1924       Intrinsic<[llvm_v4i64_ty],
   1925         [llvm_v4i64_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
   1926         [IntrReadArgMem]>;
   1927   def int_x86_avx2_gather_d_d : GCCBuiltin<"__builtin_ia32_gatherd_d">,
   1928       Intrinsic<[llvm_v4i32_ty],
   1929         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
   1930         [IntrReadArgMem]>;
   1931   def int_x86_avx2_gather_d_d_256 : GCCBuiltin<"__builtin_ia32_gatherd_d256">,
   1932       Intrinsic<[llvm_v8i32_ty],
   1933         [llvm_v8i32_ty, llvm_ptr_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
   1934         [IntrReadArgMem]>;
   1935   def int_x86_avx2_gather_q_d : GCCBuiltin<"__builtin_ia32_gatherq_d">,
   1936       Intrinsic<[llvm_v4i32_ty],
   1937         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v2i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   1938         [IntrReadArgMem]>;
   1939   def int_x86_avx2_gather_q_d_256 : GCCBuiltin<"__builtin_ia32_gatherq_d256">,
   1940       Intrinsic<[llvm_v4i32_ty],
   1941         [llvm_v4i32_ty, llvm_ptr_ty, llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
   1942         [IntrReadArgMem]>;
   1943 }
   1944 
   1945 // Misc.
   1946 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1947   def int_x86_avx2_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb256">,
   1948               Intrinsic<[llvm_i32_ty], [llvm_v32i8_ty], [IntrNoMem]>;
   1949   def int_x86_avx2_pshuf_b : GCCBuiltin<"__builtin_ia32_pshufb256">,
   1950               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
   1951                          llvm_v32i8_ty], [IntrNoMem]>;
   1952   def int_x86_avx2_mpsadbw : GCCBuiltin<"__builtin_ia32_mpsadbw256">,
   1953               Intrinsic<[llvm_v16i16_ty], [llvm_v32i8_ty, llvm_v32i8_ty,
   1954                          llvm_i32_ty], [IntrNoMem, Commutative]>;
   1955   def int_x86_avx2_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa256">,
   1956               Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
   1957   def int_x86_avx512_movntdqa : GCCBuiltin<"__builtin_ia32_movntdqa512">,
   1958               Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty], [IntrReadMem]>;
   1959 }
   1960 
   1961 //===----------------------------------------------------------------------===//
   1962 // FMA3 and FMA4
   1963 
   1964 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   1965   def int_x86_fma_vfmadd_ss : GCCBuiltin<"__builtin_ia32_vfmaddss">,
   1966               Intrinsic<[llvm_v4f32_ty],
   1967                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   1968                         [IntrNoMem]>;
   1969   def int_x86_fma_vfmadd_sd : GCCBuiltin<"__builtin_ia32_vfmaddsd">,
   1970               Intrinsic<[llvm_v2f64_ty],
   1971                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   1972                         [IntrNoMem]>;
   1973   def int_x86_fma_vfmadd_ps : GCCBuiltin<"__builtin_ia32_vfmaddps">,
   1974               Intrinsic<[llvm_v4f32_ty],
   1975                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   1976                         [IntrNoMem]>;
   1977   def int_x86_fma_vfmadd_pd : GCCBuiltin<"__builtin_ia32_vfmaddpd">,
   1978               Intrinsic<[llvm_v2f64_ty],
   1979                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   1980                         [IntrNoMem]>;
   1981   def int_x86_fma_vfmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfmaddps256">,
   1982               Intrinsic<[llvm_v8f32_ty],
   1983                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   1984                         [IntrNoMem]>;
   1985   def int_x86_fma_vfmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfmaddpd256">,
   1986               Intrinsic<[llvm_v4f64_ty],
   1987                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   1988                         [IntrNoMem]>;
   1989   def int_x86_fma_vfmadd_ps_512 : GCCBuiltin<"__builtin_ia32_vfmaddps512">,
   1990               Intrinsic<[llvm_v16f32_ty],
   1991                         [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty],
   1992                         [IntrNoMem]>;
   1993   def int_x86_fma_vfmadd_pd_512 : GCCBuiltin<"__builtin_ia32_vfmaddpd512">,
   1994               Intrinsic<[llvm_v8f64_ty],
   1995                         [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty],
   1996                         [IntrNoMem]>;
   1997   def int_x86_fma_vfmsub_ss : GCCBuiltin<"__builtin_ia32_vfmsubss">,
   1998               Intrinsic<[llvm_v4f32_ty],
   1999                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2000                         [IntrNoMem]>;
   2001   def int_x86_fma_vfmsub_sd : GCCBuiltin<"__builtin_ia32_vfmsubsd">,
   2002               Intrinsic<[llvm_v2f64_ty],
   2003                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2004                         [IntrNoMem]>;
   2005   def int_x86_fma_vfmsub_ps : GCCBuiltin<"__builtin_ia32_vfmsubps">,
   2006               Intrinsic<[llvm_v4f32_ty],
   2007                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2008                         [IntrNoMem]>;
   2009   def int_x86_fma_vfmsub_pd : GCCBuiltin<"__builtin_ia32_vfmsubpd">,
   2010               Intrinsic<[llvm_v2f64_ty],
   2011                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2012                         [IntrNoMem]>;
   2013   def int_x86_fma_vfmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfmsubps256">,
   2014               Intrinsic<[llvm_v8f32_ty],
   2015                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2016                         [IntrNoMem]>;
   2017   def int_x86_fma_vfmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfmsubpd256">,
   2018               Intrinsic<[llvm_v4f64_ty],
   2019                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2020                         [IntrNoMem]>;
   2021   def int_x86_fma_vfmsub_ps_512 : GCCBuiltin<"__builtin_ia32_vfmsubps512">,
   2022               Intrinsic<[llvm_v16f32_ty],
   2023                         [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty],
   2024                         [IntrNoMem]>;
   2025   def int_x86_fma_vfmsub_pd_512 : GCCBuiltin<"__builtin_ia32_vfmsubpd512">,
   2026               Intrinsic<[llvm_v8f64_ty],
   2027                         [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty],
   2028                         [IntrNoMem]>;
   2029   def int_x86_fma_vfnmadd_ss : GCCBuiltin<"__builtin_ia32_vfnmaddss">,
   2030               Intrinsic<[llvm_v4f32_ty],
   2031                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2032                         [IntrNoMem]>;
   2033   def int_x86_fma_vfnmadd_sd : GCCBuiltin<"__builtin_ia32_vfnmaddsd">,
   2034               Intrinsic<[llvm_v2f64_ty],
   2035                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2036                         [IntrNoMem]>;
   2037   def int_x86_fma_vfnmadd_ps : GCCBuiltin<"__builtin_ia32_vfnmaddps">,
   2038               Intrinsic<[llvm_v4f32_ty],
   2039                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2040                         [IntrNoMem]>;
   2041   def int_x86_fma_vfnmadd_pd : GCCBuiltin<"__builtin_ia32_vfnmaddpd">,
   2042               Intrinsic<[llvm_v2f64_ty],
   2043                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2044                         [IntrNoMem]>;
   2045   def int_x86_fma_vfnmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmaddps256">,
   2046               Intrinsic<[llvm_v8f32_ty],
   2047                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2048                         [IntrNoMem]>;
   2049   def int_x86_fma_vfnmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmaddpd256">,
   2050               Intrinsic<[llvm_v4f64_ty],
   2051                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2052                         [IntrNoMem]>;
   2053   def int_x86_fma_vfnmadd_ps_512 : GCCBuiltin<"__builtin_ia32_vfnmaddps512">,
   2054               Intrinsic<[llvm_v16f32_ty],
   2055                         [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty],
   2056                         [IntrNoMem]>;
   2057   def int_x86_fma_vfnmadd_pd_512 : GCCBuiltin<"__builtin_ia32_vfnmaddpd512">,
   2058               Intrinsic<[llvm_v8f64_ty],
   2059                         [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty],
   2060                         [IntrNoMem]>;
   2061   def int_x86_fma_vfnmsub_ss : GCCBuiltin<"__builtin_ia32_vfnmsubss">,
   2062               Intrinsic<[llvm_v4f32_ty],
   2063                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2064                         [IntrNoMem]>;
   2065   def int_x86_fma_vfnmsub_sd : GCCBuiltin<"__builtin_ia32_vfnmsubsd">,
   2066               Intrinsic<[llvm_v2f64_ty],
   2067                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2068                         [IntrNoMem]>;
   2069   def int_x86_fma_vfnmsub_ps : GCCBuiltin<"__builtin_ia32_vfnmsubps">,
   2070               Intrinsic<[llvm_v4f32_ty],
   2071                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2072                         [IntrNoMem]>;
   2073   def int_x86_fma_vfnmsub_pd : GCCBuiltin<"__builtin_ia32_vfnmsubpd">,
   2074               Intrinsic<[llvm_v2f64_ty],
   2075                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2076                         [IntrNoMem]>;
   2077   def int_x86_fma_vfnmsub_ps_256 : GCCBuiltin<"__builtin_ia32_vfnmsubps256">,
   2078               Intrinsic<[llvm_v8f32_ty],
   2079                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2080                         [IntrNoMem]>;
   2081   def int_x86_fma_vfnmsub_pd_256 : GCCBuiltin<"__builtin_ia32_vfnmsubpd256">,
   2082               Intrinsic<[llvm_v4f64_ty],
   2083                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2084                         [IntrNoMem]>;
   2085   def int_x86_fma_vfnmsub_ps_512 : GCCBuiltin<"__builtin_ia32_vfnmsubps512">,
   2086               Intrinsic<[llvm_v16f32_ty],
   2087                         [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty],
   2088                         [IntrNoMem]>;
   2089   def int_x86_fma_vfnmsub_pd_512 : GCCBuiltin<"__builtin_ia32_vfnmsubpd512">,
   2090               Intrinsic<[llvm_v8f64_ty],
   2091                         [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty],
   2092                         [IntrNoMem]>;
   2093   def int_x86_fma_vfmaddsub_ps : GCCBuiltin<"__builtin_ia32_vfmaddsubps">,
   2094               Intrinsic<[llvm_v4f32_ty],
   2095                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2096                         [IntrNoMem]>;
   2097   def int_x86_fma_vfmaddsub_pd : GCCBuiltin<"__builtin_ia32_vfmaddsubpd">,
   2098               Intrinsic<[llvm_v2f64_ty],
   2099                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2100                         [IntrNoMem]>;
   2101   def int_x86_fma_vfmaddsub_ps_256 :
   2102                GCCBuiltin<"__builtin_ia32_vfmaddsubps256">,
   2103               Intrinsic<[llvm_v8f32_ty],
   2104                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2105                         [IntrNoMem]>;
   2106   def int_x86_fma_vfmaddsub_pd_256 :
   2107               GCCBuiltin<"__builtin_ia32_vfmaddsubpd256">,
   2108               Intrinsic<[llvm_v4f64_ty],
   2109                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2110                         [IntrNoMem]>;
   2111   def int_x86_fma_vfmaddsub_ps_512 : GCCBuiltin<"__builtin_ia32_vfmaddsubps512">,
   2112               Intrinsic<[llvm_v16f32_ty],
   2113                         [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty],
   2114                         [IntrNoMem]>;
   2115   def int_x86_fma_vfmaddsub_pd_512 : GCCBuiltin<"__builtin_ia32_vfmaddsubpd512">,
   2116               Intrinsic<[llvm_v8f64_ty],
   2117                         [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty],
   2118                         [IntrNoMem]>;
   2119   def int_x86_fma_vfmsubadd_ps : GCCBuiltin<"__builtin_ia32_vfmsubaddps">,
   2120               Intrinsic<[llvm_v4f32_ty],
   2121                         [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
   2122                         [IntrNoMem]>;
   2123   def int_x86_fma_vfmsubadd_pd : GCCBuiltin<"__builtin_ia32_vfmsubaddpd">,
   2124               Intrinsic<[llvm_v2f64_ty],
   2125                         [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
   2126                         [IntrNoMem]>;
   2127   def int_x86_fma_vfmsubadd_ps_256 :
   2128               GCCBuiltin<"__builtin_ia32_vfmsubaddps256">,
   2129               Intrinsic<[llvm_v8f32_ty],
   2130                         [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
   2131                         [IntrNoMem]>;
   2132   def int_x86_fma_vfmsubadd_pd_256 :
   2133               GCCBuiltin<"__builtin_ia32_vfmsubaddpd256">,
   2134               Intrinsic<[llvm_v4f64_ty],
   2135                         [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
   2136                         [IntrNoMem]>;
   2137   def int_x86_fma_vfmsubadd_ps_512 : GCCBuiltin<"__builtin_ia32_vfmsubaddps512">,
   2138               Intrinsic<[llvm_v16f32_ty],
   2139                         [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty],
   2140                         [IntrNoMem]>;
   2141   def int_x86_fma_vfmsubadd_pd_512 : GCCBuiltin<"__builtin_ia32_vfmsubaddpd512">,
   2142               Intrinsic<[llvm_v8f64_ty],
   2143                         [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty],
   2144                         [IntrNoMem]>;
   2145 }
   2146 
   2147 //===----------------------------------------------------------------------===//
   2148 // XOP
   2149 
   2150   def int_x86_xop_vpermil2pd : GCCBuiltin<"__builtin_ia32_vpermil2pd">,
   2151               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   2152                                           llvm_v2f64_ty, llvm_i8_ty],
   2153                         [IntrNoMem]>;
   2154 
   2155   def int_x86_xop_vpermil2pd_256 :
   2156               GCCBuiltin<"__builtin_ia32_vpermil2pd256">,
   2157               Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
   2158                                           llvm_v4f64_ty, llvm_i8_ty],
   2159                         [IntrNoMem]>;
   2160 
   2161   def int_x86_xop_vpermil2ps : GCCBuiltin<"__builtin_ia32_vpermil2ps">,
   2162               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   2163                                           llvm_v4f32_ty, llvm_i8_ty],
   2164                         [IntrNoMem]>;
   2165   def int_x86_xop_vpermil2ps_256 :
   2166               GCCBuiltin<"__builtin_ia32_vpermil2ps256">,
   2167               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
   2168                                           llvm_v8f32_ty, llvm_i8_ty],
   2169                         [IntrNoMem]>;
   2170 
   2171   def int_x86_xop_vfrcz_pd : GCCBuiltin<"__builtin_ia32_vfrczpd">,
   2172               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   2173   def int_x86_xop_vfrcz_ps : GCCBuiltin<"__builtin_ia32_vfrczps">,
   2174               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   2175   def int_x86_xop_vfrcz_sd : GCCBuiltin<"__builtin_ia32_vfrczsd">,
   2176               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   2177   def int_x86_xop_vfrcz_ss : GCCBuiltin<"__builtin_ia32_vfrczss">,
   2178               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   2179   def int_x86_xop_vfrcz_pd_256 : GCCBuiltin<"__builtin_ia32_vfrczpd256">,
   2180               Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   2181   def int_x86_xop_vfrcz_ps_256 : GCCBuiltin<"__builtin_ia32_vfrczps256">,
   2182               Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
   2183 
   2184   def int_x86_xop_vpcmov :
   2185               GCCBuiltin<"__builtin_ia32_vpcmov">,
   2186               Intrinsic<[llvm_v2i64_ty],
   2187                         [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty],
   2188                         [IntrNoMem]>;
   2189   def int_x86_xop_vpcmov_256 :
   2190               GCCBuiltin<"__builtin_ia32_vpcmov_256">,
   2191               Intrinsic<[llvm_v4i64_ty],
   2192                         [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty],
   2193                         [IntrNoMem]>;
   2194 
   2195   def int_x86_xop_vpcomb : GCCBuiltin<"__builtin_ia32_vpcomb">,
   2196               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
   2197                          llvm_i8_ty], [IntrNoMem]>;
   2198   def int_x86_xop_vpcomw : GCCBuiltin<"__builtin_ia32_vpcomw">,
   2199               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   2200                          llvm_i8_ty], [IntrNoMem]>;
   2201   def int_x86_xop_vpcomd : GCCBuiltin<"__builtin_ia32_vpcomd">,
   2202               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
   2203                          llvm_i8_ty], [IntrNoMem]>;
   2204   def int_x86_xop_vpcomq : GCCBuiltin<"__builtin_ia32_vpcomq">,
   2205               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   2206                          llvm_i8_ty], [IntrNoMem]>;
   2207   def int_x86_xop_vpcomub : GCCBuiltin<"__builtin_ia32_vpcomub">,
   2208               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
   2209                          llvm_i8_ty], [IntrNoMem]>;
   2210   def int_x86_xop_vpcomuw : GCCBuiltin<"__builtin_ia32_vpcomuw">,
   2211               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
   2212                          llvm_i8_ty], [IntrNoMem]>;
   2213   def int_x86_xop_vpcomud : GCCBuiltin<"__builtin_ia32_vpcomud">,
   2214               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
   2215                          llvm_i8_ty], [IntrNoMem]>;
   2216   def int_x86_xop_vpcomuq : GCCBuiltin<"__builtin_ia32_vpcomuq">,
   2217               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
   2218                          llvm_i8_ty], [IntrNoMem]>;
   2219 
   2220   def int_x86_xop_vphaddbd :
   2221               GCCBuiltin<"__builtin_ia32_vphaddbd">,
   2222               Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   2223   def int_x86_xop_vphaddbq :
   2224               GCCBuiltin<"__builtin_ia32_vphaddbq">,
   2225               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   2226   def int_x86_xop_vphaddbw :
   2227               GCCBuiltin<"__builtin_ia32_vphaddbw">,
   2228               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   2229   def int_x86_xop_vphadddq :
   2230               GCCBuiltin<"__builtin_ia32_vphadddq">,
   2231               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   2232   def int_x86_xop_vphaddubd :
   2233               GCCBuiltin<"__builtin_ia32_vphaddubd">,
   2234               Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   2235   def int_x86_xop_vphaddubq :
   2236               GCCBuiltin<"__builtin_ia32_vphaddubq">,
   2237               Intrinsic<[llvm_v2i64_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   2238   def int_x86_xop_vphaddubw :
   2239               GCCBuiltin<"__builtin_ia32_vphaddubw">,
   2240               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   2241   def int_x86_xop_vphaddudq :
   2242               GCCBuiltin<"__builtin_ia32_vphaddudq">,
   2243               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   2244   def int_x86_xop_vphadduwd :
   2245               GCCBuiltin<"__builtin_ia32_vphadduwd">,
   2246               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   2247   def int_x86_xop_vphadduwq :
   2248               GCCBuiltin<"__builtin_ia32_vphadduwq">,
   2249               Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   2250   def int_x86_xop_vphaddwd :
   2251               GCCBuiltin<"__builtin_ia32_vphaddwd">,
   2252               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   2253   def int_x86_xop_vphaddwq :
   2254               GCCBuiltin<"__builtin_ia32_vphaddwq">,
   2255               Intrinsic<[llvm_v2i64_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   2256   def int_x86_xop_vphsubbw :
   2257               GCCBuiltin<"__builtin_ia32_vphsubbw">,
   2258               Intrinsic<[llvm_v8i16_ty], [llvm_v16i8_ty], [IntrNoMem]>;
   2259   def int_x86_xop_vphsubdq :
   2260               GCCBuiltin<"__builtin_ia32_vphsubdq">,
   2261               Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   2262   def int_x86_xop_vphsubwd :
   2263               GCCBuiltin<"__builtin_ia32_vphsubwd">,
   2264               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   2265   def int_x86_xop_vpmacsdd :
   2266               GCCBuiltin<"__builtin_ia32_vpmacsdd">,
   2267               Intrinsic<[llvm_v4i32_ty],
   2268                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
   2269                         [IntrNoMem]>;
   2270   def int_x86_xop_vpmacsdqh :
   2271               GCCBuiltin<"__builtin_ia32_vpmacsdqh">,
   2272               Intrinsic<[llvm_v2i64_ty],
   2273                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
   2274                         [IntrNoMem]>;
   2275   def int_x86_xop_vpmacsdql :
   2276               GCCBuiltin<"__builtin_ia32_vpmacsdql">,
   2277               Intrinsic<[llvm_v2i64_ty],
   2278                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
   2279                         [IntrNoMem]>;
   2280   def int_x86_xop_vpmacssdd :
   2281               GCCBuiltin<"__builtin_ia32_vpmacssdd">,
   2282               Intrinsic<[llvm_v4i32_ty],
   2283                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
   2284                         [IntrNoMem]>;
   2285   def int_x86_xop_vpmacssdqh :
   2286               GCCBuiltin<"__builtin_ia32_vpmacssdqh">,
   2287               Intrinsic<[llvm_v2i64_ty],
   2288                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
   2289                         [IntrNoMem]>;
   2290   def int_x86_xop_vpmacssdql :
   2291               GCCBuiltin<"__builtin_ia32_vpmacssdql">,
   2292               Intrinsic<[llvm_v2i64_ty],
   2293                         [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v2i64_ty],
   2294                         [IntrNoMem]>;
   2295   def int_x86_xop_vpmacsswd :
   2296               GCCBuiltin<"__builtin_ia32_vpmacsswd">,
   2297               Intrinsic<[llvm_v4i32_ty],
   2298                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
   2299                         [IntrNoMem]>;
   2300   def int_x86_xop_vpmacssww :
   2301               GCCBuiltin<"__builtin_ia32_vpmacssww">,
   2302               Intrinsic<[llvm_v8i16_ty],
   2303                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
   2304                         [IntrNoMem]>;
   2305   def int_x86_xop_vpmacswd :
   2306               GCCBuiltin<"__builtin_ia32_vpmacswd">,
   2307               Intrinsic<[llvm_v4i32_ty],
   2308                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
   2309                         [IntrNoMem]>;
   2310   def int_x86_xop_vpmacsww :
   2311               GCCBuiltin<"__builtin_ia32_vpmacsww">,
   2312               Intrinsic<[llvm_v8i16_ty],
   2313                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty],
   2314                         [IntrNoMem]>;
   2315   def int_x86_xop_vpmadcsswd :
   2316               GCCBuiltin<"__builtin_ia32_vpmadcsswd">,
   2317               Intrinsic<[llvm_v4i32_ty],
   2318                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
   2319                         [IntrNoMem]>;
   2320   def int_x86_xop_vpmadcswd :
   2321               GCCBuiltin<"__builtin_ia32_vpmadcswd">,
   2322               Intrinsic<[llvm_v4i32_ty],
   2323                         [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty],
   2324                         [IntrNoMem]>;
   2325   def int_x86_xop_vpperm :
   2326               GCCBuiltin<"__builtin_ia32_vpperm">,
   2327               Intrinsic<[llvm_v16i8_ty],
   2328                         [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty],
   2329                         [IntrNoMem]>;
   2330 
   2331   def int_x86_xop_vprotb : GCCBuiltin<"__builtin_ia32_vprotb">,
   2332               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
   2333                         [IntrNoMem]>;
   2334   def int_x86_xop_vprotd : GCCBuiltin<"__builtin_ia32_vprotd">,
   2335               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   2336                         [IntrNoMem]>;
   2337   def int_x86_xop_vprotq : GCCBuiltin<"__builtin_ia32_vprotq">,
   2338               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   2339                         [IntrNoMem]>;
   2340   def int_x86_xop_vprotw : GCCBuiltin<"__builtin_ia32_vprotw">,
   2341               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
   2342                         [IntrNoMem]>;
   2343   def int_x86_xop_vprotbi : GCCBuiltin<"__builtin_ia32_vprotbi">,
   2344               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_i8_ty],
   2345                         [IntrNoMem]>;
   2346   def int_x86_xop_vprotdi : GCCBuiltin<"__builtin_ia32_vprotdi">,
   2347               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_i8_ty],
   2348                         [IntrNoMem]>;
   2349   def int_x86_xop_vprotqi : GCCBuiltin<"__builtin_ia32_vprotqi">,
   2350               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_i8_ty],
   2351                         [IntrNoMem]>;
   2352   def int_x86_xop_vprotwi : GCCBuiltin<"__builtin_ia32_vprotwi">,
   2353               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_i8_ty],
   2354                         [IntrNoMem]>;
   2355 
   2356   def int_x86_xop_vpshab :
   2357               GCCBuiltin<"__builtin_ia32_vpshab">,
   2358               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
   2359                         [IntrNoMem]>;
   2360   def int_x86_xop_vpshad :
   2361               GCCBuiltin<"__builtin_ia32_vpshad">,
   2362               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   2363                         [IntrNoMem]>;
   2364   def int_x86_xop_vpshaq :
   2365               GCCBuiltin<"__builtin_ia32_vpshaq">,
   2366               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   2367                         [IntrNoMem]>;
   2368   def int_x86_xop_vpshaw :
   2369               GCCBuiltin<"__builtin_ia32_vpshaw">,
   2370               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
   2371                         [IntrNoMem]>;
   2372   def int_x86_xop_vpshlb :
   2373               GCCBuiltin<"__builtin_ia32_vpshlb">,
   2374               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
   2375                         [IntrNoMem]>;
   2376   def int_x86_xop_vpshld :
   2377               GCCBuiltin<"__builtin_ia32_vpshld">,
   2378               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
   2379                         [IntrNoMem]>;
   2380   def int_x86_xop_vpshlq :
   2381               GCCBuiltin<"__builtin_ia32_vpshlq">,
   2382               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
   2383                         [IntrNoMem]>;
   2384   def int_x86_xop_vpshlw :
   2385               GCCBuiltin<"__builtin_ia32_vpshlw">,
   2386               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
   2387                         [IntrNoMem]>;
   2388 
   2389 //===----------------------------------------------------------------------===//
   2390 // MMX
   2391 
   2392 // Empty MMX state op.
   2393 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2394   def int_x86_mmx_emms  : GCCBuiltin<"__builtin_ia32_emms">,
   2395               Intrinsic<[], [], []>;
   2396   def int_x86_mmx_femms : GCCBuiltin<"__builtin_ia32_femms">,
   2397               Intrinsic<[], [], []>;
   2398 }
   2399 
   2400 // Integer arithmetic ops.
   2401 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2402   // Addition
   2403   def int_x86_mmx_padd_b : GCCBuiltin<"__builtin_ia32_paddb">,
   2404               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2405                         [IntrNoMem]>;
   2406   def int_x86_mmx_padd_w : GCCBuiltin<"__builtin_ia32_paddw">,
   2407               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2408                         [IntrNoMem]>;
   2409   def int_x86_mmx_padd_d : GCCBuiltin<"__builtin_ia32_paddd">,
   2410               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2411                         [IntrNoMem]>;
   2412   def int_x86_mmx_padd_q : GCCBuiltin<"__builtin_ia32_paddq">,
   2413               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2414                         [IntrNoMem]>;
   2415 
   2416   def int_x86_mmx_padds_b : GCCBuiltin<"__builtin_ia32_paddsb">,
   2417               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2418                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2419   def int_x86_mmx_padds_w : GCCBuiltin<"__builtin_ia32_paddsw">,
   2420               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2421                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2422 
   2423   def int_x86_mmx_paddus_b : GCCBuiltin<"__builtin_ia32_paddusb">,
   2424               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2425                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2426   def int_x86_mmx_paddus_w : GCCBuiltin<"__builtin_ia32_paddusw">,
   2427               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2428                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2429 
   2430   // Subtraction
   2431   def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">,
   2432               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2433                         [IntrNoMem]>;
   2434   def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">,
   2435               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2436                         [IntrNoMem]>;
   2437   def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">,
   2438               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2439                         [IntrNoMem]>;
   2440   def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">,
   2441               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2442                         [IntrNoMem]>;
   2443 
   2444   def int_x86_mmx_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb">,
   2445               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2446                          llvm_x86mmx_ty], [IntrNoMem]>;
   2447   def int_x86_mmx_psubs_w : GCCBuiltin<"__builtin_ia32_psubsw">,
   2448               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2449                          llvm_x86mmx_ty], [IntrNoMem]>;
   2450 
   2451   def int_x86_mmx_psubus_b : GCCBuiltin<"__builtin_ia32_psubusb">,
   2452               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2453                          llvm_x86mmx_ty], [IntrNoMem]>;
   2454   def int_x86_mmx_psubus_w : GCCBuiltin<"__builtin_ia32_psubusw">,
   2455               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2456                          llvm_x86mmx_ty], [IntrNoMem]>;
   2457 
   2458   // Multiplication
   2459   def int_x86_mmx_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw">,
   2460               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2461                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2462   def int_x86_mmx_pmull_w : GCCBuiltin<"__builtin_ia32_pmullw">,
   2463               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2464                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2465   def int_x86_mmx_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw">,
   2466               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2467                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2468   def int_x86_mmx_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq">,
   2469               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2470                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2471   def int_x86_mmx_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd">,
   2472               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2473                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2474 
   2475   // Bitwise operations
   2476   def int_x86_mmx_pand : GCCBuiltin<"__builtin_ia32_pand">,
   2477               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2478                         [IntrNoMem]>;
   2479   def int_x86_mmx_pandn : GCCBuiltin<"__builtin_ia32_pandn">,
   2480               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2481                         [IntrNoMem]>;
   2482   def int_x86_mmx_por : GCCBuiltin<"__builtin_ia32_por">,
   2483               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2484                         [IntrNoMem]>;
   2485   def int_x86_mmx_pxor : GCCBuiltin<"__builtin_ia32_pxor">,
   2486               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2487                         [IntrNoMem]>;
   2488 
   2489   // Averages
   2490   def int_x86_mmx_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb">,
   2491               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2492                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2493   def int_x86_mmx_pavg_w : GCCBuiltin<"__builtin_ia32_pavgw">,
   2494               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2495                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2496 
   2497   // Maximum
   2498   def int_x86_mmx_pmaxu_b : GCCBuiltin<"__builtin_ia32_pmaxub">,
   2499               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2500                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2501   def int_x86_mmx_pmaxs_w : GCCBuiltin<"__builtin_ia32_pmaxsw">,
   2502               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2503                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2504 
   2505   // Minimum
   2506   def int_x86_mmx_pminu_b : GCCBuiltin<"__builtin_ia32_pminub">,
   2507               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2508                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2509   def int_x86_mmx_pmins_w : GCCBuiltin<"__builtin_ia32_pminsw">,
   2510               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2511                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2512 
   2513   // Packed sum of absolute differences
   2514   def int_x86_mmx_psad_bw : GCCBuiltin<"__builtin_ia32_psadbw">,
   2515               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2516                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2517 }
   2518 
   2519 // Integer shift ops.
   2520 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2521   // Shift left logical
   2522   def int_x86_mmx_psll_w : GCCBuiltin<"__builtin_ia32_psllw">,
   2523               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2524                          llvm_x86mmx_ty], [IntrNoMem]>;
   2525   def int_x86_mmx_psll_d : GCCBuiltin<"__builtin_ia32_pslld">,
   2526               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2527                          llvm_x86mmx_ty], [IntrNoMem]>;
   2528   def int_x86_mmx_psll_q : GCCBuiltin<"__builtin_ia32_psllq">,
   2529               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2530                          llvm_x86mmx_ty], [IntrNoMem]>;
   2531 
   2532   def int_x86_mmx_psrl_w : GCCBuiltin<"__builtin_ia32_psrlw">,
   2533               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2534                          llvm_x86mmx_ty], [IntrNoMem]>;
   2535   def int_x86_mmx_psrl_d : GCCBuiltin<"__builtin_ia32_psrld">,
   2536               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2537                          llvm_x86mmx_ty], [IntrNoMem]>;
   2538   def int_x86_mmx_psrl_q : GCCBuiltin<"__builtin_ia32_psrlq">,
   2539               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2540                          llvm_x86mmx_ty], [IntrNoMem]>;
   2541 
   2542   def int_x86_mmx_psra_w : GCCBuiltin<"__builtin_ia32_psraw">,
   2543               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2544                          llvm_x86mmx_ty], [IntrNoMem]>;
   2545   def int_x86_mmx_psra_d : GCCBuiltin<"__builtin_ia32_psrad">,
   2546               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2547                          llvm_x86mmx_ty], [IntrNoMem]>;
   2548 
   2549   def int_x86_mmx_pslli_w : GCCBuiltin<"__builtin_ia32_psllwi">,
   2550               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2551                          llvm_i32_ty], [IntrNoMem]>;
   2552   def int_x86_mmx_pslli_d : GCCBuiltin<"__builtin_ia32_pslldi">,
   2553               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2554                          llvm_i32_ty], [IntrNoMem]>;
   2555   def int_x86_mmx_pslli_q : GCCBuiltin<"__builtin_ia32_psllqi">,
   2556               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2557                          llvm_i32_ty], [IntrNoMem]>;
   2558 
   2559   def int_x86_mmx_psrli_w : GCCBuiltin<"__builtin_ia32_psrlwi">,
   2560               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2561                          llvm_i32_ty], [IntrNoMem]>;
   2562   def int_x86_mmx_psrli_d : GCCBuiltin<"__builtin_ia32_psrldi">,
   2563               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2564                          llvm_i32_ty], [IntrNoMem]>;
   2565   def int_x86_mmx_psrli_q : GCCBuiltin<"__builtin_ia32_psrlqi">,
   2566               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2567                          llvm_i32_ty], [IntrNoMem]>;
   2568 
   2569   def int_x86_mmx_psrai_w : GCCBuiltin<"__builtin_ia32_psrawi">,
   2570               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2571                          llvm_i32_ty], [IntrNoMem]>;
   2572   def int_x86_mmx_psrai_d : GCCBuiltin<"__builtin_ia32_psradi">,
   2573               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2574                          llvm_i32_ty], [IntrNoMem]>;
   2575 }
   2576 
   2577 // Pack ops.
   2578 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2579   def int_x86_mmx_packsswb : GCCBuiltin<"__builtin_ia32_packsswb">,
   2580               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2581                          llvm_x86mmx_ty], [IntrNoMem]>;
   2582   def int_x86_mmx_packssdw : GCCBuiltin<"__builtin_ia32_packssdw">,
   2583               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2584                          llvm_x86mmx_ty], [IntrNoMem]>;
   2585   def int_x86_mmx_packuswb : GCCBuiltin<"__builtin_ia32_packuswb">,
   2586               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2587                          llvm_x86mmx_ty], [IntrNoMem]>;
   2588 }
   2589 
   2590 // Unpacking ops.
   2591 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2592   def int_x86_mmx_punpckhbw : GCCBuiltin<"__builtin_ia32_punpckhbw">,
   2593               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2594                         [IntrNoMem]>;
   2595   def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">,
   2596               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2597                         [IntrNoMem]>;
   2598   def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">,
   2599               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2600                         [IntrNoMem]>;
   2601   def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">,
   2602               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2603                         [IntrNoMem]>;
   2604   def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">,
   2605               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2606                         [IntrNoMem]>;
   2607   def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">,
   2608               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty, llvm_x86mmx_ty],
   2609                         [IntrNoMem]>;
   2610 }
   2611 
   2612 // Integer comparison ops
   2613 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2614   def int_x86_mmx_pcmpeq_b : GCCBuiltin<"__builtin_ia32_pcmpeqb">,
   2615               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2616                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2617   def int_x86_mmx_pcmpeq_w : GCCBuiltin<"__builtin_ia32_pcmpeqw">,
   2618               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2619                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2620   def int_x86_mmx_pcmpeq_d : GCCBuiltin<"__builtin_ia32_pcmpeqd">,
   2621               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2622                          llvm_x86mmx_ty], [IntrNoMem, Commutative]>;
   2623 
   2624   def int_x86_mmx_pcmpgt_b : GCCBuiltin<"__builtin_ia32_pcmpgtb">,
   2625               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2626                          llvm_x86mmx_ty], [IntrNoMem]>;
   2627   def int_x86_mmx_pcmpgt_w : GCCBuiltin<"__builtin_ia32_pcmpgtw">,
   2628               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2629                          llvm_x86mmx_ty], [IntrNoMem]>;
   2630   def int_x86_mmx_pcmpgt_d : GCCBuiltin<"__builtin_ia32_pcmpgtd">,
   2631               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2632                          llvm_x86mmx_ty], [IntrNoMem]>;
   2633 }
   2634 
   2635 // Misc.
   2636 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2637   def int_x86_mmx_maskmovq : GCCBuiltin<"__builtin_ia32_maskmovq">,
   2638               Intrinsic<[], [llvm_x86mmx_ty, llvm_x86mmx_ty, llvm_ptr_ty], []>;
   2639 
   2640   def int_x86_mmx_pmovmskb : GCCBuiltin<"__builtin_ia32_pmovmskb">,
   2641               Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty], [IntrNoMem]>;
   2642 
   2643   def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">,
   2644               Intrinsic<[], [llvm_ptrx86mmx_ty, llvm_x86mmx_ty], []>;
   2645 
   2646   def int_x86_mmx_palignr_b : GCCBuiltin<"__builtin_ia32_palignr">,
   2647               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2648                         llvm_x86mmx_ty, llvm_i8_ty], [IntrNoMem]>;
   2649 
   2650   def int_x86_mmx_pextr_w : GCCBuiltin<"__builtin_ia32_vec_ext_v4hi">,
   2651               Intrinsic<[llvm_i32_ty], [llvm_x86mmx_ty, llvm_i32_ty],
   2652                         [IntrNoMem]>;
   2653 
   2654   def int_x86_mmx_pinsr_w : GCCBuiltin<"__builtin_ia32_vec_set_v4hi">,
   2655               Intrinsic<[llvm_x86mmx_ty], [llvm_x86mmx_ty,
   2656                         llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   2657 }
   2658 
   2659 //===----------------------------------------------------------------------===//
   2660 // BMI
   2661 
   2662 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2663   def int_x86_bmi_bextr_32 : GCCBuiltin<"__builtin_ia32_bextr_u32">,
   2664               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   2665   def int_x86_bmi_bextr_64 : GCCBuiltin<"__builtin_ia32_bextr_u64">,
   2666               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   2667   def int_x86_bmi_bzhi_32 : GCCBuiltin<"__builtin_ia32_bzhi_si">,
   2668               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   2669   def int_x86_bmi_bzhi_64 : GCCBuiltin<"__builtin_ia32_bzhi_di">,
   2670               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   2671   def int_x86_bmi_pdep_32 : GCCBuiltin<"__builtin_ia32_pdep_si">,
   2672               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   2673   def int_x86_bmi_pdep_64 : GCCBuiltin<"__builtin_ia32_pdep_di">,
   2674               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   2675   def int_x86_bmi_pext_32 : GCCBuiltin<"__builtin_ia32_pext_si">,
   2676               Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   2677   def int_x86_bmi_pext_64 : GCCBuiltin<"__builtin_ia32_pext_di">,
   2678               Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   2679 }
   2680 
   2681 //===----------------------------------------------------------------------===//
   2682 // FS/GS Base
   2683 
   2684 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2685   def int_x86_rdfsbase_32 : GCCBuiltin<"__builtin_ia32_rdfsbase32">,
   2686               Intrinsic<[llvm_i32_ty], []>;
   2687   def int_x86_rdgsbase_32 : GCCBuiltin<"__builtin_ia32_rdgsbase32">,
   2688               Intrinsic<[llvm_i32_ty], []>;
   2689   def int_x86_rdfsbase_64 : GCCBuiltin<"__builtin_ia32_rdfsbase64">,
   2690               Intrinsic<[llvm_i64_ty], []>;
   2691   def int_x86_rdgsbase_64 : GCCBuiltin<"__builtin_ia32_rdgsbase64">,
   2692               Intrinsic<[llvm_i64_ty], []>;
   2693   def int_x86_wrfsbase_32 : GCCBuiltin<"__builtin_ia32_wrfsbase32">,
   2694               Intrinsic<[], [llvm_i32_ty]>;
   2695   def int_x86_wrgsbase_32 : GCCBuiltin<"__builtin_ia32_wrgsbase32">,
   2696               Intrinsic<[], [llvm_i32_ty]>;
   2697   def int_x86_wrfsbase_64 : GCCBuiltin<"__builtin_ia32_wrfsbase64">,
   2698               Intrinsic<[], [llvm_i64_ty]>;
   2699   def int_x86_wrgsbase_64 : GCCBuiltin<"__builtin_ia32_wrgsbase64">,
   2700               Intrinsic<[], [llvm_i64_ty]>;
   2701 }
   2702 
   2703 //===----------------------------------------------------------------------===//
   2704 // Half float conversion
   2705 
   2706 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2707   def int_x86_vcvtph2ps_128 : GCCBuiltin<"__builtin_ia32_vcvtph2ps">,
   2708               Intrinsic<[llvm_v4f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   2709   def int_x86_vcvtph2ps_256 : GCCBuiltin<"__builtin_ia32_vcvtph2ps256">,
   2710               Intrinsic<[llvm_v8f32_ty], [llvm_v8i16_ty], [IntrNoMem]>;
   2711   def int_x86_vcvtps2ph_128 : GCCBuiltin<"__builtin_ia32_vcvtps2ph">,
   2712               Intrinsic<[llvm_v8i16_ty], [llvm_v4f32_ty, llvm_i32_ty],
   2713                         [IntrNoMem]>;
   2714   def int_x86_vcvtps2ph_256 : GCCBuiltin<"__builtin_ia32_vcvtps2ph256">,
   2715               Intrinsic<[llvm_v8i16_ty], [llvm_v8f32_ty, llvm_i32_ty],
   2716                         [IntrNoMem]>;
   2717   def int_x86_avx512_mask_vcvtph2ps_512 : GCCBuiltin<"__builtin_ia32_vcvtph2ps512_mask">,
   2718               Intrinsic<[llvm_v16f32_ty], [llvm_v16i16_ty, llvm_v16f32_ty,
   2719                                            llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2720   def int_x86_avx512_mask_vcvtps2ph_512 : GCCBuiltin<"__builtin_ia32_vcvtps2ph512_mask">,
   2721               Intrinsic<[llvm_v16i16_ty], [llvm_v16f32_ty, llvm_i32_ty,
   2722                                            llvm_v16i16_ty, llvm_i16_ty], [IntrNoMem]>;
   2723 }
   2724 
   2725 //===----------------------------------------------------------------------===//
   2726 // TBM
   2727 
   2728 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2729   def int_x86_tbm_bextri_u32 : GCCBuiltin<"__builtin_ia32_bextri_u32">,
   2730         Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
   2731   def int_x86_tbm_bextri_u64 : GCCBuiltin<"__builtin_ia32_bextri_u64">,
   2732         Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty], [IntrNoMem]>;
   2733 }
   2734 
   2735 //===----------------------------------------------------------------------===//
   2736 // RDRAND intrinsics - Return a random value and whether it is valid.
   2737 // RDSEED intrinsics - Return a NIST SP800-90B & C compliant random value and
   2738 // whether it is valid.
   2739 
   2740 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2741   // These are declared side-effecting so they don't get eliminated by CSE or
   2742   // LICM.
   2743   def int_x86_rdrand_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
   2744   def int_x86_rdrand_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
   2745   def int_x86_rdrand_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
   2746   def int_x86_rdseed_16 : Intrinsic<[llvm_i16_ty, llvm_i32_ty], [], []>;
   2747   def int_x86_rdseed_32 : Intrinsic<[llvm_i32_ty, llvm_i32_ty], [], []>;
   2748   def int_x86_rdseed_64 : Intrinsic<[llvm_i64_ty, llvm_i32_ty], [], []>;
   2749 }
   2750 
   2751 //===----------------------------------------------------------------------===//
   2752 // RTM intrinsics. Transactional Memory support.
   2753 
   2754 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2755   def int_x86_xbegin : GCCBuiltin<"__builtin_ia32_xbegin">,
   2756               Intrinsic<[llvm_i32_ty], [], []>;
   2757   def int_x86_xend : GCCBuiltin<"__builtin_ia32_xend">,
   2758               Intrinsic<[], [], []>;
   2759   def int_x86_xabort : GCCBuiltin<"__builtin_ia32_xabort">,
   2760               Intrinsic<[], [llvm_i8_ty], [IntrNoReturn]>;
   2761   def int_x86_xtest : GCCBuiltin<"__builtin_ia32_xtest">,
   2762               Intrinsic<[llvm_i32_ty], [], []>;
   2763 }
   2764 
   2765 //===----------------------------------------------------------------------===//
   2766 // AVX512
   2767 
   2768 // Mask ops
   2769 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2770   // Mask instructions
   2771   // 16-bit mask
   2772   def int_x86_avx512_kand_w : GCCBuiltin<"__builtin_ia32_kandhi">,
   2773               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   2774                          [IntrNoMem]>;
   2775   def int_x86_avx512_kandn_w : GCCBuiltin<"__builtin_ia32_kandnhi">,
   2776               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   2777                          [IntrNoMem]>;
   2778   def int_x86_avx512_knot_w : GCCBuiltin<"__builtin_ia32_knothi">,
   2779               Intrinsic<[llvm_i16_ty], [llvm_i16_ty], [IntrNoMem]>;
   2780   def int_x86_avx512_kor_w : GCCBuiltin<"__builtin_ia32_korhi">,
   2781               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   2782                          [IntrNoMem]>;
   2783   def int_x86_avx512_kxor_w : GCCBuiltin<"__builtin_ia32_kxorhi">,
   2784               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   2785                          [IntrNoMem]>;
   2786   def int_x86_avx512_kxnor_w : GCCBuiltin<"__builtin_ia32_kxnorhi">,
   2787               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   2788                          [IntrNoMem]>;
   2789   def int_x86_avx512_kunpck_bw : GCCBuiltin<"__builtin_ia32_kunpckhi">,
   2790               Intrinsic<[llvm_i16_ty], [llvm_i16_ty, llvm_i16_ty],
   2791                          [IntrNoMem]>;
   2792   def int_x86_avx512_kortestz_w : GCCBuiltin<"__builtin_ia32_kortestzhi">,
   2793               Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
   2794                         [IntrNoMem]>;
   2795   def int_x86_avx512_kortestc_w : GCCBuiltin<"__builtin_ia32_kortestchi">,
   2796               Intrinsic<[llvm_i32_ty], [llvm_i16_ty, llvm_i16_ty],
   2797                         [IntrNoMem]>;
   2798 }
   2799 
   2800 // Conversion ops
   2801 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2802   def int_x86_avx512_cvtss2usi : GCCBuiltin<"__builtin_ia32_cvtss2usi">,
   2803               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   2804   def int_x86_avx512_cvtss2usi64 : GCCBuiltin<"__builtin_ia32_cvtss2usi64">,
   2805               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   2806   def int_x86_avx512_cvttss2usi : GCCBuiltin<"__builtin_ia32_cvttss2usi">,
   2807               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   2808   def int_x86_avx512_cvttss2usi64 : GCCBuiltin<"__builtin_ia32_cvttss2usi64">,
   2809               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   2810   def int_x86_avx512_cvtusi2ss : GCCBuiltin<"__builtin_ia32_cvtusi2ss">,
   2811               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
   2812                          llvm_i32_ty], [IntrNoMem]>;
   2813   def int_x86_avx512_cvtusi642ss : GCCBuiltin<"__builtin_ia32_cvtusi642ss">,
   2814               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
   2815                          llvm_i64_ty], [IntrNoMem]>;
   2816 
   2817   def int_x86_avx512_cvtsd2usi : GCCBuiltin<"__builtin_ia32_cvtsd2usi">,
   2818               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   2819   def int_x86_avx512_cvtsd2usi64 : GCCBuiltin<"__builtin_ia32_cvtsd2usi64">,
   2820               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   2821   def int_x86_avx512_cvttsd2usi : GCCBuiltin<"__builtin_ia32_cvttsd2usi">,
   2822               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   2823   def int_x86_avx512_cvttsd2usi64 : GCCBuiltin<"__builtin_ia32_cvttsd2usi64">,
   2824               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   2825   def int_x86_avx512_cvtusi2sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd">,
   2826               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
   2827                          llvm_i32_ty], [IntrNoMem]>;
   2828   def int_x86_avx512_cvtusi642sd : GCCBuiltin<"__builtin_ia32_cvtusi642sd">,
   2829               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
   2830                          llvm_i64_ty], [IntrNoMem]>;
   2831 }
   2832 
   2833 // Vector convert
   2834 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2835   def int_x86_avx512_mask_cvttps2dq_512: GCCBuiltin<"__builtin_ia32_cvttps2dq512_mask">,
   2836         Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty,
   2837                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2838   def int_x86_avx512_mask_cvttps2udq_512: GCCBuiltin<"__builtin_ia32_cvttps2udq512_mask">,
   2839         Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty,
   2840                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2841   def int_x86_avx512_mask_cvttpd2dq_512: GCCBuiltin<"__builtin_ia32_cvttpd2dq512_mask">,
   2842         Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty,
   2843                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2844   def int_x86_avx512_mask_cvttpd2udq_512: GCCBuiltin<"__builtin_ia32_cvttpd2udq512_mask">,
   2845         Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty,
   2846                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2847   def int_x86_avx512_mask_rndscale_ps_512: GCCBuiltin<"__builtin_ia32_rndscaleps_mask">,
   2848         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_v16f32_ty,
   2849                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2850   def int_x86_avx512_mask_rndscale_pd_512: GCCBuiltin<"__builtin_ia32_rndscalepd_mask">,
   2851         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_v8f64_ty,
   2852                                      llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2853   def int_x86_avx512_mask_cvtps2dq_512: GCCBuiltin<"__builtin_ia32_cvtps2dq512_mask">,
   2854         Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty,
   2855                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2856   def int_x86_avx512_mask_cvtpd2dq_512: GCCBuiltin<"__builtin_ia32_cvtpd2dq512_mask">,
   2857         Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty,
   2858                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2859   def int_x86_avx512_mask_cvtps2udq_512: GCCBuiltin<"__builtin_ia32_cvtps2udq512_mask">,
   2860         Intrinsic<[llvm_v16i32_ty], [llvm_v16f32_ty, llvm_v16i32_ty,
   2861                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2862   def int_x86_avx512_mask_cvtpd2udq_512: GCCBuiltin<"__builtin_ia32_cvtpd2udq512_mask">,
   2863         Intrinsic<[llvm_v8i32_ty], [llvm_v8f64_ty, llvm_v8i32_ty,
   2864                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2865   def int_x86_avx512_mask_cvtdq2ps_512 : GCCBuiltin<"__builtin_ia32_cvtdq2ps512_mask">,
   2866         Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty, llvm_v16f32_ty,
   2867                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2868   def int_x86_avx512_mask_cvtdq2pd_512 : GCCBuiltin<"__builtin_ia32_cvtdq2pd512_mask">,
   2869         Intrinsic<[llvm_v8f64_ty], [llvm_v8i32_ty, llvm_v8f64_ty,
   2870                                     llvm_i8_ty], [IntrNoMem]>;
   2871   def int_x86_avx512_mask_cvtudq2ps_512 : GCCBuiltin<"__builtin_ia32_cvtudq2ps512_mask">,
   2872         Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty, llvm_v16f32_ty,
   2873                                      llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2874   def int_x86_avx512_mask_cvtudq2pd_512 : GCCBuiltin<"__builtin_ia32_cvtudq2pd512_mask">,
   2875         Intrinsic<[llvm_v8f64_ty], [llvm_v8i32_ty, llvm_v8f64_ty,
   2876                                     llvm_i8_ty], [IntrNoMem]>;
   2877   def int_x86_avx512_mask_cvtpd2ps_512 : GCCBuiltin<"__builtin_ia32_cvtpd2ps512_mask">,
   2878         Intrinsic<[llvm_v8f32_ty], [llvm_v8f64_ty, llvm_v8f32_ty,
   2879                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2880 }
   2881 
   2882 // Vector load with broadcast
   2883 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2884   def int_x86_avx512_vbroadcast_ss_512 :
   2885         GCCBuiltin<"__builtin_ia32_vbroadcastss512">,
   2886         Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
   2887   def int_x86_avx512_vbroadcast_ss_ps_512 :
   2888               GCCBuiltin<"__builtin_ia32_vbroadcastss_ps512">,
   2889               Intrinsic<[llvm_v16f32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   2890 
   2891   def int_x86_avx512_vbroadcast_sd_512 :
   2892         GCCBuiltin<"__builtin_ia32_vbroadcastsd512">,
   2893         Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty], [IntrReadArgMem]>;
   2894   def int_x86_avx512_vbroadcast_sd_pd_512 :
   2895               GCCBuiltin<"__builtin_ia32_vbroadcastsd_pd512">,
   2896               Intrinsic<[llvm_v8f64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   2897 
   2898   def int_x86_avx512_pbroadcastd_512 :
   2899          GCCBuiltin<"__builtin_ia32_pbroadcastd512">,
   2900          Intrinsic<[llvm_v16i32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   2901   def int_x86_avx512_pbroadcastd_i32_512 :
   2902          Intrinsic<[llvm_v16i32_ty], [llvm_i32_ty], [IntrNoMem]>;
   2903 
   2904   def int_x86_avx512_pbroadcastq_512 :
   2905          GCCBuiltin<"__builtin_ia32_pbroadcastq512">,
   2906          Intrinsic<[llvm_v8i64_ty], [llvm_v2i64_ty], [IntrNoMem]>;
   2907   def int_x86_avx512_pbroadcastq_i64_512 :
   2908          Intrinsic<[llvm_v8i64_ty], [llvm_i64_ty], [IntrNoMem]>;
   2909 }
   2910 
   2911 // Vector sign and zero extend
   2912 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2913   def int_x86_avx512_pmovzxbq : GCCBuiltin<"__builtin_ia32_pmovzxbq512">,
   2914               Intrinsic<[llvm_v8i64_ty], [llvm_v16i8_ty],
   2915                         [IntrNoMem]>;
   2916   def int_x86_avx512_pmovzxwd : GCCBuiltin<"__builtin_ia32_pmovzxwd512">,
   2917               Intrinsic<[llvm_v16i32_ty], [llvm_v16i16_ty],
   2918                         [IntrNoMem]>;
   2919   def int_x86_avx512_pmovzxbd : GCCBuiltin<"__builtin_ia32_pmovzxbd512">,
   2920               Intrinsic<[llvm_v16i32_ty], [llvm_v16i8_ty],
   2921                         [IntrNoMem]>;
   2922   def int_x86_avx512_pmovzxwq : GCCBuiltin<"__builtin_ia32_pmovzxwq512">,
   2923               Intrinsic<[llvm_v8i64_ty], [llvm_v8i16_ty],
   2924                         [IntrNoMem]>;
   2925   def int_x86_avx512_pmovzxdq : GCCBuiltin<"__builtin_ia32_pmovzxdq512">,
   2926               Intrinsic<[llvm_v8i64_ty], [llvm_v8i32_ty],
   2927                         [IntrNoMem]>;
   2928 }
   2929 
   2930 // Arithmetic ops
   2931 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   2932   def int_x86_avx512_mask_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512_mask">,
   2933           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   2934                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2935   def int_x86_avx512_mask_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512_mask">,
   2936           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   2937                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2938   def int_x86_avx512_mask_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512_mask">,
   2939           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   2940                      llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2941   def int_x86_avx512_mask_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512_mask">,
   2942           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   2943                      llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2944 
   2945   def int_x86_avx512_rndscale_ss        : GCCBuiltin<"__builtin_ia32_rndscaless">,
   2946               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   2947                          llvm_i32_ty], [IntrNoMem]>;
   2948   def int_x86_avx512_rndscale_sd        : GCCBuiltin<"__builtin_ia32_rndscalesd">,
   2949               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   2950                          llvm_i32_ty], [IntrNoMem]>;
   2951   def int_x86_avx512_sqrt_ss        : GCCBuiltin<"__builtin_ia32_sqrtrndss">,
   2952               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty],
   2953                         [IntrNoMem]>;
   2954   def int_x86_avx512_sqrt_sd        : GCCBuiltin<"__builtin_ia32_sqrtrndsd">,
   2955               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty],
   2956                         [IntrNoMem]>;
   2957 
   2958   def int_x86_avx512_sqrt_pd_512 : GCCBuiltin<"__builtin_ia32_sqrtpd512">,
   2959         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty], [IntrNoMem]>;
   2960   def int_x86_avx512_sqrt_ps_512 : GCCBuiltin<"__builtin_ia32_sqrtps512">,
   2961         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty], [IntrNoMem]>;
   2962 
   2963   def int_x86_avx512_rsqrt14_ss : GCCBuiltin<"__builtin_ia32_rsqrt14ss_mask">,
   2964         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
   2965                                     llvm_i8_ty], [IntrNoMem]>;
   2966   def int_x86_avx512_rsqrt14_sd : GCCBuiltin<"__builtin_ia32_rsqrt14sd_mask">,
   2967         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
   2968                                     llvm_i8_ty], [IntrNoMem]>;
   2969 
   2970   def int_x86_avx512_rsqrt14_pd_512 : GCCBuiltin<"__builtin_ia32_rsqrt14pd512_mask">,
   2971         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   2972                                     llvm_i8_ty], [IntrNoMem]>;
   2973   def int_x86_avx512_rsqrt14_ps_512 : GCCBuiltin<"__builtin_ia32_rsqrt14ps512_mask">,
   2974         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   2975                                      llvm_i16_ty], [IntrNoMem]>;
   2976   def int_x86_avx512_rcp14_ss : GCCBuiltin<"__builtin_ia32_rcp14ss_mask">,
   2977         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
   2978                                     llvm_i8_ty], [IntrNoMem]>;
   2979   def int_x86_avx512_rcp14_sd : GCCBuiltin<"__builtin_ia32_rcp14sd_mask">,
   2980         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
   2981                                     llvm_i8_ty], [IntrNoMem]>;
   2982 
   2983   def int_x86_avx512_rcp14_pd_512 : GCCBuiltin<"__builtin_ia32_rcp14pd512_mask">,
   2984         Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   2985                                     llvm_i8_ty], [IntrNoMem]>;
   2986   def int_x86_avx512_rcp14_ps_512 : GCCBuiltin<"__builtin_ia32_rcp14ps512_mask">,
   2987         Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   2988                                      llvm_i16_ty], [IntrNoMem]>;
   2989 
   2990   def int_x86_avx512_rcp28_ps : GCCBuiltin<"__builtin_ia32_rcp28ps_mask">,
   2991             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   2992                                          llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   2993   def int_x86_avx512_rcp28_pd : GCCBuiltin<"__builtin_ia32_rcp28pd_mask">,
   2994             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   2995                                         llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   2996   def int_x86_avx512_rcp28_ss : GCCBuiltin<"__builtin_ia32_rcp28ss_mask">,
   2997             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   2998                                         llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
   2999                       [IntrNoMem]>;
   3000   def int_x86_avx512_rcp28_sd : GCCBuiltin<"__builtin_ia32_rcp28sd_mask">,
   3001             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   3002                                         llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
   3003                       [IntrNoMem]>;
   3004   def int_x86_avx512_rsqrt28_ps : GCCBuiltin<"__builtin_ia32_rsqrt28ps_mask">,
   3005             Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
   3006                                          llvm_i16_ty, llvm_i32_ty],
   3007                       [IntrNoMem]>;
   3008   def int_x86_avx512_rsqrt28_pd : GCCBuiltin<"__builtin_ia32_rsqrt28pd_mask">,
   3009             Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
   3010                                         llvm_i8_ty, llvm_i32_ty],
   3011                       [IntrNoMem]>;
   3012   def int_x86_avx512_rsqrt28_ss : GCCBuiltin<"__builtin_ia32_rsqrt28ss_mask">,
   3013             Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
   3014                                         llvm_v4f32_ty, llvm_i8_ty, llvm_i32_ty],
   3015                       [IntrNoMem]>;
   3016   def int_x86_avx512_rsqrt28_sd : GCCBuiltin<"__builtin_ia32_rsqrt28sd_mask">,
   3017             Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
   3018                                         llvm_v2f64_ty, llvm_i8_ty, llvm_i32_ty],
   3019                       [IntrNoMem]>;
   3020 }
   3021 
   3022 // Integer shift ops.
   3023 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3024   def int_x86_avx512_psll_dq : GCCBuiltin<"__builtin_ia32_pslldqi512">,
   3025               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   3026                          llvm_i32_ty], [IntrNoMem]>;
   3027   def int_x86_avx512_psrl_dq : GCCBuiltin<"__builtin_ia32_psrldqi512">,
   3028               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   3029                          llvm_i32_ty], [IntrNoMem]>;
   3030   def int_x86_avx512_psll_dq_bs : GCCBuiltin<"__builtin_ia32_pslldqi512_byteshift">,
   3031               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   3032                          llvm_i32_ty], [IntrNoMem]>;
   3033   def int_x86_avx512_psrl_dq_bs : GCCBuiltin<"__builtin_ia32_psrldqi512_byteshift">,
   3034               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   3035                          llvm_i32_ty], [IntrNoMem]>;
   3036 }
   3037 
   3038 // Gather and Scatter ops
   3039 let TargetPrefix = "x86" in {
   3040   def int_x86_avx512_gather_dpd_512  : GCCBuiltin<"__builtin_ia32_gathersiv8df">,
   3041           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
   3042                      llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
   3043                     [IntrReadArgMem]>;
   3044   def int_x86_avx512_gather_dps_512  : GCCBuiltin<"__builtin_ia32_gathersiv16sf">,
   3045           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_ptr_ty,
   3046                      llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
   3047                     [IntrReadArgMem]>;
   3048   def int_x86_avx512_gather_qpd_512  : GCCBuiltin<"__builtin_ia32_gatherdiv8df">,
   3049           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_ptr_ty,
   3050                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
   3051                     [IntrReadArgMem]>;
   3052   def int_x86_avx512_gather_qps_512  : GCCBuiltin<"__builtin_ia32_gatherdiv16sf">,
   3053           Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_ptr_ty,
   3054                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
   3055                     [IntrReadArgMem]>;
   3056 
   3057 
   3058   def int_x86_avx512_gather_dpq_512  : GCCBuiltin<"__builtin_ia32_gathersiv8di">,
   3059           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
   3060                      llvm_v8i32_ty, llvm_i8_ty, llvm_i32_ty],
   3061                     [IntrReadArgMem]>;
   3062   def int_x86_avx512_gather_dpi_512  : GCCBuiltin<"__builtin_ia32_gathersiv16si">,
   3063           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_ptr_ty,
   3064                      llvm_v16i32_ty, llvm_i16_ty, llvm_i32_ty],
   3065                     [IntrReadArgMem]>;
   3066   def int_x86_avx512_gather_qpq_512  : GCCBuiltin<"__builtin_ia32_gatherdiv8di">,
   3067           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_ptr_ty,
   3068                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
   3069                     [IntrReadArgMem]>;
   3070   def int_x86_avx512_gather_qpi_512  : GCCBuiltin<"__builtin_ia32_gatherdiv16si">,
   3071           Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_ptr_ty,
   3072                      llvm_v8i64_ty, llvm_i8_ty, llvm_i32_ty],
   3073                     [IntrReadArgMem]>;
   3074 
   3075 // scatter
   3076   def int_x86_avx512_scatter_dpd_512  : GCCBuiltin<"__builtin_ia32_scattersiv8df">,
   3077           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
   3078                         llvm_v8i32_ty, llvm_v8f64_ty, llvm_i32_ty],
   3079                     [IntrReadWriteArgMem]>;
   3080   def int_x86_avx512_scatter_dps_512  : GCCBuiltin<"__builtin_ia32_scattersiv16sf">,
   3081           Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
   3082                        llvm_v16i32_ty, llvm_v16f32_ty, llvm_i32_ty],
   3083                     [IntrReadWriteArgMem]>;
   3084   def int_x86_avx512_scatter_qpd_512  : GCCBuiltin<"__builtin_ia32_scatterdiv8df">,
   3085           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
   3086                      llvm_v8i64_ty, llvm_v8f64_ty, llvm_i32_ty],
   3087                     [IntrReadWriteArgMem]>;
   3088   def int_x86_avx512_scatter_qps_512  : GCCBuiltin<"__builtin_ia32_scatterdiv16sf">,
   3089           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
   3090                      llvm_v8i64_ty, llvm_v8f32_ty, llvm_i32_ty],
   3091                     [IntrReadWriteArgMem]>;
   3092 
   3093 
   3094   def int_x86_avx512_scatter_dpq_512  : GCCBuiltin<"__builtin_ia32_scattersiv8di">,
   3095           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,
   3096                          llvm_v8i32_ty, llvm_v8i64_ty, llvm_i32_ty],
   3097                     [IntrReadWriteArgMem]>;
   3098   def int_x86_avx512_scatter_dpi_512  : GCCBuiltin<"__builtin_ia32_scattersiv16si">,
   3099           Intrinsic<[], [llvm_ptr_ty, llvm_i16_ty,
   3100                      llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty],
   3101                     [IntrReadWriteArgMem]>;
   3102   def int_x86_avx512_scatter_qpq_512  : GCCBuiltin<"__builtin_ia32_scatterdiv8di">,
   3103           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty,llvm_v8i64_ty, llvm_v8i64_ty,
   3104                          llvm_i32_ty],
   3105                     [IntrReadWriteArgMem]>;
   3106   def int_x86_avx512_scatter_qpi_512  : GCCBuiltin<"__builtin_ia32_scatterdiv16si">,
   3107           Intrinsic<[], [llvm_ptr_ty, llvm_i8_ty, llvm_v8i64_ty, llvm_v8i32_ty, 
   3108                          llvm_i32_ty],
   3109                     [IntrReadWriteArgMem]>;
   3110 
   3111   // gather prefetch
   3112   def int_x86_avx512_gatherpf_dpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfdpd">,
   3113           Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
   3114                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
   3115   def int_x86_avx512_gatherpf_dps_512  : GCCBuiltin<"__builtin_ia32_gatherpfdps">,
   3116           Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
   3117                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
   3118   def int_x86_avx512_gatherpf_qpd_512  : GCCBuiltin<"__builtin_ia32_gatherpfqpd">,
   3119           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
   3120                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
   3121   def int_x86_avx512_gatherpf_qps_512  : GCCBuiltin<"__builtin_ia32_gatherpfqps">,
   3122           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
   3123                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
   3124 
   3125   // scatter prefetch
   3126   def int_x86_avx512_scatterpf_dpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfdpd">,
   3127           Intrinsic<[], [llvm_i8_ty, llvm_v8i32_ty, llvm_ptr_ty,
   3128                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
   3129   def int_x86_avx512_scatterpf_dps_512  : GCCBuiltin<"__builtin_ia32_scatterpfdps">,
   3130           Intrinsic<[], [llvm_i16_ty, llvm_v16i32_ty, llvm_ptr_ty,
   3131                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
   3132   def int_x86_avx512_scatterpf_qpd_512  : GCCBuiltin<"__builtin_ia32_scatterpfqpd">,
   3133           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
   3134                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
   3135   def int_x86_avx512_scatterpf_qps_512  : GCCBuiltin<"__builtin_ia32_scatterpfqps">,
   3136           Intrinsic<[], [llvm_i8_ty, llvm_v8i64_ty, llvm_ptr_ty,
   3137                      llvm_i32_ty, llvm_i32_ty], [IntrReadWriteArgMem]>;
   3138 }
   3139 
   3140 // AVX-512 conflict detection
   3141 let TargetPrefix = "x86" in {
   3142   def int_x86_avx512_mask_conflict_d_512 :
   3143           GCCBuiltin<"__builtin_ia32_vpconflictsi_512_mask">,
   3144           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   3145                     llvm_v16i32_ty, llvm_i16_ty],
   3146                     []>;
   3147   def int_x86_avx512_mask_conflict_q_512 :
   3148           GCCBuiltin<"__builtin_ia32_vpconflictdi_512_mask">,
   3149           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   3150                     llvm_v8i64_ty, llvm_i8_ty],
   3151                     []>;
   3152   def int_x86_avx512_mask_lzcnt_d_512 :
   3153           GCCBuiltin<"__builtin_ia32_vplzcntd_512_mask">,
   3154           Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
   3155                     llvm_v16i32_ty, llvm_i16_ty],
   3156                     []>;
   3157   def int_x86_avx512_mask_lzcnt_q_512 :
   3158           GCCBuiltin<"__builtin_ia32_vplzcntq_512_mask">,
   3159           Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
   3160                     llvm_v8i64_ty, llvm_i8_ty],
   3161                     []>;
   3162 }
   3163 
   3164 // Vector blend
   3165 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   3166   def int_x86_avx512_mask_blend_ps_512 : GCCBuiltin<"__builtin_ia32_blendmps_512_mask">,
   3167         Intrinsic<[llvm_v16f32_ty],
   3168                   [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
   3169                   [IntrNoMem]>;
   3170   def int_x86_avx512_mask_blend_pd_512 : GCCBuiltin<"__builtin_ia32_blendmpd_512_mask">,
   3171         Intrinsic<[llvm_v8f64_ty],
   3172                   [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
   3173                   [IntrNoMem]>;
   3174 
   3175   def int_x86_avx512_mask_blend_d_512 : GCCBuiltin<"__builtin_ia32_blendmd_512_mask">,
   3176         Intrinsic<[llvm_v16i32_ty],
   3177                   [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
   3178                   [IntrNoMem]>;
   3179   def int_x86_avx512_mask_blend_q_512 : GCCBuiltin<"__builtin_ia32_blendmq_512_mask">,
   3180         Intrinsic<[llvm_v8i64_ty],
   3181                   [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
   3182                   [IntrNoMem]>;
   3183 }
   3184 
   3185 // Misc.
   3186 let TargetPrefix = "x86" in {
   3187   def int_x86_avx512_mask_cmp_ps_512 : GCCBuiltin<"__builtin_ia32_cmpps512_mask">,
   3188             Intrinsic<[llvm_i16_ty], [llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty,
   3189                                       llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
   3190   def int_x86_avx512_mask_cmp_pd_512 : GCCBuiltin<"__builtin_ia32_cmppd512_mask">,
   3191             Intrinsic<[llvm_i8_ty], [llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty,
   3192                                       llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
   3193   
   3194   def int_x86_avx512_mask_pcmpeq_d_512 : GCCBuiltin<"__builtin_ia32_pcmpeqd512_mask">,
   3195             Intrinsic<[llvm_i16_ty], [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
   3196                       [IntrNoMem]>;
   3197   def int_x86_avx512_mask_pcmpeq_q_512 : GCCBuiltin<"__builtin_ia32_pcmpeqq512_mask">,
   3198             Intrinsic<[llvm_i8_ty], [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
   3199                       [IntrNoMem]>;
   3200   def int_x86_avx512_mask_pand_d_512 : GCCBuiltin<"__builtin_ia32_pandd512_mask">,
   3201             Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
   3202                                          llvm_v16i32_ty, llvm_i16_ty],
   3203                       [IntrNoMem]>;
   3204   def int_x86_avx512_mask_pand_q_512 : GCCBuiltin<"__builtin_ia32_pandq512_mask">,
   3205             Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
   3206                                         llvm_v8i64_ty, llvm_i8_ty],
   3207                       [IntrNoMem]>;
   3208 }
   3209 
   3210 //===----------------------------------------------------------------------===//
   3211 // SHA intrinsics
   3212 let TargetPrefix = "x86" in {
   3213   def int_x86_sha1rnds4 : GCCBuiltin<"__builtin_ia32_sha1rnds4">,
   3214         Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
   3215                   [IntrNoMem]>;
   3216   def int_x86_sha1nexte : GCCBuiltin<"__builtin_ia32_sha1nexte">,
   3217       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   3218   def int_x86_sha1msg1 : GCCBuiltin<"__builtin_ia32_sha1msg1">,
   3219       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   3220   def int_x86_sha1msg2 : GCCBuiltin<"__builtin_ia32_sha1msg2">,
   3221       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   3222   def int_x86_sha256rnds2 : GCCBuiltin<"__builtin_ia32_sha256rnds2">,
   3223       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
   3224                 [IntrNoMem]>;
   3225   def int_x86_sha256msg1 : GCCBuiltin<"__builtin_ia32_sha256msg1">,
   3226       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   3227   def int_x86_sha256msg2 : GCCBuiltin<"__builtin_ia32_sha256msg2">,
   3228       Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   3229 }
   3230