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