[PATCH] D113035: [InstCombine] enhance vector bitwise select matching
Sanjay Patel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 9 04:58:31 PST 2021
spatel added inline comments.
================
Comment at: llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp:2372
+ Type *SelTy = A->getType();
+ if (auto *VecTy = dyn_cast<FixedVectorType>(Cond->getType())) {
+ unsigned Elts = VecTy->getNumElements();
----------------
dmgreen wrote:
> spatel wrote:
> > lebedev.ri wrote:
> > > What happens for scalable vectors? I'm not seeing any check against that.
> > I couldn't come up with a way to get in here with a scalable vector because of the 'not' instruction requirement. But let me know if you see a way to do that (ping @dmgreen too).
> >
> > I can add an assert for scalable vector type if I got that right.
> Do you mean a Not with scalable vectors? Or some more complicated combination of instructions?
>
> There doesn't look to be a way to generate the SVE NOT instruction at least, from the tests we have. I think it would need to be from a `xor x, (shuffle (insert poison, -1, 0), zeroinit)` if there was one, but I've not tried to see if m_Not detects that or not.
> Like here for a predicate vector, the same thing would apply for larger vector types:
> https://github.com/llvm/llvm-project/blob/32a4a883f647c314a42ebd572e36aaf60ffe9889/llvm/test/Transforms/InstCombine/select.ll#L102
>
> If that doesn't work already, an assert sounds useful in case someone makes that work in the future.
Yes, I didn't see a way to specify/match the -1 constant in a 'not' of a scalable vector.
But looking around at similar code, I think we can future-proof this block for a scalable-vector-aware m_Not. I'll update it.
(Although there's another cast in code around here that assumes a FixedVectorType.)
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D113035/new/
https://reviews.llvm.org/D113035
More information about the llvm-commits
mailing list