[LLVMdev] Repost: question about tail call elimination pass

kumar srikumarks at mac.com
Sun Aug 3 21:12:37 PDT 2008


NOTE: My original post was MIME mangled.
So I'm reposting it. Sorry for that.

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



More information about the llvm-dev mailing list