https://github.com/yingopq updated https://github.com/llvm/llvm-project/pull/99615
>From 48193d5afb03d4c3e87cb4a3bcf6164c1d390ddb Mon Sep 17 00:00:00 2001 From: Ying Huang <ying.hu...@oss.cipunited.com> Date: Fri, 19 Jul 2024 04:19:09 -0400 Subject: [PATCH] [clang] Support -Wa, options -mmsa and -mno-msa --- clang/include/clang/Basic/CodeGenOptions.def | 1 + clang/include/clang/Driver/Options.td | 4 +++- clang/lib/Driver/ToolChains/Clang.cpp | 13 ++++++++++++- clang/test/Driver/mips-msa.c | 19 +++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 clang/test/Driver/mips-msa.c diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index f671b780bcbeb1..898fbcd8e47fde 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -178,6 +178,7 @@ CODEGENOPT(MergeAllConstants , 1, 1) ///< Merge identical constants. CODEGENOPT(MergeFunctions , 1, 0) ///< Set when -fmerge-functions is enabled. CODEGENOPT(NoCommon , 1, 0) ///< Set when -fno-common or C++ is enabled. CODEGENOPT(NoExecStack , 1, 0) ///< Set when -Wa,--noexecstack is enabled. +CODEGENOPT(MipsMsa , 1, 0) ///< Set when -Wa,-mmsa is enabled. CODEGENOPT(FatalWarnings , 1, 0) ///< Set when -Wa,--fatal-warnings is ///< enabled. CODEGENOPT(NoWarn , 1, 0) ///< Set when -Wa,--no-warn is enabled. diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 12b20fe04675bf..c96338264dc82e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5337,7 +5337,9 @@ def mmadd4 : Flag<["-"], "mmadd4">, Group<m_mips_Features_Group>, def mno_madd4 : Flag<["-"], "mno-madd4">, Group<m_mips_Features_Group>, HelpText<"Disable the generation of 4-operand madd.s, madd.d and related instructions.">; def mmsa : Flag<["-"], "mmsa">, Group<m_mips_Features_Group>, - HelpText<"Enable MSA ASE (MIPS only)">; + Visibility<[ClangOption, CC1Option, CC1AsOption]>, + HelpText<"Enable MSA ASE (MIPS only)">, + MarshallingInfoFlag<CodeGenOpts<"MipsMsa">>; def mno_msa : Flag<["-"], "mno-msa">, Group<m_mips_Features_Group>, HelpText<"Disable MSA ASE (MIPS only)">; def mmt : Flag<["-"], "mmt">, Group<m_mips_Features_Group>, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 1fd6fba2100426..11661bd2edfa15 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2507,6 +2507,7 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, bool Crel = false, ExperimentalCrel = false; bool UseRelaxRelocations = C.getDefaultToolChain().useRelaxRelocations(); bool UseNoExecStack = false; + std::optional<bool> Msa; const char *MipsTargetFeature = nullptr; StringRef ImplicitIt; for (const Arg *A : @@ -2598,7 +2599,14 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, CmdArgs.push_back("-soft-float"); continue; } - + if (Value == "-mmsa") { + Msa = true; + continue; + } + if (Value == "-mno-msa") { + Msa = false; + continue; + } MipsTargetFeature = llvm::StringSwitch<const char *>(Value) .Case("-mips1", "+mips1") .Case("-mips2", "+mips2") @@ -2618,6 +2626,7 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, .Default(nullptr); if (MipsTargetFeature) continue; + break; } if (Value == "-force_cpusubtype_ALL") { @@ -2716,6 +2725,8 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, << "-Wa,--crel" << D.getTargetTriple(); } } + if (Msa && *Msa) + CmdArgs.push_back("-mmsa"); if (!UseRelaxRelocations) CmdArgs.push_back("-mrelax-relocations=no"); if (UseNoExecStack) diff --git a/clang/test/Driver/mips-msa.c b/clang/test/Driver/mips-msa.c new file mode 100644 index 00000000000000..78ff58288bd8a8 --- /dev/null +++ b/clang/test/Driver/mips-msa.c @@ -0,0 +1,19 @@ +// RUN: %clang -### -c --target=mips64el-unknown-linux-gnuabi64 \ +// RUN: -Wa,-mmsa %s -Werror 2>&1 | FileCheck %s --check-prefix=CHECK-MMSA +// CHECK-MMSA: "-cc1" {{.*}}"-mmsa" + +// RUN: %clang -### -c --target=mips64el-unknown-linux-gnuabi64 \ +// RUN: -Wa,-mno-msa,-mmsa %s -Werror 2>&1 | FileCheck %s --check-prefix=CHECK-MMSA + +// RUN: %clang -### -c --target=mips64el-unknown-linux-gnuabi64 \ +// RUN: -Wa,-mmsa,-mno-msa %s -Werror 2>&1 | FileCheck %s --check-prefix=CHECK-NOMMSA +// CHECK-NOMMSA: "-cc1" + +// RUN: %clang -### -c --target=mips64el-unknown-linux-gnuabi64 \ +// RUN: -fno-integrated-as -Wa,-mmsa %s -Werror 2>&1 | FileCheck %s --check-prefix=MIPS-MSA +// MIPS-MSA: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-EL" "-KPIC" "-mmsa" + +// RUN: %clang -### -c --target=mips64el-unknown-linux-gnuabi64 \ +// RUN: -fno-integrated-as -Wa,-mno-msa %s -Werror 2>&1 | FileCheck %s --check-prefix=MIPS-NOMSA +// MIPS-NOMSA: as{{(.exe)?}}" +// MIPS-NOMSA-NOT: "-mmsa" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits