Skip to content
  • Evan Cheng's avatar
    Experimental scheduler change to schedule / coalesce the copies added for... · 65e9d5f1
    Evan Cheng authored
    Experimental scheduler change to schedule / coalesce the copies added for function livein's. Take 2008-03-10-RegAllocInfLoop.ll, the schedule looks like this after these copies are inserted:
    
    entry: 0x12049d0, LLVM BB @0x1201fd0, ID#0:
    Live Ins: %EAX %EDX %ECX
            %reg1031<def> = MOVPC32r 0
            %reg1032<def> = ADD32ri %reg1031, <es:_GLOBAL_OFFSET_TABLE_>, %EFLAGS<imp-def>
            %reg1028<def> = MOV32rr %EAX
            %reg1029<def> = MOV32rr %EDX
            %reg1030<def> = MOV32rr %ECX
            %reg1027<def> = MOV8rm %reg0, 1, %reg0, 0, Mem:LD(1,1) [0x1201910 + 0]
            %reg1025<def> = MOV32rr %reg1029
            %reg1026<def> = MOV32rr %reg1030
            %reg1024<def> = MOV32rr %reg1028
    
    The copies unnecessarily increase register pressure and it will end up requiring a physical register to be spilled.
    
    With -schedule-livein-copies:
    entry: 0x12049d0, LLVM BB @0x1201fa0, ID#0:
    Live Ins: %EAX %EDX %ECX
            %reg1031<def> = MOVPC32r 0
            %reg1032<def> = ADD32ri %reg1031, <es:_GLOBAL_OFFSET_TABLE_>, %EFLAGS<imp-def>
            %reg1024<def> = MOV32rr %EAX
            %reg1025<def> = MOV32rr %EDX
            %reg1026<def> = MOV32rr %ECX
            %reg1027<def> = MOV8rm %reg0, 1, %reg0, 0, Mem:LD(1,1) [0x12018e0 + 0]
    
    Much better!
    
    llvm-svn: 48307
    65e9d5f1
Loading