[llvm-dev] LoopVectorizer: shufflevectors
Jonas Paulsson via llvm-dev
llvm-dev at lists.llvm.org
Tue Sep 4 09:34:54 PDT 2018
Hi Renato,
> It's probably a lot simpler to improve the SystemZ model to "know"
> have the same arch flags / cost model completeness as the other
> targets.
I thought they were - anything particular in mind?
>
> The transformations done by the vectoriser are target-agnostic, but
> they still ask the targets if certain patterns are possible and
> profitable before doing so.
I have a patch for the LoopVectorizer that makes it recognize this
particular case of a load interleave group being only used by a store
interleave group. I then pass this flag to
TTI.getInterleavedMemoryOpCost(), so that the target can return an
accurate cost. During my experiments on SystemZ I added the cost of
shuffling the vector(s) only on the load, while then the store group did
not get that cost at all.
This then made many more cases of interleaving happen (~450 cases on
spec IIRC). Only problem was... the SystemZ backend could not handle
those shuffles as well in all the cases. To me that looked like
something to be fixed on the I/R level, and after discussions with
Sanjay I got the impression that this was the case...
To me, this looks like something the LoopVectorizer is neglecting and
should be combining. I suppose with my patch for the Load -> Store
groups, I could add also the handling of recomputed indices so that the
load group produces a vector that fits the store group directly. But if
I understand you correctly, even this is not so wise? And if so, then
indeed improving the SystemZ DAGCombiner is the only alternative left, I
guess...
> But in a target-agnostic compiler you need to "emulate" that using the three-step above: target info, cost model, ISel patterns.
But having the cost functions available is not enough to drive a later
I/R pass to optimize the generated vector code? I mean if the target
indicated which shuffles were expensive, that could then easily be avoided.
Thanks,
Jonas
More information about the llvm-dev
mailing list