From 9d51c1875e926f96e3da186f09096460e961a4ab Mon Sep 17 00:00:00 2001 From: Francis Visoiu Mistrih Date: Sat, 14 Jul 2018 09:40:01 +0000 Subject: [PATCH] [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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@337090 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/MachineOutliner.cpp | 2 +- test/CodeGen/X86/machine-outliner-disubprogram.ll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/CodeGen/MachineOutliner.cpp b/lib/CodeGen/MachineOutliner.cpp index b69a98ccc7d..5a365f2a657 100644 --- a/lib/CodeGen/MachineOutliner.cpp +++ b/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/test/CodeGen/X86/machine-outliner-disubprogram.ll b/test/CodeGen/X86/machine-outliner-disubprogram.ll index 3f1a8ca5bdc..41570a2de59 100644 --- a/test/CodeGen/X86/machine-outliner-disubprogram.ll +++ b/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 -- 2.50.1