[llvm] [tools] LLVM Compiler Visualization Tool for Offloading - GSoC 2025 (PR #147451)
Kevin Sala Penades via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 25 11:58:52 PDT 2025
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>,
Miguel =?utf-8?q?Cárdenas?= <miguelecsx at gmail.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/147451 at github.com>
================
@@ -0,0 +1,1485 @@
+//===------------------ DataExtractor.cpp - LLVM Advisor ------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This is the DataExtractor code generator driver. It provides a convenient
+// command-line interface for generating an assembly file or a relocatable file,
+// given LLVM bitcode.
+//
+//===----------------------------------------------------------------------===//
+
+#include "DataExtractor.h"
+#include "../Utils/FileManager.h"
+#include "../Utils/ProcessRunner.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/Path.h"
+#include "llvm/Support/Process.h"
+#include "llvm/Support/raw_ostream.h"
+#include <algorithm>
+
+namespace llvm {
+namespace advisor {
+
+DataExtractor::DataExtractor(const AdvisorConfig &config) : config_(config) {}
+
+Error DataExtractor::extractAllData(CompilationUnit &unit,
+ llvm::StringRef tempDir) {
+ if (config_.getVerbose()) {
+ outs() << "Extracting data for unit: " << unit.getName() << "\n";
+ }
+
+ // Create extraction subdirectories
+ sys::fs::create_directories(tempDir + "/ir");
+ sys::fs::create_directories(tempDir + "/assembly");
+ sys::fs::create_directories(tempDir + "/ast");
+ sys::fs::create_directories(tempDir + "/preprocessed");
+ sys::fs::create_directories(tempDir + "/include-tree");
+ sys::fs::create_directories(tempDir + "/dependencies");
+ sys::fs::create_directories(tempDir + "/debug");
+ sys::fs::create_directories(tempDir + "/static-analyzer");
+ sys::fs::create_directories(tempDir + "/diagnostics");
+ sys::fs::create_directories(tempDir + "/coverage");
+ sys::fs::create_directories(tempDir + "/time-trace");
+ sys::fs::create_directories(tempDir + "/runtime-trace");
+ sys::fs::create_directories(tempDir + "/binary-analysis");
+ sys::fs::create_directories(tempDir + "/pgo");
+ sys::fs::create_directories(tempDir + "/ftime-report");
+ sys::fs::create_directories(tempDir + "/version-info");
+ sys::fs::create_directories(tempDir + "/sources");
+
+ if (auto Err = extractIR(unit, tempDir))
+ return Err;
+ if (auto Err = extractAssembly(unit, tempDir))
+ return Err;
+ if (auto Err = extractAST(unit, tempDir))
+ return Err;
+ if (auto Err = extractPreprocessed(unit, tempDir))
+ return Err;
+ if (auto Err = extractIncludeTree(unit, tempDir))
+ return Err;
+ if (auto Err = extractDependencies(unit, tempDir))
+ return Err;
+ if (auto Err = extractDebugInfo(unit, tempDir))
+ return Err;
+ if (auto Err = extractStaticAnalysis(unit, tempDir))
+ return Err;
+ if (auto Err = extractMacroExpansion(unit, tempDir))
+ return Err;
+ if (auto Err = extractCompilationPhases(unit, tempDir))
+ return Err;
+ if (auto Err = extractFTimeReport(unit, tempDir))
+ return Err;
+ if (auto Err = extractVersionInfo(unit, tempDir))
+ return Err;
+ if (auto Err = extractSources(unit, tempDir))
+ return Err;
+
+ // Run additional extractors
+ for (size_t i = 0; i < numExtractors_; ++i) {
----------------
kevinsala wrote:
Why some extractors work in this way and some others are called manually? I'd prefer to use this way for all.
https://github.com/llvm/llvm-project/pull/147451
More information about the llvm-commits
mailing list