xref: /llvm-project/llvm/lib/CodeGen/MachineFunctionAnalysis.cpp (revision 63e1647827f3427c5f3ad37461d84a63ba5fcdaf)
16ea0c0a2Spaperchalice //===- MachineFunctionAnalysis.cpp ----------------------------------------===//
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 contains the definitions of the MachineFunctionAnalysis
106ea0c0a2Spaperchalice // members.
116ea0c0a2Spaperchalice //
126ea0c0a2Spaperchalice //===----------------------------------------------------------------------===//
136ea0c0a2Spaperchalice 
146ea0c0a2Spaperchalice #include "llvm/CodeGen/MachineFunctionAnalysis.h"
156ea0c0a2Spaperchalice #include "llvm/CodeGen/MachineFunction.h"
166ea0c0a2Spaperchalice #include "llvm/CodeGen/MachineModuleInfo.h"
17c0866cefSNikita Popov #include "llvm/IR/Function.h"
186ea0c0a2Spaperchalice #include "llvm/Target/TargetMachine.h"
196ea0c0a2Spaperchalice 
206ea0c0a2Spaperchalice using namespace llvm;
216ea0c0a2Spaperchalice 
226ea0c0a2Spaperchalice AnalysisKey MachineFunctionAnalysis::Key;
236ea0c0a2Spaperchalice 
246ea0c0a2Spaperchalice bool MachineFunctionAnalysis::Result::invalidate(
256ea0c0a2Spaperchalice     Function &, const PreservedAnalyses &PA,
266ea0c0a2Spaperchalice     FunctionAnalysisManager::Invalidator &) {
276ea0c0a2Spaperchalice   // Unless it is invalidated explicitly, it should remain preserved.
286ea0c0a2Spaperchalice   auto PAC = PA.getChecker<MachineFunctionAnalysis>();
296ea0c0a2Spaperchalice   return !PAC.preservedWhenStateless();
306ea0c0a2Spaperchalice }
316ea0c0a2Spaperchalice 
326ea0c0a2Spaperchalice MachineFunctionAnalysis::Result
336ea0c0a2Spaperchalice MachineFunctionAnalysis::run(Function &F, FunctionAnalysisManager &FAM) {
346ea0c0a2Spaperchalice   auto &Context = F.getContext();
356ea0c0a2Spaperchalice   const TargetSubtargetInfo &STI = *TM->getSubtargetImpl(F);
366ea0c0a2Spaperchalice   auto &MMI = FAM.getResult<ModuleAnalysisManagerFunctionProxy>(F)
376ea0c0a2Spaperchalice                   .getCachedResult<MachineModuleAnalysis>(*F.getParent())
386ea0c0a2Spaperchalice                   ->getMMI();
396ea0c0a2Spaperchalice   auto MF = std::make_unique<MachineFunction>(
40*63e16478SMatt Arsenault       F, *TM, STI, MMI.getContext(), Context.generateMachineFunctionNum(F));
416ea0c0a2Spaperchalice   MF->initTargetMachineFunctionInfo(STI);
426ea0c0a2Spaperchalice 
436ea0c0a2Spaperchalice   // MRI callback for target specific initializations.
446ea0c0a2Spaperchalice   TM->registerMachineRegisterInfoCallback(*MF);
456ea0c0a2Spaperchalice 
466ea0c0a2Spaperchalice   return Result(std::move(MF));
476ea0c0a2Spaperchalice }
48