[llvm] [InstCombine] Simplify select if it combinated and/or/xor (PR #73362)

via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 28 18:35:21 PDT 2024


goldsteinn wrote:

> > @goldsteinn thanks for review. I wish I could take TODOs.
> 
> You can, I think the way to do this is actually to handle this case in `computeKnownBitsFromCmp`.
> 
> We currently have:
> 
> ```
>  else if (match(LHS, m_And(m_V, m_APInt(Mask))) &&
>                match(RHS, m_APInt(C))) {
>       // For one bits in Mask, we can propagate bits from C to V.
>       Known.Zero |= ~*C & *Mask;
>       Known.One |= *C & *Mask;
>       // assume(V | Mask = C)
>     }
> ```
> 
> But we could (and should) also have:
> 
> ```
>  else if (match(LHS, m_c_And(m_V, m_Value()) &&
>                match(RHS, m_APInt(C))) {
>       Known.One |= *C;
>    }
> ```
> 
> Likewise for the `or` case:
> 
> ```
>  else if (match(LHS, m_c_Or(m_V, m_Value()) &&
>                match(RHS, m_APInt(C))) {
>       Known.Zero |= ~*C;
>    }
> ```
> 
> The only case that requires special logic is `xor` where we can't actually deduce any bits, but we can deduce non-common bits.
> 
> That case I think you could handle here in a future patch.
> 
> Let me know if you are going to pursue a patch in `computeKnownBitsFromCmp`.
> 
> Edit: Maybe wait a bit, I looked at this a bit and it creates some bugs related to #87015, so until that is resolved, not much use.

Think its a non-issue actually. @ParkHanbum do you want to make a patch for this?

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


More information about the llvm-commits mailing list