Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 -triple armv8.1a-linux-gnu -target-feature +neon \
      2 // RUN:  -O3 -S -o - %s \
      3 // RUN:  | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ARM
      4 // RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon \
      5 // RUN:  -target-feature +v8.1a -O3 -S -o - %s \
      6 // RUN:  | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-AARCH64
      7 // REQUIRES: arm-registered-target,aarch64-registered-target
      8 
      9 #include <arm_neon.h>
     10 
     11 // CHECK-LABEL: test_vqrdmlah_s16
     12 int16x4_t test_vqrdmlah_s16(int16x4_t a, int16x4_t b, int16x4_t c) {
     13 // CHECK-ARM: vqrdmlah.s16 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}
     14 // CHECK-AARCH64: sqrdmlah {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
     15   return vqrdmlah_s16(a, b, c);
     16 }
     17 
     18 // CHECK-LABEL: test_vqrdmlah_s32
     19 int32x2_t test_vqrdmlah_s32(int32x2_t a, int32x2_t b, int32x2_t c) {
     20 // CHECK-ARM: vqrdmlah.s32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}
     21 // CHECK-AARCH64: sqrdmlah {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
     22   return vqrdmlah_s32(a, b, c);
     23 }
     24 
     25 // CHECK-LABEL: test_vqrdmlahq_s16
     26 int16x8_t test_vqrdmlahq_s16(int16x8_t a, int16x8_t b, int16x8_t c) {
     27 // CHECK-ARM: vqrdmlah.s16 q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
     28 // CHECK-AARCH64: sqrdmlah {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
     29   return vqrdmlahq_s16(a, b, c);
     30 }
     31 
     32 // CHECK-LABEL: test_vqrdmlahq_s32
     33 int32x4_t test_vqrdmlahq_s32(int32x4_t a, int32x4_t b, int32x4_t c) {
     34 // CHECK-ARM: vqrdmlah.s32 q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
     35 // CHECK-AARCH64: sqrdmlah {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     36   return vqrdmlahq_s32(a, b, c);
     37 }
     38 
     39 // CHECK-LABEL: test_vqrdmlah_lane_s16
     40 int16x4_t test_vqrdmlah_lane_s16(int16x4_t a, int16x4_t b, int16x4_t c) {
     41 // CHECK-ARM: vqrdmlah.s16 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}[3]
     42 // CHECK-AARCH64: sqrdmlah {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3]
     43   return vqrdmlah_lane_s16(a, b, c, 3);
     44 }
     45 
     46 // CHECK-LABEL: test_vqrdmlah_lane_s32
     47 int32x2_t test_vqrdmlah_lane_s32(int32x2_t a, int32x2_t b, int32x2_t c) {
     48 // CHECK-ARM: vqrdmlah.s32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}[1]
     49 // CHECK-AARCH64: sqrdmlah {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1]
     50   return vqrdmlah_lane_s32(a, b, c, 1);
     51 }
     52 
     53 // CHECK-LABEL: test_vqrdmlahq_lane_s16
     54 int16x8_t test_vqrdmlahq_lane_s16(int16x8_t a, int16x8_t b, int16x4_t c) {
     55 // CHECK-ARM: vqrdmlah.s16 q{{[0-9]+}}, q{{[0-9]+}}, d{{[0-9]+}}[3]
     56 // CHECK-AARCH64: sqrdmlah {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3]
     57   return vqrdmlahq_lane_s16(a, b, c, 3);
     58 }
     59 
     60 // CHECK-LABEL: test_vqrdmlahq_lane_s32
     61 int32x4_t test_vqrdmlahq_lane_s32(int32x4_t a, int32x4_t b, int32x2_t c) {
     62 // CHECK-ARM: vqrdmlah.s32 q{{[0-9]+}}, q{{[0-9]+}}, d{{[0-9]+}}[1]
     63 // CHECK-AARCH64: sqrdmlah {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1]
     64   return vqrdmlahq_lane_s32(a, b, c, 1);
     65 }
     66 
     67 // CHECK-LABEL: test_vqrdmlsh_s16
     68 int16x4_t test_vqrdmlsh_s16(int16x4_t a, int16x4_t b, int16x4_t c) {
     69 // CHECK-ARM: vqrdmlsh.s16 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}
     70 // CHECK-AARCH64: sqrdmlsh {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
     71   return vqrdmlsh_s16(a, b, c);
     72 }
     73 
     74 // CHECK-LABEL: test_vqrdmlsh_s32
     75 int32x2_t test_vqrdmlsh_s32(int32x2_t a, int32x2_t b, int32x2_t c) {
     76 // CHECK-ARM: vqrdmlsh.s32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}
     77 // CHECK-AARCH64: sqrdmlsh {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
     78   return vqrdmlsh_s32(a, b, c);
     79 }
     80 
     81 // CHECK-LABEL: test_vqrdmlshq_s16
     82 int16x8_t test_vqrdmlshq_s16(int16x8_t a, int16x8_t b, int16x8_t c) {
     83 // CHECK-ARM: vqrdmlsh.s16 q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
     84 // CHECK-AARCH64: sqrdmlsh {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
     85   return vqrdmlshq_s16(a, b, c);
     86 }
     87 
     88 // CHECK-LABEL: test_vqrdmlshq_s32
     89 int32x4_t test_vqrdmlshq_s32(int32x4_t a, int32x4_t b, int32x4_t c) {
     90 // CHECK-ARM: vqrdmlsh.s32 q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}}
     91 // CHECK-AARCH64: sqrdmlsh {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     92   return vqrdmlshq_s32(a, b, c);
     93 }
     94 
     95 // CHECK-LABEL: test_vqrdmlsh_lane_s16
     96 int16x4_t test_vqrdmlsh_lane_s16(int16x4_t a, int16x4_t b, int16x4_t c) {
     97 // CHECK-ARM: vqrdmlsh.s16 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}[3]
     98 // CHECK-AARCH64: sqrdmlsh {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.h[3]
     99   return vqrdmlsh_lane_s16(a, b, c, 3);
    100 }
    101 
    102 // CHECK-LABEL: test_vqrdmlsh_lane_s32
    103 int32x2_t test_vqrdmlsh_lane_s32(int32x2_t a, int32x2_t b, int32x2_t c) {
    104 // CHECK-ARM: vqrdmlsh.s32 d{{[0-9]+}}, d{{[0-9]+}}, d{{[0-9]+}}[1]
    105 // CHECK-AARCH64: sqrdmlsh {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.s[1]
    106   return vqrdmlsh_lane_s32(a, b, c, 1);
    107 }
    108 
    109 // CHECK-LABEL: test_vqrdmlshq_lane_s16
    110 int16x8_t test_vqrdmlshq_lane_s16(int16x8_t a, int16x8_t b, int16x4_t c) {
    111 // CHECK-ARM: vqrdmlsh.s16 q{{[0-9]+}}, q{{[0-9]+}}, d{{[0-9]+}}[3]
    112 // CHECK-AARCH64: sqrdmlsh {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.h[3]
    113   return vqrdmlshq_lane_s16(a, b, c, 3);
    114 }
    115 
    116 // CHECK-LABEL: test_vqrdmlshq_lane_s32
    117 int32x4_t test_vqrdmlshq_lane_s32(int32x4_t a, int32x4_t b, int32x2_t c) {
    118 // CHECK-ARM: vqrdmlsh.s32 q{{[0-9]+}}, q{{[0-9]+}}, d{{[0-9]+}}[1]
    119 // CHECK-AARCH64: sqrdmlsh {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.s[1]
    120   return vqrdmlshq_lane_s32(a, b, c, 1);
    121 }
    122 
    123