[LLVMdev] Nested functions

Vikram S. Adve vadve at cs.uiuc.edu
Mon Nov 22 10:03:55 PST 2004


On Nov 22, 2004, at 12:05 PM, Chris Lattner wrote:

> On Sun, 21 Nov 2004, Dirk Muysers wrote:
>
>> Was there already some reflection about how to lower the concept of 
>> nested
>> functions (and the corresponding static links) into llvm?
>
> This was discussed back in August, which discusses it, provides a 
> solution
> and an example:
> http://mail.cs.uiuc.edu/pipermail/llvmdev/2004-August/001828.html
> http://mail.cs.uiuc.edu/pipermail/llvmdev/2004-August/001829.html
> http://mail.cs.uiuc.edu/pipermail/llvmdev/2004-August/001834.html
> http://mail.cs.uiuc.edu/pipermail/llvmdev/2004-August/001836.html

That's a rather simplistic example.  I wouldn't recommend doing it this 
way -- I see at least 2 problems with it:

(1) With recursion, the inlining being  assumed here would not happen.  
This means the struct initialization won't be optimized away so nicely 
and it can get really expensive.  Even without recursion, inlining 
would be impractical if you have many nested procedures and deep 
nesting.

(2) If you don't rely on inlining, initializing the structs you have to 
pass around will get horrendously expensive with large numbers of local 
variables.  (Note that without inlining, the structs will *not* be 
scalar-replaced because they have to passed as arguments.)

There's a reason why code generators use static links.

--Vikram
http://www.cs.uiuc.edu/~vadve
http://llvm.cs.uiuc.edu/




More information about the llvm-dev mailing list