Skip to content
  1. Oct 04, 2009
  2. Aug 31, 2009
    • Chris Lattner's avatar
      comment and simplify some code. · 9e507479
      Chris Lattner authored
      llvm-svn: 80540
      9e507479
    • 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
  3. Aug 28, 2009
  4. 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
  5. Aug 25, 2009
  6. Jul 31, 2009
  7. Jul 25, 2009
    • Daniel Dunbar's avatar
      More migration to raw_ostream, the water has dried up around the iostream hole. · 0dd5e1ed
      Daniel Dunbar authored
       - Some clients which used DOUT have moved to DEBUG. We are deprecating the
         "magic" DOUT behavior which avoided calling printing functions when the
         statement was disabled. In addition to being unnecessary magic, it had the
         downside of leaving code in -Asserts builds, and of hiding potentially
         unnecessary computations.
      
      llvm-svn: 77019
      0dd5e1ed
  8. Jul 24, 2009
  9. Jul 18, 2009
  10. May 23, 2009
  11. Mar 24, 2009
  12. Mar 19, 2009
    • Dale Johannesen's avatar
      Clear the cached cost when removing a function in · 2050968d
      Dale Johannesen authored
      the inliner; prevents nondeterministic behavior
      when the same address is reallocated.
      Don't build call graph nodes for debug intrinsic calls;
      they're useless, and there were typically a lot of them.
      
      llvm-svn: 67311
      2050968d
  13. Jan 15, 2009
  14. Jan 12, 2009
  15. Jan 09, 2009
  16. Nov 21, 2008
  17. Nov 05, 2008
  18. Oct 30, 2008
  19. Oct 29, 2008
  20. Sep 27, 2008
  21. Sep 25, 2008
    • Devang Patel's avatar
      Large mechanical patch. · 4c758ea3
      Devang Patel authored
      s/ParamAttr/Attribute/g
      s/PAList/AttrList/g
      s/FnAttributeWithIndex/AttributeWithIndex/g
      s/FnAttr/Attribute/g
      
      This sets the stage 
      - to implement function notes as function attributes and 
      - to distinguish between function attributes and return value attributes.
      
      This requires corresponding changes in llvm-gcc and clang.
      
      llvm-svn: 56622
      4c758ea3
  22. Sep 24, 2008
  23. Sep 23, 2008
  24. Sep 05, 2008
  25. Sep 04, 2008
  26. Sep 03, 2008
  27. May 13, 2008
  28. May 06, 2008
Loading