[llvm-dev] Why doesn't tail recursion elimination work?

Alex Susu via llvm-dev llvm-dev at lists.llvm.org
Sat Jun 2 01:32:12 PDT 2018


   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


More information about the llvm-dev mailing list