Skip to content
  1. Feb 03, 2011
    • Eric Christopher's avatar
      Reapply this. · ede62679
      Eric Christopher authored
      llvm-svn: 124779
      ede62679
    • Eric Christopher's avatar
    • Jakob Stoklund Olesen's avatar
      Defer SplitKit value mapping until all defs are available. · dca2917e
      Jakob Stoklund Olesen authored
      The greedy register allocator revealed some problems with the value mapping in
      SplitKit. We would sometimes start mapping values before all defs were known,
      and that could change a value from a simple 1-1 mapping to a multi-def mapping
      that requires ssa update.
      
      The new approach collects all defs and register assignments first without
      filling in any live intervals. Only when finish() is called, do we compute
      liveness and mapped values. At this time we know with certainty which values map
      to multiple values in a split range.
      
      This also has the advantage that we can compute live ranges based on the
      remaining uses after rematerializing at split points.
      
      The current implementation has many opportunities for compile time optimization.
      
      llvm-svn: 124765
      dca2917e
  2. Jan 20, 2011
  3. Jan 19, 2011
    • Jakob Stoklund Olesen's avatar
      Implement RAGreedy::splitAroundRegion and remove loop splitting. · 9fb04015
      Jakob Stoklund Olesen authored
      Region splitting includes loop splitting as a subset, and it is more generic.
      The splitting heuristics for variables that are live in more than one block are
      now:
      
      1. Try to create a region that covers multiple basic blocks.
      2. Try to create a new live range for each block with multiple uses.
      3. Spill.
      
      Steps 2 and 3 are similar to what the standard spiller is doing.
      
      llvm-svn: 123853
      9fb04015
  4. Jan 18, 2011
  5. Dec 28, 2010
  6. Dec 22, 2010
  7. Dec 18, 2010
  8. Dec 16, 2010
  9. Dec 15, 2010
  10. Dec 14, 2010
  11. Dec 11, 2010
  12. Dec 10, 2010
  13. Dec 09, 2010
  14. Dec 08, 2010
    • Jakob Stoklund Olesen's avatar
      Implement very primitive hinting support in RegAllocGreedy. · eaa650a9
      Jakob Stoklund Olesen authored
      The hint is simply tried first and then forgotten if it couldn't be allocated
      immediately.
      
      llvm-svn: 121306
      eaa650a9
    • Jakob Stoklund Olesen's avatar
      Store (priority,regnum) pairs in the priority queue instead of providing an · e0df786c
      Jakob Stoklund Olesen authored
      abstract priority queue interface in subclasses that want to override the
      priority calculations.
      
      Subclasses must provide a getPriority() implementation instead.
      
      This approach requires less code as long as priorities are expressable as simple
      floats, and it avoids the dangers of defining potentially expensive priority
      comparison functions.
      
      It also should speed up priority_queue operations since they no longer have to
      chase pointers when comparing registers. This is not measurable, though.
      
      Preferably, we shouldn't use floats to guide code generation. The use of floats
      here is derived from the use of floats for spill weights. Spill weights have a
      dynamic range that doesn't lend itself easily to a fixpoint implementation.
      
      When someone invents a stable spill weight representation, it can be reused for
      allocation priorities.
      
      llvm-svn: 121294
      e0df786c
    • Jakob Stoklund Olesen's avatar
      Trim includes. · 310916a2
      Jakob Stoklund Olesen authored
      llvm-svn: 121283
      310916a2
    • Jakob Stoklund Olesen's avatar
      Stub out RegAllocGreedy. · b8812a1c
      Jakob Stoklund Olesen authored
      This new register allocator is initially identical to RegAllocBasic, but it will
      receive all of the tricks that RegAllocBasic won't get.
      
      RegAllocGreedy will eventually replace linear scan.
      
      llvm-svn: 121234
      b8812a1c
Loading