Thanks. Works fine now and made some other things clear too.<br><br><div class="gmail_quote">On Sun, Jun 19, 2011 at 9:22 PM, Eli Friedman <span dir="ltr"><<a href="mailto:eli.friedman@gmail.com" target="_blank">eli.friedman@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div>On Sun, Jun 19, 2011 at 7:21 AM, Sorin Baltateanu<br>
<<a href="mailto:baltateanu.sorin@gmail.com" target="_blank">baltateanu.sorin@gmail.com</a>> wrote:<br>
> Hi guys,<br>
><br>
> I am trying to use the indvars pass, but i don't see any changes in the IL<br>
> representation.<br>
><br>
> For this simple function<br>
><br>
> void init_array(int k)<br>
> {<br>
>     int A[20];<br>
>     for (int i=2; i<10; i++)<br>
>         A[i] = 0;<br>
> }<br>
><br>
> i run clang test-simple.c -S -emit-llvm -o <a href="http://test.il" target="_blank">test.il</a> and i obtain the<br>
> following il representation<br>
><br>
> define void @init_array(i32 %k) nounwind {<br>
> entry:<br>
>   %k.addr = alloca i32, align 4<br>
>   %A = alloca [20 x i32], align 4<br>
>   %i = alloca i32, align 4<br>
>   store i32 %k, i32* %k.addr, align 4<br>
>   store i32 2, i32* %i, align 4<br>
>   br label %for.cond<br>
><br>
> for.cond:                                         ; preds = %for.inc, %entry<br>
>   %tmp = load i32* %i, align 4<br>
>   %cmp = icmp slt i32 %tmp, 10<br>
>   br i1 %cmp, label %for.body, label %for.end<br>
><br>
> for.body:                                         ; preds = %for.cond<br>
>   %tmp1 = load i32* %i, align 4<br>
>   %arrayidx = getelementptr inbounds [20 x i32]* %A, i32 0, i32 %tmp1<br>
>   store i32 0, i32* %arrayidx, align 4<br>
>   br label %for.inc<br>
><br>
> for.inc:                                          ; preds = %for.body<br>
>   %tmp2 = load i32* %i, align 4<br>
>   %inc = add nsw i32 %tmp2, 1<br>
>   store i32 %inc, i32* %i, align 4<br>
>   br label %for.cond<br>
><br>
> for.end:                                          ; preds = %for.cond<br>
>   ret void<br>
> }<br>
><br>
> Running opt -loop-simplify < <a href="http://test.il" target="_blank">test.il</a> -S gives me the same output, which is<br>
> what i would expect.<br>
> The problem is that running opt -indvars < <a href="http://test.il" target="_blank">test.il</a> -S gives, again, the same<br>
> output, but i would expect that i starts from 0 and is, eventualy,  defined<br>
> using a PHYNode.<br>
><br>
> What it's wrong with what i'm doing?<br>
<br>
</div></div>You aren't running a normal pass pipeline; in particular, not running<br>
mem2reg/scalarrepl first prevents a lot of optimizations from working<br>
as expected.<br>
<font color="#888888"><br>
-Eli<br>
</font></blockquote></div><br>