[LLVMdev] Inline hints for *compiler clients*

John Criswell criswell at cs.uiuc.edu
Wed Mar 15 13:27:58 PST 2006


Vikram S. Adve wrote:

Hmmm.  It seems the discussion has grown a little bit larger than I had 
intended.
:)

Basically what I think would be useful is an option to the inliner that 
gives it a list of functions to skip when inlining.  My argument for 
this is that we have several transformations now that search for calls 
to specific functions; if those functions are inlined, the transform 
pass can no longer find the calls.

I would like the list of functions excluded from inlining to be 
specified on the command line (as I'm using the LLVM opt command); 
providing a constructor to the Inliner pass that takes a list of 
function names to exclude from inlining might also be handy to LLVM 
programmers but is beyond what I need at the moment.

I think Chris indicated in an earlier email that such a command line 
option is now okay.  Chris, please let me know if I understand that 
correctly.

The ability to control inlining from the source code being compiled 
(i.e. GCC's noinline attribute), adjust the inlining heuristics 
programmatically from a custom built LLVM tool, etc, are beyond the 
scope of what I need.

Hopefully that clears up what I was asking about.

-- John T.

> 
> On Mar 15, 2006, at 11:15 AM, Chris Lattner wrote:
> 
>> On Wed, 15 Mar 2006, Vikram S. Adve wrote:
>>
>>>> Why can't the compiler pass just call InlineFunction(CallSite) on  
>>>> the callsite it wants inlined?  The only way that can fail is if  
>>>> LLVM cannot ever inline the call (e.g. it uses varargs).
>>
>>
>>> In some cases, that would be fine.  But in other cases:
>>> (1) It cannot "un-inline" any function that was previously inlined.
>>
>>
>> I'm not following.  Why do you want to uninline stuff?  If we had a  
>> 'never inline these functions' list,
> 
> 
> We don't have such a list, at least not so far.  We do have a "used"  
> list but that's presumably used for other things.
> 
> 
>> a transformation could add any function it wants to this list to  
>> prevent the inliner from inlining it in the future.
>>
>> Aside from that, I don't see what uninlining has to do with  inlining 
>> heuristics, can you explain a bit more?
> 
> 
> I'm not sure what there is to explain.  Inlining heuristics control  
> what to inline.  If you're writing a tool, you'd want to run the  
> inliner while influencing what it chooses to inline.
> 
> 
>>> (2) It requires writing a driver loop nest to go over all call  sites 
>>> and decide what to do.  If all you want is to influence the  existing 
>>> heuristics, that seems like too much work.
>>
>>
>> You're talking about something like 5 lines of code, plus the  
>> predicate deciding whether to inline it or not (which you'd need  
>> anyway).
> 
> 
> That's 5 more lines than if you simply wanted to influence the  inlining 
> heuristics.
> 
> 
>>
>>> (3) If multiple passes want such control, this would end up  
>>> duplicating the driver code.
>>
>>
>> Again, this is a trivial amount of code.
> 
> 
> I don't agree.
> 
> 
>> Giving passes the ability to modify the heuristics used by the  
>> inliner would significantly dwarf this in both amount of code and  
>> complexity.
> 
> 
> Again, I don't agree.  I looked at the getInlineCost(const CallSite&  
> CS) function.  It has a dozen or more embedded constants in it.  If  
> those used symbolic constant indexes into a cost table, any tool  could 
> influence the heuristics simply by changing the values in the  table, 
> which (it seems to me) would be simple and intuitive.
> 
>>
>> What are you really trying to do here?  Can you provide an example?
> 
> 
> I was just trying to help John by following up on his issue.
> 
> --Vikram
> http://www.cs.uiuc.edu/~vadve
> http://llvm.cs.uiuc.edu/
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev


-- 
John T. Criswell
Research Programmer
University of Illinois at Urbana-Champaign
"It's today!" said Piglet. "My favorite day," said Pooh.




More information about the llvm-dev mailing list