[compiler-rt] [llvm] [ORC] Implement basic reoptimization. (PR #67050)
João Maia via llvm-commits
llvm-commits at lists.llvm.org
Wed May 1 09:09:12 PDT 2024
================
@@ -0,0 +1,179 @@
+//===- ReOptimizeLayer.h - Re-optimization layer interface ------*- 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
+//
+//===----------------------------------------------------------------------===//
+//
+// Re-optimization layer interface.
+//
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_EXECUTIONENGINE_ORC_REOPTIMIZELAYER_H
+#define LLVM_EXECUTIONENGINE_ORC_REOPTIMIZELAYER_H
+
+#include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/Layer.h"
+#include "llvm/ExecutionEngine/Orc/RedirectionManager.h"
+#include "llvm/ExecutionEngine/Orc/ThreadSafeModule.h"
+#include "llvm/IR/IRBuilder.h"
+#include "llvm/Transforms/Utils/BasicBlockUtils.h"
+#include "llvm/Transforms/Utils/Cloning.h"
+
+namespace llvm {
+namespace orc {
+
+class ReOptimizeLayer : public IRLayer, public ResourceManager {
+public:
+ using ReOptMaterializationUnitID = uint64_t;
+
+ /// AddProfilerFunc will be called when ReOptimizeLayer emits the first
+ /// version of a materialization unit in order to inject profiling code and
+ /// reoptimization request code.
+ using AddProfilerFunc = unique_function<Error(
+ ReOptimizeLayer &Parent, ReOptMaterializationUnitID MUID,
+ unsigned CurVersion, ThreadSafeModule &TSM)>;
+
+ /// ReOptimizeFunc will be called when ReOptimizeLayer reoptimization of a
+ /// materialization unit was requested in order to reoptimize the IR module
+ /// based on profile data. OldRT is the ResourceTracker that tracks the old
+ /// function definitions. The OldRT must be kept alive until it can be
+ /// guaranteed that every invocation of the old function definitions has been
+ /// terminated.
+ using ReOptimizeFunc = unique_function<Error(
+ ReOptimizeLayer &Parent, ReOptMaterializationUnitID MUID,
+ unsigned CurVersion, ResourceTrackerSP OldRT, ThreadSafeModule &TSM)>;
+
+ ReOptimizeLayer(ExecutionSession &ES, IRLayer &BaseLayer,
+ RedirectableSymbolManager &RM)
+ : IRLayer(ES, BaseLayer.getManglingOptions()), ES(ES),
+ BaseLayer(BaseLayer), RSManager(RM), ReOptFunc(identity),
+ ProfilerFunc(reoptimizeIfCallFrequent) {}
+
+ void setReoptimizeFunc(ReOptimizeFunc ReOptFunc) {
+ this->ReOptFunc = std::move(ReOptFunc);
+ }
+
+ void setAddProfilerFunc(AddProfilerFunc ProfilerFunc) {
+ this->ProfilerFunc = std::move(ProfilerFunc);
+ }
+
+ /// Registers reoptimize runtime dispatch handlers to given PlatformJD. The
+ /// reoptimization request will not be handled if dispatch handler is not
+ /// registered by using this function.
+ Error reigsterRuntimeFunctions(JITDylib &PlatformJD);
----------------
JPMMaia wrote:
Typo: `reigsterRuntimeFunctions` -> `registerRuntimeFunctions`
https://github.com/llvm/llvm-project/pull/67050
More information about the llvm-commits
mailing list