[ARM][LowOverheadLoops] Add LR def safety check
authorSam Parker <sam.parker@arm.com>
Tue, 17 Sep 2019 12:19:32 +0000 (12:19 +0000)
committerSam Parker <sam.parker@arm.com>
Tue, 17 Sep 2019 12:19:32 +0000 (12:19 +0000)
commit36c922278e6e7fb2083dc29dda950dfac73a194c
tree542469970fc1984e928756f7636f584d9aaab89e
parent589293800afa6238c44539dfda865e4dd418dec3
[ARM][LowOverheadLoops] Add LR def safety check

Converting the *LoopStart pseudo instructions into DLS/WLS results in
LR being defined. These instructions were inserted on the assumption
that LR would already contain the loop counter because a mov is
introduced during ISel as the the consumers in the loop can only use
LR. That assumption proved wrong!

So perform a safety check, finding an appropriate place to insert the
DLS/WLS instructions or revert if this isn't possible.

Differential Revision: https://reviews.llvm.org/D67539

llvm-svn: 372111
15 files changed:
llvm/lib/Target/ARM/ARMLowOverheadLoops.cpp
llvm/test/CodeGen/Thumb2/LowOverheadLoops/cond-mov.mir
llvm/test/CodeGen/Thumb2/LowOverheadLoops/end-positive-offset.mir
llvm/test/CodeGen/Thumb2/LowOverheadLoops/mov-after-dls.mir [new file with mode: 0644]
llvm/test/CodeGen/Thumb2/LowOverheadLoops/revert-after-call.mir
llvm/test/CodeGen/Thumb2/LowOverheadLoops/revert-after-read.mir
llvm/test/CodeGen/Thumb2/LowOverheadLoops/revert-after-spill.mir [deleted file]
llvm/test/CodeGen/Thumb2/LowOverheadLoops/revert-after-write.mir
llvm/test/CodeGen/Thumb2/LowOverheadLoops/revert-non-loop.mir
llvm/test/CodeGen/Thumb2/LowOverheadLoops/revert-while.mir
llvm/test/CodeGen/Thumb2/LowOverheadLoops/safe-def-no-mov.mir [new file with mode: 0644]
llvm/test/CodeGen/Thumb2/LowOverheadLoops/unsafe-liveout.mir [new file with mode: 0644]
llvm/test/CodeGen/Thumb2/LowOverheadLoops/unsafe-use-after.mir [new file with mode: 0644]
llvm/test/CodeGen/Thumb2/LowOverheadLoops/while-negative-offset.mir
llvm/test/CodeGen/Thumb2/LowOverheadLoops/while.mir