[LLVMdev] [LoopVectorizer] Missed vectorization opportunities caused by sext/zext operations
Sanjoy Das
sanjoy at playingwithpointers.com
Tue May 5 18:59:41 PDT 2015
For
void test0(unsigned short a, unsigned short * in, unsigned short * out) {
for (unsigned short w = 1; w < a - 1; w++) //this will never overflow
out[w] = in[w+7] * 2;
}
I think it will be sufficient to add a couple of new cases to
ScalarEvolution::HowManyLessThans --
zext(A) ult zext(B) == A ult B
sext(A) slt sext(B) == A slt B
Currently it bails out if it sees a non-add recurrence on the LHS of
the ult/slt.
You could also teach ScalarEvolution::isImpliedCondOperands the
following:
zext(A) ult zext(B) <=> A ult B
sext(A) slt sext(B) <=> A slt B
to get more aggressive promotion from ext{A,+,B} to {ext A,+,ext B}.
I'll be happy to review these patches.
-- Sanjoy
More information about the llvm-dev
mailing list