diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-08-05 18:47:07 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-08-05 18:47:07 +0000 |
commit | d633abebf687bdde36986213bd04c813e7d676f0 (patch) | |
tree | 648c4b76ecff92dd1dcb3f49c713b54995389c3e /lldb/scripts/Python/modify-python-lldb.py | |
parent | 30097b7c41f7ffa5a6b3fd2b7cb5c9a180b52990 (diff) | |
download | llvm-d633abebf687bdde36986213bd04c813e7d676f0.zip llvm-d633abebf687bdde36986213bd04c813e7d676f0.tar.gz llvm-d633abebf687bdde36986213bd04c813e7d676f0.tar.bz2 |
Fix liveness computations in BranchFolding.
The old code would look at kills and defs in one pass over the
instruction operands, causing problems with this code:
%R0<def>, %CPSR<def,dead> = tLSLri %R5<kill>, 2, pred:14, pred:%noreg
%R0<def>, %CPSR<def,dead> = tADDrr %R4<kill>, %R0<kill>, pred:14, %pred:%noreg
The last instruction kills and redefines %R0, so it is still live after
the instruction.
This caused a register scavenger crash when compiling 483.xalancbmk for
armv6. I am not including a test case because it requires too much bad
luck to expose this old bug.
First you need to convince the register allocator to use %R0 twice on
the tADDrr instruction, then you have to convince BranchFolding to do
something that causes it to run the register scavenger on he bad block.
<rdar://problem/9898200>
llvm-svn: 136973
Diffstat (limited to 'lldb/scripts/Python/modify-python-lldb.py')
0 files changed, 0 insertions, 0 deletions