xref: /freebsd/contrib/llvm-project/llvm/include/llvm/ExecutionEngine/Orc/Debugging/VTuneSupportPlugin.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1 //===--- VTuneSupportPlugin.h -- Support for VTune profiler ---*- C++ -*---===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Handles support for registering code with VIntel Tune's Amplifier JIT API.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_EXECUTIONENGINE_ORC_DEBUGGING_VTUNESUPPORT_H
14 #define LLVM_EXECUTIONENGINE_ORC_DEBUGGING_VTUNESUPPORT_H
15 
16 #include "llvm/ADT/DenseMap.h"
17 #include "llvm/ADT/SmallVector.h"
18 #include "llvm/ExecutionEngine/Orc/Core.h"
19 #include "llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h"
20 #include "llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h"
21 #include "llvm/ExecutionEngine/Orc/Shared/VTuneSharedStructs.h"
22 
23 namespace llvm {
24 
25 namespace orc {
26 
27 class VTuneSupportPlugin : public ObjectLinkingLayer::Plugin {
28 public:
VTuneSupportPlugin(ExecutorProcessControl & EPC,ExecutorAddr RegisterImplAddr,ExecutorAddr UnregisterImplAddr,bool EmitDebugInfo)29   VTuneSupportPlugin(ExecutorProcessControl &EPC, ExecutorAddr RegisterImplAddr,
30                      ExecutorAddr UnregisterImplAddr, bool EmitDebugInfo)
31       : EPC(EPC), RegisterVTuneImplAddr(RegisterImplAddr),
32         UnregisterVTuneImplAddr(UnregisterImplAddr),
33         EmitDebugInfo(EmitDebugInfo) {}
34 
35   void modifyPassConfig(MaterializationResponsibility &MR,
36                         jitlink::LinkGraph &G,
37                         jitlink::PassConfiguration &Config) override;
38 
39   Error notifyEmitted(MaterializationResponsibility &MR) override;
40   Error notifyFailed(MaterializationResponsibility &MR) override;
41   Error notifyRemovingResources(JITDylib &JD, ResourceKey K) override;
42   void notifyTransferringResources(JITDylib &JD, ResourceKey DstKey,
43                                    ResourceKey SrcKey) override;
44 
45   static Expected<std::unique_ptr<VTuneSupportPlugin>>
46   Create(ExecutorProcessControl &EPC, JITDylib &JD, bool EmitDebugInfo,
47          bool TestMode = false);
48 
49 private:
50   ExecutorProcessControl &EPC;
51   ExecutorAddr RegisterVTuneImplAddr;
52   ExecutorAddr UnregisterVTuneImplAddr;
53   std::mutex PluginMutex;
54   uint64_t NextMethodID = 0;
55   DenseMap<MaterializationResponsibility *, std::pair<uint64_t, uint64_t>>
56       PendingMethodIDs;
57   DenseMap<ResourceKey, SmallVector<std::pair<uint64_t, uint64_t>>>
58       LoadedMethodIDs;
59   bool EmitDebugInfo;
60 };
61 
62 } // end namespace orc
63 
64 } // end namespace llvm
65 
66 #endif
67