Unrolling a loop with unknown upper bound

Hi all,

I am new to llvm. I want to leverage llvm to do some basic optimization.

What I want to start is to unroll a loop with unkown upper bound. For example,

for (i = 0; i < n; i++)
  {
    y[i] = i;
  }

can be rewritten by the compiler as follows:

for (i = 0; i < (n % 2); i++)
  {
    y[i] = i;
  }

for ( ; i + 1 < n; i += 2) /* no initializer */
  {
    y[i] = i;
    y[i+1] = i+1;
  }

I have read these llvm documents, but still not very clear where to start.

I think it could be done by writing a pass. But, I still confused.

Does there anynoe who can give me any advice.

Any information will be appreciated.

Thank you in avance!