From f7d3e696a5f6e1f467ff107b6db75175887f4916 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Wed, 15 Jul 2009 23:37:26 +0000 Subject: [PATCH] Verify that there is no kill flag on tied operands on two-address instructions. This extra check is not trigged when runnning "make check" on top-of-tree. Change error message to better match llvm_unreachable() grammar. Don't call llvm_unreachable() when writing error messages to a file, but keep going. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75860 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/MachineVerifier.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/CodeGen/MachineVerifier.cpp b/lib/CodeGen/MachineVerifier.cpp index e9b90fa0408..77bfcb5e9eb 100644 --- a/lib/CodeGen/MachineVerifier.cpp +++ b/lib/CodeGen/MachineVerifier.cpp @@ -219,11 +219,10 @@ MachineVerifier::runOnMachineFunction(MachineFunction &MF) if (OutFileName) OutFile.close(); - - if (foundErrors) { + else if (foundErrors) { std::string msg; raw_string_ostream Msg(msg); - Msg << "\nStopping with " << foundErrors << " machine code errors."; + Msg << "Found " << foundErrors << " machine code errors."; llvm_report_error(Msg.str()); } @@ -353,8 +352,12 @@ MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) if (MO->isUse()) { if (MO->isKill()) { addRegWithSubRegs(regsKilled, Reg); + // Tied operands on two-address instuctions MUST NOT have a flag. + if (MI->isRegTiedToDefOperand(MONum)) + report("Illegal kill flag on two-address instruction operand", + MO, MONum); } else { - // TwoAddress instr modyfying a reg is treated as kill+def. + // TwoAddress instr modifying a reg is treated as kill+def. unsigned defIdx; if (MI->isRegTiedToDefOperand(MONum, &defIdx) && MI->getOperand(defIdx).getReg() == Reg)