Hello.

Could you please tell me why is not LLVM performing tail recursion elimination on the following function:

int A[10000];

int MulRedRec(int N) {

if (N == 0)

return A[0];

return A[N] * MulRedRec(N - 1);

}

I ask also because, for example, for the following function LLVM is able to eliminate tail recursion:

int FactRec(int N) {

if (N == 0)

return 1;

return N * FactRec(N - 1);

}

Looking on the debug information printed by opt I was able to find some differences in behavior when opt runs on each of the functions above - I can detail more on these differences.

Thank you very much,

Alex