forked from OSchip/llvm-project
[LAA] Use re-written SCEV expressions when computing distances
This removes a redundant stride versioning step (we already do it in getPtrStride, so it has no effect) and uses PSE to get the SCEV expressions for the source and destination (this might have changed when getPtrStride was called). I discovered this through code inspection, and couldn't produce a regression test for it. llvm-svn: 269052
This commit is contained in:
parent
aa1d638800
commit
adf4b739ea
|
@ -1158,20 +1158,15 @@ MemoryDepChecker::isDependent(const MemAccessInfo &A, unsigned AIdx,
|
||||||
BPtr->getType()->getPointerAddressSpace())
|
BPtr->getType()->getPointerAddressSpace())
|
||||||
return Dependence::Unknown;
|
return Dependence::Unknown;
|
||||||
|
|
||||||
const SCEV *AScev = replaceSymbolicStrideSCEV(PSE, Strides, APtr);
|
|
||||||
const SCEV *BScev = replaceSymbolicStrideSCEV(PSE, Strides, BPtr);
|
|
||||||
|
|
||||||
int StrideAPtr = getPtrStride(PSE, APtr, InnermostLoop, Strides, true);
|
int StrideAPtr = getPtrStride(PSE, APtr, InnermostLoop, Strides, true);
|
||||||
int StrideBPtr = getPtrStride(PSE, BPtr, InnermostLoop, Strides, true);
|
int StrideBPtr = getPtrStride(PSE, BPtr, InnermostLoop, Strides, true);
|
||||||
|
|
||||||
const SCEV *Src = AScev;
|
const SCEV *Src = PSE.getSCEV(APtr);
|
||||||
const SCEV *Sink = BScev;
|
const SCEV *Sink = PSE.getSCEV(BPtr);
|
||||||
|
|
||||||
// If the induction step is negative we have to invert source and sink of the
|
// If the induction step is negative we have to invert source and sink of the
|
||||||
// dependence.
|
// dependence.
|
||||||
if (StrideAPtr < 0) {
|
if (StrideAPtr < 0) {
|
||||||
//Src = BScev;
|
|
||||||
//Sink = AScev;
|
|
||||||
std::swap(APtr, BPtr);
|
std::swap(APtr, BPtr);
|
||||||
std::swap(Src, Sink);
|
std::swap(Src, Sink);
|
||||||
std::swap(AIsWrite, BIsWrite);
|
std::swap(AIsWrite, BIsWrite);
|
||||||
|
|
Loading…
Reference in New Issue