mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-06 05:33:28 +00:00
Add some (disabled code) to print out negative strides.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126102 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
477a98824a
commit
408b534e43
@ -31,6 +31,11 @@
|
|||||||
// void foo(_Complex float *P)
|
// void foo(_Complex float *P)
|
||||||
// for (i) { __real__(*P) = 0; __imag__(*P) = 0; }
|
// for (i) { __real__(*P) = 0; __imag__(*P) = 0; }
|
||||||
//
|
//
|
||||||
|
// We should enhance this to handle negative strides through memory.
|
||||||
|
// Alternatively (and perhaps better) we could rely on an earlier pass to force
|
||||||
|
// forward iteration through memory, which is generally better for cache
|
||||||
|
// behavior. Negative strides *do* happen for memset/memcpy loops.
|
||||||
|
//
|
||||||
// This could recognize common matrix multiplies and dot product idioms and
|
// This could recognize common matrix multiplies and dot product idioms and
|
||||||
// replace them with calls to BLAS (if linked in??).
|
// replace them with calls to BLAS (if linked in??).
|
||||||
//
|
//
|
||||||
@ -272,10 +277,17 @@ bool LoopIdiomRecognize::processLoopStore(StoreInst *SI, const SCEV *BECount) {
|
|||||||
unsigned StoreSize = (unsigned)SizeInBits >> 3;
|
unsigned StoreSize = (unsigned)SizeInBits >> 3;
|
||||||
const SCEVConstant *Stride = dyn_cast<SCEVConstant>(StoreEv->getOperand(1));
|
const SCEVConstant *Stride = dyn_cast<SCEVConstant>(StoreEv->getOperand(1));
|
||||||
|
|
||||||
// TODO: Could also handle negative stride here someday, that will require the
|
if (Stride == 0 || StoreSize != Stride->getValue()->getValue()) {
|
||||||
// validity check in mayLoopAccessLocation to be updated though.
|
// TODO: Could also handle negative stride here someday, that will require
|
||||||
if (Stride == 0 || StoreSize != Stride->getValue()->getValue())
|
// the validity check in mayLoopAccessLocation to be updated though.
|
||||||
|
// Enable this to print exact negative strides.
|
||||||
|
if (0 && StoreSize == -Stride->getValue()->getValue()) {
|
||||||
|
dbgs() << "NEGATIVE STRIDE: " << *SI << "\n";
|
||||||
|
dbgs() << "BB: " << *SI->getParent();
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// See if we can optimize just this store in isolation.
|
// See if we can optimize just this store in isolation.
|
||||||
if (processLoopStridedStore(StorePtr, StoreSize, SI->getAlignment(),
|
if (processLoopStridedStore(StorePtr, StoreSize, SI->getAlignment(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user