summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrancis Visoiu Mistrih <francisvm@yahoo.com>2018-07-14 09:40:01 +0000
committerFrancis Visoiu Mistrih <francisvm@yahoo.com>2018-07-14 09:40:01 +0000
commitf905bf14086f7158bd645c4ad0c62567e1b97543 (patch)
tree0e35d29fbcecc4fbf6a72de1214347abde3f5977
parentfb503ac0277ab6613d96c35f0eb6f789e585d3df (diff)
downloadbcm5719-llvm-f905bf14086f7158bd645c4ad0c62567e1b97543.tar.gz
bcm5719-llvm-f905bf14086f7158bd645c4ad0c62567e1b97543.zip
[MachineOutliner] Check the last instruction from the sequence when updating liveness
The MachineOutliner was doing an std::for_each from the call (inserted before the outlined sequence) to the iterator at the end of the sequence. std::for_each needs the iterator past the end, so the last instruction was not taken into account when propagating the liveness information. This fixes the machine verifier issue in machine-outliner-disubprogram.ll. Differential Revision: https://reviews.llvm.org/D49295 llvm-svn: 337090
-rw-r--r--llvm/lib/CodeGen/MachineOutliner.cpp2
-rw-r--r--llvm/test/CodeGen/X86/machine-outliner-disubprogram.ll2
2 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/MachineOutliner.cpp b/llvm/lib/CodeGen/MachineOutliner.cpp
index b69a98ccc7d..5a365f2a657 100644
--- a/llvm/lib/CodeGen/MachineOutliner.cpp
+++ b/llvm/lib/CodeGen/MachineOutliner.cpp
@@ -1309,7 +1309,7 @@ bool MachineOutliner::outline(
// First inst in outlined range <-- Anything that's defined in this
// ... .. range has to be added as an implicit
// Last inst in outlined range <-- def to the call instruction.
- std::for_each(CallInst, EndIt, CopyDefs);
+ std::for_each(CallInst, std::next(EndIt), CopyDefs);
}
// Erase from the point after where the call was inserted up to, and
diff --git a/llvm/test/CodeGen/X86/machine-outliner-disubprogram.ll b/llvm/test/CodeGen/X86/machine-outliner-disubprogram.ll
index 3f1a8ca5bdc..41570a2de59 100644
--- a/llvm/test/CodeGen/X86/machine-outliner-disubprogram.ll
+++ b/llvm/test/CodeGen/X86/machine-outliner-disubprogram.ll
@@ -2,7 +2,7 @@
; that we correctly emit DISubprograms for those functions.
; Also make sure that the DISubprograms reference the generated unit.
; make sure that if there are two outlined functions in the program,
-; RUN: llc %s -enable-machine-outliner -mtriple=x86_64-apple-darwin -o /dev/null -print-after=machine-outliner
+; RUN: llc %s -verify-machineinstrs -enable-machine-outliner -mtriple=x86_64-apple-darwin -o /dev/null -print-after=machine-outliner
define void @f6() #0 !dbg !8 {
entry:
%dog = alloca i32, align 4
OpenPOWER on IntegriCloud