[llvm-branch-commits] [llvm] 0276bc1 - [LVI] Add NewPM printer pass
Aiden Grossman via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Nov 25 21:21:39 PST 2023
Author: Aiden Grossman
Date: 2023-11-25T21:20:29-08:00
New Revision: 0276bc121c06eebe3a031d72a971d84a20c7f1b5
URL: https://github.com/llvm/llvm-project/commit/0276bc121c06eebe3a031d72a971d84a20c7f1b5
DIFF: https://github.com/llvm/llvm-project/commit/0276bc121c06eebe3a031d72a971d84a20c7f1b5.diff
LOG: [LVI] Add NewPM printer pass
This patch adds a NewPM printer pass for the LazyValueAnalysis.
Added:
llvm/test/Analysis/LazyValueAnalysis/print.ll
Modified:
llvm/include/llvm/Analysis/LazyValueInfo.h
llvm/lib/Analysis/LazyValueInfo.cpp
llvm/lib/Passes/PassRegistry.def
Removed:
################################################################################
diff --git a/llvm/include/llvm/Analysis/LazyValueInfo.h b/llvm/include/llvm/Analysis/LazyValueInfo.h
index f013a4a75d3d6ad..ead9f5f0225cd09 100644
--- a/llvm/include/llvm/Analysis/LazyValueInfo.h
+++ b/llvm/include/llvm/Analysis/LazyValueInfo.h
@@ -151,6 +151,17 @@ class LazyValueAnalysis : public AnalysisInfoMixin<LazyValueAnalysis> {
friend struct AnalysisInfoMixin<LazyValueAnalysis>;
};
+/// Printer pass for the LazyValueAnalysis results.
+class LazyValueInfoPrinterPass
+ : public PassInfoMixin<LazyValueInfoPrinterPass> {
+ raw_ostream &OS;
+
+public:
+ explicit LazyValueInfoPrinterPass(raw_ostream &OS) : OS(OS) {}
+
+ PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+};
+
/// Wrapper around LazyValueInfo.
class LazyValueInfoWrapperPass : public FunctionPass {
LazyValueInfoWrapperPass(const LazyValueInfoWrapperPass&) = delete;
diff --git a/llvm/lib/Analysis/LazyValueInfo.cpp b/llvm/lib/Analysis/LazyValueInfo.cpp
index 5cb207c8036d40a..868824285301a09 100644
--- a/llvm/lib/Analysis/LazyValueInfo.cpp
+++ b/llvm/lib/Analysis/LazyValueInfo.cpp
@@ -2087,6 +2087,15 @@ void LazyValueInfoAnnotatedWriter::emitInstructionAnnot(
}
+PreservedAnalyses LazyValueInfoPrinterPass::run(Function &F,
+ FunctionAnalysisManager &AM) {
+ OS << "LVI for function '" << F.getName() << "':\n";
+ auto &LVI = AM.getResult<LazyValueAnalysis>(F);
+ auto &DTree = AM.getResult<DominatorTreeAnalysis>(F);
+ LVI.printLVI(F, DTree, OS);
+ return PreservedAnalyses::all();
+}
+
namespace {
// Printer class for LazyValueInfo results.
class LazyValueInfoPrinter : public FunctionPass {
diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 2067fc473b522db..199a8e4622e35a3 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -400,6 +400,7 @@ FUNCTION_PASS("print<func-properties>", FunctionPropertiesPrinterPass(dbgs()))
FUNCTION_PASS("print<inline-cost>", InlineCostAnnotationPrinterPass(dbgs()))
FUNCTION_PASS("print<inliner-size-estimator>",
InlineSizeEstimatorAnalysisPrinterPass(dbgs()))
+FUNCTION_PASS("print<lazy-value-info>", LazyValueInfoPrinterPass(dbgs()))
FUNCTION_PASS("print<loops>", LoopPrinterPass(dbgs()))
FUNCTION_PASS("print<memoryssa-walker>", MemorySSAWalkerPrinterPass(dbgs()))
FUNCTION_PASS("print<phi-values>", PhiValuesPrinterPass(dbgs()))
diff --git a/llvm/test/Analysis/LazyValueAnalysis/print.ll b/llvm/test/Analysis/LazyValueAnalysis/print.ll
new file mode 100644
index 000000000000000..6b4938a5fd9e07b
--- /dev/null
+++ b/llvm/test/Analysis/LazyValueAnalysis/print.ll
@@ -0,0 +1,49 @@
+; RUN: opt %s -disable-output -passes="jump-threading,print<lazy-value-info>" 2>&1 | FileCheck %s
+
+; first to populate the values.
+
+define i32 @constraint(i32 %a) {
+; CHECK-LABEL: LVI for function 'constraint':
+chklt64:
+; CHECK-LABEL: chklt64:
+; CHECK-NEXT: ; LatticeVal for: 'i32 %a' is: overdefined
+; CHECK-NEXT: ; LatticeVal for: ' %cmp = icmp slt i32 %a, 64' in BB: '%chklt64' is: overdefined
+; CHECK-NEXT: ; LatticeVal for: ' %cmp = icmp slt i32 %a, 64' in BB: '%chkgt0' is: constantrange<-1, 0>
+; CHECK-NEXT: ; LatticeVal for: ' %cmp = icmp slt i32 %a, 64' in BB: '%notinbounds' is: overdefined
+; CHECK-NEXT: %cmp = icmp slt i32 %a, 64
+; CHECK-NEXT: ; LatticeVal for: ' br i1 %cmp, label %chkgt0, label %notinbounds' in BB: '%chklt64' is: overdefined
+; CHECK-NEXT: ; LatticeVal for: ' br i1 %cmp, label %chkgt0, label %notinbounds' in BB: '%chkgt0' is: overdefined
+; CHECK-NEXT: ; LatticeVal for: ' br i1 %cmp, label %chkgt0, label %notinbounds' in BB: '%notinbounds' is: overdefined
+; CHECK-NEXT: br i1 %cmp, label %chkgt0, label %notinbounds
+ %cmp = icmp slt i32 %a, 64
+ br i1 %cmp, label %chkgt0, label %notinbounds
+
+chkgt0:
+; CHECK-LABEL: chkgt0:
+; CHECK-NEXT: ; LatticeVal for: 'i32 %a' is: constantrange<-2147483648, 64>
+; CHECK-NEXT: ; LatticeVal for: ' %cmp1 = icmp sgt i32 %a, 0' in BB: '%chkgt0' is: overdefined
+; CHECK-NEXT: ; LatticeVal for: ' %cmp1 = icmp sgt i32 %a, 0' in BB: '%inbounds' is: constantrange<-1, 0>
+; CHECK-NEXT: %cmp1 = icmp sgt i32 %a, 0
+; CHECK-NEXT: ; LatticeVal for: ' br i1 %cmp1, label %inbounds, label %notinbounds' in BB: '%chkgt0' is: overdefined
+; CHECK-NEXT: ; LatticeVal for: ' br i1 %cmp1, label %inbounds, label %notinbounds' in BB: '%inbounds' is: overdefined
+; CHECK-NEXT: br i1 %cmp1, label %inbounds, label %notinbounds
+ %cmp1 = icmp sgt i32 %a, 0
+ br i1 %cmp1, label %inbounds, label %notinbounds
+
+inbounds:
+; CHECK-LABEL: inbounds:
+; CHECK-NEXT: ; LatticeVal for: 'i32 %a' is: constantrange<1, 64>
+; CHECK-NEXT: ; LatticeVal for: ' ret i32 %a' in BB: '%inbounds' is: overdefined
+; CHECK-NEXT: ret i32 %a
+ ret i32 %a
+
+notinbounds:
+; CHECK-LABEL: notinbounds:
+; CHECK-NEXT: ; LatticeVal for: 'i32 %a' is: constantrange<64, 1>
+; CHECK-NEXT: ; LatticeVal for: ' %sum = add i32 %a, 64' in BB: '%notinbounds' is: constantrange<128, 65>
+; CHECK-NEXT: %sum = add i32 %a, 64
+; CHECK-NEXT: ; LatticeVal for: ' ret i32 %sum' in BB: '%notinbounds' is: overdefined
+; CHECK-NEXT: ret i32 %sum
+ %sum = add i32 %a, 64
+ ret i32 %sum
+}
More information about the llvm-branch-commits
mailing list