Skip to content

Commit 31af00f

Browse files
authored
[AArch64][v8.7-A] Fix inconsistency in SPE_EEF feature (#115296)
The `SPE-EEF` system-register only feature introduced in Armv8.7-a adds support for an extra system register (`PMSNEVFR_EL1`) to the Statistical Profiling extension. However, `SPE-EEF` is gated even for Armv8.7-a and the `spe-eef` subtarget-feature is needed to enable it. This behavior is inconsistent with the implementation for other system-register only features as they can be used ungated under supported architectures. (e.g. HCX : Enable Armv8.7-A `HCRX_EL2` system register). GCC/Binutils too do not add command line flags for features that only enable system registers. Fix by enabling `SPE-EEF` unconditionally under v8.7-A and above.
1 parent 2c49301 commit 31af00f

File tree

13 files changed

+17
-1
lines changed

13 files changed

+17
-1
lines changed

clang/test/Driver/print-enabled-extensions/aarch64-ampere1b.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
// CHECK-NEXT: FEAT_SHA3, FEAT_SHA512 Enable SHA512 and SHA3 support
5252
// CHECK-NEXT: FEAT_SM4, FEAT_SM3 Enable SM3 and SM4 support
5353
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
54+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
5455
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
5556
// CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
5657
// CHECK-NEXT: FEAT_TRF Enable Armv8.4-A Trace extension

clang/test/Driver/print-enabled-extensions/aarch64-apple-m4.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
// CHECK-NEXT: FEAT_SME_F64F64 Enable Scalable Matrix Extension (SME) F64F64 instructions
5252
// CHECK-NEXT: FEAT_SME_I16I64 Enable Scalable Matrix Extension (SME) I16I64 instructions
5353
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
54+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
5455
// CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
5556
// CHECK-NEXT: FEAT_TRF Enable Armv8.4-A Trace extension
5657
// CHECK-NEXT: FEAT_UAO Enable Armv8.2-A UAO PState

clang/test/Driver/print-enabled-extensions/aarch64-armv8.7-a.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
// CHECK-NEXT: FEAT_SB Enable Armv8.5-A Speculation Barrier
4343
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
4444
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
45+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
4546
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
4647
// CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
4748
// CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension

clang/test/Driver/print-enabled-extensions/aarch64-armv8.8-a.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
// CHECK-NEXT: FEAT_SB Enable Armv8.5-A Speculation Barrier
4646
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
4747
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
48+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
4849
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
4950
// CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
5051
// CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension

clang/test/Driver/print-enabled-extensions/aarch64-armv8.9-a.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
5252
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
5353
// CHECK-NEXT: FEAT_SPECRES2 Enable Speculation Restriction Instruction
54+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
5455
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
5556
// CHECK-NEXT: FEAT_TLBIOS, FEAT_TLBIRANGE Enable Armv8.4-A TLB Range and Maintenance instructions
5657
// CHECK-NEXT: FEAT_TRBE Enable Trace Buffer Extension

clang/test/Driver/print-enabled-extensions/aarch64-armv9.2-a.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
// CHECK-NEXT: FEAT_SB Enable Armv8.5-A Speculation Barrier
4646
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
4747
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
48+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
4849
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
4950
// CHECK-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
5051
// CHECK-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions

clang/test/Driver/print-enabled-extensions/aarch64-armv9.3-a.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
// CHECK-NEXT: FEAT_SB Enable Armv8.5-A Speculation Barrier
4949
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
5050
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
51+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
5152
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
5253
// CHECK-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
5354
// CHECK-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions

clang/test/Driver/print-enabled-extensions/aarch64-armv9.4-a.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
5555
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
5656
// CHECK-NEXT: FEAT_SPECRES2 Enable Speculation Restriction Instruction
57+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
5758
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
5859
// CHECK-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
5960
// CHECK-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions

clang/test/Driver/print-enabled-extensions/aarch64-armv9.5-a.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
5858
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
5959
// CHECK-NEXT: FEAT_SPECRES2 Enable Speculation Restriction Instruction
60+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
6061
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
6162
// CHECK-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
6263
// CHECK-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions

clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
// CHECK-NEXT: FEAT_SB Enable Armv8.5-A Speculation Barrier
4747
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
4848
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
49+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
4950
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
5051
// CHECK-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
5152
// CHECK-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions

clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520ae.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
// CHECK-NEXT: FEAT_SB Enable Armv8.5-A Speculation Barrier
4747
// CHECK-NEXT: FEAT_SEL2 Enable Armv8.4-A Secure Exception Level 2 extension
4848
// CHECK-NEXT: FEAT_SPECRES Enable Armv8.5-A execution and data prediction invalidation instructions
49+
// CHECK-NEXT: FEAT_SPEv1p2 Enable extra register in the Statistical Profiling Extension
4950
// CHECK-NEXT: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit
5051
// CHECK-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
5152
// CHECK-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions

llvm/lib/Target/AArch64/AArch64Features.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ def HasV8_6aOps : Architecture64<8, 6, "a", "v8.6a",
847847
FeatureEnhancedCounterVirtualization, FeatureMatMulInt8],
848848
!listconcat(HasV8_5aOps.DefaultExts, [FeatureBF16, FeatureMatMulInt8])>;
849849
def HasV8_7aOps : Architecture64<8, 7, "a", "v8.7a",
850-
[HasV8_6aOps, FeatureXS, FeatureWFxT, FeatureHCX],
850+
[HasV8_6aOps, FeatureXS, FeatureWFxT, FeatureHCX, FeatureSPE_EEF],
851851
!listconcat(HasV8_6aOps.DefaultExts, [FeatureWFxT])>;
852852
def HasV8_8aOps : Architecture64<8, 8, "a", "v8.8a",
853853
[HasV8_7aOps, FeatureHBC, FeatureMOPS, FeatureNMI],

llvm/test/MC/AArch64/spe.s

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
// RUN: llvm-mc -triple aarch64 -mattr +spe-eef -show-encoding %s 2>%t | FileCheck %s
2+
// RUN: llvm-mc -triple aarch64 -mattr +v8.7a -show-encoding %s 2>%t | FileCheck %s
3+
// RUN: not llvm-mc -triple aarch64 < %s 2>&1 | FileCheck --check-prefix=CHECK-NO-SPE-EEF-ERR %s
24

35
msr PMSNEVFR_EL1, x0
46
mrs x1, PMSNEVFR_EL1
57
// CHECK: msr PMSNEVFR_EL1, x0 // encoding: [0x20,0x99,0x18,0xd5]
68
// CHECK: mrs x1, PMSNEVFR_EL1 // encoding: [0x21,0x99,0x38,0xd5]
9+
10+
// CHECK-NO-SPE-EEF-ERR: [[@LINE-5]]:5: error: expected writable system register or pstate
11+
// CHECK-NO-SPE-EEF-ERR: [[@LINE-5]]:9: error: expected readable system register

0 commit comments

Comments
 (0)