Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - -emit-llvm %s | FileCheck %s
      2 // RUN: %clang_cc1 -O1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -S -o - %s | \
      3 // RUN:   FileCheck -check-prefix=CHECK_CODEGEN %s
      4 // REQUIRES: aarch64-registered-target
      5 // Test
      6 
      7 #include <arm_neon.h>
      8 
      9 int8x8_t test_vsli_n_s8(int8x8_t a1, int8x8_t a2) {
     10   // CHECK: test_vsli_n_s8
     11   return vsli_n_s8(a1, a2, 3);
     12   // CHECK: llvm.aarch64.neon.vsli.v8i8
     13   // CHECK_CODEGEN: sli.8b  v0, v1, #3
     14 }
     15 
     16 int16x4_t test_vsli_n_s16(int16x4_t a1, int16x4_t a2) {
     17   // CHECK: test_vsli_n_s16
     18   return vsli_n_s16(a1, a2, 3);
     19   // CHECK: llvm.aarch64.neon.vsli.v4i16
     20   // CHECK_CODEGEN: sli.4h  v0, v1, #3
     21 }
     22 
     23 int32x2_t test_vsli_n_s32(int32x2_t a1, int32x2_t a2) {
     24   // CHECK: test_vsli_n_s32
     25   return vsli_n_s32(a1, a2, 1);
     26   // CHECK: llvm.aarch64.neon.vsli.v2i32
     27   // CHECK_CODEGEN: sli.2s  v0, v1, #1
     28 }
     29 
     30 int64x1_t test_vsli_n_s64(int64x1_t a1, int64x1_t a2) {
     31   // CHECK: test_vsli_n_s64
     32   return vsli_n_s64(a1, a2, 1);
     33   // CHECK: llvm.aarch64.neon.vsli.v1i64
     34   // CHECK_CODEGEN: sli     d0, d1, #1
     35 }
     36 
     37 uint8x8_t test_vsli_n_u8(uint8x8_t a1, uint8x8_t a2) {
     38   // CHECK: test_vsli_n_u8
     39   return vsli_n_u8(a1, a2, 3);
     40   // CHECK: llvm.aarch64.neon.vsli.v8i8
     41   // CHECK_CODEGEN: sli.8b  v0, v1, #3
     42 }
     43 
     44 uint16x4_t test_vsli_n_u16(uint16x4_t a1, uint16x4_t a2) {
     45   // CHECK: test_vsli_n_u16
     46   return vsli_n_u16(a1, a2, 3);
     47   // CHECK: llvm.aarch64.neon.vsli.v4i16
     48   // CHECK_CODEGEN: sli.4h  v0, v1, #3
     49 }
     50 
     51 uint32x2_t test_vsli_n_u32(uint32x2_t a1, uint32x2_t a2) {
     52   // CHECK: test_vsli_n_u32
     53   return vsli_n_u32(a1, a2, 1);
     54   // CHECK: llvm.aarch64.neon.vsli.v2i32
     55   // CHECK_CODEGEN: sli.2s  v0, v1, #1
     56 }
     57 
     58 uint64x1_t test_vsli_n_u64(uint64x1_t a1, uint64x1_t a2) {
     59   // CHECK: test_vsli_n_u64
     60   return vsli_n_u64(a1, a2, 1);
     61   // CHECK: llvm.aarch64.neon.vsli.v1i64
     62   // CHECK_CODEGEN: sli     d0, d1, #1
     63 }
     64 
     65 poly8x8_t test_vsli_n_p8(poly8x8_t a1, poly8x8_t a2) {
     66   // CHECK: test_vsli_n_p8
     67   return vsli_n_p8(a1, a2, 1);
     68   // CHECK: llvm.aarch64.neon.vsli.v8i8
     69   // CHECK_CODEGEN: sli.8b  v0, v1, #1
     70 }
     71 
     72 poly16x4_t test_vsli_n_p16(poly16x4_t a1, poly16x4_t a2) {
     73   // CHECK: test_vsli_n_p16
     74   return vsli_n_p16(a1, a2, 1);
     75   // CHECK: llvm.aarch64.neon.vsli.v4i16
     76   // CHECK_CODEGEN: sli.4h  v0, v1, #1
     77 }
     78 
     79 int8x16_t test_vsliq_n_s8(int8x16_t a1, int8x16_t a2) {
     80   // CHECK: test_vsliq_n_s8
     81   return vsliq_n_s8(a1, a2, 3);
     82   // CHECK: llvm.aarch64.neon.vsli.v16i8
     83   // CHECK_CODEGEN: sli.16b v0, v1, #3
     84 }
     85 
     86 int16x8_t test_vsliq_n_s16(int16x8_t a1, int16x8_t a2) {
     87   // CHECK: test_vsliq_n_s16
     88   return vsliq_n_s16(a1, a2, 3);
     89   // CHECK: llvm.aarch64.neon.vsli.v8i16
     90   // CHECK_CODEGEN: sli.8h  v0, v1, #3
     91 }
     92 
     93 int32x4_t test_vsliq_n_s32(int32x4_t a1, int32x4_t a2) {
     94   // CHECK: test_vsliq_n_s32
     95   return vsliq_n_s32(a1, a2, 1);
     96   // CHECK: llvm.aarch64.neon.vsli.v4i32
     97   // CHECK_CODEGEN: sli.4s  v0, v1, #1
     98 }
     99 
    100 int64x2_t test_vsliq_n_s64(int64x2_t a1, int64x2_t a2) {
    101   // CHECK: test_vsliq_n_s64
    102   return vsliq_n_s64(a1, a2, 1);
    103   // CHECK: llvm.aarch64.neon.vsli.v2i64
    104   // CHECK_CODEGEN: sli.2d  v0, v1, #1
    105 }
    106 
    107 uint8x16_t test_vsliq_n_u8(uint8x16_t a1, uint8x16_t a2) {
    108   // CHECK: test_vsliq_n_u8
    109   return vsliq_n_u8(a1, a2, 3);
    110   // CHECK: llvm.aarch64.neon.vsli.v16i8
    111   // CHECK_CODEGEN: sli.16b v0, v1, #3
    112 }
    113 
    114 uint16x8_t test_vsliq_n_u16(uint16x8_t a1, uint16x8_t a2) {
    115   // CHECK: test_vsliq_n_u16
    116   return vsliq_n_u16(a1, a2, 3);
    117   // CHECK: llvm.aarch64.neon.vsli.v8i16
    118   // CHECK_CODEGEN: sli.8h  v0, v1, #3
    119 }
    120 
    121 uint32x4_t test_vsliq_n_u32(uint32x4_t a1, uint32x4_t a2) {
    122   // CHECK: test_vsliq_n_u32
    123   return vsliq_n_u32(a1, a2, 1);
    124   // CHECK: llvm.aarch64.neon.vsli.v4i32
    125   // CHECK_CODEGEN: sli.4s  v0, v1, #1
    126 }
    127 
    128 uint64x2_t test_vsliq_n_u64(uint64x2_t a1, uint64x2_t a2) {
    129   // CHECK: test_vsliq_n_u64
    130   return vsliq_n_u64(a1, a2, 1);
    131   // CHECK: llvm.aarch64.neon.vsli.v2i64
    132   // CHECK_CODEGEN: sli.2d  v0, v1, #1
    133 }
    134 
    135 poly8x16_t test_vsliq_n_p8(poly8x16_t a1, poly8x16_t a2) {
    136   // CHECK: test_vsliq_n_p8
    137   return vsliq_n_p8(a1, a2, 1);
    138   // CHECK: llvm.aarch64.neon.vsli.v16i8
    139   // CHECK_CODEGEN: sli.16b v0, v1, #1
    140 }
    141 
    142 poly16x8_t test_vsliq_n_p16(poly16x8_t a1, poly16x8_t a2) {
    143   // CHECK: test_vsliq_n_p16
    144   return vsliq_n_p16(a1, a2, 1);
    145   // CHECK: llvm.aarch64.neon.vsli.v8i16
    146   // CHECK_CODEGEN: sli.8h  v0, v1, #1
    147 }
    148 
    149