Skip to content
  • Chris Lattner's avatar
    implement a nice little efficiency hack in the inliner. Since we're now · eb9acbfb
    Chris Lattner authored
    running IPSCCP early, and we run functionattrs interlaced with the inliner,
    we often (particularly for small or noop functions) completely propagate
    all of the information about a call to its call site in IPSSCP (making a call
    dead) and functionattrs is smart enough to realize that the function is
    readonly (because it is interlaced with inliner).
    
    To improve compile time and make the inliner threshold more accurate, realize
    that we don't have to inline dead readonly function calls.  Instead, just 
    delete the call.  This happens all the time for C++ codes, here are some
    counters from opt/llvm-ld counting the number of times calls were deleted vs
    inlined on various apps:
    
    Tramp3d opt:
      5033 inline                - Number of call sites deleted, not inlined
     24596 inline                - Number of functions inlined
    llvm-ld:
      667 inline           - Number of functions deleted because all callers found
      699 inline           - Number of functions inlined
    
    483.xalancbmk opt:
      8096 inline                - Number of call sites deleted, not inlined
     62528 inline                - Number of functions inlined
    llvm-ld:
       217 inline           - Number of allocas merged together
      2158 inline           - Number of functions inlined
    
    471.omnetpp:
      331 inline                - Number of call sites deleted, not inlined
     8981 inline                - Number of functions inlined
    llvm-ld:
      171 inline           - Number of functions deleted because all callers found
      629 inline           - Number of functions inlined
    
    
    Deleting a call is much faster than inlining it, and is insensitive to the
    size of the callee. :)
    
    llvm-svn: 86975
    eb9acbfb
Loading