[llvm] [GlobalISel] Synchronize GISelValueTrackingAnalysis behavior across Legacy and New PM paths (PR #207013)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 9 06:11:37 PDT 2026
https://github.com/daemonpilot updated https://github.com/llvm/llvm-project/pull/207013
>From cd8c71ab6bbfbf5dfbd9afdea7890c6b3c34e232 Mon Sep 17 00:00:00 2001
From: daemonpilot <daemonpilot at hotmail.com>
Date: Wed, 1 Jul 2026 23:30:17 +0800
Subject: [PATCH 1/2] [GlobalISel] Synchronize GISelValueTrackingAnalysis
behavior across Legacy and New PM paths
---
llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp b/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
index 4d4f0bc3a190a..def99f0d00e2f 100644
--- a/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
@@ -2585,10 +2585,12 @@ GISelValueTracking &GISelValueTrackingAnalysisLegacy::get(MachineFunction &MF) {
AnalysisKey GISelValueTrackingAnalysis::Key;
-GISelValueTracking
+GISelValueTrackingAnalysis::Result
GISelValueTrackingAnalysis::run(MachineFunction &MF,
MachineFunctionAnalysisManager &MFAM) {
- return Result(MF);
+ unsigned MaxDepth =
+ MF.getTarget().getOptLevel() == CodeGenOptLevel::None ? 2 : 6;
+ return Result(MF, MaxDepth);
}
PreservedAnalyses
>From 3bd8082aee02fcada0edd8ce4dbc333e74291336 Mon Sep 17 00:00:00 2001
From: daemonpilot <daemonpilot at hotmail.com>
Date: Thu, 9 Jul 2026 21:11:15 +0800
Subject: [PATCH 2/2] [GlobalISel] Add test for GISelValueTracking depth
consistency across pass managers
---
.../CodeGen/GlobalISel/GISelValueTracking.h | 1 -
.../CodeGen/GlobalISel/KnownBitsTest.cpp | 24 +++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h b/llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h
index 722a45eeb07e5..0ec0483b60e74 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h
@@ -156,7 +156,6 @@ class LLVM_ABI GISelValueTracking : public GISelChangeObserver {
void changingInstr(MachineInstr &MI) override {}
void changedInstr(MachineInstr &MI) override {}
-protected:
unsigned getMaxDepth() const { return MaxDepth; }
};
diff --git a/llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp b/llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp
index 8563d7f1f15c9..daf04076be93b 100644
--- a/llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp
+++ b/llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp
@@ -9,6 +9,8 @@
#include "GISelMITest.h"
#include "llvm/CodeGen/GlobalISel/GISelValueTracking.h"
#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
+#include "llvm/CodeGen/MachineFunctionAnalysisManager.h"
+#include "llvm/Support/CodeGen.h"
// Check that we are able to track bits through PHIs
// and get the intersections of everything we know on each operand.
@@ -2150,3 +2152,25 @@ TEST_F(AArch64GISelMITest, TestKnownBitsUADDO) {
EXPECT_EQ(0u, Res.One.getZExtValue());
EXPECT_EQ(31u, Res.Zero.countl_one());
}
+
+TEST_F(AArch64GISelMITest, TestSameOptLevelHasSameDepthAcrossPassManagers) {
+ setUp();
+ if (!TM)
+ GTEST_SKIP();
+
+ for (auto OptLevel :
+ {CodeGenOptLevel::None, CodeGenOptLevel::Less, CodeGenOptLevel::Default,
+ CodeGenOptLevel::Aggressive}) {
+ TM->setOptLevel(OptLevel);
+
+ GISelValueTrackingAnalysisLegacy LegacyAnalysis;
+ GISelValueTracking LegacyValueTracking = LegacyAnalysis.get(*MF);
+
+ MachineFunctionAnalysisManager MFAM;
+ GISelValueTrackingAnalysis Analysis;
+ GISelValueTracking ValueTracking = Analysis.run(*MF, MFAM);
+
+ EXPECT_EQ(LegacyValueTracking.getMaxDepth(), ValueTracking.getMaxDepth())
+ << static_cast<int>(OptLevel);
+ }
+}
\ No newline at end of file
More information about the llvm-commits
mailing list