[clang] [llvm] [InstCombine] Infer disjoint flag on Or instructions. (PR #72912)
Nikita Popov via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 30 05:32:18 PST 2023
nikic wrote:
> Do we do that for other flags already? I based this off Add/Sub wrap flags.
Add/Sub are not considered roots for demanded bits simplification, so we can't (reliably) perform this in there. `or` is a simplification root.
> Are the KnownBits in SimplifyDemandedBit usable? We have this code
>
> ```
> if (SimplifyDemandedBits(I, 1, DemandedMask, RHSKnown, Depth + 1) ||
> SimplifyDemandedBits(I, 0, DemandedMask & ~RHSKnown.One, LHSKnown,
> Depth + 1)) {
> ```
>
> @nikic Can we trust the known bits for the LHS if we didn't demanded them due to known 1s on the right hand side?
Good question. I don't think there is any good reason why we would return incorrect KnownBits for non-demanded bits. I've run some tests to verify that we don't do that currently and updated the documentation to guarantee this (https://github.com/llvm/llvm-project/commit/2031e7226cc5318c547c6d3f62ac62d369d0e723).
https://github.com/llvm/llvm-project/pull/72912
More information about the cfe-commits
mailing list