Author: yingopq Date: 2024-08-20T12:40:49-07:00 New Revision: 26ae31662b4ac3fe5569733316ac7de9d19d5fd5
URL: https://github.com/llvm/llvm-project/commit/26ae31662b4ac3fe5569733316ac7de9d19d5fd5 DIFF: https://github.com/llvm/llvm-project/commit/26ae31662b4ac3fe5569733316ac7de9d19d5fd5.diff LOG: [clang] Support -Wa, options -mmsa and -mno-msa (#99615) Co-authored-by: Fangrui Song <i...@maskray.me> Added: clang/test/Driver/mips-msa.c Modified: clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/Options.td clang/lib/Driver/ToolChains/Clang.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index 09e892d6d4defe..ecea476abe3232 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -176,6 +176,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 c66e035a259b3f..625a8303b9bf15 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5383,7 +5383,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 6180c6eeb6f07a..04ef50585f2002 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2556,6 +2556,7 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, bool Crel = false, ExperimentalCrel = false; bool UseRelaxRelocations = C.getDefaultToolChain().useRelaxRelocations(); bool UseNoExecStack = false; + bool Msa = false; const char *MipsTargetFeature = nullptr; StringRef ImplicitIt; for (const Arg *A : @@ -2665,7 +2666,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") @@ -2685,6 +2693,7 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, .Default(nullptr); if (MipsTargetFeature) continue; + break; } if (Value == "-force_cpusubtype_ALL") { @@ -2777,6 +2786,8 @@ static void CollectArgsForIntegratedAssembler(Compilation &C, << "-Wa,--crel" << D.getTargetTriple(); } } + if (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..28b5012da336cc --- /dev/null +++ b/clang/test/Driver/mips-msa.c @@ -0,0 +1,12 @@ +// 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,-mmsa,-mno-msa %s -Werror 2>&1 | FileCheck %s --check-prefix=CHECK-NOMMSA +// CHECK-NOMMSA: "-cc1" +// CHECK-NOMMSA-NOT: "-mssa" + +// RUN: not %clang -### -c --target=x86_64 -Wa,-mmsa -Wa,-mno-msa %s 2>&1 | FileCheck %s --check-prefix=ERR +// ERR: error: unsupported argument '-mmsa' to option '-Wa,' +// ERR: error: unsupported argument '-mno-msa' to option '-Wa,' _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits