Skip to content
  • Jakob Stoklund Olesen's avatar
    Don't treat a partial <def,undef> operand as a read. · 9eb77bf6
    Jakob Stoklund Olesen authored
    Normally, a partial register def is treated as reading the
    super-register unless it also defines the full register like this:
    
      %vreg110:sub_32bit<def> = COPY %vreg77:sub_32bit, %vreg110<imp-def>
    
    This patch also uses the <undef> flag on partial defs to recognize
    non-reading operands:
    
      %vreg110:sub_32bit<def,undef> = COPY %vreg77:sub_32bit
    
    This fixes a subtle bug in RegisterCoalescer where LIS->shrinkToUses
    would treat a coalesced copy as still reading the register, extending
    the live range artificially.
    
    My test case only works when I disable DCE so a dead copy is left for
    RegisterCoalescer, so I am not including it.
    
    <rdar://problem/9967101>
    
    llvm-svn: 138018
    9eb77bf6
Loading