<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Hi,</div><div><br></div>Is the -indvars pass functional?  I've done some small test to check it, but this fails to canonicalize:<div><br></div><div></div><div></div><blockquote type="cite"><div><font class="Apple-style-span" face="Courier">int *x;</font></div><div><font class="Apple-style-span" face="Courier">int *y;</font></div><div><font class="Apple-style-span" face="Courier">int i;</font></div><div><font class="Apple-style-span" face="Courier">...</font></div><div><div><font class="Apple-style-span" face="Courier">for (i = 1; i < 100; i+=2) {</font></div><div><font class="Apple-style-span" face="Courier"><span class="Apple-tab-span" style="white-space:pre">      </span>x[i] = y[i] + 3;</font></div><div><font class="Apple-style-span" face="Courier">}</font></div></div></blockquote><div><br></div><div>The IR produced after -indvars:</div><div><br></div><div><div><div></div></div></div><div><div></div><blockquote type="cite"><div><font class="Apple-style-span" color="#0055ca" face="Courier">  br label %for.cond</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier"><br></font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">for.cond:                                         ; preds = %for.inc, %entry</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc ], [ 1, %entry ]</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  %0 = trunc i64 %indvars.iv to i32</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  %cmp = icmp slt i32 %0, 100</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  br i1 %cmp, label %for.body, label %for.end</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier"><br></font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">for.body:                                         ; preds = %for.cond</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  %arrayidx = getelementptr inbounds i32* %y, i64 %indvars.iv</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  %1 = load i32* %arrayidx, align 4</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  %add = add nsw i32 %1, 3</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  %arrayidx2 = getelementptr inbounds i32* %x, i64 %indvars.iv</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  store i32 %add, i32* %arrayidx2, align 4</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  br label %for.inc</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier"><br></font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">for.inc:                                          ; preds = %for.body</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  %indvars.iv.next = add i64 %indvars.iv, 2</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">  br label %for.cond</font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier"><br></font></div><div><font class="Apple-style-span" color="#0055ca" face="Courier">for.end:                                          ; preds = %for.cond</font></div></blockquote></div><div><br></div><div>Which isn't in canonical form.  Is there some trick to getting this pass to work?  I've tried adding various other passes ahead of it, like -aa-eval, -scalar-evolution, -mem2reg, -lcssa, -loop-simplify, etc but to no avail.</div><div><br></div><div>Thank you,</div><div>Gavin</div></body></html>