bin.narwal created this revision.
bin.narwal added a reviewer: MaskRay.
bin.narwal added a project: clang.
Herald added subscribers: cfe-commits, dexonsmith, inglorion.

Hi,
When debugging ThinLTO with clang -mllvm -debug-only=function-import -flto=thin 
-fuse-ld=lld ..., it gives me below warning message:
warning: argument unused during compilation: '-mllvm 
-debug-only=function-import' [-Wunused-command-line-argument]

Actually lld already supports passing arguments to llvm using -mllvm, it would 
be easier for debug if driver passes it along to lld.

This simple patch does this.  Note it also silently eats up such options if 
other linkers (ld.bfd, gold) are used.

Any comments?  Thanks


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D79629

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp


Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -358,8 +358,9 @@
                           ArgStringList &CmdArgs, const InputInfo &Output,
                           const InputInfo &Input, bool IsThinLTO) {
   const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath());
-  if (llvm::sys::path::filename(Linker) != "ld.lld" &&
-      llvm::sys::path::stem(Linker) != "ld.lld") {
+  bool UseLLD = (llvm::sys::path::filename(Linker) == "ld.lld" ||
+                 llvm::sys::path::stem(Linker) == "ld.lld");
+  if (UseLLD) {
     // Tell the linker to load the plugin. This has to come before
     // AddLinkerInputs as gold requires -plugin to come before any -plugin-opt
     // that -Wl might forward.
@@ -381,6 +382,22 @@
     CmdArgs.push_back(Args.MakeArgString(Plugin));
   }
 
+  // Silence warning for "clang -mllvm ...".
+  for (const Arg *A : Args.filtered(options::OPT_mllvm)) {
+    A->claim();
+
+    // Pass llvm options to lld.
+    if (!UseLLD)
+      continue;
+
+    // FIXME: This is now deprecated and should be removed.
+    if (StringRef(A->getValue(0)) == "-disable-llvm-optzns") {
+      CmdArgs.push_back("-disable-llvm-optzns");
+    } else {
+      A->render(Args, CmdArgs);
+    }
+  }
+
   // Try to pass driver level flags relevant to LTO code generation down to
   // the plugin.
 


Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -358,8 +358,9 @@
                           ArgStringList &CmdArgs, const InputInfo &Output,
                           const InputInfo &Input, bool IsThinLTO) {
   const char *Linker = Args.MakeArgString(ToolChain.GetLinkerPath());
-  if (llvm::sys::path::filename(Linker) != "ld.lld" &&
-      llvm::sys::path::stem(Linker) != "ld.lld") {
+  bool UseLLD = (llvm::sys::path::filename(Linker) == "ld.lld" ||
+                 llvm::sys::path::stem(Linker) == "ld.lld");
+  if (UseLLD) {
     // Tell the linker to load the plugin. This has to come before
     // AddLinkerInputs as gold requires -plugin to come before any -plugin-opt
     // that -Wl might forward.
@@ -381,6 +382,22 @@
     CmdArgs.push_back(Args.MakeArgString(Plugin));
   }
 
+  // Silence warning for "clang -mllvm ...".
+  for (const Arg *A : Args.filtered(options::OPT_mllvm)) {
+    A->claim();
+
+    // Pass llvm options to lld.
+    if (!UseLLD)
+      continue;
+
+    // FIXME: This is now deprecated and should be removed.
+    if (StringRef(A->getValue(0)) == "-disable-llvm-optzns") {
+      CmdArgs.push_back("-disable-llvm-optzns");
+    } else {
+      A->render(Args, CmdArgs);
+    }
+  }
+
   // Try to pass driver level flags relevant to LTO code generation down to
   // the plugin.
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to