Skip to content
  1. Oct 06, 2009
  2. Oct 05, 2009
  3. Oct 04, 2009
  4. Sep 28, 2009
  5. Sep 27, 2009
  6. Sep 24, 2009
  7. Sep 20, 2009
  8. Sep 19, 2009
  9. Sep 15, 2009
  10. Sep 11, 2009
  11. Sep 08, 2009
  12. Sep 03, 2009
  13. Sep 01, 2009
  14. Aug 31, 2009
    • Chris Lattner's avatar
      comment and simplify some code. · 9e507479
      Chris Lattner authored
      llvm-svn: 80540
      9e507479
    • Chris Lattner's avatar
      add -debug output · 70ebbc59
      Chris Lattner authored
      llvm-svn: 80539
      70ebbc59
    • Chris Lattner's avatar
      simplify some code by making the SCCNodes set contain Function*'s · 2f2110af
      Chris Lattner authored
      instead of CallGraphNode*'s.  This also papers over a callgraph
      problem where a pass (in this case, MemCpyOpt) introduces a new
      function into the module (llvm.memset.i64) but doesn't add it to
      the call graph (nor should it, since it is a function pass).
      
      While it might be a good idea for MemCpyOpt to not synthesize 
      functions in a runOnFunction(), there is no need for FunctionAttrs
      to be boneheaded, so fix it there.  This fixes an assertion building
      176.gcc.
      
      llvm-svn: 80535
      2f2110af
    • Chris Lattner's avatar
      Fix PR4834, a tricky case where the inliner would resolve an · 081375bb
      Chris Lattner authored
      indirect function pointer, inline it, then go to delete the body.
      The problem is that the callgraph had other references to the function,
      though the inliner had no way to know it, so we got a dangling pointer
      and an invalid iterator out of the deal.
      
      The fix to this is pretty simple: stop the inliner from deleting the
      function by knowing that there are references to it.  Do this by making
      CallGraphNodes contain a refcount.  This requires moving deletion of 
      available_externally functions to the module-level cleanup sweep where
      it belongs.
      
      llvm-svn: 80533
      081375bb
    • Chris Lattner's avatar
      Fix some nasty callgraph dangling pointer problems in · 305b115a
      Chris Lattner authored
      argpromotion and structretpromote.  Basically, when replacing
      a function, they used the 'changeFunction' api which changes
      the entry in the function map (and steals/reuses the callgraph
      node).
      
      This has some interesting effects: first, the problem is that it doesn't
      update the "callee" edges in any callees of the function in the call graph.
      Second, this covers for a major problem in all the CGSCC pass stuff, which 
      is that it is completely broken when functions are deleted if they *don't*
      reuse a CGN.  (there is a cute little fixme about this though :).
      
      This patch changes the protocol that CGSCC passes must obey: now the CGSCC 
      pass manager copies the SCC and preincrements its iterator to avoid passes
      invalidating it.  This allows CGSCC passes to mutate the current SCC.  However
      multiple passes may be run on that SCC, so if passes do this, they are now
      required to *update* the SCC to be current when they return.
      
      Other less interesting parts of this patch are that it makes passes update
      the CG more directly, eliminates changeFunction, and requires clients of
      replaceCallSite to specify the new callee CGN if they are changing it.
      
      llvm-svn: 80527
      305b115a
  15. Aug 29, 2009
  16. Aug 28, 2009
  17. Aug 27, 2009
    • Chris Lattner's avatar
      Implement a new optimization in the inliner: if inlining multiple · d3374e8d
      Chris Lattner authored
      calls into a function and if the calls bring in arrays, try to merge
      them together to reduce stack size.  For example, in the testcase
      we'd previously end up with 4 allocas, now we end up with 2 allocas.
      
      As described in the comments, this is not really the ideal solution
      to this problem, but it is surprisingly effective.  For example, on
      176.gcc, we end up eliminating 67 arrays at "gccas" time and another
      24 at "llvm-ld" time.
      
      One piece of concern that I didn't look into: at -O0 -g with
      forced inlining this will almost certainly result in worse debug
      info.  I think this is acceptable though given that this is a case
      of "debugging optimized code", and we don't want debug info to
      prevent the optimizer from doing things anyway.
      
      llvm-svn: 80215
      d3374e8d
    • Chris Lattner's avatar
      reduce header #include'age · b9d0a961
      Chris Lattner authored
      llvm-svn: 80204
      b9d0a961
    • Chris Lattner's avatar
      reduce inlining factor some stuff out to a static helper function, · 5eef6ad6
      Chris Lattner authored
      and other code cleanups.  No functionality change.
      
      llvm-svn: 80199
      5eef6ad6
  18. Aug 26, 2009
    • Devang Patel's avatar
      f08e35d9
    • Dan Gohman's avatar
      Rename Instruction::isIdenticalTo to Instruction::isIdenticalToWhenDefined, · c8a27f2a
      Dan Gohman authored
      and introduce a new Instruction::isIdenticalTo which tests for full
      identity, including the SubclassOptionalData flags. Also, fix the
      Instruction::clone implementations to preserve the SubclassOptionalData
      flags. Finally, teach several optimizations how to handle
      SubclassOptionalData correctly, given these changes.
      
      This fixes the counterintuitive behavior of isIdenticalTo not comparing
      the full value, and clone not returning an identical clone, as well as
      some subtle bugs that could be caused by these.
      
      Thanks to Nick Lewycky for reporting this, and for an initial patch!
      
      llvm-svn: 80038
      c8a27f2a
  19. Aug 25, 2009
  20. Aug 24, 2009
Loading