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