[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