diff options
author | paperchalice <liujunchang97@outlook.com> | 2024-04-30 09:54:48 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-30 09:54:48 +0800 |
commit | 6ea0c0a28343b2676baf480db490b5a27fa11d7c (patch) | |
tree | f00243ace9e105d4acf60987f9a218b0809ac8af /llvm/lib/CodeGen/MachineFunctionAnalysis.cpp | |
parent | b1867e18c346e9621e14270bea2d1acb7d2a9ce0 (diff) | |
download | llvm-6ea0c0a28343b2676baf480db490b5a27fa11d7c.zip llvm-6ea0c0a28343b2676baf480db490b5a27fa11d7c.tar.gz llvm-6ea0c0a28343b2676baf480db490b5a27fa11d7c.tar.bz2 |
[NewPM][CodeGen] Add `MachineFunctionAnalysis` (#88610)
In new pass system, `MachineFunction` could be an analysis result again,
machine module pass can now fetch them from analysis manager.
`MachineModuleInfo` no longer owns them.
Remove `FreeMachineFunctionPass`, replaced by
`InvalidateAnalysisPass<MachineFunctionAnalysis>`.
Now `FreeMachineFunction` is replaced by
`InvalidateAnalysisPass<MachineFunctionAnalysis>`, the workaround in
`MachineFunctionPassManager` is no longer needed, there is no difference
between `unittests/MIR/PassBuilderCallbacksTest.cpp` and
`unittests/IR/PassBuilderCallbacksTest.cpp`.
Diffstat (limited to 'llvm/lib/CodeGen/MachineFunctionAnalysis.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineFunctionAnalysis.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineFunctionAnalysis.cpp b/llvm/lib/CodeGen/MachineFunctionAnalysis.cpp new file mode 100644 index 0000000..519a77c --- /dev/null +++ b/llvm/lib/CodeGen/MachineFunctionAnalysis.cpp @@ -0,0 +1,46 @@ +//===- 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/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, Context.generateMachineFunctionNum(F), MMI); + MF->initTargetMachineFunctionInfo(STI); + + // MRI callback for target specific initializations. + TM->registerMachineRegisterInfoCallback(*MF); + + return Result(std::move(MF)); +} |