Skip to content
  1. Jan 02, 2011
    • Cameron Zwarich's avatar
      Speed up dominator computation some more by optimizing bucket processing. When · a0800337
      Cameron Zwarich authored
      naively implemented, the Lengauer-Tarjan algorithm requires a separate bucket
      for each vertex. However, this is unnecessary, because each vertex is only
      placed into a single bucket (that of its semidominator), and each vertex's
      bucket is processed before it is added to any bucket itself.
      
      Instead of using a bucket per vertex, we use a single array Buckets that has two
      purposes. Before the vertex V with DFS number i is processed, Buckets[i] stores
      the index of the first element in V's bucket. After V's bucket is processed,
      Buckets[i] stores the index of the next element in the bucket to which V now
      belongs, if any.
      
      Reading from the buckets can also be optimized. Instead of processing the bucket
      of V's parent at the end of processing V, we process the bucket of V itself at
      the beginning of processing V. This means that the case of the root vertex can
      be simplified somewhat. It also means that we don't need to look up the DFS
      number of the semidominator of every node in the bucket we are processing,
      since we know it is the current index being processed.
      
      This is a 6.5% speedup running -domtree on test-suite + SPEC2000/2006, with
      larger speedups of around 12% on the larger benchmarks like GCC.
      
      llvm-svn: 122680
      a0800337
    • Rafael Espindola's avatar
      Add support for passing variables declared to use a xmm register to asm · 47731fe3
      Rafael Espindola authored
      statements using the "x" constraint.
      
      llvm-svn: 122679
      47731fe3
    • Chris Lattner's avatar
      teach loop idiom recognition to form memcpy's from simple loops. · 85b6d81d
      Chris Lattner authored
      llvm-svn: 122678
      85b6d81d
    • Nick Lewycky's avatar
      Remove functions from the FnSet when one of their callee's is being merged. This · 4e250c82
      Nick Lewycky authored
      maintains the guarantee that the DenseSet expects two elements it contains to
      not go from inequal to equal under its nose.
      
      As a side-effect, this also lets us switch from iterating to a fixed-point to
      actually maintaining a work queue of functions to look at again, and we don't
      add thunks to our work queue so we don't need to detect and ignore them.
      
      llvm-svn: 122677
      4e250c82
  2. Jan 01, 2011
  3. Dec 31, 2010
  4. Dec 30, 2010
Loading