Author: Ricardo Jesus Date: 2026-01-29T10:08:26Z New Revision: a0e0f515419841a0c46e5192db318b207c6faab3
URL: https://github.com/llvm/llvm-project/commit/a0e0f515419841a0c46e5192db318b207c6faab3 DIFF: https://github.com/llvm/llvm-project/commit/a0e0f515419841a0c46e5192db318b207c6faab3.diff LOG: [AArch64][Driver] Enable host supported features with march=native. (#177128) Currently, march=native enables the base features implied by the host system architecture, such as Armv8.2-A, Armv9-A, etc, rather than the actual features supported by the host (e.g. crypto). This is suboptimal as it generally leaves optional but supported features disabled. This patch aligns the behaviour of march=native with mcpu=native by using the latter's decoding logic to decode the former as well. This means both options should enable a similar set of features. We also set the target-cpu accordingly, so that march=native becomes a drop-in replacement for mcpu=native. Added: Modified: clang/lib/Driver/ToolChains/Arch/AArch64.cpp clang/test/Driver/aarch64-mcpu-native.c clang/test/Driver/print-enabled-extensions/aarch64-grace.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index cc6e408f45e07..4aa3743fb5cd5 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -35,6 +35,11 @@ std::string aarch64::getAArch64TargetCPU(const ArgList &Args, if ((A = Args.getLastArg(options::OPT_mcpu_EQ))) { StringRef Mcpu = A->getValue(); CPU = Mcpu.split("+").first.lower(); + } else if (const Arg *MArch = Args.getLastArg(options::OPT_march_EQ)) { + // Otherwise, use -march=native if specified. + StringRef MArchValue = MArch->getValue(); + if (MArchValue.split("+").first.equals_insensitive("native")) + CPU = "native"; } CPU = llvm::AArch64::resolveCPUAlias(CPU); @@ -159,10 +164,11 @@ getAArch64ArchFeaturesFromMarch(const Driver &D, StringRef March, std::string MarchLowerCase = March.lower(); std::pair<StringRef, StringRef> Split = StringRef(MarchLowerCase).split("+"); + if (Split.first == "native") + return DecodeAArch64Mcpu(D, MarchLowerCase, Extensions); + const llvm::AArch64::ArchInfo *ArchInfo = llvm::AArch64::parseArch(Split.first); - if (Split.first == "native") - ArchInfo = llvm::AArch64::getArchForCpu(llvm::sys::getHostCPUName().str()); if (!ArchInfo) return false; diff --git a/clang/test/Driver/aarch64-mcpu-native.c b/clang/test/Driver/aarch64-mcpu-native.c index e132081062851..6fb959b2afb3b 100644 --- a/clang/test/Driver/aarch64-mcpu-native.c +++ b/clang/test/Driver/aarch64-mcpu-native.c @@ -1,6 +1,7 @@ // REQUIRES: aarch64-registered-target,system-linux,aarch64-host // RUN: export LLVM_CPUINFO=%S/Inputs/cpunative/neoverse-n1 // RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-NN1 --implicit-check-not=FEAT_ %s +// RUN: %clang --target=aarch64 --print-enabled-extensions -march=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-NN1 --implicit-check-not=FEAT_ %s // CHECK-FEAT-NN1: Extensions enabled for the given AArch64 target // CHECK-FEAT-NN1-EMPTY: @@ -26,9 +27,13 @@ // CHECK-FEAT-NN1: FEAT_UAO Enable Armv8.2-A UAO PState // CHECK-FEAT-NN1: FEAT_VHE Enable Armv8.1-A Virtual Host extension +// RUN: %clang --target=aarch64 -mcpu=native -### -c %s 2>&1 | FileCheck -check-prefix=NEOVERSE-N1 %s +// RUN: %clang --target=aarch64 -march=native -### -c %s 2>&1 | FileCheck -check-prefix=NEOVERSE-N1 %s +// NEOVERSE-N1: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "neoverse-n1" // RUN: export LLVM_CPUINFO=%S/Inputs/cpunative/cortex-a57 // RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-CA57 --implicit-check-not=FEAT_ %s +// RUN: %clang --target=aarch64 --print-enabled-extensions -march=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-CA57 --implicit-check-not=FEAT_ %s // CHECK-FEAT-CA57: Extensions enabled for the given AArch64 target // CHECK-FEAT-CA57-EMPTY: @@ -38,8 +43,13 @@ // CHECK-FEAT-CA57: FEAT_FP Enable Armv8.0-A Floating Point Extensions // CHECK-FEAT-CA57: FEAT_PMUv3 Enable Armv8.0-A PMUv3 Performance Monitors extension +// RUN: %clang --target=aarch64 -mcpu=native -### -c %s 2>&1 | FileCheck -check-prefix=CORTEX-A57 %s +// RUN: %clang --target=aarch64 -march=native -### -c %s 2>&1 | FileCheck -check-prefix=CORTEX-A57 %s +// CORTEX-A57: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "cortex-a57" + // RUN: export LLVM_CPUINFO=%S/Inputs/cpunative/cortex-a72 // RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-CA72 --implicit-check-not=FEAT_ %s +// RUN: %clang --target=aarch64 --print-enabled-extensions -march=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-CA72 --implicit-check-not=FEAT_ %s // CHECK-FEAT-CA72: Extensions enabled for the given AArch64 target // CHECK-EMPTY: @@ -51,8 +61,13 @@ // CHECK-FEAT-CA72: FEAT_PMUv3 Enable Armv8.0-A PMUv3 Performance Monitors extension // CHECK-FEAT-CA72: FEAT_SHA1, FEAT_SHA256 Enable SHA1 and SHA256 support +// RUN: %clang --target=aarch64 -mcpu=native -### -c %s 2>&1 | FileCheck -check-prefix=CORTEX-A72 %s +// RUN: %clang --target=aarch64 -march=native -### -c %s 2>&1 | FileCheck -check-prefix=CORTEX-A72 %s +// CORTEX-A72: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "cortex-a72" + // RUN: export LLVM_CPUINFO=%S/Inputs/cpunative/cortex-a76 // RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-CA76 --implicit-check-not=FEAT_ %s +// RUN: %clang --target=aarch64 --print-enabled-extensions -march=native | FileCheck --strict-whitespace --check-prefix=CHECK-FEAT-CA76 --implicit-check-not=FEAT_ %s // CHECK-FEAT-CA76: Extensions enabled for the given AArch64 target // CHECK-FEAT-CA76-EMPTY: @@ -76,3 +91,7 @@ // CHECK-FEAT-CA76: FEAT_SSBS, FEAT_SSBS2 Enable Speculative Store Bypass Safe bit // CHECK-FEAT-CA76: FEAT_UAO Enable Armv8.2-A UAO PState // CHECK-FEAT-CA76: FEAT_VHE Enable Armv8.1-A Virtual Host extension + +// RUN: %clang --target=aarch64 -mcpu=native -### -c %s 2>&1 | FileCheck -check-prefix=CORTEX-A76 %s +// RUN: %clang --target=aarch64 -march=native -### -c %s 2>&1 | FileCheck -check-prefix=CORTEX-A76 %s +// CORTEX-A76: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "cortex-a76" diff --git a/clang/test/Driver/print-enabled-extensions/aarch64-grace.c b/clang/test/Driver/print-enabled-extensions/aarch64-grace.c index acb641e3b2c8d..a8ab66e47fb5d 100644 --- a/clang/test/Driver/print-enabled-extensions/aarch64-grace.c +++ b/clang/test/Driver/print-enabled-extensions/aarch64-grace.c @@ -1,6 +1,7 @@ // REQUIRES: aarch64-registered-target,aarch64-host,system-linux // RUN: %clang --target=aarch64 --print-enabled-extensions -mcpu=grace | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s // RUN: env LLVM_CPUINFO=%S/../Inputs/cpunative/grace %clang --target=aarch64 --print-enabled-extensions -mcpu=native | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s +// RUN: env LLVM_CPUINFO=%S/../Inputs/cpunative/grace %clang --target=aarch64 --print-enabled-extensions -march=native | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s // CHECK: Extensions enabled for the given AArch64 target // CHECK-EMPTY: @@ -61,3 +62,7 @@ // CHECK-NEXT: FEAT_TRF Enable Armv8.4-A Trace extension // CHECK-NEXT: FEAT_UAO Enable Armv8.2-A UAO PState // CHECK-NEXT: FEAT_VHE Enable Armv8.1-A Virtual Host extension + +// RUN: env LLVM_CPUINFO=%S/../Inputs/cpunative/grace %clang --target=aarch64 -mcpu=native -### -c %s 2>&1 | FileCheck -check-prefix=NEOVERSE-V2 %s +// RUN: env LLVM_CPUINFO=%S/../Inputs/cpunative/grace %clang --target=aarch64 -march=native -### -c %s 2>&1 | FileCheck -check-prefix=NEOVERSE-V2 %s +// NEOVERSE-V2: "-cc1"{{.*}} "-triple" "aarch64{{.*}}" "-target-cpu" "neoverse-v2" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
