blob: cc3f96c424e9ca8b6c84a22e152344ce92431be6 [file] [log] [blame]
//===- InlineFeaturesAnalysis.h - ML Policy Feature extraction -*- 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_INLINEFEATURESANALYSIS_H_
#define LLVM_INLINEFEATURESANALYSIS_H_
#include "llvm/IR/PassManager.h"
namespace llvm {
class Function;
class InlineFeaturesAnalysis
: public AnalysisInfoMixin<InlineFeaturesAnalysis> {
public:
static AnalysisKey Key;
struct Result {
/// Number of basic blocks
int64_t BasicBlockCount = 0;
/// Number of blocks reached from a conditional instruction, or that are
/// 'cases' of a SwitchInstr.
// FIXME: We may want to replace this with a more meaningful metric, like
// number of conditionally executed blocks:
// 'if (a) s();' would be counted here as 2 blocks, just like
// 'if (a) s(); else s2(); s3();' would.
int64_t BlocksReachedFromConditionalInstruction = 0;
/// Number of uses of this function, plus 1 if the function is callable
/// outside the module.
int64_t Uses = 0;
/// Number of direct calls made from this function to other functions
/// defined in this module.
int64_t DirectCallsToDefinedFunctions = 0;
};
Result run(const Function &F, FunctionAnalysisManager &FAM);
};
} // namespace llvm
#endif // LLVM_INLINEFEATURESANALYSIS_H_