diff options
author | Florian Hahn <florian.hahn@arm.com> | 2018-03-06 13:12:32 +0000 |
---|---|---|
committer | Florian Hahn <florian.hahn@arm.com> | 2018-03-06 13:12:32 +0000 |
commit | f0a25f7253745d8aa3c3692e53110fc20a569bd0 (patch) | |
tree | 90d761243c00062aff7cf00031795f800b6cc06f /llvm/lib/Transforms/Utils | |
parent | 33caf899704c9a300be44e97c70f1c8a9e679072 (diff) | |
download | bcm5719-llvm-f0a25f7253745d8aa3c3692e53110fc20a569bd0.tar.gz bcm5719-llvm-f0a25f7253745d8aa3c3692e53110fc20a569bd0.zip |
[CloneFunction] Support BB == PredBB in DuplicateInstructionsInSplit.
In case PredBB == BB and StopAt == BB's terminator, StopAt != &*BI will
fail, because BB's terminator instruction gets replaced.
By using BB.getTerminator() we get the current terminator which we can use
to compare.
Reviewers: sanjoy, anna, reames
Reviewed By: anna
Differential Revision: https://reviews.llvm.org/D43822
llvm-svn: 326779
Diffstat (limited to 'llvm/lib/Transforms/Utils')
-rw-r--r-- | llvm/lib/Transforms/Utils/CloneFunction.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/CloneFunction.cpp b/llvm/lib/Transforms/Utils/CloneFunction.cpp index 16af2c7b808..3bc178ec88b 100644 --- a/llvm/lib/Transforms/Utils/CloneFunction.cpp +++ b/llvm/lib/Transforms/Utils/CloneFunction.cpp @@ -811,7 +811,9 @@ llvm::DuplicateInstructionsInSplitBetween(BasicBlock *BB, BasicBlock *PredBB, // Clone the non-phi instructions of BB into NewBB, keeping track of the // mapping and using it to remap operands in the cloned instructions. - for (; StopAt != &*BI; ++BI) { + // Stop once we see the terminator too. This covers the case where BB's + // terminator gets replaced and StopAt == BB's terminator. + for (; StopAt != &*BI && BB->getTerminator() != &*BI; ++BI) { Instruction *New = BI->clone(); New->setName(BI->getName()); New->insertBefore(NewTerm); |