Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +xop -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 <x86intrin.h>
      7 
      8 __m128i test_mm_maccs_epi16(__m128i a, __m128i b, __m128i c) {
      9   // CHECK-LABEL: test_mm_maccs_epi16
     10   // CHECK: @llvm.x86.xop.vpmacssww
     11   return _mm_maccs_epi16(a, b, c);
     12 }
     13 
     14 __m128i test_mm_macc_epi16(__m128i a, __m128i b, __m128i c) {
     15   // CHECK-LABEL: test_mm_macc_epi16
     16   // CHECK: @llvm.x86.xop.vpmacsww
     17   return _mm_macc_epi16(a, b, c);
     18 }
     19 
     20 __m128i test_mm_maccsd_epi16(__m128i a, __m128i b, __m128i c) {
     21   // CHECK-LABEL: test_mm_maccsd_epi16
     22   // CHECK: @llvm.x86.xop.vpmacsswd
     23   return _mm_maccsd_epi16(a, b, c);
     24 }
     25 
     26 __m128i test_mm_maccd_epi16(__m128i a, __m128i b, __m128i c) {
     27   // CHECK-LABEL: test_mm_maccd_epi16
     28   // CHECK: @llvm.x86.xop.vpmacswd
     29   return _mm_maccd_epi16(a, b, c);
     30 }
     31 
     32 __m128i test_mm_maccs_epi32(__m128i a, __m128i b, __m128i c) {
     33   // CHECK-LABEL: test_mm_maccs_epi32
     34   // CHECK: @llvm.x86.xop.vpmacssdd
     35   return _mm_maccs_epi32(a, b, c);
     36 }
     37 
     38 __m128i test_mm_macc_epi32(__m128i a, __m128i b, __m128i c) {
     39   // CHECK-LABEL: test_mm_macc_epi32
     40   // CHECK: @llvm.x86.xop.vpmacsdd
     41   return _mm_macc_epi32(a, b, c);
     42 }
     43 
     44 __m128i test_mm_maccslo_epi32(__m128i a, __m128i b, __m128i c) {
     45   // CHECK-LABEL: test_mm_maccslo_epi32
     46   // CHECK: @llvm.x86.xop.vpmacssdql
     47   return _mm_maccslo_epi32(a, b, c);
     48 }
     49 
     50 __m128i test_mm_macclo_epi32(__m128i a, __m128i b, __m128i c) {
     51   // CHECK-LABEL: test_mm_macclo_epi32
     52   // CHECK: @llvm.x86.xop.vpmacsdql
     53   return _mm_macclo_epi32(a, b, c);
     54 }
     55 
     56 __m128i test_mm_maccshi_epi32(__m128i a, __m128i b, __m128i c) {
     57   // CHECK-LABEL: test_mm_maccshi_epi32
     58   // CHECK: @llvm.x86.xop.vpmacssdqh
     59   return _mm_maccshi_epi32(a, b, c);
     60 }
     61 
     62 __m128i test_mm_macchi_epi32(__m128i a, __m128i b, __m128i c) {
     63   // CHECK-LABEL: test_mm_macchi_epi32
     64   // CHECK: @llvm.x86.xop.vpmacsdqh
     65   return _mm_macchi_epi32(a, b, c);
     66 }
     67 
     68 __m128i test_mm_maddsd_epi16(__m128i a, __m128i b, __m128i c) {
     69   // CHECK-LABEL: test_mm_maddsd_epi16
     70   // CHECK: @llvm.x86.xop.vpmadcsswd
     71   return _mm_maddsd_epi16(a, b, c);
     72 }
     73 
     74 __m128i test_mm_maddd_epi16(__m128i a, __m128i b, __m128i c) {
     75   // CHECK-LABEL: test_mm_maddd_epi16
     76   // CHECK: @llvm.x86.xop.vpmadcswd
     77   return _mm_maddd_epi16(a, b, c);
     78 }
     79 
     80 __m128i test_mm_haddw_epi8(__m128i a) {
     81   // CHECK-LABEL: test_mm_haddw_epi8
     82   // CHECK: @llvm.x86.xop.vphaddbw
     83   return _mm_haddw_epi8(a);
     84 }
     85 
     86 __m128i test_mm_haddd_epi8(__m128i a) {
     87   // CHECK-LABEL: test_mm_haddd_epi8
     88   // CHECK: @llvm.x86.xop.vphaddbd
     89   return _mm_haddd_epi8(a);
     90 }
     91 
     92 __m128i test_mm_haddq_epi8(__m128i a) {
     93   // CHECK-LABEL: test_mm_haddq_epi8
     94   // CHECK: @llvm.x86.xop.vphaddbq
     95   return _mm_haddq_epi8(a);
     96 }
     97 
     98 __m128i test_mm_haddd_epi16(__m128i a) {
     99   // CHECK-LABEL: test_mm_haddd_epi16
    100   // CHECK: @llvm.x86.xop.vphaddwd
    101   return _mm_haddd_epi16(a);
    102 }
    103 
    104 __m128i test_mm_haddq_epi16(__m128i a) {
    105   // CHECK-LABEL: test_mm_haddq_epi16
    106   // CHECK: @llvm.x86.xop.vphaddwq
    107   return _mm_haddq_epi16(a);
    108 }
    109 
    110 __m128i test_mm_haddq_epi32(__m128i a) {
    111   // CHECK-LABEL: test_mm_haddq_epi32
    112   // CHECK: @llvm.x86.xop.vphadddq
    113   return _mm_haddq_epi32(a);
    114 }
    115 
    116 __m128i test_mm_haddw_epu8(__m128i a) {
    117   // CHECK-LABEL: test_mm_haddw_epu8
    118   // CHECK: @llvm.x86.xop.vphaddubw
    119   return _mm_haddw_epu8(a);
    120 }
    121 
    122 __m128i test_mm_haddd_epu8(__m128i a) {
    123   // CHECK-LABEL: test_mm_haddd_epu8
    124   // CHECK: @llvm.x86.xop.vphaddubd
    125   return _mm_haddd_epu8(a);
    126 }
    127 
    128 __m128i test_mm_haddq_epu8(__m128i a) {
    129   // CHECK-LABEL: test_mm_haddq_epu8
    130   // CHECK: @llvm.x86.xop.vphaddubq
    131   return _mm_haddq_epu8(a);
    132 }
    133 
    134 __m128i test_mm_haddd_epu16(__m128i a) {
    135   // CHECK-LABEL: test_mm_haddd_epu16
    136   // CHECK: @llvm.x86.xop.vphadduwd
    137   return _mm_haddd_epu16(a);
    138 }
    139 
    140 __m128i test_mm_haddq_epu16(__m128i a) {
    141   // CHECK-LABEL: test_mm_haddq_epu16
    142   // CHECK: @llvm.x86.xop.vphadduwq
    143   return _mm_haddq_epu16(a);
    144 }
    145 
    146 __m128i test_mm_haddq_epu32(__m128i a) {
    147   // CHECK-LABEL: test_mm_haddq_epu32
    148   // CHECK: @llvm.x86.xop.vphaddudq
    149   return _mm_haddq_epu32(a);
    150 }
    151 
    152 __m128i test_mm_hsubw_epi8(__m128i a) {
    153   // CHECK-LABEL: test_mm_hsubw_epi8
    154   // CHECK: @llvm.x86.xop.vphsubbw
    155   return _mm_hsubw_epi8(a);
    156 }
    157 
    158 __m128i test_mm_hsubd_epi16(__m128i a) {
    159   // CHECK-LABEL: test_mm_hsubd_epi16
    160   // CHECK: @llvm.x86.xop.vphsubwd
    161   return _mm_hsubd_epi16(a);
    162 }
    163 
    164 __m128i test_mm_hsubq_epi32(__m128i a) {
    165   // CHECK-LABEL: test_mm_hsubq_epi32
    166   // CHECK: @llvm.x86.xop.vphsubdq
    167   return _mm_hsubq_epi32(a);
    168 }
    169 
    170 __m128i test_mm_cmov_si128(__m128i a, __m128i b, __m128i c) {
    171   // CHECK-LABEL: test_mm_cmov_si128
    172   // CHECK: @llvm.x86.xop.vpcmov
    173   return _mm_cmov_si128(a, b, c);
    174 }
    175 
    176 __m256i test_mm256_cmov_si256(__m256i a, __m256i b, __m256i c) {
    177   // CHECK-LABEL: test_mm256_cmov_si256
    178   // CHECK: @llvm.x86.xop.vpcmov.256
    179   return _mm256_cmov_si256(a, b, c);
    180 }
    181 
    182 __m128i test_mm_perm_epi8(__m128i a, __m128i b, __m128i c) {
    183   // CHECK-LABEL: test_mm_perm_epi8
    184   // CHECK: @llvm.x86.xop.vpperm
    185   return _mm_perm_epi8(a, b, c);
    186 }
    187 
    188 __m128i test_mm_rot_epi8(__m128i a, __m128i b) {
    189   // CHECK-LABEL: test_mm_rot_epi8
    190   // CHECK: @llvm.x86.xop.vprotb
    191   return _mm_rot_epi8(a, b);
    192 }
    193 
    194 __m128i test_mm_rot_epi16(__m128i a, __m128i b) {
    195   // CHECK-LABEL: test_mm_rot_epi16
    196   // CHECK: @llvm.x86.xop.vprotw
    197   return _mm_rot_epi16(a, b);
    198 }
    199 
    200 __m128i test_mm_rot_epi32(__m128i a, __m128i b) {
    201   // CHECK-LABEL: test_mm_rot_epi32
    202   // CHECK: @llvm.x86.xop.vprotd
    203   return _mm_rot_epi32(a, b);
    204 }
    205 
    206 __m128i test_mm_rot_epi64(__m128i a, __m128i b) {
    207   // CHECK-LABEL: test_mm_rot_epi64
    208   // CHECK: @llvm.x86.xop.vprotq
    209   return _mm_rot_epi64(a, b);
    210 }
    211 
    212 __m128i test_mm_roti_epi8(__m128i a) {
    213   // CHECK-LABEL: test_mm_roti_epi8
    214   // CHECK: @llvm.x86.xop.vprotbi
    215   return _mm_roti_epi8(a, 1);
    216 }
    217 
    218 __m128i test_mm_roti_epi16(__m128i a) {
    219   // CHECK-LABEL: test_mm_roti_epi16
    220   // CHECK: @llvm.x86.xop.vprotwi
    221   return _mm_roti_epi16(a, 50);
    222 }
    223 
    224 __m128i test_mm_roti_epi32(__m128i a) {
    225   // CHECK-LABEL: test_mm_roti_epi32
    226   // CHECK: @llvm.x86.xop.vprotdi
    227   return _mm_roti_epi32(a, -30);
    228 }
    229 
    230 __m128i test_mm_roti_epi64(__m128i a) {
    231   // CHECK-LABEL: test_mm_roti_epi64
    232   // CHECK: @llvm.x86.xop.vprotqi
    233   return _mm_roti_epi64(a, 100);
    234 }
    235 
    236 __m128i test_mm_shl_epi8(__m128i a, __m128i b) {
    237   // CHECK-LABEL: test_mm_shl_epi8
    238   // CHECK: @llvm.x86.xop.vpshlb
    239   return _mm_shl_epi8(a, b);
    240 }
    241 
    242 __m128i test_mm_shl_epi16(__m128i a, __m128i b) {
    243   // CHECK-LABEL: test_mm_shl_epi16
    244   // CHECK: @llvm.x86.xop.vpshlw
    245   return _mm_shl_epi16(a, b);
    246 }
    247 
    248 __m128i test_mm_shl_epi32(__m128i a, __m128i b) {
    249   // CHECK-LABEL: test_mm_shl_epi32
    250   // CHECK: @llvm.x86.xop.vpshld
    251   return _mm_shl_epi32(a, b);
    252 }
    253 
    254 __m128i test_mm_shl_epi64(__m128i a, __m128i b) {
    255   // CHECK-LABEL: test_mm_shl_epi64
    256   // CHECK: @llvm.x86.xop.vpshlq
    257   return _mm_shl_epi64(a, b);
    258 }
    259 
    260 __m128i test_mm_sha_epi8(__m128i a, __m128i b) {
    261   // CHECK-LABEL: test_mm_sha_epi8
    262   // CHECK: @llvm.x86.xop.vpshab
    263   return _mm_sha_epi8(a, b);
    264 }
    265 
    266 __m128i test_mm_sha_epi16(__m128i a, __m128i b) {
    267   // CHECK-LABEL: test_mm_sha_epi16
    268   // CHECK: @llvm.x86.xop.vpshaw
    269   return _mm_sha_epi16(a, b);
    270 }
    271 
    272 __m128i test_mm_sha_epi32(__m128i a, __m128i b) {
    273   // CHECK-LABEL: test_mm_sha_epi32
    274   // CHECK: @llvm.x86.xop.vpshad
    275   return _mm_sha_epi32(a, b);
    276 }
    277 
    278 __m128i test_mm_sha_epi64(__m128i a, __m128i b) {
    279   // CHECK-LABEL: test_mm_sha_epi64
    280   // CHECK: @llvm.x86.xop.vpshaq
    281   return _mm_sha_epi64(a, b);
    282 }
    283 
    284 __m128i test_mm_com_epu8(__m128i a, __m128i b) {
    285   // CHECK-LABEL: test_mm_com_epu8
    286   // CHECK: @llvm.x86.xop.vpcomub
    287   return _mm_com_epu8(a, b, 0);
    288 }
    289 
    290 __m128i test_mm_com_epu16(__m128i a, __m128i b) {
    291   // CHECK-LABEL: test_mm_com_epu16
    292   // CHECK: @llvm.x86.xop.vpcomuw
    293   return _mm_com_epu16(a, b, 0);
    294 }
    295 
    296 __m128i test_mm_com_epu32(__m128i a, __m128i b) {
    297   // CHECK-LABEL: test_mm_com_epu32
    298   // CHECK: @llvm.x86.xop.vpcomud
    299   return _mm_com_epu32(a, b, 0);
    300 }
    301 
    302 __m128i test_mm_com_epu64(__m128i a, __m128i b) {
    303   // CHECK-LABEL: test_mm_com_epu64
    304   // CHECK: @llvm.x86.xop.vpcomuq
    305   return _mm_com_epu64(a, b, 0);
    306 }
    307 
    308 __m128i test_mm_com_epi8(__m128i a, __m128i b) {
    309   // CHECK-LABEL: test_mm_com_epi8
    310   // CHECK: @llvm.x86.xop.vpcomb
    311   return _mm_com_epi8(a, b, 0);
    312 }
    313 
    314 __m128i test_mm_com_epi16(__m128i a, __m128i b) {
    315   // CHECK-LABEL: test_mm_com_epi16
    316   // CHECK: @llvm.x86.xop.vpcomw
    317   return _mm_com_epi16(a, b, 0);
    318 }
    319 
    320 __m128i test_mm_com_epi32(__m128i a, __m128i b) {
    321   // CHECK-LABEL: test_mm_com_epi32
    322   // CHECK: @llvm.x86.xop.vpcomd
    323   return _mm_com_epi32(a, b, 0);
    324 }
    325 
    326 __m128i test_mm_com_epi64(__m128i a, __m128i b) {
    327   // CHECK-LABEL: test_mm_com_epi64
    328   // CHECK: @llvm.x86.xop.vpcomq
    329   return _mm_com_epi64(a, b, 0);
    330 }
    331 
    332 __m128d test_mm_permute2_pd(__m128d a, __m128d b, __m128i c) {
    333   // CHECK-LABEL: test_mm_permute2_pd
    334   // CHECK: @llvm.x86.xop.vpermil2pd
    335   return _mm_permute2_pd(a, b, c, 0);
    336 }
    337 
    338 __m256d test_mm256_permute2_pd(__m256d a, __m256d b, __m256i c) {
    339   // CHECK-LABEL: test_mm256_permute2_pd
    340   // CHECK: @llvm.x86.xop.vpermil2pd.256
    341   return _mm256_permute2_pd(a, b, c, 0);
    342 }
    343 
    344 __m128 test_mm_permute2_ps(__m128 a, __m128 b, __m128i c) {
    345   // CHECK-LABEL: test_mm_permute2_ps
    346   // CHECK: @llvm.x86.xop.vpermil2ps
    347   return _mm_permute2_ps(a, b, c, 0);
    348 }
    349 
    350 __m256 test_mm256_permute2_ps(__m256 a, __m256 b, __m256i c) {
    351   // CHECK-LABEL: test_mm256_permute2_ps
    352   // CHECK: @llvm.x86.xop.vpermil2ps.256
    353   return _mm256_permute2_ps(a, b, c, 0);
    354 }
    355 
    356 __m128 test_mm_frcz_ss(__m128 a) {
    357   // CHECK-LABEL: test_mm_frcz_ss
    358   // CHECK: @llvm.x86.xop.vfrcz.ss
    359   return _mm_frcz_ss(a);
    360 }
    361 
    362 __m128d test_mm_frcz_sd(__m128d a) {
    363   // CHECK-LABEL: test_mm_frcz_sd
    364   // CHECK: @llvm.x86.xop.vfrcz.sd
    365   return _mm_frcz_sd(a);
    366 }
    367 
    368 __m128 test_mm_frcz_ps(__m128 a) {
    369   // CHECK-LABEL: test_mm_frcz_ps
    370   // CHECK: @llvm.x86.xop.vfrcz.ps
    371   return _mm_frcz_ps(a);
    372 }
    373 
    374 __m128d test_mm_frcz_pd(__m128d a) {
    375   // CHECK-LABEL: test_mm_frcz_pd
    376   // CHECK: @llvm.x86.xop.vfrcz.pd
    377   return _mm_frcz_pd(a);
    378 }
    379 
    380 __m256 test_mm256_frcz_ps(__m256 a) {
    381   // CHECK-LABEL: test_mm256_frcz_ps
    382   // CHECK: @llvm.x86.xop.vfrcz.ps.256
    383   return _mm256_frcz_ps(a);
    384 }
    385 
    386 __m256d test_mm256_frcz_pd(__m256d a) {
    387   // CHECK-LABEL: test_mm256_frcz_pd
    388   // CHECK: @llvm.x86.xop.vfrcz.pd.256
    389   return _mm256_frcz_pd(a);
    390 }
    391