[all-commits] [llvm/llvm-project] 2ff357: [KnownBits] Use min non-zero divisor and quotient ...

Joel Walker via All-commits all-commits at lists.llvm.org
Tue Jul 14 08:40:27 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 2ff357b2e1b9aed337a50478af2469fd9fd7442d
      https://github.com/llvm/llvm-project/commit/2ff357b2e1b9aed337a50478af2469fd9fd7442d
  Author: Joel Walker <theagingboy05 at gmail.com>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M llvm/lib/Support/KnownBits.cpp
    M llvm/test/CodeGen/AArch64/GlobalISel/knownbits-sdiv.mir
    M llvm/test/CodeGen/AArch64/GlobalISel/knownbits-udiv.mir
    M llvm/test/CodeGen/X86/udiv_fix.ll
    M llvm/test/CodeGen/X86/udiv_fix_sat.ll
    M llvm/test/Transforms/InstCombine/known-bits.ll

  Log Message:
  -----------
  [KnownBits] Use min non-zero divisor and quotient lower bound in udiv (#209360)

`KnownBits::udiv` was discarding information in two cases. This tightens
both:

- A zero divisor is UB, so when the divisor's known bits permit zero,
use the smallest non-zero value as the minimum divisor instead of
bailing out.
- Compute a lower bound on the quotient (`MinNum / MaxDenom`) and keep
the leading bits it shares with the upper bound, the same way
`ConstantRange::toKnownBits` does.

Both follow from the quotient being monotonic in each operand, with all
four operand bounds attainable.

`KnownBitsTest.BinaryExhaustive` passes with no unsound results, and an
exhaustive width-4 check drops suboptimal outputs from 1790 to 864.
Regenerated the affected MIR and InstCombine tests; two X86 fixed-point
tests lose now-redundant instructions.

Assisted by Claude (Anthropic).



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list