Hi,
<div><br></div><div>My pass heavily relies on llvm::Loop's getSmallConstantTripCount method. However, I found that it doesn't work for some simple cases.</div><div><br></div><div>In the following example, I can get the constant trip count of the outermost loop if statement "a[l] = a[l] + 1" is there. After commenting out this line, the returned constant trip count for that loop is 0. In my pass, I traverse the nested loops starting from statement "a[i] = b[i] * b[i+1]; ", and use a for loop to traverse each parent loop.</div>
<div><br></div><div><div>void f(int *a, int b[], double *c, int n)</div><div>{</div><div>  int i,j,k,l;</div><div>  if(n>20) </div><div>    a[j] = 4;</div><div>  else {</div><div>    for(l=0; l<200; ++l) {</div><div>
      a[l] = a[l] + 1; //if remove this line, the above loop's trip count can not be obtained.</div><div>      if(b[1]>30) {</div><div>        c[k] = c[k] * c[k+1];</div><div>      }</div><div>      else {</div><div>
        for(k=0; k<400;++k) {</div><div>          for(i=0; i<400; ++i) {</div><div>            a[i] = b[i] * b[i+1]; // nested loop traversal starts here.</div><div>          }</div><div>        }</div><div>      }</div>
<div>    }</div><div>  }</div><div>}</div></div><div><br></div><div>As long as statement "a[l] = a[l] + 1;" is in the outermost loop body, the trip count can be obtained. Is there a way to get the constant trip count of a loop in similar cases, even if the induction variable is not used in the loop body?</div>
<div><br></div><div>Thanks,</div><div>Bo</div><div><br></div><div><br></div>