Skip to content

Commit e4d9be3

Browse files
authored
[Clang][AArch64] make bitperm intrinsics available in streaming mode (#129700)
Based on recent changes in armv9.6 BitPerm instructions and thus intrinsics are available in streaming mode when [FEAT_SSVE_BitPerm](https://developer.arm.com/documentation/109697/2024_12/Feature-descriptions/The-Armv9-6-architecture-extension?lang=en#md463-the-armv96-architecture-extension__feat_FEAT_SSVE_BitPerm) is available. This patch reflects this change and is based on [ACLE proposal](ARM-software/acle#385).
1 parent 6e63b68 commit e4d9be3

File tree

5 files changed

+103
-79
lines changed

5 files changed

+103
-79
lines changed

clang/include/clang/Basic/arm_sve.td

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1990,13 +1990,13 @@ def SVSM4E : SInst<"svsm4e[_{d}]", "ddd", "Ui", MergeNone, "aarch64_sve_sm
19901990
def SVSM4EKEY : SInst<"svsm4ekey[_{d}]", "ddd", "Ui", MergeNone, "aarch64_sve_sm4ekey", [IsOverloadNone]>;
19911991
}
19921992

1993-
let SVETargetGuard = "sve2,sve-bitperm", SMETargetGuard = InvalidMode in {
1994-
def SVBDEP : SInst<"svbdep[_{d}]", "ddd", "UcUsUiUl", MergeNone, "aarch64_sve_bdep_x">;
1995-
def SVBDEP_N : SInst<"svbdep[_n_{d}]", "dda", "UcUsUiUl", MergeNone, "aarch64_sve_bdep_x">;
1996-
def SVBEXT : SInst<"svbext[_{d}]", "ddd", "UcUsUiUl", MergeNone, "aarch64_sve_bext_x">;
1997-
def SVBEXT_N : SInst<"svbext[_n_{d}]", "dda", "UcUsUiUl", MergeNone, "aarch64_sve_bext_x">;
1998-
def SVBGRP : SInst<"svbgrp[_{d}]", "ddd", "UcUsUiUl", MergeNone, "aarch64_sve_bgrp_x">;
1999-
def SVBGRP_N : SInst<"svbgrp[_n_{d}]", "dda", "UcUsUiUl", MergeNone, "aarch64_sve_bgrp_x">;
1993+
let SVETargetGuard = "sve2,sve-bitperm", SMETargetGuard = "sme,ssve-bitperm" in {
1994+
def SVBDEP : SInst<"svbdep[_{d}]", "ddd", "UcUsUiUl", MergeNone, "aarch64_sve_bdep_x", [VerifyRuntimeMode]>;
1995+
def SVBDEP_N : SInst<"svbdep[_n_{d}]", "dda", "UcUsUiUl", MergeNone, "aarch64_sve_bdep_x", [VerifyRuntimeMode]>;
1996+
def SVBEXT : SInst<"svbext[_{d}]", "ddd", "UcUsUiUl", MergeNone, "aarch64_sve_bext_x", [VerifyRuntimeMode]>;
1997+
def SVBEXT_N : SInst<"svbext[_n_{d}]", "dda", "UcUsUiUl", MergeNone, "aarch64_sve_bext_x", [VerifyRuntimeMode]>;
1998+
def SVBGRP : SInst<"svbgrp[_{d}]", "ddd", "UcUsUiUl", MergeNone, "aarch64_sve_bgrp_x", [VerifyRuntimeMode]>;
1999+
def SVBGRP_N : SInst<"svbgrp[_n_{d}]", "dda", "UcUsUiUl", MergeNone, "aarch64_sve_bgrp_x", [VerifyRuntimeMode]>;
20002000
}
20012001

20022002
let SVETargetGuard = "sve2p1", SMETargetGuard = "sme" in {

clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_bdep.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-bitperm -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
66
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-bitperm -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
77
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-bitperm -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
8+
// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +ssve-bitperm -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
9+
// RUN: not %clang_cc1 -triple aarch64 -target-feature +sme -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
810

911
#include <arm_sve.h>
1012

@@ -15,6 +17,12 @@
1517
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
1618
#endif
1719

20+
#ifdef __ARM_FEATURE_SME
21+
#define STREAMING __arm_streaming
22+
#else
23+
#define STREAMING
24+
#endif
25+
1826
// CHECK-LABEL: @test_svbdep_u8(
1927
// CHECK-NEXT: entry:
2028
// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.bdep.x.nxv16i8(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
@@ -25,7 +33,7 @@
2533
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.bdep.x.nxv16i8(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
2634
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
2735
//
28-
svuint8_t test_svbdep_u8(svuint8_t op1, svuint8_t op2)
36+
svuint8_t test_svbdep_u8(svuint8_t op1, svuint8_t op2) STREAMING
2937
{
3038
return SVE_ACLE_FUNC(svbdep,_u8,,)(op1, op2);
3139
}
@@ -40,7 +48,7 @@ svuint8_t test_svbdep_u8(svuint8_t op1, svuint8_t op2)
4048
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.bdep.x.nxv8i16(<vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
4149
// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
4250
//
43-
svuint16_t test_svbdep_u16(svuint16_t op1, svuint16_t op2)
51+
svuint16_t test_svbdep_u16(svuint16_t op1, svuint16_t op2) STREAMING
4452
{
4553
return SVE_ACLE_FUNC(svbdep,_u16,,)(op1, op2);
4654
}
@@ -55,7 +63,7 @@ svuint16_t test_svbdep_u16(svuint16_t op1, svuint16_t op2)
5563
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.bdep.x.nxv4i32(<vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
5664
// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
5765
//
58-
svuint32_t test_svbdep_u32(svuint32_t op1, svuint32_t op2)
66+
svuint32_t test_svbdep_u32(svuint32_t op1, svuint32_t op2) STREAMING
5967
{
6068
return SVE_ACLE_FUNC(svbdep,_u32,,)(op1, op2);
6169
}
@@ -70,7 +78,7 @@ svuint32_t test_svbdep_u32(svuint32_t op1, svuint32_t op2)
7078
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.bdep.x.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
7179
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
7280
//
73-
svuint64_t test_svbdep_u64(svuint64_t op1, svuint64_t op2)
81+
svuint64_t test_svbdep_u64(svuint64_t op1, svuint64_t op2) STREAMING
7482
{
7583
return SVE_ACLE_FUNC(svbdep,_u64,,)(op1, op2);
7684
}
@@ -89,7 +97,7 @@ svuint64_t test_svbdep_u64(svuint64_t op1, svuint64_t op2)
8997
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.bdep.x.nxv16i8(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
9098
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
9199
//
92-
svuint8_t test_svbdep_n_u8(svuint8_t op1, uint8_t op2)
100+
svuint8_t test_svbdep_n_u8(svuint8_t op1, uint8_t op2) STREAMING
93101
{
94102
return SVE_ACLE_FUNC(svbdep,_n_u8,,)(op1, op2);
95103
}
@@ -108,7 +116,7 @@ svuint8_t test_svbdep_n_u8(svuint8_t op1, uint8_t op2)
108116
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.bdep.x.nxv8i16(<vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
109117
// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
110118
//
111-
svuint16_t test_svbdep_n_u16(svuint16_t op1, uint16_t op2)
119+
svuint16_t test_svbdep_n_u16(svuint16_t op1, uint16_t op2) STREAMING
112120
{
113121
return SVE_ACLE_FUNC(svbdep,_n_u16,,)(op1, op2);
114122
}
@@ -127,7 +135,7 @@ svuint16_t test_svbdep_n_u16(svuint16_t op1, uint16_t op2)
127135
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.bdep.x.nxv4i32(<vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
128136
// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
129137
//
130-
svuint32_t test_svbdep_n_u32(svuint32_t op1, uint32_t op2)
138+
svuint32_t test_svbdep_n_u32(svuint32_t op1, uint32_t op2) STREAMING
131139
{
132140
return SVE_ACLE_FUNC(svbdep,_n_u32,,)(op1, op2);
133141
}
@@ -146,7 +154,7 @@ svuint32_t test_svbdep_n_u32(svuint32_t op1, uint32_t op2)
146154
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.bdep.x.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
147155
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
148156
//
149-
svuint64_t test_svbdep_n_u64(svuint64_t op1, uint64_t op2)
157+
svuint64_t test_svbdep_n_u64(svuint64_t op1, uint64_t op2) STREAMING
150158
{
151159
return SVE_ACLE_FUNC(svbdep,_n_u64,,)(op1, op2);
152160
}

clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_bext.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-bitperm -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
66
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-bitperm -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
77
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-bitperm -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
8+
// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +ssve-bitperm -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
9+
// RUN: not %clang_cc1 -triple aarch64 -target-feature +sme -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
810

911
#include <arm_sve.h>
1012

@@ -15,6 +17,12 @@
1517
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
1618
#endif
1719

20+
#ifdef __ARM_FEATURE_SME
21+
#define STREAMING __arm_streaming
22+
#else
23+
#define STREAMING
24+
#endif
25+
1826
// CHECK-LABEL: @test_svbext_u8(
1927
// CHECK-NEXT: entry:
2028
// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.bext.x.nxv16i8(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
@@ -25,7 +33,7 @@
2533
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.bext.x.nxv16i8(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
2634
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
2735
//
28-
svuint8_t test_svbext_u8(svuint8_t op1, svuint8_t op2)
36+
svuint8_t test_svbext_u8(svuint8_t op1, svuint8_t op2) STREAMING
2937
{
3038
return SVE_ACLE_FUNC(svbext,_u8,,)(op1, op2);
3139
}
@@ -40,7 +48,7 @@ svuint8_t test_svbext_u8(svuint8_t op1, svuint8_t op2)
4048
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.bext.x.nxv8i16(<vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
4149
// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
4250
//
43-
svuint16_t test_svbext_u16(svuint16_t op1, svuint16_t op2)
51+
svuint16_t test_svbext_u16(svuint16_t op1, svuint16_t op2) STREAMING
4452
{
4553
return SVE_ACLE_FUNC(svbext,_u16,,)(op1, op2);
4654
}
@@ -55,7 +63,7 @@ svuint16_t test_svbext_u16(svuint16_t op1, svuint16_t op2)
5563
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.bext.x.nxv4i32(<vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
5664
// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
5765
//
58-
svuint32_t test_svbext_u32(svuint32_t op1, svuint32_t op2)
66+
svuint32_t test_svbext_u32(svuint32_t op1, svuint32_t op2) STREAMING
5967
{
6068
return SVE_ACLE_FUNC(svbext,_u32,,)(op1, op2);
6169
}
@@ -70,7 +78,7 @@ svuint32_t test_svbext_u32(svuint32_t op1, svuint32_t op2)
7078
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.bext.x.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
7179
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
7280
//
73-
svuint64_t test_svbext_u64(svuint64_t op1, svuint64_t op2)
81+
svuint64_t test_svbext_u64(svuint64_t op1, svuint64_t op2) STREAMING
7482
{
7583
return SVE_ACLE_FUNC(svbext,_u64,,)(op1, op2);
7684
}
@@ -89,7 +97,7 @@ svuint64_t test_svbext_u64(svuint64_t op1, svuint64_t op2)
8997
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.bext.x.nxv16i8(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
9098
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
9199
//
92-
svuint8_t test_svbext_n_u8(svuint8_t op1, uint8_t op2)
100+
svuint8_t test_svbext_n_u8(svuint8_t op1, uint8_t op2) STREAMING
93101
{
94102
return SVE_ACLE_FUNC(svbext,_n_u8,,)(op1, op2);
95103
}
@@ -108,7 +116,7 @@ svuint8_t test_svbext_n_u8(svuint8_t op1, uint8_t op2)
108116
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.bext.x.nxv8i16(<vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
109117
// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
110118
//
111-
svuint16_t test_svbext_n_u16(svuint16_t op1, uint16_t op2)
119+
svuint16_t test_svbext_n_u16(svuint16_t op1, uint16_t op2) STREAMING
112120
{
113121
return SVE_ACLE_FUNC(svbext,_n_u16,,)(op1, op2);
114122
}
@@ -127,7 +135,7 @@ svuint16_t test_svbext_n_u16(svuint16_t op1, uint16_t op2)
127135
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.bext.x.nxv4i32(<vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
128136
// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
129137
//
130-
svuint32_t test_svbext_n_u32(svuint32_t op1, uint32_t op2)
138+
svuint32_t test_svbext_n_u32(svuint32_t op1, uint32_t op2) STREAMING
131139
{
132140
return SVE_ACLE_FUNC(svbext,_n_u32,,)(op1, op2);
133141
}
@@ -146,7 +154,7 @@ svuint32_t test_svbext_n_u32(svuint32_t op1, uint32_t op2)
146154
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.bext.x.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
147155
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
148156
//
149-
svuint64_t test_svbext_n_u64(svuint64_t op1, uint64_t op2)
157+
svuint64_t test_svbext_n_u64(svuint64_t op1, uint64_t op2) STREAMING
150158
{
151159
return SVE_ACLE_FUNC(svbext,_n_u64,,)(op1, op2);
152160
}

clang/test/CodeGen/AArch64/sve2-intrinsics/acle_sve2_bgrp.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-bitperm -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
66
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-bitperm -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
77
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-bitperm -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
8+
// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +ssve-bitperm -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
9+
// RUN: not %clang_cc1 -triple aarch64 -target-feature +sme -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
810

911
#include <arm_sve.h>
1012

@@ -15,6 +17,12 @@
1517
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
1618
#endif
1719

20+
#ifdef __ARM_FEATURE_SME
21+
#define STREAMING __arm_streaming
22+
#else
23+
#define STREAMING
24+
#endif
25+
1826
// CHECK-LABEL: @test_svbgrp_u8(
1927
// CHECK-NEXT: entry:
2028
// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.bgrp.x.nxv16i8(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
@@ -25,7 +33,7 @@
2533
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.bgrp.x.nxv16i8(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
2634
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
2735
//
28-
svuint8_t test_svbgrp_u8(svuint8_t op1, svuint8_t op2)
36+
svuint8_t test_svbgrp_u8(svuint8_t op1, svuint8_t op2) STREAMING
2937
{
3038
return SVE_ACLE_FUNC(svbgrp,_u8,,)(op1, op2);
3139
}
@@ -40,7 +48,7 @@ svuint8_t test_svbgrp_u8(svuint8_t op1, svuint8_t op2)
4048
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.bgrp.x.nxv8i16(<vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]])
4149
// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
4250
//
43-
svuint16_t test_svbgrp_u16(svuint16_t op1, svuint16_t op2)
51+
svuint16_t test_svbgrp_u16(svuint16_t op1, svuint16_t op2) STREAMING
4452
{
4553
return SVE_ACLE_FUNC(svbgrp,_u16,,)(op1, op2);
4654
}
@@ -55,7 +63,7 @@ svuint16_t test_svbgrp_u16(svuint16_t op1, svuint16_t op2)
5563
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.bgrp.x.nxv4i32(<vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]])
5664
// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
5765
//
58-
svuint32_t test_svbgrp_u32(svuint32_t op1, svuint32_t op2)
66+
svuint32_t test_svbgrp_u32(svuint32_t op1, svuint32_t op2) STREAMING
5967
{
6068
return SVE_ACLE_FUNC(svbgrp,_u32,,)(op1, op2);
6169
}
@@ -70,7 +78,7 @@ svuint32_t test_svbgrp_u32(svuint32_t op1, svuint32_t op2)
7078
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.bgrp.x.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
7179
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
7280
//
73-
svuint64_t test_svbgrp_u64(svuint64_t op1, svuint64_t op2)
81+
svuint64_t test_svbgrp_u64(svuint64_t op1, svuint64_t op2) STREAMING
7482
{
7583
return SVE_ACLE_FUNC(svbgrp,_u64,,)(op1, op2);
7684
}
@@ -89,7 +97,7 @@ svuint64_t test_svbgrp_u64(svuint64_t op1, svuint64_t op2)
8997
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.bgrp.x.nxv16i8(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
9098
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
9199
//
92-
svuint8_t test_svbgrp_n_u8(svuint8_t op1, uint8_t op2)
100+
svuint8_t test_svbgrp_n_u8(svuint8_t op1, uint8_t op2) STREAMING
93101
{
94102
return SVE_ACLE_FUNC(svbgrp,_n_u8,,)(op1, op2);
95103
}
@@ -108,7 +116,7 @@ svuint8_t test_svbgrp_n_u8(svuint8_t op1, uint8_t op2)
108116
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.bgrp.x.nxv8i16(<vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
109117
// CPP-CHECK-NEXT: ret <vscale x 8 x i16> [[TMP0]]
110118
//
111-
svuint16_t test_svbgrp_n_u16(svuint16_t op1, uint16_t op2)
119+
svuint16_t test_svbgrp_n_u16(svuint16_t op1, uint16_t op2) STREAMING
112120
{
113121
return SVE_ACLE_FUNC(svbgrp,_n_u16,,)(op1, op2);
114122
}
@@ -127,7 +135,7 @@ svuint16_t test_svbgrp_n_u16(svuint16_t op1, uint16_t op2)
127135
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.bgrp.x.nxv4i32(<vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
128136
// CPP-CHECK-NEXT: ret <vscale x 4 x i32> [[TMP0]]
129137
//
130-
svuint32_t test_svbgrp_n_u32(svuint32_t op1, uint32_t op2)
138+
svuint32_t test_svbgrp_n_u32(svuint32_t op1, uint32_t op2) STREAMING
131139
{
132140
return SVE_ACLE_FUNC(svbgrp,_n_u32,,)(op1, op2);
133141
}
@@ -146,7 +154,7 @@ svuint32_t test_svbgrp_n_u32(svuint32_t op1, uint32_t op2)
146154
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.bgrp.x.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
147155
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
148156
//
149-
svuint64_t test_svbgrp_n_u64(svuint64_t op1, uint64_t op2)
157+
svuint64_t test_svbgrp_n_u64(svuint64_t op1, uint64_t op2) STREAMING
150158
{
151159
return SVE_ACLE_FUNC(svbgrp,_n_u64,,)(op1, op2);
152160
}

0 commit comments

Comments
 (0)