Skip to content
  1. May 08, 2010
    • Dan Gohman's avatar
      When pruning candidate formulae out of an LSRUse, update the · d0800241
      Dan Gohman authored
      LSRUse's Regs set after all pruning is done, rather than trying
      to do it on the fly, which can produce an incomplete result.
      
      This fixes a case where heuristic pruning was stripping all
      formulae from a use, which led the solver to enter an infinite
      loop.
      
      Also, add a few asserts to diagnose this kind of situation.
      
      llvm-svn: 103328
      d0800241
  2. May 07, 2010
  3. May 05, 2010
  4. May 04, 2010
  5. May 03, 2010
  6. May 01, 2010
    • Chris Lattner's avatar
      revert r102831. We already delete dead readonly calls in · b49a622f
      Chris Lattner authored
      other places, killing a valid transformation is not the right
      answer.
      
      llvm-svn: 102850
      b49a622f
    • Owen Anderson's avatar
      Disable the call-deletion transformation introduced in r86975. Without · 550986ea
      Owen Anderson authored
      halting analysis, it is illegal to delete a call to a read-only function.
      The correct solution is almost certainly to add a "must halt" attribute and
      only allow deletions in its presence.
      
      XFAIL the relevant testcase for now.
      
      llvm-svn: 102831
      550986ea
    • Chris Lattner's avatar
      rename InlineInfo.DevirtualizedCalls -> InlinedCalls to · c2432b9d
      Chris Lattner authored
      reflect that it includes all inlined calls now, not just
      devirtualized ones.
      
      llvm-svn: 102824
      c2432b9d
    • Chris Lattner's avatar
      Implement rdar://6295824 and PR6724 with two tiny changes · fc8d9ee6
      Chris Lattner authored
      that can have a big effect :).  The first is to enable the
      iterative SCC passmanager juice that kicks in when the
      scc passmgr detects that a function pass has devirtualized
      a call.  In this case, it will rerun all the passes it 
      manages on the SCC, up to the iteration count limit (4). This
      is useful because a function pass may devirualize a call, and
      we want the inliner to inline it, or pruneeh to infer stuff
      about it, etc.
      
      The second patch is to add *all* call sites to the 
      DevirtualizedCalls list the inliner uses.  This list is
      about to get renamed, but the jist of this is that the 
      inliner now reconsiders *all* inlined call sites as candidates
      for further inlining.  The intuition is this that in cases 
      like this:
      
      f() { g(1); }     g(int x) { h(x); }
      
      We analyze this bottom up, and may decide that it isn't 
      profitable to inline H into G.  Next step, we decide that it is
      profitable to inline G into F, and do so, which means that F 
      now calls H.  Even though the call from G -> H may not have been
      profitable to inline, the call from F -> H may be (in this case
      because a constant allows folding etc).
      
      In my spot checks, this doesn't have a big impact on code.  For
      example, the LLC output for 252.eon grew from 0.02% (from
      317252 to 317308) and 176.gcc actually shrunk by .3% (from 1525612
      to 1520964 bytes).  252.eon never iterated in the SCC Passmgr,
      176.gcc iterated at most 1 time.
      
      llvm-svn: 102823
      fc8d9ee6
    • Chris Lattner's avatar
      The inliner has traditionally not considered call sites · e8262675
      Chris Lattner authored
      that appear due to inlining a callee as candidates for
      futher inlining, but a recent patch made it do this if
      those call sites were indirect and became direct.
      
      Unfortunately, in bizarre cases (see testcase) doing this
      can cause us to infinitely inline mutually recursive
      functions into callers not in the cycle.  Fix this by
      keeping track of the inline history from which callsite
      inline candidates got inlined from.
      
      This shouldn't affect any "real world" code, but is required
      for a follow on patch that is coming up next.
      
      llvm-svn: 102822
      e8262675
  7. Apr 30, 2010
  8. Apr 28, 2010
  9. Apr 27, 2010
  10. Apr 26, 2010
  11. Apr 25, 2010
  12. Apr 24, 2010
  13. Apr 23, 2010
  14. Apr 22, 2010
    • Chris Lattner's avatar
      when inlining something like this: · 016c00a3
      Chris Lattner authored
      define void @f3(void (i8*)* %__f) ssp {
      entry:
        call void %__f(i8* undef)
        unreachable
      }
      
      define void @f4(i8* %this) ssp align 2 {
      entry:
        call void @f3(void (i8*)* @f2) ssp
        ret void
      }
      
      The inliner is turning the indirect call to %__f into a direct
      call to F2.  Make the call graph more precise when this happens.
      
      The inliner doesn't revisit call sites introduced by inlining,
      so there isn't an easy way to test for this, but a more precise
      callgraph is a good thing.
      
      llvm-svn: 102131
      016c00a3
    • Chris Lattner's avatar
      eliminate dead #include. · 0a3b5b4e
      Chris Lattner authored
      llvm-svn: 102119
      0a3b5b4e
  15. Apr 21, 2010
  16. Apr 20, 2010
  17. Apr 19, 2010
  18. Apr 17, 2010
    • Bob Wilson's avatar
      Re-commit my previous SSAUpdater changes. The previous version naively tried · ca51425d
      Bob Wilson authored
      to determine where to place PHIs by iteratively comparing reaching definitions
      at each block.  That was just plain wrong.  This version now computes the
      dominator tree within the subset of the CFG where PHIs may need to be placed,
      and then places the PHIs in the iterated dominance frontier of each definition.
      The rest of the patch is mostly the same, with a few more performance
      improvements added in.
      
      llvm-svn: 101612
      ca51425d
Loading