[clang] 5e4f69e - Revert "[Clang] change default storing path of `-ftime-trace`"

Junduo Dong via cfe-commits cfe-commits at lists.llvm.org
Sat Sep 3 01:39:17 PDT 2022


Author: Junduo Dong
Date: 2022-09-03T01:38:37-07:00
New Revision: 5e4f69edbc1e36c47c62a2c522e9a8a6e7b86d06

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

LOG: Revert "[Clang] change default storing path of `-ftime-trace`"

This reverts commit 38941da066a7b785ba4771710189172e94e37824.

Added: 
    

Modified: 
    clang/lib/Driver/Driver.cpp
    clang/test/Driver/check-time-trace.cpp
    clang/tools/driver/cc1_main.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 5f5655fbc34a8..ba359a1d31a53 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -4510,102 +4510,6 @@ Action *Driver::ConstructPhaseAction(
   llvm_unreachable("invalid phase in ConstructPhaseAction");
 }
 
-// Infer data storing path of the options `-ftime-trace`, `-ftime-trace=<path>`
-void InferTimeTracePath(Compilation &C) {
-  bool HasTimeTrace =
-      C.getArgs().getLastArg(options::OPT_ftime_trace) != nullptr;
-  bool HasTimeTraceFile =
-      C.getArgs().getLastArg(options::OPT_ftime_trace_EQ) != nullptr;
-  // Whether `-ftime-trace` or `-ftime-trace=<path>` are specified
-  if (!HasTimeTrace && !HasTimeTraceFile)
-    return;
-
-  // If `-ftime-trace=<path>` is specified, TracePath is the <path>.
-  // Else if there is a linking job, TracePath is the parent path of .exe,
-  //         then the OutputFile's name may be appended to it.
-  // Else, TracePath is "",
-  //         then the full OutputFile's path may be appended to it.
-  SmallString<128> TracePath("");
-
-  if (HasTimeTraceFile) {
-    TracePath = SmallString<128>(
-        C.getArgs().getLastArg(options::OPT_ftime_trace_EQ)->getValue());
-  } else {
-    // Get linking executable file's parent path as TracePath's parent path,
-    // default is ".". Filename may be determined and added into TracePath then.
-    //
-    // e.g. executable file's path: /usr/local/a.out
-    //      its parent's path:      /usr/local
-    for (auto &J : C.getJobs()) {
-      if (J.getSource().getKind() == Action::LinkJobClass) {
-        assert(!J.getOutputFilenames().empty() &&
-               "linking output filename is empty");
-        auto OutputFilePath =
-            SmallString<128>(J.getOutputFilenames()[0].c_str());
-        if (llvm::sys::path::has_parent_path(OutputFilePath)) {
-          TracePath = llvm::sys::path::parent_path(OutputFilePath);
-        } else {
-          TracePath = SmallString<128>(".");
-        }
-        break;
-      }
-    }
-  }
-
-  // Add or replace the modified -ftime-trace=<path>` to all clang jobs
-  for (auto &J : C.getJobs()) {
-    if (J.getSource().getKind() == Action::AssembleJobClass ||
-        J.getSource().getKind() == Action::BackendJobClass ||
-        J.getSource().getKind() == Action::CompileJobClass) {
-      SmallString<128> TracePathReal = TracePath;
-      SmallString<128> OutputPath(J.getOutputFilenames()[0].c_str());
-      std::string arg = std::string("-ftime-trace=");
-      if (!HasTimeTraceFile) {
-        if (TracePathReal.empty()) {
-          // /xxx/yyy.o => /xxx/yyy.json
-          llvm::sys::path::replace_extension(OutputPath, "json");
-          arg += std::string(OutputPath.c_str());
-        } else {
-          // /xxx/yyy.o => /executable_file_parent_path/yyy.json
-          llvm::sys::path::append(TracePathReal,
-                                  llvm::sys::path::filename(OutputPath));
-          llvm::sys::path::replace_extension(TracePathReal, "json");
-          arg += std::string(TracePathReal.c_str());
-        }
-      } else {
-        // /full_file_path_specified or /path_specified/yyy.json
-        if (llvm::sys::fs::is_directory(TracePathReal))
-          llvm::sys::path::append(TracePathReal,
-                                  llvm::sys::path::filename(OutputPath));
-        llvm::sys::path::replace_extension(TracePathReal, "json");
-        arg += std::string(TracePathReal.c_str());
-      }
-
-      assert(arg.size() > strlen("-ftime-trace") &&
-             arg.find("-ftime-trace=") == 0 && arg[arg.size() - 1] != '=' &&
-             "invalid `-ftime-trace=<path>`");
-
-      const std::string::size_type size = arg.size();
-      char *buffer = new char[size + 1];
-      memcpy(buffer, arg.c_str(), size + 1);
-
-      // Replace `-ftime-trace` or `-ftime-trace=<path>` with the modified
-      // `-ftime-trace=<infered_path>`.
-      auto &JArgs = J.getArguments();
-      for (unsigned I = 0; I < JArgs.size(); ++I) {
-        if (StringRef(JArgs[I]).startswith("-ftime-trace=") ||
-            (StringRef(JArgs[I]).equals("-ftime-trace") && !HasTimeTraceFile)) {
-          ArgStringList NewArgs(JArgs.begin(), JArgs.begin() + I);
-          NewArgs.push_back(buffer);
-          NewArgs.append(JArgs.begin() + I + 1, JArgs.end());
-          J.replaceArguments(NewArgs);
-          break;
-        }
-      }
-    }
-  }
-}
-
 void Driver::BuildJobs(Compilation &C) const {
   llvm::PrettyStackTraceString CrashInfo("Building compilation jobs");
 
@@ -4693,9 +4597,6 @@ void Driver::BuildJobs(Compilation &C) const {
                        /*TargetDeviceOffloadKind*/ Action::OFK_None);
   }
 
-  // set data storing path of the options `-ftime-trace`, `-ftime-trace=<path>`
-  InferTimeTracePath(C);
-
   // If we have more than one job, then disable integrated-cc1 for now. Do this
   // also when we need to report process execution statistics.
   if (C.getJobs().size() > 1 || CCPrintProcessStats)

diff  --git a/clang/test/Driver/check-time-trace.cpp b/clang/test/Driver/check-time-trace.cpp
index e0d1e935a7331..52b3e71394fba 100644
--- a/clang/test/Driver/check-time-trace.cpp
+++ b/clang/test/Driver/check-time-trace.cpp
@@ -1,8 +1,3 @@
-// RUN: rm -rf %T/exe && mkdir %T/exe
-// RUN: %clangxx -ftime-trace -ftime-trace-granularity=0 -o %T/exe/check-time-trace %s
-// RUN: cat %T/exe/check-time-trace*.json \
-// RUN:   | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \
-// RUN:   | FileCheck %s
 // RUN: %clangxx -S -ftime-trace -ftime-trace-granularity=0 -o %T/check-time-trace %s
 // RUN: cat %T/check-time-trace.json \
 // RUN:   | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \

diff  --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp
index 5da37577a1001..de33aa9ea9341 100644
--- a/clang/tools/driver/cc1_main.cpp
+++ b/clang/tools/driver/cc1_main.cpp
@@ -256,10 +256,17 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
   llvm::TimerGroup::clearAll();
 
   if (llvm::timeTraceProfilerEnabled()) {
-    SmallString<128> TracePath(Clang->getFrontendOpts().TimeTracePath);
-    assert(!TracePath.empty() && "`-ftime-trace=<path>` is empty");
+    SmallString<128> Path(Clang->getFrontendOpts().OutputFile);
+    llvm::sys::path::replace_extension(Path, "json");
+    if (!Clang->getFrontendOpts().TimeTracePath.empty()) {
+      // replace the suffix to '.json' directly
+      SmallString<128> TracePath(Clang->getFrontendOpts().TimeTracePath);
+      if (llvm::sys::fs::is_directory(TracePath))
+        llvm::sys::path::append(TracePath, llvm::sys::path::filename(Path));
+      Path.assign(TracePath);
+    }
     if (auto profilerOutput = Clang->createOutputFile(
-            TracePath.str(), /*Binary=*/false, /*RemoveFileOnSignal=*/false,
+            Path.str(), /*Binary=*/false, /*RemoveFileOnSignal=*/false,
             /*useTemporary=*/false)) {
       llvm::timeTraceProfilerWrite(*profilerOutput);
       profilerOutput.reset();


        


More information about the cfe-commits mailing list