[llvm-dev] LoopVectorizer with ifconversion
Jonas Paulsson via llvm-dev
llvm-dev at lists.llvm.org
Mon Mar 20 01:59:34 PDT 2017
On 2017-03-17 23:23, Renato Golin wrote:
> On 17 March 2017 at 16:34, Hal Finkel <hfinkel at anl.gov> wrote:
>> In general, this is true everywhere. In a large vectorized loop, this cost
>> may well be worthwhile. The idea is that the cost model should account for
>> all of these costs. If it doesn't properly, we should fix that.
> Isn't this only worth when the SIMD instructions can be
> conditionalised per lane? I believe AVX512 and SVE have such
> abilities, but not NEON or SSE.
>
> Does SystemZ support conditionalisation in SIMD?
>
No, z13 has no masked vector operations. I think this is checked with
the isLegalMasked...() hooks. Is this implicitly assumed in
LoopVectorizers if-conversion algorithm somewhere? I see the scalar
costs are adjusted with 'ScalarCost /= getReciprocalPredBlockProb()'. It
seems that this should be done for all blocks that remain after
vectorization?
If not doing the simple thing and disabling store with predication
vectorization, I agree with Hal that this could be worth modeling as an
extra cost to not reject some large loop with just one conditional
store, or so.
I think this extra cost should be added to the compare, but I am not
sure if it would be better to instead add it to the branch, because
there are also cases of e.g. (AND (COMPARE, COMPARE)). Adding a cost to
a vectorized branch instead could be done by assuming that a conditional
branch would have to be set up for each branch after the vector compare.
Does the loop vectorizer know which blocks that need predication in the
scalar loop will remain after vectorization? SystemZ could check such
blocks by looking for stores, but that seems like extra work.
thanks,
Jonas
More information about the llvm-dev
mailing list