mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
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:
parent
2cf5425d0a
commit
dfacdd04cd
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user