https://github.com/jthackray created 
https://github.com/llvm/llvm-project/pull/208019

The `HCRX_EL2` system register can be accessed if FEAT_HCX is
implemented, and is optional from Armv8.6 (and mandatory in Armv8.7).

Allow `clang -march=armv8.6-a+hcx` by making FeatureHCX an
optional argument.

>From aad00df6f697e9ee68fa028b78e48d3bc556e637 Mon Sep 17 00:00:00 2001
From: Jonathan Thackray <[email protected]>
Date: Tue, 7 Jul 2026 16:14:11 +0100
Subject: [PATCH] [AArch64][llvm] Allow +hcx to be specified as optional for
 Armv8.6

The `HCRX_EL2` system register can be accessed if FEAT_HCX is
implemented, and is optional from Armv8.6 (and mandatory in Armv8.7).

Allow `clang -march=armv8.6-a+hcx` by making FeatureHCX an
optional argument.
---
 clang/test/CIR/CodeGen/attr-target-aarch64.c           | 4 ++--
 clang/test/CodeGen/AArch64/targetattr.c                | 2 +-
 clang/test/Driver/print-supported-extensions-aarch64.c | 1 +
 llvm/lib/Target/AArch64/AArch64Features.td             | 4 ++--
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/clang/test/CIR/CodeGen/attr-target-aarch64.c 
b/clang/test/CIR/CodeGen/attr-target-aarch64.c
index 769c11e9ab688..f0b09b9d8029b 100644
--- a/clang/test/CIR/CodeGen/attr-target-aarch64.c
+++ b/clang/test/CIR/CodeGen/attr-target-aarch64.c
@@ -239,6 +239,6 @@ void applem4(void) {}
 
 // CIR:      cir.func{{.*}} @applem4()
 // CIR-SAME: "cir.target-cpu" = "apple-m4"
-// CIR-SAME: "cir.target-features" = 
"+aes,+bf16,+bti,+ccidx,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fpac,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+sme,+sme-f64f64,+sme-i16i64,+sme2,+spe-eef,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8.7a,+v8a,+wfxt"
+// CIR-SAME: "cir.target-features" = 
"+aes,+bf16,+bti,+ccidx,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fpac,+fullfp16,+hcx,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+sme,+sme-f64f64,+sme-i16i64,+sme2,+spe-eef,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8.7a,+v8a,+wfxt"
 // LLVM-DAG: define{{.*}} void @applem4(){{.*}} #[[ATTR_APPLEM4:[0-9]+]]
-// LLVM-DAG: attributes #[[ATTR_APPLEM4]] = 
{{.*}}"target-cpu"="apple-m4"{{.*}}"target-features"="+aes,+bf16,+bti,+ccidx,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fpac,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+sme,+sme-f64f64,+sme-i16i64,+sme2,+spe-eef,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8.7a,+v8a,+wfxt"
+// LLVM-DAG: attributes #[[ATTR_APPLEM4]] = 
{{.*}}"target-cpu"="apple-m4"{{.*}}"target-features"="+aes,+bf16,+bti,+ccidx,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fpac,+fullfp16,+hcx,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+sme,+sme-f64f64,+sme-i16i64,+sme2,+spe-eef,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8.7a,+v8a,+wfxt"
diff --git a/clang/test/CodeGen/AArch64/targetattr.c 
b/clang/test/CodeGen/AArch64/targetattr.c
index fb4f72411ed0c..3b3531947a58b 100644
--- a/clang/test/CodeGen/AArch64/targetattr.c
+++ b/clang/test/CodeGen/AArch64/targetattr.c
@@ -234,7 +234,7 @@ __arm_locally_streaming void plussmelocallystreaming(void)  
{}
 // CHECK: attributes #[[ATTR15]] = { noinline nounwind optnone 
vscale_range(1,16) "branch-target-enforcement" "guarded-control-stack" 
"no-trapping-math"="true" "sign-return-address"="non-leaf" 
"sign-return-address-key"="a_key" "stack-protector-buffer-size"="8" 
"target-cpu"="neoverse-n1" 
"target-features"="+aes,+bf16,+bti,+ccidx,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a"
 "tune-cpu"="cortex-a710" }
 // CHECK: attributes #[[ATTR16]] = { noinline nounwind optnone 
"no-trapping-math"="true" "stack-protector-buffer-size"="8" }
 // CHECK: attributes #[[ATTR17]] = { noinline nounwind optnone 
"no-trapping-math"="true" "stack-protector-buffer-size"="8" 
"target-features"="-v9.3a" }
-// CHECK: attributes #[[ATTR18]] = { noinline nounwind optnone 
"no-trapping-math"="true" "stack-protector-buffer-size"="8" 
"target-cpu"="apple-m4" 
"target-features"="+aes,+bf16,+bti,+ccidx,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fpac,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+sme,+sme-f64f64,+sme-i16i64,+sme2,+spe-eef,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8.7a,+v8a,+wfxt"
 }
+// CHECK: attributes #[[ATTR18]] = { noinline nounwind optnone 
"no-trapping-math"="true" "stack-protector-buffer-size"="8" 
"target-cpu"="apple-m4" 
"target-features"="+aes,+bf16,+bti,+ccidx,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fpac,+fullfp16,+hcx,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+sme,+sme-f64f64,+sme-i16i64,+sme2,+spe-eef,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8.7a,+v8a,+wfxt"
 }
 // CHECK: attributes #[[ATTR19]] = { noinline nounwind optnone 
vscale_range(1,16) "aarch64_pstate_sm_enabled" "no-trapping-math"="true" 
"stack-protector-buffer-size"="8" 
"target-features"="+bf16,+fp-armv8,+fullfp16,+neon,+sme" }
 // CHECK: attributes #[[ATTR20]] = { noinline nounwind optnone 
vscale_range(1,16) "aarch64_pstate_sm_body" "no-trapping-math"="true" 
"stack-protector-buffer-size"="8" 
"target-features"="+bf16,+fp-armv8,+fullfp16,+neon,+sme" }
 //.
diff --git a/clang/test/Driver/print-supported-extensions-aarch64.c 
b/clang/test/Driver/print-supported-extensions-aarch64.c
index 1e2882550c81f..f27063fedc152 100644
--- a/clang/test/Driver/print-supported-extensions-aarch64.c
+++ b/clang/test/Driver/print-supported-extensions-aarch64.c
@@ -38,6 +38,7 @@
 // CHECK-NEXT:     gcie                FEAT_GCIE                               
               Enable GICv5 (Generic Interrupt Controller) CPU Interface 
Extension
 // CHECK-NEXT:     gcs                 FEAT_GCS                                
               Enable Armv9.4-A Guarded Call Stack Extension
 // CHECK-NEXT:     hbc                 FEAT_HBC                                
               Enable Armv8.8-A Hinted Conditional Branches Extension
+// CHECK-NEXT:     hcx                 FEAT_HCX                                
               Enable Armv8.7-A HCRX_EL2 system register
 // CHECK-NEXT:     hinte               FEAT_HINTE                              
               Enable extended A64 hint instruction space
 // CHECK-NEXT:     i8mm                FEAT_I8MM                               
               Enable Matrix Multiply Int8 Extension
 // CHECK-NEXT:     ite                 FEAT_ITE                                
               Enable Armv9.4-A Instrumentation Extension
diff --git a/llvm/lib/Target/AArch64/AArch64Features.td 
b/llvm/lib/Target/AArch64/AArch64Features.td
index fc23318c0582d..cddd1e545e621 100644
--- a/llvm/lib/Target/AArch64/AArch64Features.td
+++ b/llvm/lib/Target/AArch64/AArch64Features.td
@@ -303,7 +303,7 @@ def FeatureXS : Extension<"xs", "XS", "FEAT_XS",
 def FeatureWFxT : ExtensionWithMArch<"wfxt", "WFxT", "FEAT_WFxT",
   "Enable Armv8.7-A WFET and WFIT instruction">;
 
-def FeatureHCX : Extension<"hcx", "HCX", "FEAT_HCX",
+def FeatureHCX : ExtensionWithMArch<"hcx", "HCX", "FEAT_HCX",
   "Enable Armv8.7-A HCRX_EL2 system register">;
 
 def FeatureLS64 : ExtensionWithMArch<"ls64", "LS64",
@@ -1061,7 +1061,7 @@ def HasV8_6aOps : Architecture64<8, 6, "a", "v8.6a",
   !listconcat(HasV8_5aOps.DefaultExts, [FeatureBF16, FeatureMatMulInt8])>;
 def HasV8_7aOps : Architecture64<8, 7, "a", "v8.7a",
   [HasV8_6aOps, FeatureXS, FeatureWFxT, FeatureHCX],
-  !listconcat(HasV8_6aOps.DefaultExts, [FeatureWFxT, FeatureSPE_EEF])>;
+  !listconcat(HasV8_6aOps.DefaultExts, [FeatureWFxT, FeatureHCX, 
FeatureSPE_EEF])>;
 def HasV8_8aOps : Architecture64<8, 8, "a", "v8.8a",
   [HasV8_7aOps, FeatureHBC, FeatureMOPS, FeatureNMI],
   !listconcat(HasV8_7aOps.DefaultExts, [FeatureMOPS, FeatureHBC])>;

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to