[llvm-dev] Loop invariant values and scalarization overhead
Jonas Paulsson via llvm-dev
llvm-dev at lists.llvm.org
Thu Apr 13 04:09:57 PDT 2017
Recently we have had some discussion about the scalarization overhead
and loop invariant values. Before I propose a patch for this I would
like to know if this is needed and wanted right now.
Basically, getOperandsScalarizationOverhead() could be improved to check
for a loop invariant value, just like it checks for a constant.
In order to do this, I imagine that the Loop* pointer should be passed
to that function, so that
bool IsLoopInvariant = (L != nullptr && !L->contains(A));
Just like a constant, this value would never need to be extracted from a
This would involve passing the Loop* pointer to many of the TTI cost
functions, it seems.
As a good side effect of this is that some cost functions could become
loop aware. For instance, on SystemZ a vector permute can be done with a
constant mask, which cost is 0 if inside a loop, since it would be
hoisted out of the loop. If not in a loop, that instruction should
probably also be included in the cost.
Any other related issues?
I don't know if this would mean any improvements right now on
benchmarks, but if there is a general agreement that this should be
done, I would be happy to do so.
More information about the llvm-dev