Skip to content

Commit eadde07

Browse files
authored
[AArch64][Clang] Update predication of SVE2-AES/PMULL Pair Intrinsics and add Test Coverage (#153825)
This patch updates the predication guards for SVE2 AES and PMULL Pair intrinsics to support execution in streaming mode. - Updated tablegen (arm_sve.td) - Updated existing Sema tests' diagnostics to reflect updated guard - Updated runlines of acle_sve2_pmullb_128.c, acle_sve2_pmullt_128.c, sve2-intrinsics-polynomial-arithmetic-128.ll, acle_sve2_aesimc.c, acle_sve2_aesd.c, acle_sve2_aese.c and acle_sve2_aesmc.c to reflect streaming.
1 parent 120725d commit eadde07

File tree

9 files changed

+110
-33
lines changed

9 files changed

+110
-33
lines changed

clang/include/clang/Basic/arm_sve.td

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1828,17 +1828,17 @@ let SVETargetGuard = "sve2,lut", SMETargetGuard = "sme2,lut" in {
18281828
////////////////////////////////////////////////////////////////////////////////
18291829
// SVE2 - Optional
18301830

1831-
let SVETargetGuard = "sve2,sve-aes", SMETargetGuard = InvalidMode in {
1832-
def SVAESD : SInst<"svaesd[_{d}]", "ddd", "Uc", MergeNone, "aarch64_sve_aesd", [IsOverloadNone]>;
1833-
def SVAESIMC : SInst<"svaesimc[_{d}]", "dd", "Uc", MergeNone, "aarch64_sve_aesimc", [IsOverloadNone]>;
1834-
def SVAESE : SInst<"svaese[_{d}]", "ddd", "Uc", MergeNone, "aarch64_sve_aese", [IsOverloadNone]>;
1835-
def SVAESMC : SInst<"svaesmc[_{d}]", "dd", "Uc", MergeNone, "aarch64_sve_aesmc", [IsOverloadNone]>;
1831+
let SVETargetGuard = "sve2,sve-aes", SMETargetGuard = "ssve-aes" in {
1832+
def SVAESD : SInst<"svaesd[_{d}]", "ddd", "Uc", MergeNone, "aarch64_sve_aesd", [IsOverloadNone, VerifyRuntimeMode]>;
1833+
def SVAESIMC : SInst<"svaesimc[_{d}]", "dd", "Uc", MergeNone, "aarch64_sve_aesimc", [IsOverloadNone, VerifyRuntimeMode]>;
1834+
def SVAESE : SInst<"svaese[_{d}]", "ddd", "Uc", MergeNone, "aarch64_sve_aese", [IsOverloadNone, VerifyRuntimeMode]>;
1835+
def SVAESMC : SInst<"svaesmc[_{d}]", "dd", "Uc", MergeNone, "aarch64_sve_aesmc", [IsOverloadNone, VerifyRuntimeMode]>;
18361836

1837-
def SVPMULLB_PAIR_U64 : SInst<"svpmullb_pair[_{d}]", "ddd", "Ul", MergeNone, "aarch64_sve_pmullb_pair">;
1838-
def SVPMULLB_PAIR_N_U64 : SInst<"svpmullb_pair[_n_{d}]", "dda", "Ul", MergeNone, "aarch64_sve_pmullb_pair">;
1837+
def SVPMULLB_PAIR_U64 : SInst<"svpmullb_pair[_{d}]", "ddd", "Ul", MergeNone, "aarch64_sve_pmullb_pair", [VerifyRuntimeMode]>;
1838+
def SVPMULLB_PAIR_N_U64 : SInst<"svpmullb_pair[_n_{d}]", "dda", "Ul", MergeNone, "aarch64_sve_pmullb_pair", [VerifyRuntimeMode]>;
18391839

1840-
def SVPMULLT_PAIR_U64 : SInst<"svpmullt_pair[_{d}]", "ddd", "Ul", MergeNone, "aarch64_sve_pmullt_pair">;
1841-
def SVPMULLT_PAIR_N_U64 : SInst<"svpmullt_pair[_n_{d}]", "dda", "Ul", MergeNone, "aarch64_sve_pmullt_pair">;
1840+
def SVPMULLT_PAIR_U64 : SInst<"svpmullt_pair[_{d}]", "ddd", "Ul", MergeNone, "aarch64_sve_pmullt_pair", [VerifyRuntimeMode]>;
1841+
def SVPMULLT_PAIR_N_U64 : SInst<"svpmullt_pair[_n_{d}]", "dda", "Ul", MergeNone, "aarch64_sve_pmullt_pair", [VerifyRuntimeMode]>;
18421842
}
18431843

18441844
let SVETargetGuard = "sve-sha3", SMETargetGuard = "sve-sha3,sme2p1" in {

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
55
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
66

7+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
8+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
9+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
10+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
11+
712
// REQUIRES: aarch64-registered-target
813

914
#include <arm_sve.h>
@@ -15,6 +20,12 @@
1520
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
1621
#endif
1722

23+
#ifdef __ARM_FEATURE_SME
24+
#define STREAMING __arm_streaming
25+
#else
26+
#define STREAMING
27+
#endif
28+
1829
// CHECK-LABEL: @test_svaesd_u8(
1930
// CHECK-NEXT: entry:
2031
// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesd(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
@@ -25,7 +36,7 @@
2536
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesd(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
2637
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
2738
//
28-
svuint8_t test_svaesd_u8(svuint8_t op1, svuint8_t op2)
39+
svuint8_t test_svaesd_u8(svuint8_t op1, svuint8_t op2) STREAMING
2940
{
3041
return SVE_ACLE_FUNC(svaesd,_u8,,)(op1, op2);
3142
}

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
55
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
66

7+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
8+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
9+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
10+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
11+
712
// REQUIRES: aarch64-registered-target
813

914
#include <arm_sve.h>
@@ -15,6 +20,12 @@
1520
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
1621
#endif
1722

23+
#if defined(__ARM_FEATURE_SME)
24+
#define STREAMING __arm_streaming
25+
#else
26+
#define STREAMING
27+
#endif
28+
1829
// CHECK-LABEL: @test_svaese_u8(
1930
// CHECK-NEXT: entry:
2031
// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aese(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
@@ -25,7 +36,7 @@
2536
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aese(<vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]])
2637
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
2738
//
28-
svuint8_t test_svaese_u8(svuint8_t op1, svuint8_t op2)
39+
svuint8_t test_svaese_u8(svuint8_t op1, svuint8_t op2) STREAMING
2940
{
3041
return SVE_ACLE_FUNC(svaese,_u8,,)(op1, op2);
3142
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
55
// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
66

7+
// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
8+
// RUN: %clang_cc1 -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
9+
// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
10+
// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
11+
12+
713
// REQUIRES: aarch64-registered-target
814

915
#include <arm_sve.h>
@@ -15,6 +21,13 @@
1521
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
1622
#endif
1723

24+
#if defined(__ARM_FEATURE_SME)
25+
#define STREAMING __arm_streaming
26+
#else
27+
#define STREAMING
28+
#endif
29+
30+
1831
// CHECK-LABEL: @test_svaesimc_u8(
1932
// CHECK-NEXT: entry:
2033
// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesimc(<vscale x 16 x i8> [[OP:%.*]])
@@ -25,7 +38,7 @@
2538
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesimc(<vscale x 16 x i8> [[OP:%.*]])
2639
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
2740
//
28-
svuint8_t test_svaesimc_u8(svuint8_t op)
41+
svuint8_t test_svaesimc_u8(svuint8_t op) STREAMING
2942
{
3043
return SVE_ACLE_FUNC(svaesimc,_u8,,)(op);
3144
}

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
55
// RUN: %clang_cc1 -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
66

7+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
8+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
9+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
10+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
11+
712
// REQUIRES: aarch64-registered-target
813

914
#include <arm_sve.h>
@@ -15,6 +20,12 @@
1520
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
1621
#endif
1722

23+
#if defined(__ARM_FEATURE_SME)
24+
#define MODE_ATTR __arm_streaming
25+
#else
26+
#define MODE_ATTR
27+
#endif
28+
1829
// CHECK-LABEL: @test_svaesmc_u8(
1930
// CHECK-NEXT: entry:
2031
// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesmc(<vscale x 16 x i8> [[OP:%.*]])
@@ -25,7 +36,7 @@
2536
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.aesmc(<vscale x 16 x i8> [[OP:%.*]])
2637
// CPP-CHECK-NEXT: ret <vscale x 16 x i8> [[TMP0]]
2738
//
28-
svuint8_t test_svaesmc_u8(svuint8_t op)
39+
svuint8_t test_svaesmc_u8(svuint8_t op) MODE_ATTR
2940
{
3041
return SVE_ACLE_FUNC(svaesmc,_u8,,)(op);
3142
}

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -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-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
88

9+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
10+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
11+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
12+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
13+
914
#include <arm_sve.h>
1015

1116
#ifdef SVE_OVERLOADED_FORMS
@@ -15,6 +20,15 @@
1520
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
1621
#endif
1722

23+
#ifdef __ARM_FEATURE_SME
24+
#define STREAMING __arm_streaming
25+
#else
26+
#define STREAMING
27+
#endif
28+
29+
30+
//
31+
//
1832
// CHECK-LABEL: @test_svpmullb_pair_u64(
1933
// CHECK-NEXT: entry:
2034
// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullb.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
@@ -25,11 +39,14 @@
2539
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullb.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
2640
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
2741
//
28-
svuint64_t test_svpmullb_pair_u64(svuint64_t op1, svuint64_t op2)
42+
svuint64_t test_svpmullb_pair_u64(svuint64_t op1, svuint64_t op2) STREAMING
2943
{
3044
return SVE_ACLE_FUNC(svpmullb_pair,_u64,,)(op1, op2);
3145
}
3246

47+
48+
//
49+
//
3350
// CHECK-LABEL: @test_svpmullb_pair_n_u64(
3451
// CHECK-NEXT: entry:
3552
// CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i64 0
@@ -44,7 +61,7 @@ svuint64_t test_svpmullb_pair_u64(svuint64_t op1, svuint64_t op2)
4461
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullb.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
4562
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
4663
//
47-
svuint64_t test_svpmullb_pair_n_u64(svuint64_t op1, uint64_t op2)
64+
svuint64_t test_svpmullb_pair_n_u64(svuint64_t op1, uint64_t op2) STREAMING
4865
{
4966
return SVE_ACLE_FUNC(svpmullb_pair,_n_u64,,)(op1, op2);
5067
}

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -target-feature +sve2 -target-feature +sve-aes -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-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
88

9+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
10+
// RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
11+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
12+
// RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sme -target-feature +ssve-aes -O1 -Werror -Wall -emit-llvm -o - -x c++ %s | FileCheck %s -check-prefix=CPP-CHECK
13+
914
#include <arm_sve.h>
1015

1116
#ifdef SVE_OVERLOADED_FORMS
@@ -15,6 +20,13 @@
1520
#define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
1621
#endif
1722

23+
#ifdef __ARM_FEATURE_SME
24+
#define STREAMING __arm_streaming
25+
#else
26+
#define STREAMING
27+
#endif
28+
29+
1830
// CHECK-LABEL: @test_svpmullt_pair_u64(
1931
// CHECK-NEXT: entry:
2032
// CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullt.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
@@ -25,11 +37,12 @@
2537
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullt.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]])
2638
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
2739
//
28-
svuint64_t test_svpmullt_pair_u64(svuint64_t op1, svuint64_t op2)
40+
svuint64_t test_svpmullt_pair_u64(svuint64_t op1, svuint64_t op2) STREAMING
2941
{
3042
return SVE_ACLE_FUNC(svpmullt_pair,_u64,,)(op1, op2);
3143
}
3244

45+
3346
// CHECK-LABEL: @test_svpmullt_pair_n_u64(
3447
// CHECK-NEXT: entry:
3548
// CHECK-NEXT: [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP2:%.*]], i64 0
@@ -44,7 +57,7 @@ svuint64_t test_svpmullt_pair_u64(svuint64_t op1, svuint64_t op2)
4457
// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.pmullt.pair.nxv2i64(<vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
4558
// CPP-CHECK-NEXT: ret <vscale x 2 x i64> [[TMP0]]
4659
//
47-
svuint64_t test_svpmullt_pair_n_u64(svuint64_t op1, uint64_t op2)
60+
svuint64_t test_svpmullt_pair_n_u64(svuint64_t op1, uint64_t op2) STREAMING
4861
{
4962
return SVE_ACLE_FUNC(svpmullt_pair,_n_u64,,)(op1, op2);
5063
}

clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_aes_bitperm_sha3_sm4.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,17 @@
1414

1515
void test(uint8_t u8, uint16_t u16, uint32_t u32, uint64_t u64)
1616
{
17-
// expected-error@+2 {{'svaesd_u8' needs target feature sve,sve2,sve-aes}}
18-
// overload-error@+1 {{'svaesd' needs target feature sve,sve2,sve-aes}}
17+
// expected-error@+2 {{'svaesd_u8' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}
18+
// overload-error@+1 {{'svaesd' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}
1919
SVE_ACLE_FUNC(svaesd,_u8,,)(svundef_u8(), svundef_u8());
20-
// expected-error@+2 {{'svaese_u8' needs target feature sve,sve2,sve-aes}}
21-
// overload-error@+1 {{'svaese' needs target feature sve,sve2,sve-aes}}
20+
// expected-error@+2 {{'svaese_u8' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}
21+
// overload-error@+1 {{'svaese' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}
2222
SVE_ACLE_FUNC(svaese,_u8,,)(svundef_u8(), svundef_u8());
23-
// expected-error@+2 {{'svaesimc_u8' needs target feature sve,sve2,sve-aes}}
24-
// overload-error@+1 {{'svaesimc' needs target feature sve,sve2,sve-aes}}
23+
// expected-error@+2 {{'svaesimc_u8' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}
24+
// overload-error@+1 {{'svaesimc' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}
2525
SVE_ACLE_FUNC(svaesimc,_u8,,)(svundef_u8());
26-
// expected-error@+2 {{'svaesmc_u8' needs target feature sve,sve2,sve-aes}}
27-
// overload-error@+1 {{'svaesmc' needs target feature sve,sve2,sve-aes}}
26+
// expected-error@+2 {{'svaesmc_u8' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}
27+
// overload-error@+1 {{'svaesmc' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}
2828
SVE_ACLE_FUNC(svaesmc,_u8,,)(svundef_u8());
2929
// expected-error@+2 {{'svbdep_u8' needs target feature (sve,sve2,sve-bitperm)|(sme,ssve-bitperm)}}
3030
// overload-error@+1 {{'svbdep' needs target feature (sve,sve2,sve-bitperm)|(sme,ssve-bitperm)}}
@@ -107,17 +107,17 @@ void test(uint8_t u8, uint16_t u16, uint32_t u32, uint64_t u64)
107107
// expected-error@+2 {{'svbgrp_n_u64' needs target feature (sve,sve2,sve-bitperm)|(sme,ssve-bitperm)}}
108108
// overload-error@+1 {{'svbgrp' needs target feature (sve,sve2,sve-bitperm)|(sme,ssve-bitperm)}}
109109
SVE_ACLE_FUNC(svbgrp,_n_u64,,)(svundef_u64(), u64);
110-
// expected-error@+2 {{'svpmullb_pair_u64' needs target feature sve,sve2,sve-aes}}
111-
// overload-error@+1 {{'svpmullb_pair' needs target feature sve,sve2,sve-aes}}
110+
// expected-error@+2 {{'svpmullb_pair_u64' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}}
111+
// overload-error@+1 {{'svpmullb_pair' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}}
112112
SVE_ACLE_FUNC(svpmullb_pair,_u64,,)(svundef_u64(), svundef_u64());
113-
// expected-error@+2 {{'svpmullb_pair_n_u64' needs target feature sve,sve2,sve-aes}}
114-
// overload-error@+1 {{'svpmullb_pair' needs target feature sve,sve2,sve-aes}}
113+
// expected-error@+2 {{'svpmullb_pair_n_u64' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}}
114+
// overload-error@+1 {{'svpmullb_pair' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}}
115115
SVE_ACLE_FUNC(svpmullb_pair,_n_u64,,)(svundef_u64(), u64);
116-
// expected-error@+2 {{'svpmullt_pair_u64' needs target feature sve,sve2,sve-aes}}
117-
// overload-error@+1 {{'svpmullt_pair' needs target feature sve,sve2,sve-aes}}
116+
// expected-error@+2 {{'svpmullt_pair_u64' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}}
117+
// overload-error@+1 {{'svpmullt_pair' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}}
118118
SVE_ACLE_FUNC(svpmullt_pair,_u64,,)(svundef_u64(), svundef_u64());
119-
// expected-error@+2 {{'svpmullt_pair_n_u64' needs target feature sve,sve2,sve-aes}}
120-
// overload-error@+1 {{'svpmullt_pair' needs target feature sve,sve2,sve-aes}}
119+
// expected-error@+2 {{'svpmullt_pair_n_u64' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}}
120+
// overload-error@+1 {{'svpmullt_pair' needs target feature (sve,sve2,sve-aes)|(sme,ssve-aes)}}}
121121
SVE_ACLE_FUNC(svpmullt_pair,_n_u64,,)(svundef_u64(), u64);
122122
// expected-error@+2 {{'svrax1_u64' needs target feature (sve,sve-sha3)|(sme,sve-sha3,sme2p1)}}
123123
// overload-error@+1 {{'svrax1' needs target feature (sve,sve-sha3)|(sme,sve-sha3,sme2p1)}}

llvm/test/CodeGen/AArch64/sve2-intrinsics-polynomial-arithmetic-128.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2-aes < %s | FileCheck %s
3+
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+ssve-aes -force-streaming < %s | FileCheck %s
34

45
;
56
; PMULLB

0 commit comments

Comments
 (0)