[llvm] [GlobalISel] add KnownBits tracking for G_UMULH and G_SMULH (PR #158445)

Pragyansh Chaturvedi via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 13 15:15:19 PDT 2025


https://github.com/r41k0u created https://github.com/llvm/llvm-project/pull/158445

The code is taken from `SelectionDAG::computeKnownBits`.
This ticks off `MULHU` and `MULHS` from https://github.com/llvm/llvm-project/issues/150515

>From 3574456e98da8b83b2da95e5cbac49d3c3e915ee Mon Sep 17 00:00:00 2001
From: Pragyansh Chaturvedi <pragyanshchaturvedi18 at gmail.com>
Date: Sat, 13 Sep 2025 22:04:51 +0000
Subject: [PATCH] [GlobalISel] add KnownBits tracking for G_UMULH and G_SMULH

---
 .../CodeGen/GlobalISel/GISelValueTracking.cpp    | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp b/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
index 0cf44e02254de..1b8d192e53fcd 100644
--- a/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp
@@ -366,6 +366,22 @@ void GISelValueTracking::computeKnownBitsImpl(Register R, KnownBits &Known,
     Known = KnownBits::mul(Known, Known2);
     break;
   }
+  case TargetOpcode::G_UMULH: {
+    computeKnownBitsImpl(MI.getOperand(2).getReg(), Known, DemandedElts,
+                         Depth + 1);
+    computeKnownBitsImpl(MI.getOperand(1).getReg(), Known2, DemandedElts,
+                         Depth + 1);
+    Known = KnownBits::mulhu(Known, Known2);
+    break;
+  }
+  case TargetOpcode::G_SMULH: {
+    computeKnownBitsImpl(MI.getOperand(2).getReg(), Known, DemandedElts,
+                         Depth + 1);
+    computeKnownBitsImpl(MI.getOperand(1).getReg(), Known2, DemandedElts,
+                         Depth + 1);
+    Known = KnownBits::mulhs(Known, Known2);
+    break;
+  }
   case TargetOpcode::G_SELECT: {
     computeKnownBitsMin(MI.getOperand(2).getReg(), MI.getOperand(3).getReg(),
                         Known, DemandedElts, Depth + 1);



More information about the llvm-commits mailing list