[LLVMdev] Vector logic regression in r73431

Eli Friedman eli.friedman at gmail.com
Thu Jul 30 09:23:00 PDT 2009


On Thu, Jul 30, 2009 at 5:57 AM, Nicolas Capens<nicolas at capens.net> wrote:
> No, that appears to be something unrelated. I'm currently using revision
> 75246, while that patch only seems to apply to some later revision.

I don't see the connection... anyway, I can't easily help you with an
old revision.

> Anyway, I actually located the real bug. Right at the end of
> InstCombiner::SimplifyDemandedUseBits, there's this piece of code:
>
>  // If the client is only demanding bits that we know, return the known
>  // constant.
>  if ((DemandedMask & (RHSKnownZero|RHSKnownOne)) == DemandedMask) {
>    Constant *C = Context->getConstantInt(RHSKnownOne);
>    if (isa<PointerType>(V->getType()))
>      C = Context->getConstantExprIntToPtr(C, V->getType());
>    return C;
>  }
>  return false;
> }
>
> Note that C is a scalar integer, and so when V is actually a vector the type
> isn't preserved.

Right... my patch fixes that, I think.

> I'm not entirely sure how this function is supposed to work with vectors
> though. DemandedMask, KnownOne and KnownZero are APInt's (scalars) the size
> of an element of the vector. So when, as the comment describes, only known
> bits are demanded, does that apply to just one element of the vector or all?

It applies to all elements of the vector.

-Eli




More information about the llvm-dev mailing list