Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/bolt
diff options
context:
space:
mode:
Diffstat (limited to 'bolt')
-rw-r--r--bolt/include/bolt/Passes/Inliner.h31
-rw-r--r--bolt/lib/Passes/Inliner.cpp7
2 files changed, 18 insertions, 20 deletions
diff --git a/bolt/include/bolt/Passes/Inliner.h b/bolt/include/bolt/Passes/Inliner.h
index c6a9b891e68a..711eae69d1c9 100644
--- a/bolt/include/bolt/Passes/Inliner.h
+++ b/bolt/include/bolt/Passes/Inliner.h
@@ -18,22 +18,24 @@
namespace llvm {
namespace bolt {
-class Inliner : public BinaryFunctionPass {
-private:
- enum InliningType : char {
- INL_NONE = 0, /// Cannot inline
- INL_TAILCALL, /// Can inline at tail call site
- INL_ANY /// Can inline at any call site
- };
+enum InliningType : char {
+ INL_NONE = 0, /// Cannot inline
+ INL_TAILCALL, /// Can inline at tail call site
+ INL_ANY /// Can inline at any call site
+};
+
+struct InliningInfo {
+ InliningType Type{INL_NONE};
+ uint64_t SizeAfterInlining{0};
+ uint64_t SizeAfterTailCallInlining{0};
- struct InliningInfo {
- InliningType Type{INL_NONE};
- uint64_t SizeAfterInlining{0};
- uint64_t SizeAfterTailCallInlining{0};
+ InliningInfo(InliningType Type = INL_NONE) : Type(Type) {}
+};
- InliningInfo(InliningType Type = INL_NONE) : Type(Type) {}
- };
+/// Check if the inliner can handle inlining of \p BF.
+InliningInfo getInliningInfo(const BinaryFunction &BF);
+class Inliner : public BinaryFunctionPass {
std::unordered_map<const BinaryFunction *, InliningInfo> InliningCandidates;
/// Count total amount of bytes inlined for all instances of Inliner.
@@ -74,9 +76,6 @@ private:
inlineCall(BinaryBasicBlock &CallerBB, BinaryBasicBlock::iterator CallInst,
const BinaryFunction &Callee);
- /// Check if the inliner can handle inlining of \p BF.
- InliningInfo getInliningInfo(const BinaryFunction &BF) const;
-
public:
explicit Inliner(const cl::opt<bool> &PrintPass)
: BinaryFunctionPass(PrintPass) {}
diff --git a/bolt/lib/Passes/Inliner.cpp b/bolt/lib/Passes/Inliner.cpp
index 595d08191584..85b8c16f174b 100644
--- a/bolt/lib/Passes/Inliner.cpp
+++ b/bolt/lib/Passes/Inliner.cpp
@@ -167,10 +167,7 @@ uint64_t Inliner::getSizeOfTailCallInst(const BinaryContext &BC) {
return SizeOfTailCallInst;
}
-Inliner::InliningInfo Inliner::getInliningInfo(const BinaryFunction &BF) const {
- if (!shouldOptimize(BF))
- return INL_NONE;
-
+InliningInfo getInliningInfo(const BinaryFunction &BF) {
const BinaryContext &BC = BF.getBinaryContext();
bool DirectSP = false;
bool HasCFI = false;
@@ -250,6 +247,8 @@ Inliner::InliningInfo Inliner::getInliningInfo(const BinaryFunction &BF) const {
void Inliner::findInliningCandidates(BinaryContext &BC) {
for (const auto &BFI : BC.getBinaryFunctions()) {
const BinaryFunction &Function = BFI.second;
+ if (!shouldOptimize(Function))
+ continue;
const InliningInfo InlInfo = getInliningInfo(Function);
if (InlInfo.Type != INL_NONE)
InliningCandidates[&Function] = InlInfo;