[clang] 26ae316 - [clang] Support -Wa, options -mmsa and -mno-msa (#99615)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 20 12:40:52 PDT 2024
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 at 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,'
More information about the cfe-commits
mailing list