1//===- InlineSizeEstimatorAnalysis.h - ML size estimator --------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9
10#ifndef LLVM_ANALYSIS_INLINESIZEESTIMATORANALYSIS_H
11#define LLVM_ANALYSIS_INLINESIZEESTIMATORANALYSIS_H
12
13#include "llvm/IR/PassManager.h"
14
15namespace llvm {
16class Function;
17
18class TFModelEvaluator;
19class InlineSizeEstimatorAnalysis
20    : public AnalysisInfoMixin<InlineSizeEstimatorAnalysis> {
21public:
22  InlineSizeEstimatorAnalysis();
23  InlineSizeEstimatorAnalysis(InlineSizeEstimatorAnalysis &&);
24  ~InlineSizeEstimatorAnalysis();
25
26  static AnalysisKey Key;
27  using Result = Optional<size_t>;
28  Result run(const Function &F, FunctionAnalysisManager &FAM);
29  static bool isEvaluatorRequested();
30
31private:
32  std::unique_ptr<TFModelEvaluator> Evaluator;
33};
34
35class InlineSizeEstimatorAnalysisPrinterPass
36    : public PassInfoMixin<InlineSizeEstimatorAnalysisPrinterPass> {
37  raw_ostream &OS;
38
39public:
40  explicit InlineSizeEstimatorAnalysisPrinterPass(raw_ostream &OS) : OS(OS) {}
41
42  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
43};
44} // namespace llvm
45#endif // LLVM_ANALYSIS_INLINESIZEESTIMATORANALYSIS_H
46