MachineVerifier.cpp revision e693fe774d2f52f9affea558e88d7d43169af112
1//===-- MachineVerifier.cpp - Machine Code Verifier -------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// Pass to verify generated machine code. The following is checked: 11// 12// Operand counts: All explicit operands must be present. 13// 14// Register classes: All physical and virtual register operands must be 15// compatible with the register class required by the instruction descriptor. 16// 17// Register live intervals: Registers must be defined only once, and must be 18// defined before use. 19// 20// The machine code verifier is enabled from LLVMTargetMachine.cpp with the 21// command-line option -verify-machineinstrs, or by defining the environment 22// variable LLVM_VERIFY_MACHINEINSTRS to the name of a file that will receive 23// the verifier errors. 24//===----------------------------------------------------------------------===// 25 26#include "llvm/ADT/DenseSet.h" 27#include "llvm/ADT/SetOperations.h" 28#include "llvm/ADT/SmallVector.h" 29#include "llvm/Function.h" 30#include "llvm/CodeGen/LiveVariables.h" 31#include "llvm/CodeGen/MachineFunctionPass.h" 32#include "llvm/CodeGen/MachineRegisterInfo.h" 33#include "llvm/CodeGen/Passes.h" 34#include "llvm/Target/TargetMachine.h" 35#include "llvm/Target/TargetRegisterInfo.h" 36#include "llvm/Target/TargetInstrInfo.h" 37#include "llvm/Support/Compiler.h" 38#include "llvm/Support/Debug.h" 39#include "llvm/Support/ErrorHandling.h" 40#include "llvm/Support/raw_ostream.h" 41#include <fstream> 42 43using namespace llvm; 44 45namespace { 46 struct VISIBILITY_HIDDEN MachineVerifier : public MachineFunctionPass { 47 static char ID; // Pass ID, replacement for typeid 48 49 MachineVerifier(bool allowDoubleDefs = false) : 50 MachineFunctionPass(&ID), 51 allowVirtDoubleDefs(allowDoubleDefs), 52 allowPhysDoubleDefs(allowDoubleDefs), 53 OutFileName(getenv("LLVM_VERIFY_MACHINEINSTRS")) 54 {} 55 56 void getAnalysisUsage(AnalysisUsage &AU) const { 57 AU.setPreservesAll(); 58 MachineFunctionPass::getAnalysisUsage(AU); 59 } 60 61 bool runOnMachineFunction(MachineFunction &MF); 62 63 const bool allowVirtDoubleDefs; 64 const bool allowPhysDoubleDefs; 65 66 const char *const OutFileName; 67 std::ostream *OS; 68 const MachineFunction *MF; 69 const TargetMachine *TM; 70 const TargetRegisterInfo *TRI; 71 const MachineRegisterInfo *MRI; 72 73 unsigned foundErrors; 74 75 typedef SmallVector<unsigned, 16> RegVector; 76 typedef DenseSet<unsigned> RegSet; 77 typedef DenseMap<unsigned, const MachineInstr*> RegMap; 78 79 BitVector regsReserved; 80 RegSet regsLive; 81 RegVector regsDefined, regsDead, regsKilled; 82 RegSet regsLiveInButUnused; 83 84 // Add Reg and any sub-registers to RV 85 void addRegWithSubRegs(RegVector &RV, unsigned Reg) { 86 RV.push_back(Reg); 87 if (TargetRegisterInfo::isPhysicalRegister(Reg)) 88 for (const unsigned *R = TRI->getSubRegisters(Reg); *R; R++) 89 RV.push_back(*R); 90 } 91 92 struct BBInfo { 93 // Is this MBB reachable from the MF entry point? 94 bool reachable; 95 96 // Vregs that must be live in because they are used without being 97 // defined. Map value is the user. 98 RegMap vregsLiveIn; 99 100 // Vregs that must be dead in because they are defined without being 101 // killed first. Map value is the defining instruction. 102 RegMap vregsDeadIn; 103 104 // Regs killed in MBB. They may be defined again, and will then be in both 105 // regsKilled and regsLiveOut. 106 RegSet regsKilled; 107 108 // Regs defined in MBB and live out. Note that vregs passing through may 109 // be live out without being mentioned here. 110 RegSet regsLiveOut; 111 112 // Vregs that pass through MBB untouched. This set is disjoint from 113 // regsKilled and regsLiveOut. 114 RegSet vregsPassed; 115 116 BBInfo() : reachable(false) {} 117 118 // Add register to vregsPassed if it belongs there. Return true if 119 // anything changed. 120 bool addPassed(unsigned Reg) { 121 if (!TargetRegisterInfo::isVirtualRegister(Reg)) 122 return false; 123 if (regsKilled.count(Reg) || regsLiveOut.count(Reg)) 124 return false; 125 return vregsPassed.insert(Reg).second; 126 } 127 128 // Same for a full set. 129 bool addPassed(const RegSet &RS) { 130 bool changed = false; 131 for (RegSet::const_iterator I = RS.begin(), E = RS.end(); I != E; ++I) 132 if (addPassed(*I)) 133 changed = true; 134 return changed; 135 } 136 137 // Live-out registers are either in regsLiveOut or vregsPassed. 138 bool isLiveOut(unsigned Reg) const { 139 return regsLiveOut.count(Reg) || vregsPassed.count(Reg); 140 } 141 }; 142 143 // Extra register info per MBB. 144 DenseMap<const MachineBasicBlock*, BBInfo> MBBInfoMap; 145 146 bool isReserved(unsigned Reg) { 147 return Reg < regsReserved.size() && regsReserved.test(Reg); 148 } 149 150 void visitMachineFunctionBefore(); 151 void visitMachineBasicBlockBefore(const MachineBasicBlock *MBB); 152 void visitMachineInstrBefore(const MachineInstr *MI); 153 void visitMachineOperand(const MachineOperand *MO, unsigned MONum); 154 void visitMachineInstrAfter(const MachineInstr *MI); 155 void visitMachineBasicBlockAfter(const MachineBasicBlock *MBB); 156 void visitMachineFunctionAfter(); 157 158 void report(const char *msg, const MachineFunction *MF); 159 void report(const char *msg, const MachineBasicBlock *MBB); 160 void report(const char *msg, const MachineInstr *MI); 161 void report(const char *msg, const MachineOperand *MO, unsigned MONum); 162 163 void markReachable(const MachineBasicBlock *MBB); 164 void calcMaxRegsPassed(); 165 void calcMinRegsPassed(); 166 void checkPHIOps(const MachineBasicBlock *MBB); 167 }; 168} 169 170char MachineVerifier::ID = 0; 171static RegisterPass<MachineVerifier> 172MachineVer("machineverifier", "Verify generated machine code"); 173static const PassInfo *const MachineVerifyID = &MachineVer; 174 175FunctionPass * 176llvm::createMachineVerifierPass(bool allowPhysDoubleDefs) 177{ 178 return new MachineVerifier(allowPhysDoubleDefs); 179} 180 181bool 182MachineVerifier::runOnMachineFunction(MachineFunction &MF) 183{ 184 std::ofstream OutFile; 185 if (OutFileName) { 186 OutFile.open(OutFileName, std::ios::out | std::ios::app); 187 OS = &OutFile; 188 } else { 189 OS = cerr.stream(); 190 } 191 192 foundErrors = 0; 193 194 this->MF = &MF; 195 TM = &MF.getTarget(); 196 TRI = TM->getRegisterInfo(); 197 MRI = &MF.getRegInfo(); 198 199 visitMachineFunctionBefore(); 200 for (MachineFunction::const_iterator MFI = MF.begin(), MFE = MF.end(); 201 MFI!=MFE; ++MFI) { 202 visitMachineBasicBlockBefore(MFI); 203 for (MachineBasicBlock::const_iterator MBBI = MFI->begin(), 204 MBBE = MFI->end(); MBBI != MBBE; ++MBBI) { 205 visitMachineInstrBefore(MBBI); 206 for (unsigned I = 0, E = MBBI->getNumOperands(); I != E; ++I) 207 visitMachineOperand(&MBBI->getOperand(I), I); 208 visitMachineInstrAfter(MBBI); 209 } 210 visitMachineBasicBlockAfter(MFI); 211 } 212 visitMachineFunctionAfter(); 213 214 if (OutFileName) 215 OutFile.close(); 216 else if (foundErrors) { 217 std::string msg; 218 raw_string_ostream Msg(msg); 219 Msg << "Found " << foundErrors << " machine code errors."; 220 llvm_report_error(Msg.str()); 221 } 222 223 return false; // no changes 224} 225 226void 227MachineVerifier::report(const char *msg, const MachineFunction *MF) 228{ 229 assert(MF); 230 *OS << "\n"; 231 if (!foundErrors++) 232 MF->print(OS); 233 *OS << "*** Bad machine code: " << msg << " ***\n" 234 << "- function: " << MF->getFunction()->getNameStr() << "\n"; 235} 236 237void 238MachineVerifier::report(const char *msg, const MachineBasicBlock *MBB) 239{ 240 assert(MBB); 241 report(msg, MBB->getParent()); 242 *OS << "- basic block: " << MBB->getBasicBlock()->getNameStr() 243 << " " << (void*)MBB 244 << " (#" << MBB->getNumber() << ")\n"; 245} 246 247void 248MachineVerifier::report(const char *msg, const MachineInstr *MI) 249{ 250 assert(MI); 251 report(msg, MI->getParent()); 252 *OS << "- instruction: "; 253 MI->print(OS, TM); 254} 255 256void 257MachineVerifier::report(const char *msg, 258 const MachineOperand *MO, unsigned MONum) 259{ 260 assert(MO); 261 report(msg, MO->getParent()); 262 *OS << "- operand " << MONum << ": "; 263 MO->print(*OS, TM); 264 *OS << "\n"; 265} 266 267void 268MachineVerifier::markReachable(const MachineBasicBlock *MBB) 269{ 270 BBInfo &MInfo = MBBInfoMap[MBB]; 271 if (!MInfo.reachable) { 272 MInfo.reachable = true; 273 for (MachineBasicBlock::const_succ_iterator SuI = MBB->succ_begin(), 274 SuE = MBB->succ_end(); SuI != SuE; ++SuI) 275 markReachable(*SuI); 276 } 277} 278 279void 280MachineVerifier::visitMachineFunctionBefore() 281{ 282 regsReserved = TRI->getReservedRegs(*MF); 283 284 // A sub-register of a reserved register is also reserved 285 for (int Reg = regsReserved.find_first(); Reg>=0; 286 Reg = regsReserved.find_next(Reg)) { 287 for (const unsigned *Sub = TRI->getSubRegisters(Reg); *Sub; ++Sub) { 288 // FIXME: This should probably be: 289 // assert(regsReserved.test(*Sub) && "Non-reserved sub-register"); 290 regsReserved.set(*Sub); 291 } 292 } 293 markReachable(&MF->front()); 294} 295 296void 297MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) 298{ 299 regsLive.clear(); 300 for (MachineBasicBlock::const_livein_iterator I = MBB->livein_begin(), 301 E = MBB->livein_end(); I != E; ++I) { 302 if (!TargetRegisterInfo::isPhysicalRegister(*I)) { 303 report("MBB live-in list contains non-physical register", MBB); 304 continue; 305 } 306 regsLive.insert(*I); 307 for (const unsigned *R = TRI->getSubRegisters(*I); *R; R++) 308 regsLive.insert(*R); 309 } 310 regsLiveInButUnused = regsLive; 311 regsKilled.clear(); 312 regsDefined.clear(); 313} 314 315void 316MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) 317{ 318 const TargetInstrDesc &TI = MI->getDesc(); 319 if (MI->getNumExplicitOperands() < TI.getNumOperands()) { 320 report("Too few operands", MI); 321 *OS << TI.getNumOperands() << " operands expected, but " 322 << MI->getNumExplicitOperands() << " given.\n"; 323 } 324 if (!TI.isVariadic()) { 325 if (MI->getNumExplicitOperands() > TI.getNumOperands()) { 326 report("Too many operands", MI); 327 *OS << TI.getNumOperands() << " operands expected, but " 328 << MI->getNumExplicitOperands() << " given.\n"; 329 } 330 } 331} 332 333void 334MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) 335{ 336 const MachineInstr *MI = MO->getParent(); 337 const TargetInstrDesc &TI = MI->getDesc(); 338 339 // The first TI.NumDefs operands must be explicit register defines 340 if (MONum < TI.getNumDefs()) { 341 if (!MO->isReg()) 342 report("Explicit definition must be a register", MO, MONum); 343 else if (!MO->isDef()) 344 report("Explicit definition marked as use", MO, MONum); 345 else if (MO->isImplicit()) 346 report("Explicit definition marked as implicit", MO, MONum); 347 } 348 349 switch (MO->getType()) { 350 case MachineOperand::MO_Register: { 351 const unsigned Reg = MO->getReg(); 352 if (!Reg) 353 return; 354 355 // Check Live Variables. 356 if (MO->isUndef()) { 357 // An <undef> doesn't refer to any register, so just skip it. 358 } else if (MO->isUse()) { 359 regsLiveInButUnused.erase(Reg); 360 361 if (MO->isKill()) { 362 addRegWithSubRegs(regsKilled, Reg); 363 // Tied operands on two-address instuctions MUST NOT have a <kill> flag. 364 if (MI->isRegTiedToDefOperand(MONum)) 365 report("Illegal kill flag on two-address instruction operand", 366 MO, MONum); 367 } else { 368 // TwoAddress instr modifying a reg is treated as kill+def. 369 unsigned defIdx; 370 if (MI->isRegTiedToDefOperand(MONum, &defIdx) && 371 MI->getOperand(defIdx).getReg() == Reg) 372 addRegWithSubRegs(regsKilled, Reg); 373 } 374 // Use of a dead register. 375 if (!regsLive.count(Reg)) { 376 if (TargetRegisterInfo::isPhysicalRegister(Reg)) { 377 // Reserved registers may be used even when 'dead'. 378 if (!isReserved(Reg)) 379 report("Using an undefined physical register", MO, MONum); 380 } else { 381 BBInfo &MInfo = MBBInfoMap[MI->getParent()]; 382 // We don't know which virtual registers are live in, so only complain 383 // if vreg was killed in this MBB. Otherwise keep track of vregs that 384 // must be live in. PHI instructions are handled separately. 385 if (MInfo.regsKilled.count(Reg)) 386 report("Using a killed virtual register", MO, MONum); 387 else if (MI->getOpcode() != TargetInstrInfo::PHI) 388 MInfo.vregsLiveIn.insert(std::make_pair(Reg, MI)); 389 } 390 } 391 } else { 392 assert(MO->isDef()); 393 // Register defined. 394 // TODO: verify that earlyclobber ops are not used. 395 if (MO->isDead()) 396 addRegWithSubRegs(regsDead, Reg); 397 else 398 addRegWithSubRegs(regsDefined, Reg); 399 } 400 401 // Check register classes. 402 if (MONum < TI.getNumOperands() && !MO->isImplicit()) { 403 const TargetOperandInfo &TOI = TI.OpInfo[MONum]; 404 unsigned SubIdx = MO->getSubReg(); 405 406 if (TargetRegisterInfo::isPhysicalRegister(Reg)) { 407 unsigned sr = Reg; 408 if (SubIdx) { 409 unsigned s = TRI->getSubReg(Reg, SubIdx); 410 if (!s) { 411 report("Invalid subregister index for physical register", 412 MO, MONum); 413 return; 414 } 415 sr = s; 416 } 417 if (const TargetRegisterClass *DRC = TOI.getRegClass(TRI)) { 418 if (!DRC->contains(sr)) { 419 report("Illegal physical register for instruction", MO, MONum); 420 *OS << TRI->getName(sr) << " is not a " 421 << DRC->getName() << " register.\n"; 422 } 423 } 424 } else { 425 // Virtual register. 426 const TargetRegisterClass *RC = MRI->getRegClass(Reg); 427 if (SubIdx) { 428 if (RC->subregclasses_begin()+SubIdx >= RC->subregclasses_end()) { 429 report("Invalid subregister index for virtual register", MO, MONum); 430 return; 431 } 432 RC = *(RC->subregclasses_begin()+SubIdx); 433 } 434 if (const TargetRegisterClass *DRC = TOI.getRegClass(TRI)) { 435 if (RC != DRC && !RC->hasSuperClass(DRC)) { 436 report("Illegal virtual register for instruction", MO, MONum); 437 *OS << "Expected a " << DRC->getName() << " register, but got a " 438 << RC->getName() << " register\n"; 439 } 440 } 441 } 442 } 443 break; 444 } 445 // Can PHI instrs refer to MBBs not in the CFG? X86 and ARM do. 446 // case MachineOperand::MO_MachineBasicBlock: 447 // if (MI->getOpcode() == TargetInstrInfo::PHI) { 448 // if (!MO->getMBB()->isSuccessor(MI->getParent())) 449 // report("PHI operand is not in the CFG", MO, MONum); 450 // } 451 // break; 452 default: 453 break; 454 } 455} 456 457void 458MachineVerifier::visitMachineInstrAfter(const MachineInstr *MI) 459{ 460 BBInfo &MInfo = MBBInfoMap[MI->getParent()]; 461 set_union(MInfo.regsKilled, regsKilled); 462 set_subtract(regsLive, regsKilled); 463 regsKilled.clear(); 464 465 // Verify that both <def> and <def,dead> operands refer to dead registers. 466 RegVector defs(regsDefined); 467 defs.append(regsDead.begin(), regsDead.end()); 468 469 for (RegVector::const_iterator I = defs.begin(), E = defs.end(); 470 I != E; ++I) { 471 if (regsLive.count(*I)) { 472 if (TargetRegisterInfo::isPhysicalRegister(*I)) { 473 if (!allowPhysDoubleDefs && !isReserved(*I) && 474 !regsLiveInButUnused.count(*I)) { 475 report("Redefining a live physical register", MI); 476 *OS << "Register " << TRI->getName(*I) 477 << " was defined but already live.\n"; 478 } 479 } else { 480 if (!allowVirtDoubleDefs) { 481 report("Redefining a live virtual register", MI); 482 *OS << "Virtual register %reg" << *I 483 << " was defined but already live.\n"; 484 } 485 } 486 } else if (TargetRegisterInfo::isVirtualRegister(*I) && 487 !MInfo.regsKilled.count(*I)) { 488 // Virtual register defined without being killed first must be dead on 489 // entry. 490 MInfo.vregsDeadIn.insert(std::make_pair(*I, MI)); 491 } 492 } 493 494 set_subtract(regsLive, regsDead); regsDead.clear(); 495 set_union(regsLive, regsDefined); regsDefined.clear(); 496} 497 498void 499MachineVerifier::visitMachineBasicBlockAfter(const MachineBasicBlock *MBB) 500{ 501 MBBInfoMap[MBB].regsLiveOut = regsLive; 502 regsLive.clear(); 503} 504 505// Calculate the largest possible vregsPassed sets. These are the registers that 506// can pass through an MBB live, but may not be live every time. It is assumed 507// that all vregsPassed sets are empty before the call. 508void 509MachineVerifier::calcMaxRegsPassed() 510{ 511 // First push live-out regs to successors' vregsPassed. Remember the MBBs that 512 // have any vregsPassed. 513 DenseSet<const MachineBasicBlock*> todo; 514 for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end(); 515 MFI != MFE; ++MFI) { 516 const MachineBasicBlock &MBB(*MFI); 517 BBInfo &MInfo = MBBInfoMap[&MBB]; 518 if (!MInfo.reachable) 519 continue; 520 for (MachineBasicBlock::const_succ_iterator SuI = MBB.succ_begin(), 521 SuE = MBB.succ_end(); SuI != SuE; ++SuI) { 522 BBInfo &SInfo = MBBInfoMap[*SuI]; 523 if (SInfo.addPassed(MInfo.regsLiveOut)) 524 todo.insert(*SuI); 525 } 526 } 527 528 // Iteratively push vregsPassed to successors. This will converge to the same 529 // final state regardless of DenseSet iteration order. 530 while (!todo.empty()) { 531 const MachineBasicBlock *MBB = *todo.begin(); 532 todo.erase(MBB); 533 BBInfo &MInfo = MBBInfoMap[MBB]; 534 for (MachineBasicBlock::const_succ_iterator SuI = MBB->succ_begin(), 535 SuE = MBB->succ_end(); SuI != SuE; ++SuI) { 536 if (*SuI == MBB) 537 continue; 538 BBInfo &SInfo = MBBInfoMap[*SuI]; 539 if (SInfo.addPassed(MInfo.vregsPassed)) 540 todo.insert(*SuI); 541 } 542 } 543} 544 545// Calculate the minimum vregsPassed set. These are the registers that always 546// pass live through an MBB. The calculation assumes that calcMaxRegsPassed has 547// been called earlier. 548void 549MachineVerifier::calcMinRegsPassed() 550{ 551 DenseSet<const MachineBasicBlock*> todo; 552 for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end(); 553 MFI != MFE; ++MFI) 554 todo.insert(MFI); 555 556 while (!todo.empty()) { 557 const MachineBasicBlock *MBB = *todo.begin(); 558 todo.erase(MBB); 559 BBInfo &MInfo = MBBInfoMap[MBB]; 560 561 // Remove entries from vRegsPassed that are not live out from all 562 // reachable predecessors. 563 RegSet dead; 564 for (RegSet::iterator I = MInfo.vregsPassed.begin(), 565 E = MInfo.vregsPassed.end(); I != E; ++I) { 566 for (MachineBasicBlock::const_pred_iterator PrI = MBB->pred_begin(), 567 PrE = MBB->pred_end(); PrI != PrE; ++PrI) { 568 BBInfo &PrInfo = MBBInfoMap[*PrI]; 569 if (PrInfo.reachable && !PrInfo.isLiveOut(*I)) { 570 dead.insert(*I); 571 break; 572 } 573 } 574 } 575 // If any regs removed, we need to recheck successors. 576 if (!dead.empty()) { 577 set_subtract(MInfo.vregsPassed, dead); 578 todo.insert(MBB->succ_begin(), MBB->succ_end()); 579 } 580 } 581} 582 583// Check PHI instructions at the beginning of MBB. It is assumed that 584// calcMinRegsPassed has been run so BBInfo::isLiveOut is valid. 585void 586MachineVerifier::checkPHIOps(const MachineBasicBlock *MBB) 587{ 588 for (MachineBasicBlock::const_iterator BBI = MBB->begin(), BBE = MBB->end(); 589 BBI != BBE && BBI->getOpcode() == TargetInstrInfo::PHI; ++BBI) { 590 DenseSet<const MachineBasicBlock*> seen; 591 592 for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2) { 593 unsigned Reg = BBI->getOperand(i).getReg(); 594 const MachineBasicBlock *Pre = BBI->getOperand(i + 1).getMBB(); 595 if (!Pre->isSuccessor(MBB)) 596 continue; 597 seen.insert(Pre); 598 BBInfo &PrInfo = MBBInfoMap[Pre]; 599 if (PrInfo.reachable && !PrInfo.isLiveOut(Reg)) 600 report("PHI operand is not live-out from predecessor", 601 &BBI->getOperand(i), i); 602 } 603 604 // Did we see all predecessors? 605 for (MachineBasicBlock::const_pred_iterator PrI = MBB->pred_begin(), 606 PrE = MBB->pred_end(); PrI != PrE; ++PrI) { 607 if (!seen.count(*PrI)) { 608 report("Missing PHI operand", BBI); 609 *OS << "MBB #" << (*PrI)->getNumber() 610 << " is a predecessor according to the CFG.\n"; 611 } 612 } 613 } 614} 615 616void 617MachineVerifier::visitMachineFunctionAfter() 618{ 619 calcMaxRegsPassed(); 620 621 // With the maximal set of vregsPassed we can verify dead-in registers. 622 for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end(); 623 MFI != MFE; ++MFI) { 624 BBInfo &MInfo = MBBInfoMap[MFI]; 625 626 // Skip unreachable MBBs. 627 if (!MInfo.reachable) 628 continue; 629 630 for (MachineBasicBlock::const_pred_iterator PrI = MFI->pred_begin(), 631 PrE = MFI->pred_end(); PrI != PrE; ++PrI) { 632 BBInfo &PrInfo = MBBInfoMap[*PrI]; 633 if (!PrInfo.reachable) 634 continue; 635 636 // Verify physical live-ins. EH landing pads have magic live-ins so we 637 // ignore them. 638 if (!MFI->isLandingPad()) { 639 for (MachineBasicBlock::const_livein_iterator I = MFI->livein_begin(), 640 E = MFI->livein_end(); I != E; ++I) { 641 if (TargetRegisterInfo::isPhysicalRegister(*I) && 642 !isReserved (*I) && !PrInfo.isLiveOut(*I)) { 643 report("Live-in physical register is not live-out from predecessor", 644 MFI); 645 *OS << "Register " << TRI->getName(*I) 646 << " is not live-out from MBB #" << (*PrI)->getNumber() 647 << ".\n"; 648 } 649 } 650 } 651 652 653 // Verify dead-in virtual registers. 654 if (!allowVirtDoubleDefs) { 655 for (RegMap::iterator I = MInfo.vregsDeadIn.begin(), 656 E = MInfo.vregsDeadIn.end(); I != E; ++I) { 657 // DeadIn register must be in neither regsLiveOut or vregsPassed of 658 // any predecessor. 659 if (PrInfo.isLiveOut(I->first)) { 660 report("Live-in virtual register redefined", I->second); 661 *OS << "Register %reg" << I->first 662 << " was live-out from predecessor MBB #" 663 << (*PrI)->getNumber() << ".\n"; 664 } 665 } 666 } 667 } 668 } 669 670 calcMinRegsPassed(); 671 672 // With the minimal set of vregsPassed we can verify live-in virtual 673 // registers, including PHI instructions. 674 for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end(); 675 MFI != MFE; ++MFI) { 676 BBInfo &MInfo = MBBInfoMap[MFI]; 677 678 // Skip unreachable MBBs. 679 if (!MInfo.reachable) 680 continue; 681 682 checkPHIOps(MFI); 683 684 for (MachineBasicBlock::const_pred_iterator PrI = MFI->pred_begin(), 685 PrE = MFI->pred_end(); PrI != PrE; ++PrI) { 686 BBInfo &PrInfo = MBBInfoMap[*PrI]; 687 if (!PrInfo.reachable) 688 continue; 689 690 for (RegMap::iterator I = MInfo.vregsLiveIn.begin(), 691 E = MInfo.vregsLiveIn.end(); I != E; ++I) { 692 if (!PrInfo.isLiveOut(I->first)) { 693 report("Used virtual register is not live-in", I->second); 694 *OS << "Register %reg" << I->first 695 << " is not live-out from predecessor MBB #" 696 << (*PrI)->getNumber() 697 << ".\n"; 698 } 699 } 700 } 701 } 702} 703