xref: /llvm-project/llvm/include/llvm/CodeGen/MachineFunctionAnalysis.h (revision bb3f5e1fed7c6ba733b7f273e93f5d3930976185)
16ea0c0a2Spaperchalice //===- llvm/CodeGen/MachineFunctionAnalysis.h -------------------*- C++ -*-===//
26ea0c0a2Spaperchalice //
36ea0c0a2Spaperchalice // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
46ea0c0a2Spaperchalice // See https://llvm.org/LICENSE.txt for license information.
56ea0c0a2Spaperchalice // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66ea0c0a2Spaperchalice //
76ea0c0a2Spaperchalice //===----------------------------------------------------------------------===//
86ea0c0a2Spaperchalice //
96ea0c0a2Spaperchalice // This file declares the MachineFunctionAnalysis class.
106ea0c0a2Spaperchalice //
116ea0c0a2Spaperchalice //===----------------------------------------------------------------------===//
126ea0c0a2Spaperchalice 
136ea0c0a2Spaperchalice #ifndef LLVM_CODEGEN_MACHINEFUNCTIONANALYSIS
146ea0c0a2Spaperchalice #define LLVM_CODEGEN_MACHINEFUNCTIONANALYSIS
156ea0c0a2Spaperchalice 
166ea0c0a2Spaperchalice #include "llvm/IR/PassManager.h"
176ea0c0a2Spaperchalice 
186ea0c0a2Spaperchalice namespace llvm {
196ea0c0a2Spaperchalice 
206ea0c0a2Spaperchalice class MachineFunction;
21*bb3f5e1fSMatin Raayai class TargetMachine;
226ea0c0a2Spaperchalice 
236ea0c0a2Spaperchalice /// This analysis create MachineFunction for given Function.
246ea0c0a2Spaperchalice /// To release the MachineFunction, users should invalidate it explicitly.
256ea0c0a2Spaperchalice class MachineFunctionAnalysis
266ea0c0a2Spaperchalice     : public AnalysisInfoMixin<MachineFunctionAnalysis> {
276ea0c0a2Spaperchalice   friend AnalysisInfoMixin<MachineFunctionAnalysis>;
286ea0c0a2Spaperchalice 
296ea0c0a2Spaperchalice   static AnalysisKey Key;
306ea0c0a2Spaperchalice 
31*bb3f5e1fSMatin Raayai   const TargetMachine *TM;
326ea0c0a2Spaperchalice 
336ea0c0a2Spaperchalice public:
346ea0c0a2Spaperchalice   class Result {
356ea0c0a2Spaperchalice     std::unique_ptr<MachineFunction> MF;
366ea0c0a2Spaperchalice 
376ea0c0a2Spaperchalice   public:
386ea0c0a2Spaperchalice     Result(std::unique_ptr<MachineFunction> MF) : MF(std::move(MF)) {}
396ea0c0a2Spaperchalice     MachineFunction &getMF() { return *MF; };
406ea0c0a2Spaperchalice     bool invalidate(Function &, const PreservedAnalyses &PA,
416ea0c0a2Spaperchalice                     FunctionAnalysisManager::Invalidator &);
426ea0c0a2Spaperchalice   };
436ea0c0a2Spaperchalice 
44*bb3f5e1fSMatin Raayai   MachineFunctionAnalysis(const TargetMachine *TM) : TM(TM) {};
456ea0c0a2Spaperchalice   Result run(Function &F, FunctionAnalysisManager &FAM);
466ea0c0a2Spaperchalice };
476ea0c0a2Spaperchalice 
486ea0c0a2Spaperchalice } // namespace llvm
496ea0c0a2Spaperchalice 
506ea0c0a2Spaperchalice #endif // LLVM_CODEGEN_MachineFunctionAnalysis
51