]> granicus.if.org Git - llvm/commitdiff
[MachineOutliner] Check the last instruction from the sequence when updating liveness
authorFrancis Visoiu Mistrih <francisvm@yahoo.com>
Sat, 14 Jul 2018 09:40:01 +0000 (09:40 +0000)
committerFrancis Visoiu Mistrih <francisvm@yahoo.com>
Sat, 14 Jul 2018 09:40:01 +0000 (09:40 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337090 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineOutliner.cpp
test/CodeGen/X86/machine-outliner-disubprogram.ll

index b69a98ccc7dc2fabb4d5d466524b765d5ce5cf43..5a365f2a6578db314a40a082f9835ef3811f59e3 100644 (file)
@@ -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
index 3f1a8ca5bdc6bbccc3a62a4b755649bef18cf798..41570a2de596ae1b9149b941794fecd39863703c 100644 (file)
@@ -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