[ARM][LowOverheadLoops] Add LR def safety check
commit81c57d04cebfa3428a2b16cc31d7193003f2d4d5
authorSam Parker <sam.parker@arm.com>
Tue, 17 Sep 2019 12:19:32 +0000 (17 12:19 +0000)
committerSam Parker <sam.parker@arm.com>
Tue, 17 Sep 2019 12:19:32 +0000 (17 12:19 +0000)
tree728ea9bcc66c5b60c80b690ad00f10f422523751
parent5ca1bec7882653dbaefdab00487d212f26b39fa5
[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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@372111 91177308-0d34-0410-b5e6-96231b3b80d8
15 files changed:
lib/Target/ARM/ARMLowOverheadLoops.cpp
test/CodeGen/Thumb2/LowOverheadLoops/cond-mov.mir
test/CodeGen/Thumb2/LowOverheadLoops/end-positive-offset.mir
test/CodeGen/Thumb2/LowOverheadLoops/mov-after-dls.mir [copied from test/CodeGen/Thumb2/LowOverheadLoops/cond-mov.mir with 86% similarity]
test/CodeGen/Thumb2/LowOverheadLoops/revert-after-call.mir
test/CodeGen/Thumb2/LowOverheadLoops/revert-after-read.mir
test/CodeGen/Thumb2/LowOverheadLoops/revert-after-spill.mir [deleted file]
test/CodeGen/Thumb2/LowOverheadLoops/revert-after-write.mir
test/CodeGen/Thumb2/LowOverheadLoops/revert-non-loop.mir
test/CodeGen/Thumb2/LowOverheadLoops/revert-while.mir
test/CodeGen/Thumb2/LowOverheadLoops/safe-def-no-mov.mir [copied from test/CodeGen/Thumb2/LowOverheadLoops/cond-mov.mir with 77% similarity]
test/CodeGen/Thumb2/LowOverheadLoops/unsafe-liveout.mir [copied from test/CodeGen/Thumb2/LowOverheadLoops/cond-mov.mir with 76% similarity]
test/CodeGen/Thumb2/LowOverheadLoops/unsafe-use-after.mir [copied from test/CodeGen/Thumb2/LowOverheadLoops/cond-mov.mir with 74% similarity]
test/CodeGen/Thumb2/LowOverheadLoops/while-negative-offset.mir
test/CodeGen/Thumb2/LowOverheadLoops/while.mir