Skip to content

Commit 7c71a09

Browse files
authored
[CodeGen][NewPM] Port AssignmentTrackingAnalysis to new pass manager (#77550)
1 parent a6b5d6d commit 7c71a09

File tree

5 files changed

+66
-1
lines changed

5 files changed

+66
-1
lines changed

llvm/include/llvm/CodeGen/AssignmentTrackingAnalysis.h

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
1+
//===-- llvm/CodeGen/AssignmentTrackingAnalysis.h --------------*- C++ -*--===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
19
#ifndef LLVM_CODEGEN_ASSIGNMENTTRACKINGANALYSIS_H
210
#define LLVM_CODEGEN_ASSIGNMENTTRACKINGANALYSIS_H
311

412
#include "llvm/IR/DebugInfoMetadata.h"
513
#include "llvm/IR/DebugLoc.h"
614
#include "llvm/IR/IntrinsicInst.h"
15+
#include "llvm/IR/PassManager.h"
716
#include "llvm/Pass.h"
817

918
namespace llvm {
10-
class Function;
1119
class Instruction;
1220
class raw_ostream;
1321
} // namespace llvm
@@ -94,6 +102,25 @@ class FunctionVarLocs {
94102
///@}
95103
};
96104

105+
class DebugAssignmentTrackingAnalysis
106+
: public AnalysisInfoMixin<DebugAssignmentTrackingAnalysis> {
107+
friend AnalysisInfoMixin<DebugAssignmentTrackingAnalysis>;
108+
static AnalysisKey Key;
109+
110+
public:
111+
using Result = FunctionVarLocs;
112+
Result run(Function &F, FunctionAnalysisManager &FAM);
113+
};
114+
115+
class DebugAssignmentTrackingPrinterPass
116+
: public PassInfoMixin<DebugAssignmentTrackingPrinterPass> {
117+
raw_ostream &OS;
118+
119+
public:
120+
DebugAssignmentTrackingPrinterPass(raw_ostream &OS) : OS(OS) {}
121+
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
122+
};
123+
97124
class AssignmentTrackingAnalysis : public FunctionPass {
98125
std::unique_ptr<FunctionVarLocs> Results;
99126

llvm/include/llvm/CodeGen/CodeGenPassBuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "llvm/Analysis/ScopedNoAliasAA.h"
2424
#include "llvm/Analysis/TargetTransformInfo.h"
2525
#include "llvm/Analysis/TypeBasedAliasAnalysis.h"
26+
#include "llvm/CodeGen/AssignmentTrackingAnalysis.h"
2627
#include "llvm/CodeGen/CallBrPrepare.h"
2728
#include "llvm/CodeGen/CodeGenPrepare.h"
2829
#include "llvm/CodeGen/DwarfEHPrepare.h"

llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
//===-- AssignmentTrackingAnalysis.cpp ------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
19
#include "llvm/CodeGen/AssignmentTrackingAnalysis.h"
210
#include "LiveDebugValues/LiveDebugValues.h"
311
#include "llvm/ADT/BitVector.h"
@@ -2553,6 +2561,32 @@ static void analyzeFunction(Function &Fn, const DataLayout &Layout,
25532561
}
25542562
}
25552563

2564+
FunctionVarLocs
2565+
DebugAssignmentTrackingAnalysis::run(Function &F,
2566+
FunctionAnalysisManager &FAM) {
2567+
if (!isAssignmentTrackingEnabled(*F.getParent()))
2568+
return FunctionVarLocs();
2569+
2570+
auto &DL = F.getParent()->getDataLayout();
2571+
2572+
FunctionVarLocsBuilder Builder;
2573+
analyzeFunction(F, DL, &Builder);
2574+
2575+
// Save these results.
2576+
FunctionVarLocs Results;
2577+
Results.init(Builder);
2578+
return Results;
2579+
}
2580+
2581+
AnalysisKey DebugAssignmentTrackingAnalysis::Key;
2582+
2583+
PreservedAnalyses
2584+
DebugAssignmentTrackingPrinterPass::run(Function &F,
2585+
FunctionAnalysisManager &FAM) {
2586+
FAM.getResult<DebugAssignmentTrackingAnalysis>(F).print(OS, F);
2587+
return PreservedAnalyses::all();
2588+
}
2589+
25562590
bool AssignmentTrackingAnalysis::runOnFunction(Function &F) {
25572591
if (!isAssignmentTrackingEnabled(*F.getParent()))
25582592
return false;

llvm/lib/Passes/PassBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
#include "llvm/Analysis/TargetTransformInfo.h"
7373
#include "llvm/Analysis/TypeBasedAliasAnalysis.h"
7474
#include "llvm/Analysis/UniformityAnalysis.h"
75+
#include "llvm/CodeGen/AssignmentTrackingAnalysis.h"
7576
#include "llvm/CodeGen/BasicBlockSectionsProfileReader.h"
7677
#include "llvm/CodeGen/CallBrPrepare.h"
7778
#include "llvm/CodeGen/CodeGenPrepare.h"

llvm/lib/Passes/PassRegistry.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ FUNCTION_ANALYSIS("block-freq", BlockFrequencyAnalysis())
235235
FUNCTION_ANALYSIS("branch-prob", BranchProbabilityAnalysis())
236236
FUNCTION_ANALYSIS("cycles", CycleAnalysis())
237237
FUNCTION_ANALYSIS("da", DependenceAnalysis())
238+
FUNCTION_ANALYSIS("debug-ata", DebugAssignmentTrackingAnalysis())
238239
FUNCTION_ANALYSIS("demanded-bits", DemandedBitsAnalysis())
239240
FUNCTION_ANALYSIS("domfrontier", DominanceFrontierAnalysis())
240241
FUNCTION_ANALYSIS("domtree", DominatorTreeAnalysis())
@@ -384,6 +385,7 @@ FUNCTION_PASS("print<branch-prob>", BranchProbabilityPrinterPass(dbgs()))
384385
FUNCTION_PASS("print<cost-model>", CostModelPrinterPass(dbgs()))
385386
FUNCTION_PASS("print<cycles>", CycleInfoPrinterPass(dbgs()))
386387
FUNCTION_PASS("print<da>", DependenceAnalysisPrinterPass(dbgs()))
388+
FUNCTION_PASS("print<debug-ata>", DebugAssignmentTrackingPrinterPass(dbgs()))
387389
FUNCTION_PASS("print<delinearization>", DelinearizationPrinterPass(dbgs()))
388390
FUNCTION_PASS("print<demanded-bits>", DemandedBitsPrinterPass(dbgs()))
389391
FUNCTION_PASS("print<domfrontier>", DominanceFrontierPrinterPass(dbgs()))

0 commit comments

Comments
 (0)