From: Nick Desaulniers Date: Wed, 17 Jun 2020 18:51:51 +0000 (-0700) Subject: [InlineSpiller] add assert about spills post terminators X-Git-Tag: llvmorg-12-init~2773 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e7816f263b14578e2d926d2ee2d32db21e6ae95b;p=platform%2Fupstream%2Fllvm.git [InlineSpiller] add assert about spills post terminators Summary: This invariant is being violated in the test case https://reviews.llvm.org/D77849, related to the use of the relatively new ability for callbr to have return values, and MachineBasicBlocks with INLINEASM_BR terminators to emit live out register defs. As noted in the comment, this triggers invariant violations in MachineVerifier via `llc -verify-machineinstrs` or `llc -verify-regalloc`, since only MachineInstrs that are terminators are allowed to follow the first terminator. https://reviews.llvm.org/D75098 may rework this very assertion if we're spilling via a (proposed) TCOPY MachineInstr. Reviewers: void, efriedma, arsenm Reviewed By: efriedma Subscribers: qcolombet, wdng, hiraditya, llvm-commits, srhines Tags: #llvm Differential Revision: https://reviews.llvm.org/D78166 --- diff --git a/llvm/lib/CodeGen/InlineSpiller.cpp b/llvm/lib/CodeGen/InlineSpiller.cpp index 17c8af9..90dfaf6 100644 --- a/llvm/lib/CodeGen/InlineSpiller.cpp +++ b/llvm/lib/CodeGen/InlineSpiller.cpp @@ -945,6 +945,9 @@ static bool isRealSpill(const MachineInstr &Def) { /// insertSpill - Insert a spill of NewVReg after MI. void InlineSpiller::insertSpill(unsigned NewVReg, bool isKill, MachineBasicBlock::iterator MI) { + // Spill are not terminators, so inserting spills after terminators will + // violate invariants in MachineVerifier. + assert(!MI->isTerminator() && "Inserting a spill after a terminator"); MachineBasicBlock &MBB = *MI->getParent(); MachineInstrSpan MIS(MI, &MBB);