[llvm] [SelectionDAG] Optimize 32-bit udiv with 33-bit magic constants on 64-bit targets (PR #181288)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 12 21:25:36 PST 2026


================
@@ -6864,6 +6891,39 @@ SDValue TargetLowering::BuildUDIV(SDNode *N, SelectionDAG &DAG,
     PostShift = PostShifts[0];
   }
 
+  if (Use33BitOptimization) {
+    // x is i32, MagicFactor is pre-shifted i64 constant
+    // Compute: (i64(x) * MagicFactor) >> 64
+    SDValue X64 = DAG.getNode(ISD::ZERO_EXTEND, dl, WideVT64, N0);
+
+    // Get the pre-shifted constant (it's already in MagicFactor as i64)
+    SDValue MagicFactor64 = isa<ConstantSDNode>(MagicFactor)
----------------
topperc wrote:

if you're only handling scalars `isa<ConstantSDNode>(MagicFactor)` is always true.

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


More information about the llvm-commits mailing list