SLPVectorizer: Speedup isConsecutive by manually checking GEPs with multiple indices.

This brings the compile time of the SLP-Vectorizer to about 2.5% of OPT for my testcase.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186592 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nadav Rotem 2013-07-18 18:20:45 +00:00
parent 2cf5425d0a
commit dfacdd04cd

View File

@ -1006,12 +1006,20 @@ bool BoUpSLP::isConsecutiveAccess(Value *A, Value *B) {
GepB->accumulateConstantOffset(*DL, OffsetB))
return ((OffsetB.getSExtValue() - OffsetA.getSExtValue()) == Sz);
if (GepA->getNumIndices() != GepB->getNumIndices())
return false;
// Try to strip the geps. This makes SCEV faster.
if (GepA->getNumIndices() == 1 && GepB->getNumIndices() == 1) {
PtrA = GepA->getOperand(1);
PtrB = GepB->getOperand(1);
Sz = 1;
// Make sure that all of the indices except for the last are identical.
int LastIdx = GepA->getNumIndices();
for (int i = 0; i < LastIdx - 1; i++) {
if (GepA->getOperand(i+1) != GepB->getOperand(i+1))
return false;
}
PtrA = GepA->getOperand(LastIdx);
PtrB = GepB->getOperand(LastIdx);
Sz = 1;
}
// Check if PtrA is the base and PtrB is a constant offset.