diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-03-12 22:19:41 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-03-12 22:19:41 +0000 |
commit | 65e9d5f1a873365b47c147073368719029a7f4c8 (patch) | |
tree | e1d4209f6926b4c76fc6bfb3e872903b4bb63b1a /clang/Driver/RewriteTest.cpp | |
parent | e2f6d6cdb80d5e36682f68b6ae33a6c79fd904cd (diff) | |
download | bcm5719-llvm-65e9d5f1a873365b47c147073368719029a7f4c8.tar.gz bcm5719-llvm-65e9d5f1a873365b47c147073368719029a7f4c8.zip |
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
Diffstat (limited to 'clang/Driver/RewriteTest.cpp')
0 files changed, 0 insertions, 0 deletions