Skip to content
  1. May 07, 2010
  2. May 05, 2010
  3. May 04, 2010
  4. May 03, 2010
  5. 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
  6. Apr 30, 2010
  7. Apr 28, 2010
  8. Apr 27, 2010
  9. Apr 26, 2010
  10. Apr 25, 2010
  11. Apr 24, 2010
  12. Apr 23, 2010
  13. 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
  14. Apr 21, 2010
  15. Apr 20, 2010
  16. Apr 19, 2010
  17. 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
    • Eric Christopher's avatar
      Revert 101465, it broke internal OpenGL testing. · 7258dcd7
      Eric Christopher authored
      Probably the best way to know that all getOperand() calls have been handled
      is to replace that API instead of updating.
      
      llvm-svn: 101579
      7258dcd7
Loading