Hi,

createTailCallEliminationPass() is able to turn recursive

functions into loops when the functions are written

in tail recursive form. However, I’m unable to get it

to convert mutually recursive functions to run without

a growing stack.

For example (in pseudo code)-

define fact(n,result)

if n < 2

then result

else fact(n-1,result *n)

is converted into a loop correctly. However the following

mutually recursive pair -

define even(n)

if n == 0

then true

else odd(n-1)

define odd(n)

if n==0

then false

else even(n-1)

doesn’t get to run in constant stack space.

Is that possible with llvm?

-Srikumar