Skip to content
  • Evan Cheng's avatar
    Fixed a long standing spiller bug that's exposed by Thumb: · 6ad6fdb7
    Evan Cheng authored
    The code sequence before the spiller is something like:
                     = tMOVrr
            %reg1117 = tMOVrr
            %reg1078 = tLSLri %reg1117, 2
    
    The it starts spilling:
            %r0 = tRestore <fi#5>, 0
            %r1 = tRestore <fi#7>, 0
            %r1 = tMOVrr %r1<kill>
            tSpill %r1, <fi#5>, 0
            %reg1078 = tLSLri %reg1117, 2
    
    It restores the value while processing the first tMOVrr. At this point, the
    spiller remembers fi#5 is available in %r0. Next it processes the second move.
    It restores the source before the move and spills the result afterwards. The
    move becomes a noop and is deleted. However, a spill has been inserted and that
    should invalidate reuse of %r0 for fi#5 and add reuse of %r1 for fi#5.
    Therefore, %reg1117 (which is also assigned fi#5) should get %r1, not %r0.
    
    llvm-svn: 34039
    6ad6fdb7
Loading