Skip to content
  1. Sep 18, 2012
  2. Sep 17, 2012
  3. Sep 16, 2012
    • Chandler Carruth's avatar
      Refactor the SROA visitors for partitioning an alloca and building · 9712117a
      Chandler Carruth authored
      partition use lists a bit. No functionality changed.
      
      These visitors are actually visiting a tuple of a Use and an offset into
      the alloca. However, we use the InstVisitor to handle the dispatch over
      the users, and so the Use and Offset are stored in class member
      variables and set just before each call to visit(). This is fairly
      awkward and makes the functions a bit harder to read, but its the only
      real option we have until InstVisitor can be rewritten to use variadic
      templates.
      
      However, this pattern shouldn't be followed on the helper member
      functions where there is no interface constraint from the visitor. We
      already were passing the instruction as a normal parameter rather than
      use the Use to get at it, start passing the offset as well. This will
      become more important in subsequent patches as the offset will in some
      cases change while visiting a single instruction.
      
      llvm-svn: 164003
      9712117a
    • Craig Topper's avatar
      462c31b3
    • Craig Topper's avatar
      Fix bad comment. No functional change. · 04b4e83c
      Craig Topper authored
      llvm-svn: 164000
      04b4e83c
    • Nadav Rotem's avatar
      The PMOVZXWD family of functions had patterns extends narrow vector types to wide vector types. · 37521aa8
      Nadav Rotem authored
      It had patterns for zext-loading and extending. This commit adds patterns for loading a wide type, performing a bitcast,
      and extending. This is an odd pattern, but it is commonly used when writing code with intrinsics.
      
      rdar://11897677
      
      llvm-svn: 163995
      37521aa8
    • 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
  4. Sep 15, 2012
  5. Sep 14, 2012
Loading