Skip to content
  1. Sep 21, 2012
  2. Sep 20, 2012
  3. Sep 19, 2012
    • Jakob Stoklund Olesen's avatar
      Resolve conflicts involving dead vector lanes for -new-coalescer. · 7d3c9c0a
      Jakob Stoklund Olesen authored
      A common coalescing conflict in vector code is lane insertion:
      
        %dst = FOO
        %src = BAR
        %dst:ssub0 = COPY %src
      
      The live range of %src interferes with the ssub0 lane of %dst, but that
      lane is never read after %src would have clobbered it. That makes it
      safe to merge the live ranges and eliminate the COPY:
      
        %dst = FOO
        %dst:ssub0 = BAR
      
      This patch teaches the new coalescer to resolve conflicts where dead
      vector lanes would be clobbered, at least as long as the clobbered
      vector lanes don't escape the basic block.
      
      llvm-svn: 164250
      7d3c9c0a
    • Andrew Trick's avatar
      comment typo · 6a35f197
      Andrew Trick authored
      llvm-svn: 164180
      6a35f197
  4. Sep 18, 2012
  5. Sep 17, 2012
  6. Sep 16, 2012
    • Craig Topper's avatar
      Fix bad comment. No functional change. · 04b4e83c
      Craig Topper authored
      llvm-svn: 164000
      04b4e83c
    • Jakob Stoklund Olesen's avatar
      Add alternative coalescing algorithm under a flag. · 17e21855
      Jakob Stoklund Olesen authored
      The live range of an SSA value forms a sub-tree of the dominator tree.
      That means the live ranges of two values overlap if and only if the def
      of one value lies within the live range of the other.
      
      This can be used to simplify the interference checking a bit: Visit each
      def in the two registers about to be joined. Check for interference
      against the value that is live in the other register at the def point
      only. It is not necessary to scan the set of overlapping live ranges,
      this interference check can be done while computing the value mapping
      required for the final live range join.
      
      The new algorithm is prepared to handle more complicated conflict
      resolution - We can allow overlapping live ranges with different values
      as long as the differing lanes are undef or unused in the other
      register.
      
      The implementation in this patch doesn't do that yet, it creates code
      that is nearly identical to the old algorithm's, except:
      
      - The new stripCopies() function sees through multiple copies while
        the old RegistersDefinedFromSameValue() only can handle one.
      
      - There are a few rare cases where the new algorithm can erase an
        IMPLICIT_DEF instuction that RegistersDefinedFromSameValue() couldn't
        handle.
      
      llvm-svn: 163991
      17e21855
  7. Sep 15, 2012
  8. Sep 14, 2012
  9. Sep 13, 2012
Loading