Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx2 -emit-llvm -o - -Werror | FileCheck %s
      2 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx2 -fno-signed-char -emit-llvm -o - -Werror | FileCheck %s
      3 
      4 // Don't include mm_malloc.h, it's system specific.
      5 #define __MM_MALLOC_H
      6 
      7 #include <immintrin.h>
      8 
      9 __m256i test_mm256_mpsadbw_epu8(__m256i x, __m256i y) {
     10   // CHECK: @llvm.x86.avx2.mpsadbw({{.*}}, {{.*}}, i8 3)
     11   return _mm256_mpsadbw_epu8(x, y, 3);
     12 }
     13 
     14 __m256i test_mm256_sad_epu8(__m256i x, __m256i y) {
     15   // CHECK: @llvm.x86.avx2.psad.bw
     16   return _mm256_sad_epu8(x, y);
     17 }
     18 
     19 __m256i test_mm256_abs_epi8(__m256i a) {
     20   // CHECK: @llvm.x86.avx2.pabs.b
     21   return _mm256_abs_epi8(a);
     22 }
     23 
     24 __m256i test_mm256_abs_epi16(__m256i a) {
     25   // CHECK: @llvm.x86.avx2.pabs.w
     26   return _mm256_abs_epi16(a);
     27 }
     28 
     29 __m256i test_mm256_abs_epi32(__m256i a) {
     30   // CHECK: @llvm.x86.avx2.pabs.d
     31   return _mm256_abs_epi32(a);
     32 }
     33 
     34 __m256i test_mm256_packs_epi16(__m256i a, __m256i b) {
     35   // CHECK: @llvm.x86.avx2.packsswb
     36   return _mm256_packs_epi16(a, b);
     37 }
     38 
     39 __m256i test_mm256_packs_epi32(__m256i a, __m256i b) {
     40   // CHECK: @llvm.x86.avx2.packssdw
     41   return _mm256_packs_epi32(a, b);
     42 }
     43 
     44 __m256i test_mm256_packs_epu16(__m256i a, __m256i b) {
     45   // CHECK: @llvm.x86.avx2.packuswb
     46   return _mm256_packus_epi16(a, b);
     47 }
     48 
     49 __m256i test_mm256_packs_epu32(__m256i a, __m256i b) {
     50   // CHECK: @llvm.x86.avx2.packusdw
     51   return _mm256_packus_epi32(a, b);
     52 }
     53 
     54 __m256i test_mm256_add_epi8(__m256i a, __m256i b) {
     55   // CHECK: add <32 x i8>
     56   return _mm256_add_epi8(a, b);
     57 }
     58 
     59 __m256i test_mm256_add_epi16(__m256i a, __m256i b) {
     60   // CHECK: add <16 x i16>
     61   return _mm256_add_epi16(a, b);
     62 }
     63 
     64 __m256i test_mm256_add_epi32(__m256i a, __m256i b) {
     65   // CHECK: add <8 x i32>
     66   return _mm256_add_epi32(a, b);
     67 }
     68 
     69 __m256i test_mm256_add_epi64(__m256i a, __m256i b) {
     70   // CHECK: add <4 x i64>
     71   return _mm256_add_epi64(a, b);
     72 }
     73 
     74 __m256i test_mm256_adds_epi8(__m256i a, __m256i b) {
     75   // CHECK: @llvm.x86.avx2.padds.b
     76   return _mm256_adds_epi8(a, b);
     77 }
     78 
     79 __m256i test_mm256_adds_epi16(__m256i a, __m256i b) {
     80   // CHECK: @llvm.x86.avx2.padds.w
     81   return _mm256_adds_epi16(a, b);
     82 }
     83 
     84 __m256i test_mm256_adds_epu8(__m256i a, __m256i b) {
     85   // CHECK: @llvm.x86.avx2.paddus.b
     86   return _mm256_adds_epu8(a, b);
     87 }
     88 
     89 __m256i test_mm256_adds_epu16(__m256i a, __m256i b) {
     90   // CHECK: @llvm.x86.avx2.paddus.w
     91   return _mm256_adds_epu16(a, b);
     92 }
     93 
     94 __m256i test_mm256_alignr_epi8(__m256i a, __m256i b) {
     95   // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48, i32 49>
     96   return _mm256_alignr_epi8(a, b, 2);
     97 }
     98 
     99 __m256i test2_mm256_alignr_epi8(__m256i a, __m256i b) {
    100   // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> zeroinitializer, <32 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48>
    101   return _mm256_alignr_epi8(a, b, 17);
    102 }
    103 
    104 __m256i test_mm256_sub_epi8(__m256i a, __m256i b) {
    105   // CHECK: sub <32 x i8>
    106   return _mm256_sub_epi8(a, b);
    107 }
    108 
    109 __m256i test_mm256_sub_epi16(__m256i a, __m256i b) {
    110   // CHECK: sub <16 x i16>
    111   return _mm256_sub_epi16(a, b);
    112 }
    113 
    114 __m256i test_mm256_sub_epi32(__m256i a, __m256i b) {
    115   // CHECK: sub <8 x i32>
    116   return _mm256_sub_epi32(a, b);
    117 }
    118 
    119 __m256i test_mm256_sub_epi64(__m256i a, __m256i b) {
    120   // CHECK: sub <4 x i64>
    121   return _mm256_sub_epi64(a, b);
    122 }
    123 
    124 __m256i test_mm256_subs_epi8(__m256i a, __m256i b) {
    125   // CHECK: @llvm.x86.avx2.psubs.b
    126   return _mm256_subs_epi8(a, b);
    127 }
    128 
    129 __m256i test_mm256_subs_epi16(__m256i a, __m256i b) {
    130   // CHECK: @llvm.x86.avx2.psubs.w
    131   return _mm256_subs_epi16(a, b);
    132 }
    133 
    134 __m256i test_mm256_subs_epu8(__m256i a, __m256i b) {
    135   // CHECK: @llvm.x86.avx2.psubus.b
    136   return _mm256_subs_epu8(a, b);
    137 }
    138 
    139 __m256i test_mm256_subs_epu16(__m256i a, __m256i b) {
    140   // CHECK: @llvm.x86.avx2.psubus.w
    141   return _mm256_subs_epu16(a, b);
    142 }
    143 
    144 __m256i test_mm256_and_si256(__m256i a, __m256i b) {
    145   // CHECK: and <4 x i64>
    146   return _mm256_and_si256(a, b);
    147 }
    148 
    149 __m256i test_mm256_andnot_si256(__m256i a, __m256i b) {
    150   // CHECK: xor <4 x i64>
    151   // CHECK: and <4 x i64>
    152   return _mm256_andnot_si256(a, b);
    153 }
    154 
    155 __m256i test_mm256_or_si256(__m256i a, __m256i b) {
    156   // CHECK: or <4 x i64>
    157   return _mm256_or_si256(a, b);
    158 }
    159 
    160 __m256i test_mm256_xor_si256(__m256i a, __m256i b) {
    161   // CHECK: xor <4 x i64>
    162   return _mm256_xor_si256(a, b);
    163 }
    164 
    165 __m256i test_mm256_avg_epu8(__m256i a, __m256i b) {
    166   // CHECK: @llvm.x86.avx2.pavg.b
    167   return _mm256_avg_epu8(a, b);
    168 }
    169 
    170 __m256i test_mm256_avg_epu16(__m256i a, __m256i b) {
    171   // CHECK: @llvm.x86.avx2.pavg.w
    172   return _mm256_avg_epu16(a, b);
    173 }
    174 
    175 __m256i test_mm256_blendv_epi8(__m256i a, __m256i b, __m256i m) {
    176   // CHECK: @llvm.x86.avx2.pblendvb
    177   return _mm256_blendv_epi8(a, b, m);
    178 }
    179 
    180 // FIXME: We should also lower the __builtin_ia32_pblendw128 (and similar)
    181 // functions to this IR. In the future we could delete the corresponding
    182 // intrinsic in LLVM if it's not being used anymore.
    183 __m256i test_mm256_blend_epi16(__m256i a, __m256i b) {
    184   // CHECK-LABEL: test_mm256_blend_epi16
    185   // CHECK-NOT: @llvm.x86.avx2.pblendw
    186   // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 17, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 25, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
    187   return _mm256_blend_epi16(a, b, 2);
    188 }
    189 
    190 __m256i test_mm256_cmpeq_epi8(__m256i a, __m256i b) {
    191   // CHECK: icmp eq <32 x i8>
    192   return _mm256_cmpeq_epi8(a, b);
    193 }
    194 
    195 __m256i test_mm256_cmpeq_epi16(__m256i a, __m256i b) {
    196   // CHECK: icmp eq <16 x i16>
    197   return _mm256_cmpeq_epi16(a, b);
    198 }
    199 
    200 __m256i test_mm256_cmpeq_epi32(__m256i a, __m256i b) {
    201   // CHECK: icmp eq <8 x i32>
    202   return _mm256_cmpeq_epi32(a, b);
    203 }
    204 
    205 __m256i test_mm256_cmpeq_epi64(__m256i a, __m256i b) {
    206   // CHECK: icmp eq <4 x i64>
    207   return _mm256_cmpeq_epi64(a, b);
    208 }
    209 
    210 __m256i test_mm256_cmpgt_epi8(__m256i a, __m256i b) {
    211   // CHECK: icmp sgt <32 x i8>
    212   return _mm256_cmpgt_epi8(a, b);
    213 }
    214 
    215 __m256i test_mm256_cmpgt_epi16(__m256i a, __m256i b) {
    216   // CHECK: icmp sgt <16 x i16>
    217   return _mm256_cmpgt_epi16(a, b);
    218 }
    219 
    220 __m256i test_mm256_cmpgt_epi32(__m256i a, __m256i b) {
    221   // CHECK: icmp sgt <8 x i32>
    222   return _mm256_cmpgt_epi32(a, b);
    223 }
    224 
    225 __m256i test_mm256_cmpgt_epi64(__m256i a, __m256i b) {
    226   // CHECK: icmp sgt <4 x i64>
    227   return _mm256_cmpgt_epi64(a, b);
    228 }
    229 
    230 __m256i test_mm256_hadd_epi16(__m256i a, __m256i b) {
    231   // CHECK: @llvm.x86.avx2.phadd.w
    232   return _mm256_hadd_epi16(a, b);
    233 }
    234 
    235 __m256i test_mm256_hadd_epi32(__m256i a, __m256i b) {
    236   // CHECK: @llvm.x86.avx2.phadd.d
    237   return _mm256_hadd_epi32(a, b);
    238 }
    239 
    240 __m256i test_mm256_hadds_epi16(__m256i a, __m256i b) {
    241   // CHECK: @llvm.x86.avx2.phadd.sw
    242   return _mm256_hadds_epi16(a, b);
    243 }
    244 
    245 __m256i test_mm256_hsub_epi16(__m256i a, __m256i b) {
    246   // CHECK: @llvm.x86.avx2.phsub.w
    247   return _mm256_hsub_epi16(a, b);
    248 }
    249 
    250 __m256i test_mm256_hsub_epi32(__m256i a, __m256i b) {
    251   // CHECK: @llvm.x86.avx2.phsub.d
    252   return _mm256_hsub_epi32(a, b);
    253 }
    254 
    255 __m256i test_mm256_hsubs_epi16(__m256i a, __m256i b) {
    256   // CHECK: @llvm.x86.avx2.phsub.sw
    257   return _mm256_hsubs_epi16(a, b);
    258 }
    259 
    260 __m256i test_mm256_maddubs_epi16(__m256i a, __m256i b) {
    261   // CHECK: @llvm.x86.avx2.pmadd.ub.sw
    262   return _mm256_maddubs_epi16(a, b);
    263 }
    264 
    265 __m256i test_mm256_madd_epi16(__m256i a, __m256i b) {
    266   // CHECK: @llvm.x86.avx2.pmadd.wd
    267   return _mm256_madd_epi16(a, b);
    268 }
    269 
    270 __m256i test_mm256_max_epi8(__m256i a, __m256i b) {
    271   // CHECK: @llvm.x86.avx2.pmaxs.b
    272   return _mm256_max_epi8(a, b);
    273 }
    274 
    275 __m256i test_mm256_max_epi16(__m256i a, __m256i b) {
    276   // CHECK: @llvm.x86.avx2.pmaxs.w
    277   return _mm256_max_epi16(a, b);
    278 }
    279 
    280 __m256i test_mm256_max_epi32(__m256i a, __m256i b) {
    281   // CHECK: @llvm.x86.avx2.pmaxs.d
    282   return _mm256_max_epi32(a, b);
    283 }
    284 
    285 __m256i test_mm256_max_epu8(__m256i a, __m256i b) {
    286   // CHECK: @llvm.x86.avx2.pmaxu.b
    287   return _mm256_max_epu8(a, b);
    288 }
    289 
    290 __m256i test_mm256_max_epu16(__m256i a, __m256i b) {
    291   // CHECK: @llvm.x86.avx2.pmaxu.w
    292   return _mm256_max_epu16(a, b);
    293 }
    294 
    295 __m256i test_mm256_max_epu32(__m256i a, __m256i b) {
    296   // CHECK: @llvm.x86.avx2.pmaxu.d
    297   return _mm256_max_epu32(a, b);
    298 }
    299 
    300 __m256i test_mm256_min_epi8(__m256i a, __m256i b) {
    301   // CHECK: @llvm.x86.avx2.pmins.b
    302   return _mm256_min_epi8(a, b);
    303 }
    304 
    305 __m256i test_mm256_min_epi16(__m256i a, __m256i b) {
    306   // CHECK: @llvm.x86.avx2.pmins.w
    307   return _mm256_min_epi16(a, b);
    308 }
    309 
    310 __m256i test_mm256_min_epi32(__m256i a, __m256i b) {
    311   // CHECK: @llvm.x86.avx2.pmins.d
    312   return _mm256_min_epi32(a, b);
    313 }
    314 
    315 __m256i test_mm256_min_epu8(__m256i a, __m256i b) {
    316   // CHECK: @llvm.x86.avx2.pminu.b
    317   return _mm256_min_epu8(a, b);
    318 }
    319 
    320 __m256i test_mm256_min_epu16(__m256i a, __m256i b) {
    321   // CHECK: @llvm.x86.avx2.pminu.w
    322   return _mm256_min_epu16(a, b);
    323 }
    324 
    325 __m256i test_mm256_min_epu32(__m256i a, __m256i b) {
    326   // CHECK: @llvm.x86.avx2.pminu.d
    327   return _mm256_min_epu32(a, b);
    328 }
    329 
    330 int test_mm256_movemask_epi8(__m256i a) {
    331   // CHECK: @llvm.x86.avx2.pmovmskb
    332   return _mm256_movemask_epi8(a);
    333 }
    334 
    335 __m256i test_mm256_cvtepi8_epi16(__m128i a) {
    336   // CHECK: @llvm.x86.avx2.pmovsxbw
    337   return _mm256_cvtepi8_epi16(a);
    338 }
    339 
    340 __m256i test_mm256_cvtepi8_epi32(__m128i a) {
    341   // CHECK: @llvm.x86.avx2.pmovsxbd
    342   return _mm256_cvtepi8_epi32(a);
    343 }
    344 
    345 __m256i test_mm256_cvtepi8_epi64(__m128i a) {
    346   // CHECK: @llvm.x86.avx2.pmovsxbq
    347   return _mm256_cvtepi8_epi64(a);
    348 }
    349 
    350 __m256i test_mm256_cvtepi16_epi32(__m128i a) {
    351   // CHECK: @llvm.x86.avx2.pmovsxwd
    352   return _mm256_cvtepi16_epi32(a);
    353 }
    354 
    355 __m256i test_mm256_cvtepi16_epi64(__m128i a) {
    356   // CHECK: @llvm.x86.avx2.pmovsxwq
    357   return _mm256_cvtepi16_epi64(a);
    358 }
    359 
    360 __m256i test_mm256_cvtepi32_epi64(__m128i a) {
    361   // CHECK: @llvm.x86.avx2.pmovsxdq
    362   return _mm256_cvtepi32_epi64(a);
    363 }
    364 
    365 __m256i test_mm256_cvtepu8_epi16(__m128i a) {
    366   // CHECK: @llvm.x86.avx2.pmovzxbw
    367   return _mm256_cvtepu8_epi16(a);
    368 }
    369 
    370 __m256i test_mm256_cvtepu8_epi32(__m128i a) {
    371   // CHECK: @llvm.x86.avx2.pmovzxbd
    372   return _mm256_cvtepu8_epi32(a);
    373 }
    374 
    375 __m256i test_mm256_cvtepu8_epi64(__m128i a) {
    376   // CHECK: @llvm.x86.avx2.pmovzxbq
    377   return _mm256_cvtepu8_epi64(a);
    378 }
    379 
    380 __m256i test_mm256_cvtepu16_epi32(__m128i a) {
    381   // CHECK: @llvm.x86.avx2.pmovzxwd
    382   return _mm256_cvtepu16_epi32(a);
    383 }
    384 
    385 __m256i test_mm256_cvtepu16_epi64(__m128i a) {
    386   // CHECK: @llvm.x86.avx2.pmovzxwq
    387   return _mm256_cvtepu16_epi64(a);
    388 }
    389 
    390 __m256i test_mm256_cvtepu32_epi64(__m128i a) {
    391   // CHECK: @llvm.x86.avx2.pmovzxdq
    392   return _mm256_cvtepu32_epi64(a);
    393 }
    394 
    395 __m256i test_mm256_mul_epi32(__m256i a, __m256i b) {
    396   // CHECK: @llvm.x86.avx2.pmul.dq
    397   return _mm256_mul_epi32(a, b);
    398 }
    399 
    400 __m256i test_mm256_mulhrs_epi16(__m256i a, __m256i b) {
    401   // CHECK: @llvm.x86.avx2.pmul.hr.sw
    402   return _mm256_mulhrs_epi16(a, b);
    403 }
    404 
    405 __m256i test_mm256_mulhi_epu16(__m256i a, __m256i b) {
    406   // CHECK: @llvm.x86.avx2.pmulhu.w
    407   return _mm256_mulhi_epu16(a, b);
    408 }
    409 
    410 __m256i test_mm256_mulhi_epi16(__m256i a, __m256i b) {
    411   // CHECK: @llvm.x86.avx2.pmulh.w
    412   return _mm256_mulhi_epi16(a, b);
    413 }
    414 
    415 __m256i test_mm256_mullo_epi16(__m256i a, __m256i b) {
    416   // CHECK: mul <16 x i16>
    417   return _mm256_mullo_epi16(a, b);
    418 }
    419 
    420 __m256i test_mm256_mullo_epi32(__m256i a, __m256i b) {
    421   // CHECK: mul <8 x i32>
    422   return _mm256_mullo_epi32(a, b);
    423 }
    424 
    425 __m256i test_mm256_mul_epu32(__m256i a, __m256i b) {
    426   // CHECK: @llvm.x86.avx2.pmulu.dq
    427   return _mm256_mul_epu32(a, b);
    428 }
    429 
    430 __m256i test_mm256_shuffle_epi8(__m256i a, __m256i b) {
    431   // CHECK: @llvm.x86.avx2.pshuf.b
    432   return _mm256_shuffle_epi8(a, b);
    433 }
    434 
    435 __m256i test_mm256_shuffle_epi32(__m256i a) {
    436   // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 3, i32 3, i32 0, i32 0, i32 7, i32 7, i32 4, i32 4>
    437   return _mm256_shuffle_epi32(a, 15);
    438 }
    439 
    440 __m256i test_mm256_shufflehi_epi16(__m256i a) {
    441   // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 6, i32 5, i32 8, i32 9, i32 10, i32 11, i32 15, i32 14, i32 14, i32 13>
    442   return _mm256_shufflehi_epi16(a, 107);
    443 }
    444 
    445 __m256i test_mm256_shufflelo_epi16(__m256i a) {
    446   // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 3, i32 0, i32 1, i32 1, i32 4, i32 5, i32 6, i32 7, i32 11, i32 8, i32 9, i32 9, i32 12, i32 13, i32 14, i32 15>
    447   return _mm256_shufflelo_epi16(a, 83);
    448 }
    449 
    450 __m256i test_mm256_sign_epi8(__m256i a, __m256i b) {
    451   // CHECK: @llvm.x86.avx2.psign.b
    452   return _mm256_sign_epi8(a, b);
    453 }
    454 
    455 __m256i test_mm256_sign_epi16(__m256i a, __m256i b) {
    456   // CHECK: @llvm.x86.avx2.psign.w
    457   return _mm256_sign_epi16(a, b);
    458 }
    459 
    460 __m256i test_mm256_sign_epi32(__m256i a, __m256i b) {
    461   // CHECK: @llvm.x86.avx2.psign.d
    462   return _mm256_sign_epi32(a, b);
    463 }
    464 
    465 __m256i test_mm256_slli_si256(__m256i a) {
    466   // CHECK: shufflevector <32 x i8> zeroinitializer, <32 x i8> %{{.*}}, <32 x i32> <i32 13, i32 14, i32 15, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 29, i32 30, i32 31, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60>
    467   return _mm256_slli_si256(a, 3);
    468 }
    469 
    470 __m256i test_mm256_bslli_epi128(__m256i a) {
    471   // CHECK: shufflevector <32 x i8> zeroinitializer, <32 x i8> %{{.*}}, <32 x i32> <i32 13, i32 14, i32 15, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 29, i32 30, i32 31, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60>
    472   return _mm256_bslli_epi128(a, 3);
    473 }
    474 
    475 __m256i test_mm256_slli_epi16(__m256i a) {
    476   // CHECK: @llvm.x86.avx2.pslli.w
    477   return _mm256_slli_epi16(a, 3);
    478 }
    479 
    480 __m256i test_mm256_sll_epi16(__m256i a, __m128i b) {
    481   // CHECK: @llvm.x86.avx2.psll.w
    482   return _mm256_sll_epi16(a, b);
    483 }
    484 
    485 __m256i test_mm256_slli_epi32(__m256i a) {
    486   // CHECK: @llvm.x86.avx2.pslli.d
    487   return _mm256_slli_epi32(a, 3);
    488 }
    489 
    490 __m256i test_mm256_sll_epi32(__m256i a, __m128i b) {
    491   // CHECK: @llvm.x86.avx2.psll.d
    492   return _mm256_sll_epi32(a, b);
    493 }
    494 
    495 __m256i test_mm256_slli_epi64(__m256i a) {
    496   // CHECK: @llvm.x86.avx2.pslli.q
    497   return _mm256_slli_epi64(a, 3);
    498 }
    499 
    500 __m256i test_mm256_sll_epi64(__m256i a, __m128i b) {
    501   // CHECK: @llvm.x86.avx2.psll.q
    502   return _mm256_sll_epi64(a, b);
    503 }
    504 
    505 __m256i test_mm256_srai_epi16(__m256i a) {
    506   // CHECK: @llvm.x86.avx2.psrai.w
    507   return _mm256_srai_epi16(a, 3);
    508 }
    509 
    510 __m256i test_mm256_sra_epi16(__m256i a, __m128i b) {
    511   // CHECK: @llvm.x86.avx2.psra.w
    512   return _mm256_sra_epi16(a, b);
    513 }
    514 
    515 __m256i test_mm256_srai_epi32(__m256i a) {
    516   // CHECK: @llvm.x86.avx2.psrai.d
    517   return _mm256_srai_epi32(a, 3);
    518 }
    519 
    520 __m256i test_mm256_sra_epi32(__m256i a, __m128i b) {
    521   // CHECK: @llvm.x86.avx2.psra.d
    522   return _mm256_sra_epi32(a, b);
    523 }
    524 
    525 __m256i test_mm256_srli_si256(__m256i a) {
    526   // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> zeroinitializer, <32 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 34, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48, i32 49, i32 50>
    527   return _mm256_srli_si256(a, 3);
    528 }
    529 
    530 __m256i test_mm256_bsrli_epi128(__m256i a) {
    531   // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> zeroinitializer, <32 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 32, i32 33, i32 34, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 48, i32 49, i32 50>
    532   return _mm256_bsrli_epi128(a, 3);
    533 }
    534 
    535 __m256i test_mm256_srli_epi16(__m256i a) {
    536   // CHECK: @llvm.x86.avx2.psrli.w
    537   return _mm256_srli_epi16(a, 3);
    538 }
    539 
    540 __m256i test_mm256_srl_epi16(__m256i a, __m128i b) {
    541   // CHECK: @llvm.x86.avx2.psrl.w
    542   return _mm256_srl_epi16(a, b);
    543 }
    544 
    545 __m256i test_mm256_srli_epi32(__m256i a) {
    546   // CHECK: @llvm.x86.avx2.psrli.d
    547   return _mm256_srli_epi32(a, 3);
    548 }
    549 
    550 __m256i test_mm256_srl_epi32(__m256i a, __m128i b) {
    551   // CHECK: @llvm.x86.avx2.psrl.d
    552   return _mm256_srl_epi32(a, b);
    553 }
    554 
    555 __m256i test_mm256_srli_epi64(__m256i a) {
    556   // CHECK: @llvm.x86.avx2.psrli.q
    557   return _mm256_srli_epi64(a, 3);
    558 }
    559 
    560 __m256i test_mm256_srl_epi64(__m256i a, __m128i b) {
    561   // CHECK: @llvm.x86.avx2.psrl.q
    562   return _mm256_srl_epi64(a, b);
    563 }
    564 
    565 __m256i test_mm256_unpackhi_epi8(__m256i a, __m256i b) {
    566   // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>
    567   return _mm256_unpackhi_epi8(a, b);
    568 }
    569 
    570 __m256i test_mm256_unpackhi_epi16(__m256i a, __m256i b) {
    571   // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>
    572   return _mm256_unpackhi_epi16(a, b);
    573 }
    574 
    575 __m256i test_mm256_unpackhi_epi32(__m256i a, __m256i b) {
    576   // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>
    577   return _mm256_unpackhi_epi32(a, b);
    578 }
    579 
    580 __m256i test_mm256_unpackhi_epi64(__m256i a, __m256i b) {
    581   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 1, i32 5, i32 3, i32 7>
    582   return _mm256_unpackhi_epi64(a, b);
    583 }
    584 
    585 __m256i test_mm256_unpacklo_epi8(__m256i a, __m256i b) {
    586   // CHECK: shufflevector <32 x i8> %{{.*}}, <32 x i8> %{{.*}}, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55>
    587   return _mm256_unpacklo_epi8(a, b);
    588 }
    589 
    590 __m256i test_mm256_unpacklo_epi16(__m256i a, __m256i b) {
    591   // CHECK: shufflevector <16 x i16> %{{.*}}, <16 x i16> %{{.*}}, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27>
    592   return _mm256_unpacklo_epi16(a, b);
    593 }
    594 
    595 __m256i test_mm256_unpacklo_epi32(__m256i a, __m256i b) {
    596   // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>
    597   return _mm256_unpacklo_epi32(a, b);
    598 }
    599 
    600 __m256i test_mm256_unpacklo_epi64(__m256i a, __m256i b) {
    601   // CHECK: shufflevector <4 x i64> %{{.*}}, <4 x i64> %{{.*}}, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
    602   return _mm256_unpacklo_epi64(a, b);
    603 }
    604 
    605 __m256i test_mm256_stream_load_si256(__m256i const *a) {
    606   // CHECK: @llvm.x86.avx2.movntdqa
    607   return _mm256_stream_load_si256(a);
    608 }
    609 
    610 __m128 test_mm_broadcastss_ps(__m128 a) {
    611   // CHECK-LABEL: test_mm_broadcastss_ps
    612   // CHECK-NOT: @llvm.x86.avx2.vbroadcast.ss.ps
    613   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x i32> zeroinitializer
    614   return _mm_broadcastss_ps(a);
    615 }
    616 
    617 __m128d test_mm_broadcastsd_pd(__m128d a) {
    618   // CHECK-LABEL: test_mm_broadcastsd_pd
    619   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x i32> zeroinitializer
    620   return _mm_broadcastsd_pd(a);
    621 }
    622 
    623 __m256 test_mm256_broadcastss_ps(__m128 a) {
    624   // CHECK-LABEL: test_mm256_broadcastss_ps
    625   // CHECK-NOT: @llvm.x86.avx2.vbroadcast.ss.ps.256
    626   // CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> %{{.*}}, <8 x i32> zeroinitializer
    627   return _mm256_broadcastss_ps(a);
    628 }
    629 
    630 __m256d test_mm256_broadcastsd_pd(__m128d a) {
    631   // CHECK-LABEL: test_mm256_broadcastsd_pd
    632   // CHECK-NOT: @llvm.x86.avx2.vbroadcast.sd.pd.256
    633   // CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> %{{.*}}, <4 x i32> zeroinitializer
    634   return _mm256_broadcastsd_pd(a);
    635 }
    636 
    637 __m256i test_mm256_broadcastsi128_si256(__m128i a) {
    638   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
    639   return _mm256_broadcastsi128_si256(a);
    640 }
    641 
    642 __m128i test_mm_blend_epi32(__m128i a, __m128i b) {
    643   // CHECK-LABEL: test_mm_blend_epi32
    644   // CHECK-NOT: @llvm.x86.avx2.pblendd.128
    645   // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
    646   return _mm_blend_epi32(a, b, 0x35);
    647 }
    648 
    649 __m256i test_mm256_blend_epi32(__m256i a, __m256i b) {
    650   // CHECK-LABEL: test_mm256_blend_epi32
    651   // CHECK-NOT: @llvm.x86.avx2.pblendd.256
    652   // CHECK: shufflevector <8 x i32> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 13, i32 6, i32 7>
    653   return _mm256_blend_epi32(a, b, 0x35);
    654 }
    655 
    656 __m256i test_mm256_broadcastb_epi8(__m128i a) {
    657   // CHECK-LABEL: test_mm256_broadcastb_epi8
    658   // CHECK-NOT: @llvm.x86.avx2.pbroadcastb.256
    659   // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <32 x i32> zeroinitializer
    660   return _mm256_broadcastb_epi8(a);
    661 }
    662 
    663 __m256i test_mm256_broadcastw_epi16(__m128i a) {
    664   // CHECK-LABEL: test_mm256_broadcastw_epi16
    665   // CHECK-NOT: @llvm.x86.avx2.pbroadcastw.256
    666   // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <16 x i32> zeroinitializer
    667   return _mm256_broadcastw_epi16(a);
    668 }
    669 
    670 __m256i test_mm256_broadcastd_epi32(__m128i a) {
    671   // CHECK-LABEL: test_mm256_broadcastd_epi32
    672   // CHECK-NOT: @llvm.x86.avx2.pbroadcastd.256
    673   // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <8 x i32> zeroinitializer
    674   return _mm256_broadcastd_epi32(a);
    675 }
    676 
    677 __m256i test_mm256_broadcastq_epi64(__m128i a) {
    678   // CHECK-LABEL: test_mm256_broadcastq_epi64
    679   // CHECK-NOT: @llvm.x86.avx2.pbroadcastq.256
    680   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <4 x i32> zeroinitializer
    681   return _mm256_broadcastq_epi64(a);
    682 }
    683 
    684 __m128i test_mm_broadcastb_epi8(__m128i a) {
    685   // CHECK-LABEL: test_mm_broadcastb_epi8
    686   // CHECK-NOT: @llvm.x86.avx2.pbroadcastb.128
    687   // CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> %{{.*}}, <16 x i32> zeroinitializer
    688   return _mm_broadcastb_epi8(a);
    689 }
    690 
    691 __m128i test_mm_broadcastw_epi16(__m128i a) {
    692   // CHECK-LABEL: test_mm_broadcastw_epi16
    693   // CHECK-NOT: @llvm.x86.avx2.pbroadcastw.128
    694   // CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> %{{.*}}, <8 x i32> zeroinitializer
    695   return _mm_broadcastw_epi16(a);
    696 }
    697 
    698 __m128i test_mm_broadcastd_epi32(__m128i a) {
    699   // CHECK-LABEL: test_mm_broadcastd_epi32
    700   // CHECK-NOT: @llvm.x86.avx2.pbroadcastd.128
    701   // CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> zeroinitializer
    702   return _mm_broadcastd_epi32(a);
    703 }
    704 
    705 __m128i test_mm_broadcastq_epi64(__m128i a) {
    706   // CHECK-LABEL: test_mm_broadcastq_epi64
    707   // CHECK-NOT: @llvm.x86.avx2.pbroadcastq.128
    708   // CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> %{{.*}}, <2 x i32> zeroinitializer
    709   return _mm_broadcastq_epi64(a);
    710 }
    711 
    712 __m256i test_mm256_permutevar8x32_epi32(__m256i a, __m256i b) {
    713   // CHECK: @llvm.x86.avx2.permd
    714   return _mm256_permutevar8x32_epi32(a, b);
    715 }
    716 
    717 __m256d test_mm256_permute4x64_pd(__m256d a) {
    718   // CHECK: shufflevector{{.*}}<i32 1, i32 2, i32 1, i32 0>
    719   return _mm256_permute4x64_pd(a, 25);
    720 }
    721 
    722 __m256 test_mm256_permutevar8x32_ps(__m256 a, __m256i b) {
    723   // CHECK: @llvm.x86.avx2.permps
    724   return _mm256_permutevar8x32_ps(a, b);
    725 }
    726 
    727 __m256i test_mm256_permute4x64_epi64(__m256i a) {
    728   // CHECK: shufflevector{{.*}}<i32 3, i32 0, i32 2, i32 0>
    729   return _mm256_permute4x64_epi64(a, 35);
    730 }
    731 
    732 __m256i test_mm256_permute2x128_si256(__m256i a, __m256i b) {
    733   // CHECK: @llvm.x86.avx2.vperm2i128
    734   return _mm256_permute2x128_si256(a, b, 0x31);
    735 }
    736 
    737 __m128i test_mm256_extracti128_si256_0(__m256i a) {
    738   // CHECK-LABEL: @test_mm256_extracti128_si256_0
    739   // CHECK: shufflevector{{.*}}<i32 0, i32 1>
    740   return _mm256_extracti128_si256(a, 0);
    741 }
    742 
    743 __m128i test_mm256_extracti128_si256_1(__m256i a) {
    744   // CHECK-LABEL: @test_mm256_extracti128_si256_1
    745   // CHECK: shufflevector{{.*}}<i32 2, i32 3>
    746   return _mm256_extracti128_si256(a, 1);
    747 }
    748 
    749 // Immediate should be truncated to one bit.
    750 __m128i test_mm256_extracti128_si256_2(__m256i a) {
    751   // CHECK-LABEL: @test_mm256_extracti128_si256_2
    752   // CHECK: shufflevector{{.*}}<i32 0, i32 1>
    753   return _mm256_extracti128_si256(a, 2);
    754 }
    755 
    756 __m256i test_mm256_inserti128_si256_0(__m256i a, __m128i b) {
    757   // CHECK-LABEL: @test_mm256_inserti128_si256_0
    758   // CHECK: shufflevector{{.*}}<i32 4, i32 5, i32 2, i32 3>
    759   return _mm256_inserti128_si256(a, b, 0);
    760 }
    761 
    762 __m256i test_mm256_inserti128_si256_1(__m256i a, __m128i b) {
    763   // CHECK-LABEL: @test_mm256_inserti128_si256_1
    764   // CHECK: shufflevector{{.*}}<i32 0, i32 1, i32 4, i32 5>
    765   return _mm256_inserti128_si256(a, b, 1);
    766 }
    767 
    768 // Immediate should be truncated to one bit.
    769 __m256i test_mm256_inserti128_si256_2(__m256i a, __m128i b) {
    770   // CHECK-LABEL: @test_mm256_inserti128_si256_2
    771   // CHECK: shufflevector{{.*}}<i32 4, i32 5, i32 2, i32 3>
    772   return _mm256_inserti128_si256(a, b, 2);
    773 }
    774 
    775 __m256i test_mm256_maskload_epi32(int const *a, __m256i m) {
    776   // CHECK: @llvm.x86.avx2.maskload.d.256
    777   return _mm256_maskload_epi32(a, m);
    778 }
    779 
    780 __m256i test_mm256_maskload_epi64(long long const *a, __m256i m) {
    781   // CHECK: @llvm.x86.avx2.maskload.q.256
    782   return _mm256_maskload_epi64(a, m);
    783 }
    784 
    785 __m128i test_mm_maskload_epi32(int const *a, __m128i m) {
    786   // CHECK: @llvm.x86.avx2.maskload.d
    787   return _mm_maskload_epi32(a, m);
    788 }
    789 
    790 __m128i test_mm_maskload_epi64(long long const *a, __m128i m) {
    791   // CHECK: @llvm.x86.avx2.maskload.q
    792   return _mm_maskload_epi64(a, m);
    793 }
    794 
    795 void test_mm256_maskstore_epi32(int *a, __m256i m, __m256i b) {
    796   // CHECK: @llvm.x86.avx2.maskstore.d.256
    797   _mm256_maskstore_epi32(a, m, b);
    798 }
    799 
    800 void test_mm256_maskstore_epi64(long long *a, __m256i m, __m256i b) {
    801   // CHECK: @llvm.x86.avx2.maskstore.q.256
    802   _mm256_maskstore_epi64(a, m, b);
    803 }
    804 
    805 void test_mm_maskstore_epi32(int *a, __m128i m, __m128i b) {
    806   // CHECK: @llvm.x86.avx2.maskstore.d
    807   _mm_maskstore_epi32(a, m, b);
    808 }
    809 
    810 void test_mm_maskstore_epi64(long long *a, __m128i m, __m128i b) {
    811   // CHECK: @llvm.x86.avx2.maskstore.q
    812   _mm_maskstore_epi64(a, m, b);
    813 }
    814 
    815 __m256i test_mm256_sllv_epi32(__m256i a, __m256i b) {
    816   // CHECK: @llvm.x86.avx2.psllv.d.256
    817   return _mm256_sllv_epi32(a, b);
    818 }
    819 
    820 __m128i test_mm_sllv_epi32(__m128i a, __m128i b) {
    821   // CHECK: @llvm.x86.avx2.psllv.d
    822   return _mm_sllv_epi32(a, b);
    823 }
    824 
    825 __m256i test_mm256_sllv_epi64(__m256i a, __m256i b) {
    826   // CHECK: @llvm.x86.avx2.psllv.q.256
    827   return _mm256_sllv_epi64(a, b);
    828 }
    829 
    830 __m128i test_mm_sllv_epi64(__m128i a, __m128i b) {
    831   // CHECK: @llvm.x86.avx2.psllv.q
    832   return _mm_sllv_epi64(a, b);
    833 }
    834 
    835 __m256i test_mm256_srav_epi32(__m256i a, __m256i b) {
    836   // CHECK: @llvm.x86.avx2.psrav.d.256
    837   return _mm256_srav_epi32(a, b);
    838 }
    839 
    840 __m128i test_mm_srav_epi32(__m128i a, __m128i b) {
    841   // CHECK: @llvm.x86.avx2.psrav.d
    842   return _mm_srav_epi32(a, b);
    843 }
    844 
    845 __m256i test_mm256_srlv_epi32(__m256i a, __m256i b) {
    846   // CHECK: @llvm.x86.avx2.psrlv.d.256
    847   return _mm256_srlv_epi32(a, b);
    848 }
    849 
    850 __m128i test_mm_srlv_epi32(__m128i a, __m128i b) {
    851   // CHECK: @llvm.x86.avx2.psrlv.d
    852   return _mm_srlv_epi32(a, b);
    853 }
    854 
    855 __m256i test_mm256_srlv_epi64(__m256i a, __m256i b) {
    856   // CHECK: @llvm.x86.avx2.psrlv.q.256
    857   return _mm256_srlv_epi64(a, b);
    858 }
    859 
    860 __m128i test_mm_srlv_epi64(__m128i a, __m128i b) {
    861   // CHECK: @llvm.x86.avx2.psrlv.q
    862   return _mm_srlv_epi64(a, b);
    863 }
    864 
    865 __m128d test_mm_mask_i32gather_pd(__m128d a, double const *b, __m128i c,
    866                                   __m128d d) {
    867   // CHECK: @llvm.x86.avx2.gather.d.pd
    868   return _mm_mask_i32gather_pd(a, b, c, d, 2);
    869 }
    870 
    871 __m256d test_mm256_mask_i32gather_pd(__m256d a, double const *b, __m128i c,
    872                                       __m256d d) {
    873   // CHECK: @llvm.x86.avx2.gather.d.pd.256
    874   return _mm256_mask_i32gather_pd(a, b, c, d, 2);
    875 }
    876 
    877 __m128d test_mm_mask_i64gather_pd(__m128d a, double const *b, __m128i c,
    878                                   __m128d d) {
    879   // CHECK: @llvm.x86.avx2.gather.q.pd
    880   return _mm_mask_i64gather_pd(a, b, c, d, 2);
    881 }
    882 
    883 __m256d test_mm256_mask_i64gather_pd(__m256d a, double const *b, __m256i c,
    884                                       __m256d d) {
    885   // CHECK: @llvm.x86.avx2.gather.q.pd.256
    886   return _mm256_mask_i64gather_pd(a, b, c, d, 2);
    887 }
    888 
    889 __m128 test_mm_mask_i32gather_ps(__m128 a, float const *b, __m128i c,
    890                                  __m128 d) {
    891   // CHECK: @llvm.x86.avx2.gather.d.ps
    892   return _mm_mask_i32gather_ps(a, b, c, d, 2);
    893 }
    894 
    895 __m256 test_mm256_mask_i32gather_ps(__m256 a, float const *b, __m256i c,
    896                                      __m256 d) {
    897   // CHECK: @llvm.x86.avx2.gather.d.ps.256
    898   return _mm256_mask_i32gather_ps(a, b, c, d, 2);
    899 }
    900 
    901 __m128 test_mm_mask_i64gather_ps(__m128 a, float const *b, __m128i c,
    902                                  __m128 d) {
    903   // CHECK: @llvm.x86.avx2.gather.q.ps
    904   return _mm_mask_i64gather_ps(a, b, c, d, 2);
    905 }
    906 
    907 __m128 test_mm256_mask_i64gather_ps(__m128 a, float const *b, __m256i c,
    908                                     __m128 d) {
    909   // CHECK: @llvm.x86.avx2.gather.q.ps.256
    910   return _mm256_mask_i64gather_ps(a, b, c, d, 2);
    911 }
    912 
    913 __m128i test_mm_mask_i32gather_epi32(__m128i a, int const *b, __m128i c,
    914                                      __m128i d) {
    915   // CHECK: @llvm.x86.avx2.gather.d.d
    916   return _mm_mask_i32gather_epi32(a, b, c, d, 2);
    917 }
    918 
    919 __m256i test_mm256_mask_i32gather_epi32(__m256i a, int const *b, __m256i c,
    920                                         __m256i d) {
    921   // CHECK: @llvm.x86.avx2.gather.d.d.256
    922   return _mm256_mask_i32gather_epi32(a, b, c, d, 2);
    923 }
    924 
    925 __m128i test_mm_mask_i64gather_epi32(__m128i a, int const *b, __m128i c,
    926                                      __m128i d) {
    927   // CHECK: @llvm.x86.avx2.gather.q.d
    928   return _mm_mask_i64gather_epi32(a, b, c, d, 2);
    929 }
    930 
    931 __m128i test_mm256_mask_i64gather_epi32(__m128i a, int const *b, __m256i c,
    932                                         __m128i d) {
    933   // CHECK: @llvm.x86.avx2.gather.q.d.256
    934   return _mm256_mask_i64gather_epi32(a, b, c, d, 2);
    935 }
    936 
    937 __m128i test_mm_mask_i32gather_epi64(__m128i a, long long const *b, __m128i c,
    938                                      __m128i d) {
    939   // CHECK: @llvm.x86.avx2.gather.d.q
    940   return _mm_mask_i32gather_epi64(a, b, c, d, 2);
    941 }
    942 
    943 __m256i test_mm256_mask_i32gather_epi64(__m256i a, long long const *b, __m128i c,
    944                                         __m256i d) {
    945   // CHECK: @llvm.x86.avx2.gather.d.q.256
    946   return _mm256_mask_i32gather_epi64(a, b, c, d, 2);
    947 }
    948 
    949 __m128i test_mm_mask_i64gather_epi64(__m128i a, long long const *b, __m128i c,
    950                                      __m128i d) {
    951   // CHECK: @llvm.x86.avx2.gather.q.q
    952   return _mm_mask_i64gather_epi64(a, b, c, d, 2);
    953 }
    954 
    955 __m256i test_mm256_mask_i64gather_epi64(__m256i a, long long const *b, __m256i c,
    956                                         __m256i d) {
    957   // CHECK: @llvm.x86.avx2.gather.q.q.256
    958   return _mm256_mask_i64gather_epi64(a, b, c, d, 2);
    959 }
    960 
    961 __m128d test_mm_i32gather_pd(double const *b, __m128i c) {
    962   // CHECK: @llvm.x86.avx2.gather.d.pd
    963   return _mm_i32gather_pd(b, c, 2);
    964 }
    965 
    966 __m256d test_mm256_i32gather_pd(double const *b, __m128i c) {
    967   // CHECK: @llvm.x86.avx2.gather.d.pd.256
    968   return _mm256_i32gather_pd(b, c, 2);
    969 }
    970 
    971 __m128d test_mm_i64gather_pd(double const *b, __m128i c) {
    972   // CHECK: @llvm.x86.avx2.gather.q.pd
    973   return _mm_i64gather_pd(b, c, 2);
    974 }
    975 
    976 __m256d test_mm256_i64gather_pd(double const *b, __m256i c) {
    977   // CHECK: @llvm.x86.avx2.gather.q.pd.256
    978   return _mm256_i64gather_pd(b, c, 2);
    979 }
    980 
    981 __m128 test_mm_i32gather_ps(float const *b, __m128i c) {
    982   // CHECK: @llvm.x86.avx2.gather.d.ps
    983   return _mm_i32gather_ps(b, c, 2);
    984 }
    985 
    986 __m256 test_mm256_i32gather_ps(float const *b, __m256i c) {
    987   // CHECK: @llvm.x86.avx2.gather.d.ps.256
    988   return _mm256_i32gather_ps(b, c, 2);
    989 }
    990 
    991 __m128 test_mm_i64gather_ps(float const *b, __m128i c) {
    992   // CHECK: @llvm.x86.avx2.gather.q.ps
    993   return _mm_i64gather_ps(b, c, 2);
    994 }
    995 
    996 __m128 test_mm256_i64gather_ps(float const *b, __m256i c) {
    997   // CHECK: @llvm.x86.avx2.gather.q.ps.256
    998   return _mm256_i64gather_ps(b, c, 2);
    999 }
   1000 
   1001 __m128i test_mm_i32gather_epi32(int const *b, __m128i c) {
   1002   // CHECK: @llvm.x86.avx2.gather.d.d
   1003   return _mm_i32gather_epi32(b, c, 2);
   1004 }
   1005 
   1006 __m256i test_mm256_i32gather_epi32(int const *b, __m256i c) {
   1007   // CHECK: @llvm.x86.avx2.gather.d.d.256
   1008   return _mm256_i32gather_epi32(b, c, 2);
   1009 }
   1010 
   1011 __m128i test_mm_i64gather_epi32(int const *b, __m128i c) {
   1012   // CHECK: @llvm.x86.avx2.gather.q.d
   1013   return _mm_i64gather_epi32(b, c, 2);
   1014 }
   1015 
   1016 __m128i test_mm256_i64gather_epi32(int const *b, __m256i c) {
   1017   // CHECK: @llvm.x86.avx2.gather.q.d.256
   1018   return _mm256_i64gather_epi32(b, c, 2);
   1019 }
   1020 
   1021 __m128i test_mm_i32gather_epi64(long long const *b, __m128i c) {
   1022   // CHECK: @llvm.x86.avx2.gather.d.q
   1023   return _mm_i32gather_epi64(b, c, 2);
   1024 }
   1025 
   1026 __m256i test_mm256_i32gather_epi64(long long const *b, __m128i c) {
   1027   // CHECK: @llvm.x86.avx2.gather.d.q.256
   1028   return _mm256_i32gather_epi64(b, c, 2);
   1029 }
   1030 
   1031 __m128i test_mm_i64gather_epi64(long long const *b, __m128i c) {
   1032   // CHECK: @llvm.x86.avx2.gather.q.q
   1033   return _mm_i64gather_epi64(b, c, 2);
   1034 }
   1035 
   1036 __m256i test_mm256_i64gather_epi64(long long const *b, __m256i c) {
   1037   // CHECK: @llvm.x86.avx2.gather.q.q.256
   1038   return _mm256_i64gather_epi64(b, c, 2);
   1039 }
   1040