summaryrefslogtreecommitdiffstats
path: root/contrib/libs/llvm16/include/llvm/Transforms/IPO/ModuleInliner.h
diff options
context:
space:
mode:
authorvvvv <[email protected]>2024-02-06 20:01:22 +0300
committervvvv <[email protected]>2024-02-06 20:22:16 +0300
commit0203b7a9a40828bb2bd4c32029b79ff0ea3d1f8f (patch)
treee630d0d5bd0bd29fc8c2d2842ed2cfde781b993a /contrib/libs/llvm16/include/llvm/Transforms/IPO/ModuleInliner.h
parentba27db76d99d12a4f1c06960b5449423218614c4 (diff)
llvm16 targets
Diffstat (limited to 'contrib/libs/llvm16/include/llvm/Transforms/IPO/ModuleInliner.h')
-rw-r--r--contrib/libs/llvm16/include/llvm/Transforms/IPO/ModuleInliner.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/contrib/libs/llvm16/include/llvm/Transforms/IPO/ModuleInliner.h b/contrib/libs/llvm16/include/llvm/Transforms/IPO/ModuleInliner.h
new file mode 100644
index 00000000000..8a21b70f558
--- /dev/null
+++ b/contrib/libs/llvm16/include/llvm/Transforms/IPO/ModuleInliner.h
@@ -0,0 +1,58 @@
+#pragma once
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wunused-parameter"
+#endif
+
+//===- ModuleInliner.h - Module level Inliner pass --------------*- 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
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_IPO_MODULEINLINER_H
+#define LLVM_TRANSFORMS_IPO_MODULEINLINER_H
+
+#include "llvm/Analysis/InlineAdvisor.h"
+#include "llvm/Analysis/InlineCost.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+/// The module inliner pass for the new pass manager.
+///
+/// This pass wires together the inlining utilities and the inline cost
+/// analysis into a module pass. Different from SCC inliner, it considers every
+/// call in every function in the whole module and tries to inline if
+/// profitable. With this module level inliner, it is possible to evaluate more
+/// heuristics in the module level such like PriorityInlineOrder. It can be
+/// tuned with a number of parameters to control what cost model is used and
+/// what tradeoffs are made when making the decision.
+class ModuleInlinerPass : public PassInfoMixin<ModuleInlinerPass> {
+public:
+ ModuleInlinerPass(InlineParams Params = getInlineParams(),
+ InliningAdvisorMode Mode = InliningAdvisorMode::Default,
+ ThinOrFullLTOPhase LTOPhase = ThinOrFullLTOPhase::None)
+ : Params(Params), Mode(Mode), LTOPhase(LTOPhase){};
+ ModuleInlinerPass(ModuleInlinerPass &&Arg) = default;
+
+ PreservedAnalyses run(Module &, ModuleAnalysisManager &);
+
+private:
+ InlineAdvisor &getAdvisor(const ModuleAnalysisManager &MAM,
+ FunctionAnalysisManager &FAM, Module &M);
+ std::unique_ptr<InlineAdvisor> OwnedAdvisor;
+ const InlineParams Params;
+ const InliningAdvisorMode Mode;
+ const ThinOrFullLTOPhase LTOPhase;
+};
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_IPO_MODULEINLINER_H
+
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif