Skip to content
  1. Nov 15, 2011
    • Jakob Stoklund Olesen's avatar
      Track register ages more accurately. · 543bef6e
      Jakob Stoklund Olesen authored
      Keep track of the last instruction to define each register individually
      instead of per DomainValue.  This lets us track more accurately when a
      register was last written.
      
      Also track register ages across basic blocks.  When entering a new
      basic block, use the least stale predecessor def as a worst case
      estimate for register age.
      
      The register age is used to arbitrate between conflicting domains. The
      most recently defined register wins.
      
      llvm-svn: 144601
      543bef6e
  2. Nov 09, 2011
    • Jakob Stoklund Olesen's avatar
      Collapse DomainValues across loop back-edges. · 3dc89c97
      Jakob Stoklund Olesen authored
      During the initial RPO traversal of the basic blocks, remember the ones
      that are incomplete because of back-edges from predecessors that haven't
      been visited yet.
      
      After the initial RPO, revisit all those loop headers so the incoming
      DomainValues on the back-edges can be properly collapsed.
      
      This will properly fix execution domains on software pipelined code,
      like the included test case.
      
      llvm-svn: 144151
      3dc89c97
    • Jakob Stoklund Olesen's avatar
      Link to the live DomainValue after merging. · 53ec977c
      Jakob Stoklund Olesen authored
      When merging two uncollapsed DomainValues, place a link to the active
      DomainValue from the passive DomainValue.  This allows old stale
      references to the passive DomainValue to be updated to point to the
      active DomainValue.
      
      The new resolve() function finds the active DomainValue and updates the
      pointer.
      
      This change makes old live-out lists more useful since they may contain
      uncollapsed DomainValues that have since been merged into other
      DomainValues.
      
      llvm-svn: 144149
      53ec977c
    • Jakob Stoklund Olesen's avatar
      Track reference count independently from clear(). · b7e44a3f
      Jakob Stoklund Olesen authored
      This allows clear() to be called on a DomainValue with references.
      
      llvm-svn: 144147
      b7e44a3f
  3. Nov 08, 2011
  4. Nov 07, 2011
  5. Sep 28, 2011
  6. Aug 06, 2010
  7. May 26, 2010
  8. Apr 13, 2010
  9. Apr 07, 2010
  10. Apr 06, 2010
  11. Apr 04, 2010
  12. Mar 31, 2010
  13. Mar 30, 2010
  14. Mar 25, 2010
    • Daniel Dunbar's avatar
      Fix -Asserts warning, again. · d919276b
      Daniel Dunbar authored
      llvm-svn: 99542
      d919276b
    • Jakob Stoklund Olesen's avatar
      Add a late SSEDomainFix pass that twiddles SSE instructions to avoid domain crossings. · 49e121d5
      Jakob Stoklund Olesen authored
      On Nehalem and newer CPUs there is a 2 cycle latency penalty on using a register
      in a different domain than where it was defined. Some instructions have
      equvivalents for different domains, like por/orps/orpd.
      
      The SSEDomainFix pass tries to minimize the number of domain crossings by
      changing between equvivalent opcodes where possible.
      
      This is a work in progress, in particular the pass doesn't do anything yet. SSE
      instructions are tagged with their execution domain in TableGen using the last
      two bits of TSFlags. Note that not all instructions are tagged correctly. Life
      just isn't that simple.
      
      The SSE execution domain issue is very similar to the ARM NEON/VFP pipeline
      issue handled by NEONMoveFixPass. This pass may become target independent to
      handle both.
      
      llvm-svn: 99524
      49e121d5
  15. Mar 24, 2010
Loading