diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-08-19 00:30:17 +0000 |
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-08-19 00:30:17 +0000 |
| commit | 9eb77bf6151ea278c7afbb3e370781f34a8ba5cc (patch) | |
| tree | 4dc47f2189a690f5d60cb1d83bae5a24b56d17d1 /llvm/lib/CodeGen/RegAllocFast.cpp | |
| parent | 84fbdb4a8f06d2d9e301c9aeb80d3899be637e8f (diff) | |
| download | bcm5719-llvm-9eb77bf6151ea278c7afbb3e370781f34a8ba5cc.tar.gz bcm5719-llvm-9eb77bf6151ea278c7afbb3e370781f34a8ba5cc.zip | |
Don't treat a partial <def,undef> operand as a read.
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
Diffstat (limited to 'llvm/lib/CodeGen/RegAllocFast.cpp')
0 files changed, 0 insertions, 0 deletions

