[llvm] [InstCombine] Fold `ctpop(X) eq/ne 1` if X is non-zero (PR #67268)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 25 13:19:22 PDT 2023


https://github.com/nikic commented:

This fold goes against the usual direction in IR, and in particular conflicts with this generic  fold: https://github.com/llvm/llvm-project/blob/bb764eccf8053244d64270df29c2e0bd3606f6c0/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp#L6207-L6210 This is risky and can easily lead to infinite loops. I think we won't get one right now because KnownBits for ctpop is a bit weak (https://github.com/llvm/llvm-project/blob/d3505c28a770fabd77d7483afbca383d453bef02/llvm/lib/Analysis/ValueTracking.cpp#L1560), but if it was later strengthened and e.g. inferred KnownBits `...0?1` then we could run into an infinite compile loop at that point.

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


More information about the llvm-commits mailing list