| //===- MachineFunctionAnalysis.cpp ----------------------------------------===// | |
| // | |
| // 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 | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This file contains the definitions of the MachineFunctionAnalysis | |
| // members. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/CodeGen/MachineFunctionAnalysis.h" | |
| #include "llvm/CodeGen/MachineFunction.h" | |
| #include "llvm/CodeGen/MachineModuleInfo.h" | |
| #include "llvm/IR/Function.h" | |
| #include "llvm/Target/TargetMachine.h" | |
| using namespace llvm; | |
| AnalysisKey MachineFunctionAnalysis::Key; | |
| llvm::MachineFunctionAnalysis::Result::Result( | |
| std::unique_ptr<MachineFunction> MF) | |
| : MF(std::move(MF)) {} | |
| bool MachineFunctionAnalysis::Result::invalidate( | |
| Function &, const PreservedAnalyses &PA, | |
| FunctionAnalysisManager::Invalidator &) { | |
| // Unless it is invalidated explicitly, it should remain preserved. | |
| auto PAC = PA.getChecker<MachineFunctionAnalysis>(); | |
| return !PAC.preservedWhenStateless(); | |
| } | |
| MachineFunctionAnalysis::Result | |
| MachineFunctionAnalysis::run(Function &F, FunctionAnalysisManager &FAM) { | |
| auto &Context = F.getContext(); | |
| const TargetSubtargetInfo &STI = *TM->getSubtargetImpl(F); | |
| auto &MMI = FAM.getResult<ModuleAnalysisManagerFunctionProxy>(F) | |
| .getCachedResult<MachineModuleAnalysis>(*F.getParent()) | |
| ->getMMI(); | |
| auto MF = std::make_unique<MachineFunction>( | |
| F, *TM, STI, MMI.getContext(), Context.generateMachineFunctionNum(F)); | |
| MF->initTargetMachineFunctionInfo(STI); | |
| // MRI callback for target specific initializations. | |
| TM->registerMachineRegisterInfoCallback(*MF); | |
| return Result(std::move(MF)); | |
| } | |
| PreservedAnalyses FreeMachineFunctionPass::run(Function &F, | |
| FunctionAnalysisManager &FAM) { | |
| FAM.clearAnalysis<MachineFunctionAnalysis>(F); | |
| return PreservedAnalyses::all(); | |
| } |