aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
diff options
context:
space:
mode:
authorHongyu Chen <46539970+yugier@users.noreply.github.com>2024-03-04 08:52:45 -0800
committerGitHub <noreply@github.com>2024-03-04 08:52:45 -0800
commit17efdad2296a2757813e4f11d0575ee6fb826e39 (patch)
tree08798a5ff43b039c3eff78bf4a1484f21968a473 /llvm/tools/llvm-jitlink/llvm-jitlink.cpp
parentbc9c6c0c65e267a1a84e4eede81099d8ceb37558 (diff)
downloadllvm-17efdad2296a2757813e4f11d0575ee6fb826e39.zip
llvm-17efdad2296a2757813e4f11d0575ee6fb826e39.tar.gz
llvm-17efdad2296a2757813e4f11d0575ee6fb826e39.tar.bz2
[ORC][JITLink] Add Intel VTune support to JITLink (#81826)
This patch adds two plugins: VTuneSupportPlugin.cpp and JITLoaderVTune.cpp. The testing is done in a manner similar to llvm-jitlistener. Currently, we only support the old version of Intel VTune API. This pull request is stacked on top of https://github.com/llvm/llvm-project/pull/81825
Diffstat (limited to 'llvm/tools/llvm-jitlink/llvm-jitlink.cpp')
-rw-r--r--llvm/tools/llvm-jitlink/llvm-jitlink.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
index f0b8310a..0217f64 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
@@ -21,6 +21,7 @@
#include "llvm/ExecutionEngine/Orc/Debugging/DebugInfoSupport.h"
#include "llvm/ExecutionEngine/Orc/Debugging/DebuggerSupportPlugin.h"
#include "llvm/ExecutionEngine/Orc/Debugging/PerfSupportPlugin.h"
+#include "llvm/ExecutionEngine/Orc/Debugging/VTuneSupportPlugin.h"
#include "llvm/ExecutionEngine/Orc/ELFNixPlatform.h"
#include "llvm/ExecutionEngine/Orc/EPCDebugObjectRegistrar.h"
#include "llvm/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.h"
@@ -34,6 +35,7 @@
#include "llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h"
#include "llvm/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.h"
#include "llvm/ExecutionEngine/Orc/TargetProcess/JITLoaderPerf.h"
+#include "llvm/ExecutionEngine/Orc/TargetProcess/JITLoaderVTune.h"
#include "llvm/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCContext.h"
@@ -148,6 +150,10 @@ static cl::opt<bool> PerfSupport("perf-support",
cl::init(false), cl::Hidden,
cl::cat(JITLinkCategory));
+static cl::opt<bool> VTuneSupport("vtune-support",
+ cl::desc("Enable vtune profiling support"),
+ cl::init(false), cl::Hidden,
+ cl::cat(JITLinkCategory));
static cl::opt<bool>
NoProcessSymbols("no-process-syms",
cl::desc("Do not resolve to llvm-jitlink process symbols"),
@@ -264,7 +270,10 @@ static LLVM_ATTRIBUTE_USED void linkComponents() {
<< (void *)&llvm_orc_registerJITLoaderGDBAllocAction << '\n'
<< (void *)&llvm_orc_registerJITLoaderPerfStart << '\n'
<< (void *)&llvm_orc_registerJITLoaderPerfEnd << '\n'
- << (void *)&llvm_orc_registerJITLoaderPerfImpl << '\n';
+ << (void *)&llvm_orc_registerJITLoaderPerfImpl << '\n'
+ << (void *)&llvm_orc_registerVTuneImpl << '\n'
+ << (void *)&llvm_orc_unregisterVTuneImpl << '\n'
+ << (void *)&llvm_orc_test_registerVTuneImpl << '\n';
}
static bool UseTestResultOverride = false;
@@ -1004,6 +1013,13 @@ Session::Session(std::unique_ptr<ExecutorProcessControl> EPC, Error &Err)
this->ES.getExecutorProcessControl(), *ProcessSymsJD, true, true)));
}
+ if (VTuneSupport && TT.isOSBinFormatELF()) {
+ ObjLayer.addPlugin(ExitOnErr(DebugInfoPreservationPlugin::Create()));
+ ObjLayer.addPlugin(ExitOnErr(VTuneSupportPlugin::Create(
+ this->ES.getExecutorProcessControl(), *ProcessSymsJD, /*EmitDebugInfo=*/true,
+ /*TestMode=*/true)));
+ }
+
// Set up the platform.
if (!OrcRuntime.empty()) {
assert(ProcessSymsJD && "ProcessSymsJD should have been set");