diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1290,13 +1290,16 @@ auto I = std::next(MI.getIterator()); while (I != MBB->end() && I->isTransient()) ++I; - if (I == MBB->instr_end() && - MBB->getReverseIterator() == MBB->getParent()->rbegin()) - return; const std::vector &Instrs = MF->getFrameInstructions(); unsigned CFIIndex = MI.getOperand(0).getCFIIndex(); const MCCFIInstruction &CFI = Instrs[CFIIndex]; + + if (I == MBB->instr_end() && + MBB->getReverseIterator() == MBB->getParent()->rbegin() && + CFI.getOperation() != MCCFIInstruction::OpRestoreState) + return; + emitCFIInstruction(CFI); }