[llvm] [GlobalISel] Add G_ABS computeKnownBits, add ComputeKnownBitsCache assertion to computeNumSignBits (PR #154413)

via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 4 23:46:29 PDT 2025


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp,h -- llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h b/llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h
index 01898cd85..17fcb91d7 100644
--- a/llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h
+++ b/llvm/include/llvm/CodeGen/GlobalISel/GISelValueTracking.h
@@ -70,8 +70,7 @@ public:
                                     const APInt &DemandedElts,
                                     unsigned Depth = 0);
 
-  virtual unsigned computeNumSignBitsImpl(Register R,
-                                          const APInt &DemandedElts,
+  virtual unsigned computeNumSignBitsImpl(Register R, const APInt &DemandedElts,
                                           unsigned Depth = 0);
 
   unsigned computeNumSignBits(Register R, const APInt &DemandedElts,
diff --git a/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp b/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
index 525a361c2..7cfb86b5e 100644
--- a/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
@@ -701,8 +701,8 @@ void GISelValueTracking::computeKnownBitsImpl(Register R, KnownBits &Known,
     Register SrcReg = MI.getOperand(1).getReg();
     computeKnownBitsImpl(SrcReg, Known, DemandedElts, Depth + 1);
     Known = Known.abs();
-    Known.Zero.setHighBits(computeNumSignBitsImpl(SrcReg, DemandedElts, Depth + 1) -
-                           1);
+    Known.Zero.setHighBits(
+        computeNumSignBitsImpl(SrcReg, DemandedElts, Depth + 1) - 1);
     break;
   }
   }
@@ -1759,7 +1759,8 @@ unsigned GISelValueTracking::computeNumSignBitsMin(Register Src0, Register Src1,
   unsigned Src1SignBits = computeNumSignBitsImpl(Src1, DemandedElts, Depth);
   if (Src1SignBits == 1)
     return 1;
-  return std::min(computeNumSignBitsImpl(Src0, DemandedElts, Depth), Src1SignBits);
+  return std::min(computeNumSignBitsImpl(Src0, DemandedElts, Depth),
+                  Src1SignBits);
 }
 
 /// Compute the known number of sign bits with attached range metadata in the
@@ -1790,8 +1791,8 @@ static unsigned computeNumSignBitsFromRangeMetadata(const GAnyLoad *Ld,
 }
 
 unsigned GISelValueTracking::computeNumSignBitsImpl(Register R,
-                                                const APInt &DemandedElts,
-                                                unsigned Depth) {
+                                                    const APInt &DemandedElts,
+                                                    unsigned Depth) {
   MachineInstr &MI = *MRI.getVRegDef(R);
   unsigned Opcode = MI.getOpcode();
 
@@ -1907,7 +1908,8 @@ unsigned GISelValueTracking::computeNumSignBitsImpl(Register R,
     // Check if the sign bits of source go down as far as the truncated value.
     unsigned DstTyBits = DstTy.getScalarSizeInBits();
     unsigned NumSrcBits = SrcTy.getScalarSizeInBits();
-    unsigned NumSrcSignBits = computeNumSignBitsImpl(Src, DemandedElts, Depth + 1);
+    unsigned NumSrcSignBits =
+        computeNumSignBitsImpl(Src, DemandedElts, Depth + 1);
     if (NumSrcSignBits > (NumSrcBits - DstTyBits))
       return NumSrcSignBits - (NumSrcBits - DstTyBits);
     break;
@@ -1989,7 +1991,8 @@ unsigned GISelValueTracking::computeNumSignBitsImpl(Register R,
           DemandedElts.extractBits(NumSubVectorElts, I * NumSubVectorElts);
       if (!DemandedSub)
         continue;
-      unsigned Tmp2 = computeNumSignBitsImpl(MO.getReg(), DemandedSub, Depth + 1);
+      unsigned Tmp2 =
+          computeNumSignBitsImpl(MO.getReg(), DemandedSub, Depth + 1);
 
       FirstAnswer = std::min(FirstAnswer, Tmp2);
 
@@ -2015,8 +2018,8 @@ unsigned GISelValueTracking::computeNumSignBitsImpl(Register R,
     if (FirstAnswer == 1)
       break;
     if (!!DemandedRHS) {
-      unsigned Tmp2 =
-          computeNumSignBitsImpl(MI.getOperand(2).getReg(), DemandedRHS, Depth + 1);
+      unsigned Tmp2 = computeNumSignBitsImpl(MI.getOperand(2).getReg(),
+                                             DemandedRHS, Depth + 1);
       FirstAnswer = std::min(FirstAnswer, Tmp2);
     }
     break;
@@ -2024,7 +2027,8 @@ unsigned GISelValueTracking::computeNumSignBitsImpl(Register R,
   case TargetOpcode::G_SPLAT_VECTOR: {
     // Check if the sign bits of source go down as far as the truncated value.
     Register Src = MI.getOperand(1).getReg();
-    unsigned NumSrcSignBits = computeNumSignBitsImpl(Src, APInt(1, 1), Depth + 1);
+    unsigned NumSrcSignBits =
+        computeNumSignBitsImpl(Src, APInt(1, 1), Depth + 1);
     unsigned NumSrcBits = MRI.getType(Src).getSizeInBits();
     if (NumSrcSignBits > (NumSrcBits - TyBits))
       return NumSrcSignBits - (NumSrcBits - TyBits);
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
index c7c1ebe9c..bbaf9172e 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
@@ -6113,13 +6113,16 @@ unsigned AMDGPUTargetLowering::computeNumSignBitsForTargetInstr(
   case AMDGPU::G_AMDGPU_SMED3:
   case AMDGPU::G_AMDGPU_UMED3: {
     auto [Dst, Src0, Src1, Src2] = MI->getFirst4Regs();
-    unsigned Tmp2 = Analysis.computeNumSignBitsImpl(Src2, DemandedElts, Depth + 1);
+    unsigned Tmp2 =
+        Analysis.computeNumSignBitsImpl(Src2, DemandedElts, Depth + 1);
     if (Tmp2 == 1)
       return 1;
-    unsigned Tmp1 = Analysis.computeNumSignBitsImpl(Src1, DemandedElts, Depth + 1);
+    unsigned Tmp1 =
+        Analysis.computeNumSignBitsImpl(Src1, DemandedElts, Depth + 1);
     if (Tmp1 == 1)
       return 1;
-    unsigned Tmp0 = Analysis.computeNumSignBitsImpl(Src0, DemandedElts, Depth + 1);
+    unsigned Tmp0 =
+        Analysis.computeNumSignBitsImpl(Src0, DemandedElts, Depth + 1);
     if (Tmp0 == 1)
       return 1;
     return std::min({Tmp0, Tmp1, Tmp2});

``````````

</details>


https://github.com/llvm/llvm-project/pull/154413


More information about the llvm-commits mailing list