Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +avx512vl -target-feature +avx512cd -emit-llvm -o - -Werror | FileCheck %s
      2 
      3 // Don't include mm_malloc.h, it's system specific.
      4 #define __MM_MALLOC_H
      5 
      6 #include <immintrin.h>
      7 
      8 __m128i test_mm_broadcastmb_epi64(__mmask8 __A) {
      9   // CHECK-LABEL: @test_mm_broadcastmb_epi64
     10   // CHECK: @llvm.x86.avx512.broadcastmb.128
     11   return _mm_broadcastmb_epi64(__A);
     12 }
     13 
     14 __m256i test_mm256_broadcastmb_epi64(__mmask8 __A) {
     15   // CHECK-LABEL: @test_mm256_broadcastmb_epi64
     16   // CHECK: @llvm.x86.avx512.broadcastmb.256
     17   return _mm256_broadcastmb_epi64(__A);
     18 }
     19 
     20 __m128i test_mm_broadcastmw_epi32(__mmask16 __A) {
     21   // CHECK-LABEL: @test_mm_broadcastmw_epi32
     22   // CHECK: @llvm.x86.avx512.broadcastmw.128
     23   return _mm_broadcastmw_epi32(__A);
     24 }
     25 
     26 __m256i test_mm256_broadcastmw_epi32(__mmask16 __A) {
     27   // CHECK-LABEL: @test_mm256_broadcastmw_epi32
     28   // CHECK: @llvm.x86.avx512.broadcastmw.256
     29   return _mm256_broadcastmw_epi32(__A);
     30 }
     31 
     32 __m128i test_mm_conflict_epi64(__m128i __A) {
     33   // CHECK-LABEL: @test_mm_conflict_epi64
     34   // CHECK: @llvm.x86.avx512.mask.conflict.q.128
     35   return _mm_conflict_epi64(__A);
     36 }
     37 
     38 __m128i test_mm_mask_conflict_epi64(__m128i __W, __mmask8 __U, __m128i __A) {
     39   // CHECK-LABEL: @test_mm_mask_conflict_epi64
     40   // CHECK: @llvm.x86.avx512.mask.conflict.q.128
     41   return _mm_mask_conflict_epi64(__W, __U, __A);
     42 }
     43 
     44 __m128i test_mm_maskz_conflict_epi64(__mmask8 __U, __m128i __A) {
     45   // CHECK-LABEL: @test_mm_maskz_conflict_epi64
     46   // CHECK: @llvm.x86.avx512.mask.conflict.q.128
     47   return _mm_maskz_conflict_epi64(__U, __A);
     48 }
     49 
     50 __m256i test_mm256_conflict_epi64(__m256i __A) {
     51   // CHECK-LABEL: @test_mm256_conflict_epi64
     52   // CHECK: @llvm.x86.avx512.mask.conflict.q.256
     53   return _mm256_conflict_epi64(__A);
     54 }
     55 
     56 __m256i test_mm256_mask_conflict_epi64(__m256i __W, __mmask8 __U, __m256i __A) {
     57   // CHECK-LABEL: @test_mm256_mask_conflict_epi64
     58   // CHECK: @llvm.x86.avx512.mask.conflict.q.256
     59   return _mm256_mask_conflict_epi64(__W, __U, __A);
     60 }
     61 
     62 __m256i test_mm256_maskz_conflict_epi64(__mmask8 __U, __m256i __A) {
     63   // CHECK-LABEL: @test_mm256_maskz_conflict_epi64
     64   // CHECK: @llvm.x86.avx512.mask.conflict.q.256
     65   return _mm256_maskz_conflict_epi64(__U, __A);
     66 }
     67 
     68 __m128i test_mm_conflict_epi32(__m128i __A) {
     69   // CHECK-LABEL: @test_mm_conflict_epi32
     70   // CHECK: @llvm.x86.avx512.mask.conflict.d.128
     71   return _mm_conflict_epi32(__A);
     72 }
     73 
     74 __m128i test_mm_mask_conflict_epi32(__m128i __W, __mmask8 __U, __m128i __A) {
     75   // CHECK-LABEL: @test_mm_mask_conflict_epi32
     76   // CHECK: @llvm.x86.avx512.mask.conflict.d.128
     77   return _mm_mask_conflict_epi32(__W, __U, __A);
     78 }
     79 
     80 __m128i test_mm_maskz_conflict_epi32(__mmask8 __U, __m128i __A) {
     81   // CHECK-LABEL: @test_mm_maskz_conflict_epi32
     82   // CHECK: @llvm.x86.avx512.mask.conflict.d.128
     83   return _mm_maskz_conflict_epi32(__U, __A);
     84 }
     85 
     86 __m256i test_mm256_conflict_epi32(__m256i __A) {
     87   // CHECK-LABEL: @test_mm256_conflict_epi32
     88   // CHECK: @llvm.x86.avx512.mask.conflict.d.256
     89   return _mm256_conflict_epi32(__A);
     90 }
     91 
     92 __m256i test_mm256_mask_conflict_epi32(__m256i __W, __mmask8 __U, __m256i __A) {
     93   // CHECK-LABEL: @test_mm256_mask_conflict_epi32
     94   // CHECK: @llvm.x86.avx512.mask.conflict.d.256
     95   return _mm256_mask_conflict_epi32(__W, __U, __A);
     96 }
     97 
     98 __m256i test_mm256_maskz_conflict_epi32(__mmask8 __U, __m256i __A) {
     99   // CHECK-LABEL: @test_mm256_maskz_conflict_epi32
    100   // CHECK: @llvm.x86.avx512.mask.conflict.d.256
    101   return _mm256_maskz_conflict_epi32(__U, __A);
    102 }
    103 
    104 __m128i test_mm_lzcnt_epi32(__m128i __A) {
    105   // CHECK-LABEL: @test_mm_lzcnt_epi32
    106   // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false)
    107   return _mm_lzcnt_epi32(__A);
    108 }
    109 
    110 __m128i test_mm_mask_lzcnt_epi32(__m128i __W, __mmask8 __U, __m128i __A) {
    111   // CHECK-LABEL: @test_mm_mask_lzcnt_epi32
    112   // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false)
    113   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
    114   return _mm_mask_lzcnt_epi32(__W, __U, __A);
    115 }
    116 
    117 __m128i test_mm_maskz_lzcnt_epi32(__mmask8 __U, __m128i __A) {
    118   // CHECK-LABEL: @test_mm_maskz_lzcnt_epi32
    119   // CHECK: call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %{{.*}}, i1 false)
    120   // CHECK: select <4 x i1> %{{.*}}, <4 x i32> %{{.*}}, <4 x i32> %{{.*}}
    121   return _mm_maskz_lzcnt_epi32(__U, __A);
    122 }
    123 
    124 __m256i test_mm256_lzcnt_epi32(__m256i __A) {
    125   // CHECK-LABEL: @test_mm256_lzcnt_epi32
    126   // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false)
    127   return _mm256_lzcnt_epi32(__A);
    128 }
    129 
    130 __m256i test_mm256_mask_lzcnt_epi32(__m256i __W, __mmask8 __U, __m256i __A) {
    131   // CHECK-LABEL: @test_mm256_mask_lzcnt_epi32
    132   // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false)
    133   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
    134   return _mm256_mask_lzcnt_epi32(__W, __U, __A);
    135 }
    136 
    137 __m256i test_mm256_maskz_lzcnt_epi32(__mmask8 __U, __m256i __A) {
    138   // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi32
    139   // CHECK: call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %{{.*}}, i1 false)
    140   // CHECK: select <8 x i1> %{{.*}}, <8 x i32> %{{.*}}, <8 x i32> %{{.*}}
    141   return _mm256_maskz_lzcnt_epi32(__U, __A);
    142 }
    143 
    144 __m128i test_mm_lzcnt_epi64(__m128i __A) {
    145   // CHECK-LABEL: @test_mm_lzcnt_epi64
    146   // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false)
    147   return _mm_lzcnt_epi64(__A);
    148 }
    149 
    150 __m128i test_mm_mask_lzcnt_epi64(__m128i __W, __mmask8 __U, __m128i __A) {
    151   // CHECK-LABEL: @test_mm_mask_lzcnt_epi64
    152   // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false)
    153   // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
    154   return _mm_mask_lzcnt_epi64(__W, __U, __A);
    155 }
    156 
    157 __m128i test_mm_maskz_lzcnt_epi64(__mmask8 __U, __m128i __A) {
    158   // CHECK-LABEL: @test_mm_maskz_lzcnt_epi64
    159   // CHECK: call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %{{.*}}, i1 false)
    160   // CHECK: select <2 x i1> %{{.*}}, <2 x i64> %{{.*}}, <2 x i64> %{{.*}}
    161   return _mm_maskz_lzcnt_epi64(__U, __A);
    162 }
    163 
    164 __m256i test_mm256_lzcnt_epi64(__m256i __A) {
    165   // CHECK-LABEL: @test_mm256_lzcnt_epi64
    166   // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false)
    167   return _mm256_lzcnt_epi64(__A);
    168 }
    169 
    170 __m256i test_mm256_mask_lzcnt_epi64(__m256i __W, __mmask8 __U, __m256i __A) {
    171   // CHECK-LABEL: @test_mm256_mask_lzcnt_epi64
    172   // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false)
    173   // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
    174   return _mm256_mask_lzcnt_epi64(__W, __U, __A);
    175 }
    176 
    177 __m256i test_mm256_maskz_lzcnt_epi64(__mmask8 __U, __m256i __A) {
    178   // CHECK-LABEL: @test_mm256_maskz_lzcnt_epi64
    179   // CHECK: call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %{{.*}}, i1 false)
    180   // CHECK: select <4 x i1> %{{.*}}, <4 x i64> %{{.*}}, <4 x i64> %{{.*}}
    181   return _mm256_maskz_lzcnt_epi64(__U, __A);
    182 }
    183