[llvm] [ORC][JITLink] Add Intel VTune support to JITLink (PR #83957)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 4 21:09:05 PST 2024
================
@@ -0,0 +1,64 @@
+//===--- VTuneSupportPlugin.h -- Support for VTune profiler ---*- C++ -*---===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// Handles support for registering code with VIntel Tune's Amplifier JIT API.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_ORC_AMPLIFIERSUPPORTPLUGIN_H
+#define LLVM_EXECUTIONENGINE_ORC_AMPLIFIERSUPPORTPLUGIN_H
+
+#include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h"
+#include "llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h"
+#include "llvm/ExecutionEngine/Orc/Shared/VTuneSharedStructs.h"
+
+namespace llvm {
+
+namespace orc {
+
+class VTuneSupportPlugin : public ObjectLinkingLayer::Plugin {
+public:
+ VTuneSupportPlugin(ExecutorProcessControl &EPC, ExecutorAddr RegisterImplAddr,
+ ExecutorAddr UnregisterImplAddr, bool EmitDebugInfo)
+ : EPC(EPC), RegisterVTuneImplAddr(RegisterImplAddr),
+ UnregisterVTuneImplAddr(UnregisterImplAddr),
+ EmitDebugInfo(EmitDebugInfo) {}
+
+ void modifyPassConfig(MaterializationResponsibility &MR,
+ jitlink::LinkGraph &G,
+ jitlink::PassConfiguration &Config) override;
+
+ Error notifyEmitted(MaterializationResponsibility &MR) override;
+ Error notifyFailed(MaterializationResponsibility &MR) override;
+ Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override;
+ void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
+ ResourceKey SrcKey) override;
+
+ static Expected<std::unique_ptr<VTuneSupportPlugin>>
+ Create(ExecutorProcessControl &EPC, JITDylib &JD, bool EmitDebugInfo,
+ bool TestMode = false);
+
+private:
+ ExecutorProcessControl &EPC;
+ ExecutorAddr RegisterVTuneImplAddr;
+ ExecutorAddr UnregisterVTuneImplAddr;
+ std::mutex PluginMutex;
+ uint64_t NextMethodID{0};
+ DenseMap<MaterializationResponsibility *, std::pair<uint64_t, uint64_t>>
+ PendingMethodIDs;
+ DenseMap<ResourceKey, std::vector<std::pair<uint64_t, uint64_t>>>
----------------
MaskRay wrote:
Consider replacing `std::vector<X>` with `SmallVector<X, 0>`, since `SmallVector` is smaller in size and is often more efficient. When used in another container like `DenseMap` , the advantage of SmallVector is larger.
https://github.com/llvm/llvm-project/pull/83957
More information about the llvm-commits
mailing list