[llvm] [GlobalISel] Synchronize GISelValueTrackingAnalysis behavior across Legacy and New PM paths (PR #207013)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 13 06:29:19 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 e3b906481eb3f7f3d48482606c74ca7b4a773bfb 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 lit test for GISelValueTracking MaxDepth
 behavior in different optimization levels

---
 .../AArch64/GlobalISel/knownbits-maxdepth.mir | 91 +++++++++++++++++++
 1 file changed, 91 insertions(+)
 create mode 100644 llvm/test/CodeGen/AArch64/GlobalISel/knownbits-maxdepth.mir

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..eda5df96afb81
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/knownbits-maxdepth.mir
@@ -0,0 +1,91 @@
+# 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
+...
+---
+name: test_depth_exceeded_with_vector
+body: |
+  bb.0:
+  ; CHECK-DEFAULT-LABEL: name: @test_depth_exceeded_with_vector
+  ; CHECK-DEFAULT-NEXT: %0:_ KnownBits:00001111 SignBits:4
+  ; CHECK-DEFAULT-NEXT: %1:_ KnownBits:00001111 SignBits:4
+  ; CHECK-DEFAULT-NEXT: %2:_ KnownBits:00000000 SignBits:8
+  ; CHECK-DEFAULT-NEXT: %3:_ KnownBits:00000000 SignBits:8
+  ; CHECK-DEFAULT-NEXT: %4:_ KnownBits:00000000 SignBits:8
+  ; CHECK-DEFAULT-NEXT: %5:_ KnownBits:00000000 SignBits:8
+  ; CHECK-DEFAULT-NEXT: %6:_ KnownBits:00000000 SignBits:8
+  ; CHECK-DEFAULT-NEXT: %7:_ KnownBits:00000000 SignBits:8
+  ; CHECK-O0-LABEL: name: @test_depth_exceeded_with_vector
+  ; CHECK-O0-NEXT: %0:_ KnownBits:00001111 SignBits:4
+  ; CHECK-O0-NEXT: %1:_ KnownBits:00001111 SignBits:4
+  ; CHECK-O0-NEXT: %2:_ KnownBits:???????? SignBits:1
+  ; CHECK-O0-NEXT: %3:_ KnownBits:???????? SignBits:1
+  ; CHECK-O0-NEXT: %4:_ KnownBits:???????? SignBits:1
+  ; CHECK-O0-NEXT: %5:_ KnownBits:???????? SignBits:1
+  ; CHECK-O0-NEXT: %6:_ KnownBits:???????? SignBits:1
+  ; CHECK-O0-NEXT: %7:_ KnownBits:???????? SignBits:1
+    %0:_(i8) = G_CONSTANT i8 15
+    %1:_(<2 x i8>) = G_BUILD_VECTOR %0, %0
+    %2:_(<2 x i8>) = G_LSHR %1, %1
+    %3:_(<2 x i8>) = G_LSHR %2, %1
+    %4:_(<2 x i8>) = G_LSHR %3, %1
+    %5:_(<2 x i8>) = G_LSHR %4, %1
+    %6:_(<2 x i8>) = G_LSHR %5, %1
+    %7:_(<2 x i8>) = G_LSHR %6, %1
+...



More information about the llvm-commits mailing list