[llvm] 4975ad9 - [GlobalISel][KnownBits] Use KnownBits::urem for G_UREM (#193455)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 30 05:23:57 PDT 2026
Author: Tejas Gaikwad
Date: 2026-04-30T12:23:51Z
New Revision: 4975ad9ae2e26d89dd90ff06916f108756ad190d
URL: https://github.com/llvm/llvm-project/commit/4975ad9ae2e26d89dd90ff06916f108756ad190d
DIFF: https://github.com/llvm/llvm-project/commit/4975ad9ae2e26d89dd90ff06916f108756ad190d.diff
LOG: [GlobalISel][KnownBits] Use KnownBits::urem for G_UREM (#193455)
This updates the implementation of G_UREM in GlobalISel to use
KnownBits::urem instead of reimplementing the logic.
Supersedes #189087.
Added:
llvm/test/CodeGen/AArch64/GlobalISel/knownbits-urem.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 f335e6c14c689..5fcc84d0d76a1 100644
--- a/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
@@ -309,6 +309,18 @@ void GISelValueTracking::computeKnownBitsImpl(Register R, KnownBits &Known,
Known.Zero.setHighBits(MaxValue.countl_zero());
break;
}
+ case TargetOpcode::G_UREM: {
+ KnownBits LHSKnown(Known.getBitWidth());
+ KnownBits RHSKnown(Known.getBitWidth());
+
+ computeKnownBitsImpl(MI.getOperand(1).getReg(), LHSKnown, DemandedElts,
+ Depth + 1);
+ computeKnownBitsImpl(MI.getOperand(2).getReg(), RHSKnown, DemandedElts,
+ Depth + 1);
+
+ Known = KnownBits::urem(LHSKnown, RHSKnown);
+ break;
+ }
case TargetOpcode::G_CONSTANT: {
Known = KnownBits::makeConstant(MI.getOperand(1).getCImm()->getValue());
break;
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/knownbits-urem.mir b/llvm/test/CodeGen/AArch64/GlobalISel/knownbits-urem.mir
new file mode 100644
index 0000000000000..c6146d4d1b271
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/knownbits-urem.mir
@@ -0,0 +1,101 @@
+# RUN: llc -mtriple aarch64 -passes="print<gisel-value-tracking>" %s -filetype=null 2>&1 | FileCheck %s
+
+# CHECK-LABEL: name: @urem_pow2
+# CHECK-NEXT: %0:_ KnownBits:???????????????????????????????? SignBits:1
+# CHECK-NEXT: %1:_ KnownBits:00000000000000000000000000001000 SignBits:28
+# CHECK-NEXT: %2:_ KnownBits:00000000000000000000000000000??? SignBits:29
+
+name: urem_pow2
+body: |
+ bb.1:
+ liveins: $w0
+
+ %0:_(s32) = COPY $w0
+ %1:_(s32) = G_CONSTANT i32 8
+ %2:_(s32) = G_UREM %0, %1
+ $w0 = COPY %2(s32)
+ RET_ReallyLR implicit $w0
+...
+
+# CHECK-LABEL: name: @urem_non_pow2
+# CHECK-NEXT: %0:_ KnownBits:???????????????????????????????? SignBits:1
+# CHECK-NEXT: %1:_ KnownBits:00000000000000000000000000001010 SignBits:28
+# CHECK-NEXT: %2:_ KnownBits:0000000000000000000000000000???? SignBits:28
+
+name: urem_non_pow2
+body: |
+ bb.1:
+ liveins: $w0
+
+ %0:_(s32) = COPY $w0
+ %1:_(s32) = G_CONSTANT i32 10
+ %2:_(s32) = G_UREM %0, %1
+ $w0 = COPY %2(s32)
+ RET_ReallyLR implicit $w0
+...
+
+# CHECK-LABEL: name: @urem
+# CHECK-NEXT: %0:_ KnownBits:???????????????????????????????? SignBits:1
+# CHECK-NEXT: %1:_ KnownBits:???????????????????????????????? SignBits:1
+# CHECK-NEXT: %2:_ KnownBits:???????????????????????????????? SignBits:1
+
+name: urem
+body: |
+ bb.1:
+ liveins: $w0, $w1
+
+ %0:_(s32) = COPY $w0
+ %1:_(s32) = COPY $w1
+ %2:_(s32) = G_UREM %0, %1
+ $w0 = COPY %2(s32)
+ RET_ReallyLR implicit $w0
+...
+
+# CHECK-LABEL: name: @urem_implicit_def
+# CHECK-NEXT: %0:_ KnownBits:???????????????????????????????? SignBits:1
+# CHECK-NEXT: %1:_ KnownBits:00000000000000000000000000001000 SignBits:28
+# CHECK-NEXT: %2:_ KnownBits:00000000000000000000000000000??? SignBits:29
+
+name: urem_implicit_def
+body: |
+ bb.1:
+ liveins: $w0
+
+ %0:_(s32) = G_IMPLICIT_DEF
+ %1:_(s32) = G_CONSTANT i32 8
+ %2:_(s32) = G_UREM %0, %1
+ $w0 = COPY %2(s32)
+ RET_ReallyLR implicit $w0
+...
+
+# CHECK-LABEL: name: @urem_both_implicit_def
+# CHECK-NEXT: %0:_ KnownBits:???????????????????????????????? SignBits:1
+# CHECK-NEXT: %1:_ KnownBits:???????????????????????????????? SignBits:1
+# CHECK-NEXT: %2:_ KnownBits:???????????????????????????????? SignBits:1
+
+name: urem_both_implicit_def
+body: |
+ bb.1:
+
+ %0:_(s32) = G_IMPLICIT_DEF
+ %1:_(s32) = G_IMPLICIT_DEF
+ %2:_(s32) = G_UREM %0, %1
+ $w0 = COPY %2(s32)
+ RET_ReallyLR implicit $w0
+...
+
+# CHECK-LABEL: name: @urem_const_const
+# CHECK-NEXT: %0:_ KnownBits:00000000000000000000000000001010 SignBits:28
+# CHECK-NEXT: %1:_ KnownBits:00000000000000000000000000000011 SignBits:30
+# CHECK-NEXT: %2:_ KnownBits:000000000000000000000000000000?? SignBits:30
+
+name: urem_const_const
+body: |
+ bb.1:
+
+ %0:_(s32) = G_CONSTANT i32 10
+ %1:_(s32) = G_CONSTANT i32 3
+ %2:_(s32) = G_UREM %0, %1
+ $w0 = COPY %2(s32)
+ RET_ReallyLR implicit $w0
+...
More information about the llvm-commits
mailing list