Hi All,
I was wondering if you could help me with some pointers about the LoopDataPrefetch
pass in LLVM. I am working on AArch64
.
What I did
I found out that the pass is enabled by default, but to run we need to set: --prefetch-distance=K
, with K>=1
. I see now the pass running, but it stops here:
const SCEV *LSCEV = SE->getSCEV(PtrValue);
const SCEVAddRecExpr *LSCEVAddRec = dyn_cast<SCEVAddRecExpr>(LSCEV);
if (!LSCEVAddRec)
continue;
In the above snippet, LSCEVAddRec
is empty.
I dumped out things and:
- The
PtrValue
looks similar to:%101 = bitcast float* %100 to <8 x float>*
- The
LSCEV
variable is similar to:((4 * (({{0,+,128}<%79>,+,1}<%91> * %96) + {0,+,8}<%81> + %95)) + %94)
- The
LSCEV->getType()
isscAddExpr
How to proceed further?
I am trying to add prefetch in the inner-most loop of a nest composed by 5 loops (which is basically implementing a tiled GEMM). Is the loop too complicated to be prefetched? Is there any pointer I can use to understand what the pass is doing?
Thanks to anyone who can point me toward the right direction.
Thanks,
Giuseppe