[llvm] 0549fbe - [GlobalISel] Synchronize GISelValueTrackingAnalysis behavior across Legacy and New PM paths (#207013)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 20 06:54:18 PDT 2026
Author: Daemon
Date: 2026-07-20T15:54:12+02:00
New Revision: 0549fbe55ba4f9fc172591a61b04700d4ff5045e
URL: https://github.com/llvm/llvm-project/commit/0549fbe55ba4f9fc172591a61b04700d4ff5045e
DIFF: https://github.com/llvm/llvm-project/commit/0549fbe55ba4f9fc172591a61b04700d4ff5045e.diff
LOG: [GlobalISel] Synchronize GISelValueTrackingAnalysis behavior across Legacy and New PM paths (#207013)
This patch aligns the New Pass Manager (NPM) implementation of
`GISelValueTrackingAnalysis::run()` with the Legacy pass manager by
dynamically adjusting the maximum search depth based on the optimization
level. This eliminates behavioral discrepancies between the two code
paths, reducing migration risks and ensuring consistent compilation
performance and code generation quality across both code paths.
Added:
llvm/test/CodeGen/AArch64/GlobalISel/knownbits-maxdepth.mir
Modified:
llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp b/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
index 6045e39430834..f7b2089f9fdab 100644
--- a/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
@@ -2637,10 +2637,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
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/knownbits-maxdepth.mir b/llvm/test/CodeGen/AArch64/GlobalISel/knownbits-maxdepth.mir
new file mode 100644
index 0000000000000..57eb5543e601e
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/knownbits-maxdepth.mir
@@ -0,0 +1,60 @@
+# NOTE: Assertions have been autogenerated by utils/update_givaluetracking_test_checks.py UTC_ARGS: --version 6
+# RUN: llc -mtriple aarch64 -passes="print<gisel-value-tracking>" %s -filetype=null 2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT
+# RUN: llc -mtriple aarch64 -O0 -passes="print<gisel-value-tracking>" %s -filetype=null 2>&1 | FileCheck %s --check-prefix=CHECK-O0
+
+---
+name: test_depth_within_limit
+body: |
+ bb.0:
+ ; CHECK-DEFAULT-LABEL: name: @test_depth_within_limit
+ ; CHECK-DEFAULT-NEXT: %0:_ KnownBits:00000011 SignBits:6
+ ; CHECK-DEFAULT-NEXT: %1:_ KnownBits:00000001 SignBits:7
+ ; CHECK-DEFAULT-NEXT: %2:_ KnownBits:00000110 SignBits:5
+ ; CHECK-DEFAULT-NEXT: %3:_ KnownBits:00000000 SignBits:8
+ ; CHECK-DEFAULT-NEXT: %4:_ KnownBits:00000000 SignBits:7
+ ; CHECK-DEFAULT-NEXT: %5:_ KnownBits:00000000 SignBits:8
+ ; CHECK-O0-LABEL: name: @test_depth_within_limit
+ ; CHECK-O0-NEXT: %0:_ KnownBits:00000011 SignBits:6
+ ; CHECK-O0-NEXT: %1:_ KnownBits:00000001 SignBits:7
+ ; CHECK-O0-NEXT: %2:_ KnownBits:00000110 SignBits:5
+ ; CHECK-O0-NEXT: %3:_ KnownBits:0000000? SignBits:7
+ ; CHECK-O0-NEXT: %4:_ KnownBits:???????0 SignBits:1
+ ; CHECK-O0-NEXT: %5:_ KnownBits:0000000? SignBits:7
+ %0:_(i8) = G_CONSTANT i8 3
+ %1:_(i8) = G_CONSTANT i8 1
+ %2:_(i8) = G_SHL %0, %1
+ %3:_(i8) = G_AND %2, %1
+ %4:_(i8) = G_SHL %3, %1
+ %5:_(i8) = G_AND %4, %1
+...
+---
+name: test_depth_exceeded
+body: |
+ bb.0:
+ ; CHECK-DEFAULT-LABEL: name: @test_depth_exceeded
+ ; CHECK-DEFAULT-NEXT: %0:_ KnownBits:00000011 SignBits:6
+ ; CHECK-DEFAULT-NEXT: %1:_ KnownBits:00000001 SignBits:7
+ ; CHECK-DEFAULT-NEXT: %2:_ KnownBits:00000110 SignBits:5
+ ; CHECK-DEFAULT-NEXT: %3:_ KnownBits:00001100 SignBits:4
+ ; CHECK-DEFAULT-NEXT: %4:_ KnownBits:00011000 SignBits:3
+ ; CHECK-DEFAULT-NEXT: %5:_ KnownBits:00110000 SignBits:2
+ ; CHECK-DEFAULT-NEXT: %6:_ KnownBits:01100000 SignBits:1
+ ; CHECK-DEFAULT-NEXT: %7:_ KnownBits:???00000 SignBits:1
+ ; CHECK-O0-LABEL: name: @test_depth_exceeded
+ ; CHECK-O0-NEXT: %0:_ KnownBits:00000011 SignBits:6
+ ; CHECK-O0-NEXT: %1:_ KnownBits:00000001 SignBits:7
+ ; CHECK-O0-NEXT: %2:_ KnownBits:00000110 SignBits:5
+ ; CHECK-O0-NEXT: %3:_ KnownBits:???????0 SignBits:4
+ ; CHECK-O0-NEXT: %4:_ KnownBits:???????0 SignBits:1
+ ; CHECK-O0-NEXT: %5:_ KnownBits:???????0 SignBits:1
+ ; CHECK-O0-NEXT: %6:_ KnownBits:???????0 SignBits:1
+ ; CHECK-O0-NEXT: %7:_ KnownBits:???????0 SignBits:1
+ %0:_(i8) = G_CONSTANT i8 3
+ %1:_(i8) = G_CONSTANT i8 1
+ %2:_(i8) = G_SHL %0, %1
+ %3:_(i8) = G_SHL %2, %1
+ %4:_(i8) = G_SHL %3, %1
+ %5:_(i8) = G_SHL %4, %1
+ %6:_(i8) = G_SHL %5, %1
+ %7:_(i8) = G_SHL %6, %1
+...
More information about the llvm-commits
mailing list