Reland "[AArch64] handle -Wa,-march="
This reverts commitfd11a26d36
, which was reverted by9145a3d4ab
due to a test failure on aarch64 backend, e.g. https://lab.llvm.org/buildbot/#/builders/43/builds/7031. This patch fixed the test failure. Reviewed By: DavidSpickett, nickdesaulniers Differential Revision: https://reviews.llvm.org/D103184
This commit is contained in:
parent
7a38a757a1
commit
0eac975b51
|
@ -185,12 +185,25 @@ getAArch64MicroArchFeaturesFromMcpu(const Driver &D, StringRef Mcpu,
|
||||||
void aarch64::getAArch64TargetFeatures(const Driver &D,
|
void aarch64::getAArch64TargetFeatures(const Driver &D,
|
||||||
const llvm::Triple &Triple,
|
const llvm::Triple &Triple,
|
||||||
const ArgList &Args,
|
const ArgList &Args,
|
||||||
std::vector<StringRef> &Features) {
|
std::vector<StringRef> &Features,
|
||||||
|
bool ForAS) {
|
||||||
Arg *A;
|
Arg *A;
|
||||||
bool success = true;
|
bool success = true;
|
||||||
// Enable NEON by default.
|
// Enable NEON by default.
|
||||||
Features.push_back("+neon");
|
Features.push_back("+neon");
|
||||||
if ((A = Args.getLastArg(options::OPT_march_EQ)))
|
llvm::StringRef WaMArch = "";
|
||||||
|
if (ForAS)
|
||||||
|
for (const auto *A :
|
||||||
|
Args.filtered(options::OPT_Wa_COMMA, options::OPT_Xassembler))
|
||||||
|
for (StringRef Value : A->getValues())
|
||||||
|
if (Value.startswith("-march="))
|
||||||
|
WaMArch = Value.substr(7);
|
||||||
|
// Call getAArch64ArchFeaturesFromMarch only if "-Wa,-march=" or
|
||||||
|
// "-Xassembler -march" is detected. Otherwise it may return false
|
||||||
|
// and causes Clang to error out.
|
||||||
|
if (WaMArch.size())
|
||||||
|
success = getAArch64ArchFeaturesFromMarch(D, WaMArch, Args, Features);
|
||||||
|
else if ((A = Args.getLastArg(options::OPT_march_EQ)))
|
||||||
success = getAArch64ArchFeaturesFromMarch(D, A->getValue(), Args, Features);
|
success = getAArch64ArchFeaturesFromMarch(D, A->getValue(), Args, Features);
|
||||||
else if ((A = Args.getLastArg(options::OPT_mcpu_EQ)))
|
else if ((A = Args.getLastArg(options::OPT_mcpu_EQ)))
|
||||||
success = getAArch64ArchFeaturesFromMcpu(D, A->getValue(), Args, Features);
|
success = getAArch64ArchFeaturesFromMcpu(D, A->getValue(), Args, Features);
|
||||||
|
|
|
@ -22,7 +22,8 @@ namespace aarch64 {
|
||||||
|
|
||||||
void getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
void getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
||||||
const llvm::opt::ArgList &Args,
|
const llvm::opt::ArgList &Args,
|
||||||
std::vector<llvm::StringRef> &Features);
|
std::vector<llvm::StringRef> &Features,
|
||||||
|
bool ForAS);
|
||||||
|
|
||||||
std::string getAArch64TargetCPU(const llvm::opt::ArgList &Args,
|
std::string getAArch64TargetCPU(const llvm::opt::ArgList &Args,
|
||||||
const llvm::Triple &Triple, llvm::opt::Arg *&A);
|
const llvm::Triple &Triple, llvm::opt::Arg *&A);
|
||||||
|
|
|
@ -344,7 +344,7 @@ static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple,
|
||||||
case llvm::Triple::aarch64:
|
case llvm::Triple::aarch64:
|
||||||
case llvm::Triple::aarch64_32:
|
case llvm::Triple::aarch64_32:
|
||||||
case llvm::Triple::aarch64_be:
|
case llvm::Triple::aarch64_be:
|
||||||
aarch64::getAArch64TargetFeatures(D, Triple, Args, Features);
|
aarch64::getAArch64TargetFeatures(D, Triple, Args, Features, ForAS);
|
||||||
break;
|
break;
|
||||||
case llvm::Triple::x86:
|
case llvm::Triple::x86:
|
||||||
case llvm::Triple::x86_64:
|
case llvm::Triple::x86_64:
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
/// These tests make sure that options passed to the assembler
|
||||||
|
/// via -Wa or -Xassembler are applied correctly to assembler inputs.
|
||||||
|
|
||||||
|
/// Does not apply to non assembly files
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.1-a \
|
||||||
|
// RUN: %S/Inputs/wildcard1.c 2>&1 | FileCheck --check-prefix=TARGET-FEATURE-1 %s
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Xassembler -march=armv8.1-a \
|
||||||
|
// RUN: %S/Inputs/wildcard1.c 2>&1 | FileCheck --check-prefix=TARGET-FEATURE-1 %s
|
||||||
|
|
||||||
|
// TARGET-FEATURE-1-NOT: "-target-feature" "+v8.1a"
|
||||||
|
|
||||||
|
/// Does apply to assembler input
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.2-a %s 2>&1 | \
|
||||||
|
// RUN: FileCheck --check-prefix=TARGET-FEATURE-2 %s
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Xassembler -march=armv8.2-a %s 2>&1 | \
|
||||||
|
// RUN: FileCheck --check-prefix=TARGET-FEATURE-2 %s
|
||||||
|
|
||||||
|
// TARGET-FEATURE-2: "-target-feature" "+v8.2a"
|
||||||
|
|
||||||
|
/// No unused argument warnings when there are multiple values
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.1-a -Wa,-march=armv8.2-a %s 2>&1 | \
|
||||||
|
// RUN: FileCheck --check-prefix=UNUSED-WARNING %s
|
||||||
|
|
||||||
|
// UNUSED-WARNING-NOT: warning: argument unused during compilation
|
||||||
|
|
||||||
|
/// Last march to assembler wins
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.2-a -Wa,-march=armv8.1-a %s 2>&1 | \
|
||||||
|
// RUN: FileCheck --check-prefix=MULTIPLE-VALUES %s
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.2-a,-march=armv8.1-a %s 2>&1 | \
|
||||||
|
// RUN: FileCheck --check-prefix=MULTIPLE-VALUES %s
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Xassembler -march=armv8.2-a -Xassembler \
|
||||||
|
// RUN: -march=armv8.1-a %s 2>&1 | FileCheck --check-prefix=MULTIPLE-VALUES %s
|
||||||
|
|
||||||
|
// MULTIPLE-VALUES: "-target-feature" "+v8.1a
|
||||||
|
// MULTIPLE-VALUES-NOT: "-target-feature" "+v8.2a
|
||||||
|
|
||||||
|
/// march to compiler and assembler, we choose the one suited to the input file type
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.3-a -march=armv8.4-a %s 2>&1 | \
|
||||||
|
// RUN: FileCheck --check-prefix=TARGET-FEATURE-3 %s
|
||||||
|
// RUN: %clang --target=aarch64-linux-gnueabi -### -c -Wa,-march=armv8.3-a -march=armv8.4-a \
|
||||||
|
// RUN: %S/Inputs/wildcard1.c 2>&1 | FileCheck --check-prefix=TARGET-FEATURE-4 %s
|
||||||
|
|
||||||
|
// TARGET-FEATURE-3: "-target-feature" "+v8.3a"
|
||||||
|
// TARGET-FEATURE-3-NOT: "-target-feature" "+v8.4a"
|
||||||
|
// TARGET-FEATURE-4: "-target-feature" "+v8.4a"
|
||||||
|
// TARGET-FEATURE-4-NOT: "-target-feature" "+v8.3a"
|
Loading…
Reference in New Issue