[clang] d25992e - [Driver] Simplify -fxray-instrument handling

Fangrui Song via cfe-commits cfe-commits at lists.llvm.org
Sun Jun 11 11:19:07 PDT 2023


Author: Fangrui Song
Date: 2023-06-11T11:19:02-07:00
New Revision: d25992e70160dafcde4809bf97884e9dacd5058f

URL: https://github.com/llvm/llvm-project/commit/d25992e70160dafcde4809bf97884e9dacd5058f
DIFF: https://github.com/llvm/llvm-project/commit/d25992e70160dafcde4809bf97884e9dacd5058f.diff

LOG: [Driver] Simplify -fxray-instrument handling

Added: 
    

Modified: 
    clang/include/clang/Driver/XRayArgs.h
    clang/lib/Driver/XRayArgs.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Driver/XRayArgs.h b/clang/include/clang/Driver/XRayArgs.h
index 6ed99a127669b..5779da50a1a01 100644
--- a/clang/include/clang/Driver/XRayArgs.h
+++ b/clang/include/clang/Driver/XRayArgs.h
@@ -25,7 +25,7 @@ class XRayArgs {
   std::vector<std::string> ExtraDeps;
   std::vector<std::string> Modes;
   XRayInstrSet InstrumentationBundle;
-  bool XRayInstrument = false;
+  llvm::opt::Arg *XRayInstrument = nullptr;
   int InstructionThreshold = 200;
   bool XRayAlwaysEmitCustomEvents = false;
   bool XRayAlwaysEmitTypedEvents = false;

diff  --git a/clang/lib/Driver/XRayArgs.cpp b/clang/lib/Driver/XRayArgs.cpp
index cf9b5780c4555..e975a72e4fe65 100644
--- a/clang/lib/Driver/XRayArgs.cpp
+++ b/clang/lib/Driver/XRayArgs.cpp
@@ -23,7 +23,6 @@ using namespace clang::driver;
 using namespace llvm::opt;
 
 namespace {
-constexpr char XRayInstrumentOption[] = "-fxray-instrument";
 constexpr char XRayInstructionThresholdOption[] =
     "-fxray-instruction-threshold=";
 constexpr const char *const XRaySupportedModes[] = {"xray-fdr", "xray-basic"};
@@ -35,6 +34,7 @@ XRayArgs::XRayArgs(const ToolChain &TC, const ArgList &Args) {
   if (!Args.hasFlag(options::OPT_fxray_instrument,
                     options::OPT_fno_xray_instrument, false))
     return;
+  XRayInstrument = Args.getLastArg(options::OPT_fxray_instrument);
   if (Triple.getOS() == llvm::Triple::Linux) {
     switch (Triple.getArch()) {
     case llvm::Triple::x86_64:
@@ -48,14 +48,14 @@ XRayArgs::XRayArgs(const ToolChain &TC, const ArgList &Args) {
     case llvm::Triple::mips64el:
       break;
     default:
-      D.Diag(diag::err_drv_clang_unsupported)
-          << (std::string(XRayInstrumentOption) + " on " + Triple.str());
+      D.Diag(diag::err_drv_unsupported_opt_for_target)
+          << XRayInstrument->getSpelling() << Triple.str();
     }
   } else if (Triple.isOSFreeBSD() || Triple.isOSOpenBSD() ||
              Triple.isOSNetBSD() || Triple.isMacOSX()) {
     if (Triple.getArch() != llvm::Triple::x86_64) {
-      D.Diag(diag::err_drv_clang_unsupported)
-          << (std::string(XRayInstrumentOption) + " on " + Triple.str());
+      D.Diag(diag::err_drv_unsupported_opt_for_target)
+          << XRayInstrument->getSpelling() << Triple.str();
     }
   } else if (Triple.getOS() == llvm::Triple::Fuchsia) {
     switch (Triple.getArch()) {
@@ -63,21 +63,20 @@ XRayArgs::XRayArgs(const ToolChain &TC, const ArgList &Args) {
     case llvm::Triple::aarch64:
       break;
     default:
-      D.Diag(diag::err_drv_clang_unsupported)
-          << (std::string(XRayInstrumentOption) + " on " + Triple.str());
+      D.Diag(diag::err_drv_unsupported_opt_for_target)
+          << XRayInstrument->getSpelling() << Triple.str();
     }
   } else {
-    D.Diag(diag::err_drv_clang_unsupported)
-        << (std::string(XRayInstrumentOption) + " on " + Triple.str());
+    D.Diag(diag::err_drv_unsupported_opt_for_target)
+        << XRayInstrument->getSpelling() << Triple.str();
   }
 
   // Both XRay and -fpatchable-function-entry use
   // TargetOpcode::PATCHABLE_FUNCTION_ENTER.
   if (Arg *A = Args.getLastArg(options::OPT_fpatchable_function_entry_EQ))
     D.Diag(diag::err_drv_argument_not_allowed_with)
-        << "-fxray-instrument" << A->getSpelling();
+        << XRayInstrument->getSpelling() << A->getSpelling();
 
-  XRayInstrument = true;
   if (const Arg *A =
           Args.getLastArg(options::OPT_fxray_instruction_threshold_EQ)) {
     StringRef S = A->getValue();
@@ -211,7 +210,7 @@ void XRayArgs::addArgs(const ToolChain &TC, const ArgList &Args,
   if (!XRayInstrument)
     return;
 
-  CmdArgs.push_back(XRayInstrumentOption);
+  XRayInstrument->render(Args, CmdArgs);
 
   if (XRayAlwaysEmitCustomEvents)
     CmdArgs.push_back("-fxray-always-emit-customevents");


        


More information about the cfe-commits mailing list