[llvm-dev] Iteration distance failed in DependenceAnalysis C++ API
Shuo Wang via llvm-dev
llvm-dev at lists.llvm.org
Sat Mar 19 01:16:32 PDT 2016
Hi LLVM-ers,
(1) I tried to use the following command line to get the iteration distance of a loop-carried dependence of a simple program :
command line: opt -basicaa -da -analyze dis_test.ll
program: for ( int i=0; j < n; ++i ) {
b[i] = b[i-2] + 3;
}
results: da analyze — none!
da analyze — consistent anti [-2] (This is what I expected!!)
da analyze — none!
(2) However, when I tried to use the C++ API to do the same thing, the distance result is null.
My pass:
class IterationDistance : public DependenceAnalysis {
...
void getAnalysisUsage(AnalysisUsage &AU) const {
AU.setPreservesAll();
AU.addRequired<AliasAnalysis>(); AU.addRequired<LoopInfo>();
AU.addRequired<ScalarEvolution>();
AU.addRequired<DependenceAnalysis>();
}
...
DependenceAnalysis *DA = &(getAnalysis<DependenceAnalysis>());
auto D = DA->depends(Src, Des, true);
if (D->isAnti()) {
unsigned Levels = D->getLevels();
errs() << "levels = " << Levels << "\n";
char Direction;
for (unsigned II = 1; II <= Levels; ++II) {
...
const SCEV *Distance = D->getDistance(II);
const SCEVConstant *SCEVConst = dyn_cast_or_null<SCEVConstant>(Distance);
...
}
Results: levels = 0;
Distance is null.
(3) My guess is that the "levels = 0” which makes the Distance cannot be got. Can anyone help me with this?
Thanks!
Shvo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160319/b6800b18/attachment.html>
More information about the llvm-dev
mailing list