<div dir="ltr">I am trying to print it like this (maybe here is smth wrong?)<br><br> <br><div>    LazyValueInfo &LV = getAnalysis<LazyValueInfoWrapperPass>().getLVI();<br>    DominatorTree &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();<br>    LV.printLVI(F, DT, llvm::outs());<br>    for (BasicBlock &BB : F) {<br>      for (Instruction &I : BB) {<br>    if (Value* v = dyn_cast<Value>(&I))<br>      if (v->getType()->isIntegerTy()) {<br>        ConstantRange r = LV.getConstantRange(v, &BB, &I);<br>        I.dump();<br>        printf("LOWER VALUE : %llu\n",r.getLower().getRawData());<br>        printf("UPPER VALUE : %llu\n",r.getUpper().getRawData());<br>      }<br>      }<br>    }<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-08-07 11:12 GMT+02:00 Anastasiya Ruzhanskaya <span dir="ltr"><<a href="mailto:anastasiya.ruzhanskaya@frtk.ru" target="_blank">anastasiya.ruzhanskaya@frtk.ru</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>Hello,<br></div>I am trying to figure out, what vrp propagation does in llvm. I tried this program:<br>#include <stdio.h><br><br>int main() {<br>        int s = 0;<br>        int j = 0;<br>        for (int i = 0; i < 100; i++) {<br>                j = j+i+1;<br>                s+=j;<br>        }<br>        return (s+j);<br>}<br><br></div>And got this under optimized version ( I don't want everything to be eliminated)<br>define i32 @main() #0 {<br>entry:<br>  br label %for.body<br><br>for.body:                     <wbr>                    ; preds = %for.body, %entry<br>  %i.03 = phi i32 [ 0, %entry ], [ %inc, %for.body ]<br>  %s.02 = phi i32 [ 0, %entry ], [ %add2, %for.body ]<br>  %j.01 = phi i32 [ 0, %entry ], [ %add1, %for.body ]<br>  %add = add nsw i32 %j.01, %i.03<br>  %add1 = add nsw i32 %add, 1<br>  %add2 = add nsw i32 %s.02, %add1<br>  %inc = add nsw i32 %i.03, 1<br>  %cmp = icmp slt i32 %i.03, 99<br>  br i1 %cmp, label %for.body, label %for.end<br><br>for.end:                      <wbr>                    ; preds = %for.body<br>  %add3 = add nsw i32 %add2, %add1<br>  ret i32 %add3<br>}<br><br><br></div>the value range pass was not able to determine any size, even of the induction variable, is it a correct behavior?<br></div>
</blockquote></div><br></div>