[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