<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:                                         ; 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:                                          ; 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>