[llvm-dev] vrp

Anastasiya Ruzhanskaya via llvm-dev llvm-dev at lists.llvm.org
Mon Aug 7 02:41:29 PDT 2017


So, it is not supported to determine by this instruction : %cmp = icmp slt
i32 %i.03, 99,
that %i.03 = phi i32 [ 0, %entry ], [ %inc, %for.body ] has
a range [0, 99]?

And what is then a correct way to get such an info, that you sent ( with
more specified ranges)? ...seems that appropriate method for it is not in
LazyValueInfo class.

2017-08-07 11:34 GMT+02:00 Davide Italiano <davide at freebsd.org>:

> On Mon, Aug 7, 2017 at 2:14 AM, Anastasiya Ruzhanskaya via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
> > I am trying to print it like this (maybe here is smth wrong?)
> >
> >
> >     LazyValueInfo &LV = getAnalysis<LazyValueInfoWrapperPass>().
> getLVI();
> >     DominatorTree &DT =
> > getAnalysis<DominatorTreeWrapperPass>().getDomTree();
> >     LV.printLVI(F, DT, llvm::outs());
>
> The value analysis in llvm is lazy (hence, LVI), so you're trying to
> print an empty cache, I guess.
>
> >     for (BasicBlock &BB : F) {
> >       for (Instruction &I : BB) {
> >     if (Value* v = dyn_cast<Value>(&I))
> >       if (v->getType()->isIntegerTy()) {
> >         ConstantRange r = LV.getConstantRange(v, &BB, &I);
> >         I.dump();
> >         printf("LOWER VALUE : %llu\n",r.getLower().getRawData());
> >         printf("UPPER VALUE : %llu\n",r.getUpper().getRawData());
> >       }
> >       }
>
> About your other question, "the value range pass was not able to
> determine any size, even of the induction variable, is it a correct
> behavior?". Yes, returning a conservative answer is always correct,
> but not optimal.
>
> As reference, a more sophisticated range analysis finds the following
> ranges for your IR:
>
> [0, +inf]  %i.03 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
> [0, +inf]  %s.02 = phi i32 [ 0, %entry ], [ %add2, %for.body ]
> [0, +inf]  %j.01 = phi i32 [ 0, %entry ], [ %add1, %for.body ]
> [0, +inf]  %add = add nsw i32 %j.01, %i.03
> [1, +inf]  %add1 = add nsw i32 %add, 1
> [1, +inf]  %add2 = add nsw i32 %s.02, %add1
> [1, +inf]  %inc = add nsw i32 %i.03, 1
> [2, +inf]  %add3 = add nsw i32 %add2, %add1
>
>
> --
> Davide
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170807/49b2ca8a/attachment-0001.html>


More information about the llvm-dev mailing list