| //===- 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; |
| |
| 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)); |
| } |