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