Skip to content
  1. Dec 09, 2008
  2. Dec 05, 2008
    • Chris Lattner's avatar
      Make a few major changes to memdep and its clients: · 0e3d6337
      Chris Lattner authored
      1. Merge the 'None' result into 'Normal', making loads
         and stores return their dependencies on allocations as Normal.
      2. Split the 'Normal' result into 'Clobber' and 'Def' to
         distinguish between the cases when memdep knows the value is
         produced from when we just know if may be changed.
      3. Move some of the logic for determining whether readonly calls
         are CSEs into memdep instead of it being in GVN.  This still
         leaves verification that the arguments are hte same to GVN to
         let it know about value equivalences in different contexts.
      4. Change memdep's call/call dependency analysis to use 
         getModRefInfo(CallSite,CallSite) instead of doing something 
         very weak.  This only really matters for things like DSA, but
         someday maybe we'll have some other decent context sensitive
         analyses :)
      5. This reimplements the guts of memdep to handle the new results.
      6. This simplifies GVN significantly:
         a) readonly call CSE is slightly simpler
         b) I eliminated the "getDependencyFrom" chaining for load 
            elimination and load CSE doesn't have to worry about 
            volatile (they are always clobbers) anymore.
         c) GVN no longer does any 'lastLoad' caching, leaving it to 
            memdep.
      7. The logic in DSE is simplified a bit and sped up.  A potentially
         unsafe case was eliminated.
      
      llvm-svn: 60607
      0e3d6337
    • Anton Korobeynikov's avatar
      Revert invalid r60393. It causes llvm-gcc bootstrap fails in release builds. · 24600bf0
      Anton Korobeynikov authored
      See PR3160 for details
      
      llvm-svn: 60604
      24600bf0
    • Chris Lattner's avatar
      Fix test/Transforms/GVN/pre-load.ll · c1008280
      Chris Lattner authored
      llvm-svn: 60594
      c1008280
    • Chris Lattner's avatar
      Make IsValueFullyAvailableInBlock safe. · d2a653af
      Chris Lattner authored
      llvm-svn: 60588
      d2a653af
  3. Dec 02, 2008
    • Chris Lattner's avatar
      Implement PRE of loads in the GVN pass with a pretty cheap and · 1db9bbe8
      Chris Lattner authored
      straight-forward implementation.  This does not require any extra
      alias analysis queries beyond what we already do for non-local loads.
      
      Some programs really really like load PRE.  For example, SPASS triggers
      this ~1000 times, ~300 times in 255.vortex, and ~1500 times on 403.gcc.
      
      The biggest limitation to the implementation is that it does not split
      critical edges.  This is a huge killer on many programs and should be
      addressed after the initial patch is enabled by default.
      
      The implementation of this should incidentally speed up rejection of 
      non-local loads because it avoids creating the repl densemap in cases 
      when it won't be used for fully redundant loads.
      
      This is currently disabled by default.
      Before I turn this on, I need to fix a couple of miscompilations in
      the testsuite, look at compile time performance numbers, and look at
      perf impact.  This is pretty close to ready though.
      
      llvm-svn: 60408
      1db9bbe8
    • Owen Anderson's avatar
      Fix an issue that Chris noticed, where local PRE was not properly instantiating · d930420c
      Owen Anderson authored
      a new value numbering set after splitting a critical edge.  This increases
      the number of instances of PRE on 403.gcc from ~60 to ~570.
      
      llvm-svn: 60393
      d930420c
  4. Dec 01, 2008
    • Chris Lattner's avatar
    • Chris Lattner's avatar
      pull the predMap densemap out of the inner loop of performPRE, so · f00aae49
      Chris Lattner authored
      that it isn't reallocated all the time.  This is a tiny speedup for
      GVN: 3.90->3.88s
      
      llvm-svn: 60338
      f00aae49
    • Chris Lattner's avatar
      Make GVN be more intelligent about redundant load · 9ce8995d
      Chris Lattner authored
      elimination: when finding dependent load/stores, realize that
      they are the same if aliasing claims must alias instead of relying
      on the pointers to be exactly equal.  This makes load elimination
      more aggressive.  For example, on 403.gcc, we had:
      
      <     68 gvn    - Number of instructions PRE'd
      < 152718 gvn    - Number of instructions deleted
      <  49699 gvn    - Number of loads deleted
      <   6153 memdep - Number of dirty cached non-local responses
      < 169336 memdep - Number of fully cached non-local responses
      < 162428 memdep - Number of uncached non-local responses
      
      now we have:
      
      >     64 gvn    - Number of instructions PRE'd
      > 153623 gvn    - Number of instructions deleted
      >  49856 gvn    - Number of loads deleted
      >   5022 memdep - Number of dirty cached non-local responses
      > 159030 memdep - Number of fully cached non-local responses
      > 162443 memdep - Number of uncached non-local responses
      
      That's an extra 157 loads deleted and extra 905 other instructions nuked.
      
      This slows down GVN very slightly, from 3.91 to 3.96s.
      
      llvm-svn: 60314
      9ce8995d
    • Chris Lattner's avatar
      Reimplement the non-local dependency data structure in terms of a sorted · 7e61dafc
      Chris Lattner authored
      vector instead of a densemap.  This shrinks the memory usage of this thing
      substantially (the high water mark) as well as making operations like
      scanning it faster.  This speeds up memdep slightly, gvn goes from
      3.9376 to 3.9118s on 403.gcc
      
      This also splits out the statistics for the cached non-local case to
      differentiate between the dirty and clean cached case.  Here's the stats
      for 403.gcc:
      
        6153 memdep - Number of dirty cached non-local responses
      169336 memdep - Number of fully cached non-local responses
      162428 memdep - Number of uncached non-local responses
      
      yay for caching :)
      
      llvm-svn: 60313
      7e61dafc
    • Chris Lattner's avatar
      Cache analyses in ivars and add some useful DEBUG output. · 8541edec
      Chris Lattner authored
      This speeds up GVN from 4.0386s to 3.9376s.
      
      llvm-svn: 60310
      8541edec
    • Chris Lattner's avatar
      improve indentation, do cheap checks before expensive ones, · 80c7d81e
      Chris Lattner authored
      remove some fixme's.  This speeds up GVN very slightly on 403.gcc 
      (4.06->4.03s)
      
      llvm-svn: 60309
      80c7d81e
  5. Nov 30, 2008
  6. Nov 29, 2008
  7. Oct 10, 2008
  8. Oct 08, 2008
  9. Oct 01, 2008
    • Duncan Sands's avatar
      Factorize code: remove variants of "strip off · d65a4dae
      Duncan Sands authored
      pointer bitcasts and GEP's", and centralize the
      logic in Value::getUnderlyingObject.  The
      difference with stripPointerCasts is that
      stripPointerCasts only strips GEPs if all
      indices are zero, while getUnderlyingObject
      strips GEPs no matter what the indices are.
      
      llvm-svn: 56922
      d65a4dae
  10. Sep 04, 2008
  11. Aug 27, 2008
  12. Aug 22, 2008
  13. Jul 18, 2008
  14. Jul 17, 2008
  15. Jul 16, 2008
  16. Jul 15, 2008
  17. Jul 11, 2008
  18. Jul 03, 2008
  19. Jul 02, 2008
  20. Jun 23, 2008
Loading