[BOLT][NFC] Move getInliningInfo out of Inliner class

`getInliningInfo` is useful in other passes that need to check inlining
eligibility for some function. Move the declaration and InliningInfo definition
out of Inliner class. Prepare for subsequent use in ICP.

Reviewed By: rafauler

Differential Revision: https://reviews.llvm.org/D124899
This commit is contained in:
Amir Ayupov 2022-05-04 14:07:42 -07:00
parent 2ad1c7540e
commit f8d2d8b587
2 changed files with 20 additions and 22 deletions

View File

@ -18,22 +18,24 @@
namespace llvm {
namespace bolt {
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};
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 {
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
};
struct InliningInfo {
InliningType Type{INL_NONE};
uint64_t SizeAfterInlining{0};
uint64_t SizeAfterTailCallInlining{0};
InliningInfo(InliningType Type = INL_NONE) : Type(Type) {}
};
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) {}

View File

@ -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;