Author: amilendra
Date: 2024-11-08T10:56:46Z
New Revision: 31af00fda73df8e85e30c71f66e096d486ec8c8b

URL: 
https://github.com/llvm/llvm-project/commit/31af00fda73df8e85e30c71f66e096d486ec8c8b
DIFF: 
https://github.com/llvm/llvm-project/commit/31af00fda73df8e85e30c71f66e096d486ec8c8b.diff

LOG: [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.

Added: 
    

Modified: 
    clang/test/Driver/print-enabled-extensions/aarch64-ampere1b.c
    clang/test/Driver/print-enabled-extensions/aarch64-apple-m4.c
    clang/test/Driver/print-enabled-extensions/aarch64-armv8.7-a.c
    clang/test/Driver/print-enabled-extensions/aarch64-armv8.8-a.c
    clang/test/Driver/print-enabled-extensions/aarch64-armv8.9-a.c
    clang/test/Driver/print-enabled-extensions/aarch64-armv9.2-a.c
    clang/test/Driver/print-enabled-extensions/aarch64-armv9.3-a.c
    clang/test/Driver/print-enabled-extensions/aarch64-armv9.4-a.c
    clang/test/Driver/print-enabled-extensions/aarch64-armv9.5-a.c
    clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520.c
    clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520ae.c
    llvm/lib/Target/AArch64/AArch64Features.td
    llvm/test/MC/AArch64/spe.s

Removed: 
    


################################################################################
diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-ampere1b.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-ampere1b.c
index 444ac4526200fe..d9bee7093bee27 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-ampere1b.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-ampere1b.c
@@ -51,6 +51,7 @@
 // CHECK-NEXT:     FEAT_SHA3, FEAT_SHA512                                 
Enable SHA512 and SHA3 support
 // CHECK-NEXT:     FEAT_SM4, FEAT_SM3                                     
Enable SM3 and SM4 support
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_TLBIOS, FEAT_TLBIRANGE                            
Enable Armv8.4-A TLB Range and Maintenance instructions
 // CHECK-NEXT:     FEAT_TRF                                               
Enable Armv8.4-A Trace extension

diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-apple-m4.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-apple-m4.c
index 29d66dc8826a77..0e40c132bebdc8 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-apple-m4.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-apple-m4.c
@@ -51,6 +51,7 @@
 // CHECK-NEXT:     FEAT_SME_F64F64                                        
Enable Scalable Matrix Extension (SME) F64F64 instructions
 // CHECK-NEXT:     FEAT_SME_I16I64                                        
Enable Scalable Matrix Extension (SME) I16I64 instructions
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_TLBIOS, FEAT_TLBIRANGE                            
Enable Armv8.4-A TLB Range and Maintenance instructions
 // CHECK-NEXT:     FEAT_TRF                                               
Enable Armv8.4-A Trace extension
 // CHECK-NEXT:     FEAT_UAO                                               
Enable Armv8.2-A UAO PState

diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-armv8.7-a.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-armv8.7-a.c
index a41b8ded66e4e9..4a8e18b23aac85 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-armv8.7-a.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-armv8.7-a.c
@@ -42,6 +42,7 @@
 // CHECK-NEXT:     FEAT_SB                                                
Enable Armv8.5-A Speculation Barrier
 // CHECK-NEXT:     FEAT_SEL2                                              
Enable Armv8.4-A Secure Exception Level 2 extension
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_TLBIOS, FEAT_TLBIRANGE                            
Enable Armv8.4-A TLB Range and Maintenance instructions
 // CHECK-NEXT:     FEAT_TRBE                                              
Enable Trace Buffer Extension

diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-armv8.8-a.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-armv8.8-a.c
index 2f415366df81f6..160acb524df5c0 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-armv8.8-a.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-armv8.8-a.c
@@ -45,6 +45,7 @@
 // CHECK-NEXT:     FEAT_SB                                                
Enable Armv8.5-A Speculation Barrier
 // CHECK-NEXT:     FEAT_SEL2                                              
Enable Armv8.4-A Secure Exception Level 2 extension
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_TLBIOS, FEAT_TLBIRANGE                            
Enable Armv8.4-A TLB Range and Maintenance instructions
 // CHECK-NEXT:     FEAT_TRBE                                              
Enable Trace Buffer Extension

diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-armv8.9-a.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-armv8.9-a.c
index 33277b02f83262..04bd8fc06049b7 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-armv8.9-a.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-armv8.9-a.c
@@ -51,6 +51,7 @@
 // CHECK-NEXT:     FEAT_SEL2                                              
Enable Armv8.4-A Secure Exception Level 2 extension
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
 // CHECK-NEXT:     FEAT_SPECRES2                                          
Enable Speculation Restriction Instruction
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_TLBIOS, FEAT_TLBIRANGE                            
Enable Armv8.4-A TLB Range and Maintenance instructions
 // CHECK-NEXT:     FEAT_TRBE                                              
Enable Trace Buffer Extension

diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-armv9.2-a.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-armv9.2-a.c
index 0950b13a033439..d3b26122dc6db4 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-armv9.2-a.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-armv9.2-a.c
@@ -45,6 +45,7 @@
 // CHECK-NEXT:     FEAT_SB                                                
Enable Armv8.5-A Speculation Barrier
 // CHECK-NEXT:     FEAT_SEL2                                              
Enable Armv8.4-A Secure Exception Level 2 extension
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_SVE                                               
Enable Scalable Vector Extension (SVE) instructions
 // CHECK-NEXT:     FEAT_SVE2                                              
Enable Scalable Vector Extension 2 (SVE2) instructions

diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-armv9.3-a.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-armv9.3-a.c
index 0ccb31ffdc5ccb..61894f0fcefa5a 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-armv9.3-a.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-armv9.3-a.c
@@ -48,6 +48,7 @@
 // CHECK-NEXT:     FEAT_SB                                                
Enable Armv8.5-A Speculation Barrier
 // CHECK-NEXT:     FEAT_SEL2                                              
Enable Armv8.4-A Secure Exception Level 2 extension
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_SVE                                               
Enable Scalable Vector Extension (SVE) instructions
 // CHECK-NEXT:     FEAT_SVE2                                              
Enable Scalable Vector Extension 2 (SVE2) instructions

diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-armv9.4-a.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-armv9.4-a.c
index d3496025789c65..0032c926c22d96 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-armv9.4-a.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-armv9.4-a.c
@@ -54,6 +54,7 @@
 // CHECK-NEXT:     FEAT_SEL2                                              
Enable Armv8.4-A Secure Exception Level 2 extension
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
 // CHECK-NEXT:     FEAT_SPECRES2                                          
Enable Speculation Restriction Instruction
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_SVE                                               
Enable Scalable Vector Extension (SVE) instructions
 // CHECK-NEXT:     FEAT_SVE2                                              
Enable Scalable Vector Extension 2 (SVE2) instructions

diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-armv9.5-a.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-armv9.5-a.c
index cc4469fc3882d4..be24bd0bbddb68 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-armv9.5-a.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-armv9.5-a.c
@@ -57,6 +57,7 @@
 // CHECK-NEXT:     FEAT_SEL2                                              
Enable Armv8.4-A Secure Exception Level 2 extension
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
 // CHECK-NEXT:     FEAT_SPECRES2                                          
Enable Speculation Restriction Instruction
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_SVE                                               
Enable Scalable Vector Extension (SVE) instructions
 // CHECK-NEXT:     FEAT_SVE2                                              
Enable Scalable Vector Extension 2 (SVE2) instructions

diff  --git a/clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520.c
index 6ddd52a4a7089c..b906074ce76590 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520.c
@@ -46,6 +46,7 @@
 // CHECK-NEXT:     FEAT_SB                                                
Enable Armv8.5-A Speculation Barrier
 // CHECK-NEXT:     FEAT_SEL2                                              
Enable Armv8.4-A Secure Exception Level 2 extension
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_SVE                                               
Enable Scalable Vector Extension (SVE) instructions
 // CHECK-NEXT:     FEAT_SVE2                                              
Enable Scalable Vector Extension 2 (SVE2) instructions

diff  --git 
a/clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520ae.c 
b/clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520ae.c
index 35399a3c85c626..2e147732d5c688 100644
--- a/clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520ae.c
+++ b/clang/test/Driver/print-enabled-extensions/aarch64-cortex-a520ae.c
@@ -46,6 +46,7 @@
 // CHECK-NEXT:     FEAT_SB                                                
Enable Armv8.5-A Speculation Barrier
 // CHECK-NEXT:     FEAT_SEL2                                              
Enable Armv8.4-A Secure Exception Level 2 extension
 // CHECK-NEXT:     FEAT_SPECRES                                           
Enable Armv8.5-A execution and data prediction invalidation instructions
+// CHECK-NEXT:     FEAT_SPEv1p2                                           
Enable extra register in the Statistical Profiling Extension
 // CHECK-NEXT:     FEAT_SSBS, FEAT_SSBS2                                  
Enable Speculative Store Bypass Safe bit
 // CHECK-NEXT:     FEAT_SVE                                               
Enable Scalable Vector Extension (SVE) instructions
 // CHECK-NEXT:     FEAT_SVE2                                              
Enable Scalable Vector Extension 2 (SVE2) instructions

diff  --git a/llvm/lib/Target/AArch64/AArch64Features.td 
b/llvm/lib/Target/AArch64/AArch64Features.td
index 642976cd3ea076..6d8554cf1884c1 100644
--- a/llvm/lib/Target/AArch64/AArch64Features.td
+++ b/llvm/lib/Target/AArch64/AArch64Features.td
@@ -847,7 +847,7 @@ def HasV8_6aOps : Architecture64<8, 6, "a", "v8.6a",
     FeatureEnhancedCounterVirtualization, FeatureMatMulInt8],
   !listconcat(HasV8_5aOps.DefaultExts, [FeatureBF16, FeatureMatMulInt8])>;
 def HasV8_7aOps : Architecture64<8, 7, "a", "v8.7a",
-  [HasV8_6aOps, FeatureXS, FeatureWFxT, FeatureHCX],
+  [HasV8_6aOps, FeatureXS, FeatureWFxT, FeatureHCX, FeatureSPE_EEF],
   !listconcat(HasV8_6aOps.DefaultExts, [FeatureWFxT])>;
 def HasV8_8aOps : Architecture64<8, 8, "a", "v8.8a",
   [HasV8_7aOps, FeatureHBC, FeatureMOPS, FeatureNMI],

diff  --git a/llvm/test/MC/AArch64/spe.s b/llvm/test/MC/AArch64/spe.s
index a6fb46291dea6c..a4b2a555621fef 100644
--- a/llvm/test/MC/AArch64/spe.s
+++ b/llvm/test/MC/AArch64/spe.s
@@ -1,6 +1,11 @@
 // RUN: llvm-mc -triple aarch64 -mattr +spe-eef -show-encoding %s 2>%t | 
FileCheck %s
+// RUN: llvm-mc -triple aarch64 -mattr +v8.7a -show-encoding %s 2>%t | 
FileCheck %s
+// RUN: not llvm-mc -triple aarch64 < %s 2>&1 | FileCheck 
--check-prefix=CHECK-NO-SPE-EEF-ERR %s
 
 msr PMSNEVFR_EL1, x0
 mrs x1, PMSNEVFR_EL1
 // CHECK: msr     PMSNEVFR_EL1, x0        // encoding: [0x20,0x99,0x18,0xd5]
 // CHECK: mrs     x1, PMSNEVFR_EL1        // encoding: [0x21,0x99,0x38,0xd5]
+
+// CHECK-NO-SPE-EEF-ERR: [[@LINE-5]]:5: error: expected writable system 
register or pstate
+// CHECK-NO-SPE-EEF-ERR: [[@LINE-5]]:9: error: expected readable system 
register


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to