diff options
author | Evan Cheng <evan.cheng@apple.com> | 2012-01-14 01:53:46 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2012-01-14 01:53:46 +0000 |
commit | bfe8afaaec03795fe6c78daa9817e54c186a699d (patch) | |
tree | 2b94148a27276a4c8972152fc38401fe7656bcc8 /test/Linker/partial-type-refinement.ll | |
parent | d32d3b758f9ef682de35b7f567af36adf8666cfd (diff) | |
download | external_llvm-bfe8afaaec03795fe6c78daa9817e54c186a699d.zip external_llvm-bfe8afaaec03795fe6c78daa9817e54c186a699d.tar.gz external_llvm-bfe8afaaec03795fe6c78daa9817e54c186a699d.tar.bz2 |
After r147827 and r147902, it's now possible for unallocatable registers to be
live across BBs before register allocation. This miscompiled 197.parser
when a cmp + b are optimized to a cbnz instruction even though the CPSR def
is live-in a successor.
cbnz r6, LBB89_12
...
LBB89_12:
ble LBB89_1
The fix consists of two parts. 1) Teach LiveVariables that some unallocatable
registers might be liveouts so don't mark their last use as kill if they are.
2) ARM constantpool island pass shouldn't form cbz / cbnz if the conditional
branch does not kill CPSR.
rdar://10676853
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148168 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Linker/partial-type-refinement.ll')
0 files changed, 0 insertions, 0 deletions