1 // REQUIRES: aarch64-registered-target
2 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
3 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s
4 // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -o - %s >/dev/null
5 #include <arm_sve.h>
6 
test_svindex_s8(int8_t base,int8_t step)7 svint8_t test_svindex_s8(int8_t base, int8_t step)
8 {
9   // CHECK-LABEL: test_svindex_s8
10   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.index.nxv16i8(i8 %base, i8 %step)
11   // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
12   return svindex_s8(base, step);
13 }
14 
test_svindex_s16(int16_t base,int16_t step)15 svint16_t test_svindex_s16(int16_t base, int16_t step)
16 {
17   // CHECK-LABEL: test_svindex_s16
18   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.index.nxv8i16(i16 %base, i16 %step)
19   // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
20   return svindex_s16(base, step);
21 }
22 
test_svindex_s32(int32_t base,int32_t step)23 svint32_t test_svindex_s32(int32_t base, int32_t step)
24 {
25   // CHECK-LABEL: test_svindex_s32
26   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.index.nxv4i32(i32 %base, i32 %step)
27   // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
28   return svindex_s32(base, step);
29 }
30 
test_svindex_s64(int64_t base,int64_t step)31 svint64_t test_svindex_s64(int64_t base, int64_t step)
32 {
33   // CHECK-LABEL: test_svindex_s64
34   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.index.nxv2i64(i64 %base, i64 %step)
35   // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
36   return svindex_s64(base, step);
37 }
38 
test_svindex_u8(uint8_t base,uint8_t step)39 svuint8_t test_svindex_u8(uint8_t base, uint8_t step)
40 {
41   // CHECK-LABEL: test_svindex_u8
42   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 16 x i8> @llvm.aarch64.sve.index.nxv16i8(i8 %base, i8 %step)
43   // CHECK: ret <vscale x 16 x i8> %[[INTRINSIC]]
44   return svindex_u8(base, step);
45 }
46 
test_svindex_u16(uint16_t base,uint16_t step)47 svuint16_t test_svindex_u16(uint16_t base, uint16_t step)
48 {
49   // CHECK-LABEL: test_svindex_u16
50   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 8 x i16> @llvm.aarch64.sve.index.nxv8i16(i16 %base, i16 %step)
51   // CHECK: ret <vscale x 8 x i16> %[[INTRINSIC]]
52   return svindex_u16(base, step);
53 }
54 
test_svindex_u32(uint32_t base,uint32_t step)55 svuint32_t test_svindex_u32(uint32_t base, uint32_t step)
56 {
57   // CHECK-LABEL: test_svindex_u32
58   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 4 x i32> @llvm.aarch64.sve.index.nxv4i32(i32 %base, i32 %step)
59   // CHECK: ret <vscale x 4 x i32> %[[INTRINSIC]]
60   return svindex_u32(base, step);
61 }
62 
test_svindex_u64(uint64_t base,uint64_t step)63 svuint64_t test_svindex_u64(uint64_t base, uint64_t step)
64 {
65   // CHECK-LABEL: test_svindex_u64
66   // CHECK: %[[INTRINSIC:.*]] = call <vscale x 2 x i64> @llvm.aarch64.sve.index.nxv2i64(i64 %base, i64 %step)
67   // CHECK: ret <vscale x 2 x i64> %[[INTRINSIC]]
68   return svindex_u64(base, step);
69 }
70