[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