[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