1 //===-- MachineVerifier.cpp - Machine Code Verifier -----------------------===// 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/CodeGen/Passes.h" 27 #include "llvm/ADT/DenseSet.h" 28 #include "llvm/ADT/DepthFirstIterator.h" 29 #include "llvm/ADT/SetOperations.h" 30 #include "llvm/ADT/SmallVector.h" 31 #include "llvm/Analysis/EHPersonalities.h" 32 #include "llvm/CodeGen/LiveIntervalAnalysis.h" 33 #include "llvm/CodeGen/LiveStackAnalysis.h" 34 #include "llvm/CodeGen/LiveVariables.h" 35 #include "llvm/CodeGen/MachineFrameInfo.h" 36 #include "llvm/CodeGen/MachineFunctionPass.h" 37 #include "llvm/CodeGen/MachineMemOperand.h" 38 #include "llvm/CodeGen/MachineRegisterInfo.h" 39 #include "llvm/IR/BasicBlock.h" 40 #include "llvm/IR/InlineAsm.h" 41 #include "llvm/IR/Instructions.h" 42 #include "llvm/MC/MCAsmInfo.h" 43 #include "llvm/Support/Debug.h" 44 #include "llvm/Support/ErrorHandling.h" 45 #include "llvm/Support/FileSystem.h" 46 #include "llvm/Support/raw_ostream.h" 47 #include "llvm/Target/TargetInstrInfo.h" 48 #include "llvm/Target/TargetMachine.h" 49 #include "llvm/Target/TargetRegisterInfo.h" 50 #include "llvm/Target/TargetSubtargetInfo.h" 51 using namespace llvm; 52 53 namespace { 54 struct MachineVerifier { 55 56 MachineVerifier(Pass *pass, const char *b) : 57 PASS(pass), 58 Banner(b) 59 {} 60 61 unsigned verify(MachineFunction &MF); 62 63 Pass *const PASS; 64 const char *Banner; 65 const MachineFunction *MF; 66 const TargetMachine *TM; 67 const TargetInstrInfo *TII; 68 const TargetRegisterInfo *TRI; 69 const MachineRegisterInfo *MRI; 70 71 unsigned foundErrors; 72 73 // Avoid querying the MachineFunctionProperties for each operand. 74 bool isFunctionRegBankSelected; 75 bool isFunctionSelected; 76 77 typedef SmallVector<unsigned, 16> RegVector; 78 typedef SmallVector<const uint32_t*, 4> RegMaskVector; 79 typedef DenseSet<unsigned> RegSet; 80 typedef DenseMap<unsigned, const MachineInstr*> RegMap; 81 typedef SmallPtrSet<const MachineBasicBlock*, 8> BlockSet; 82 83 const MachineInstr *FirstTerminator; 84 BlockSet FunctionBlocks; 85 86 BitVector regsReserved; 87 RegSet regsLive; 88 RegVector regsDefined, regsDead, regsKilled; 89 RegMaskVector regMasks; 90 91 SlotIndex lastIndex; 92 93 // Add Reg and any sub-registers to RV 94 void addRegWithSubRegs(RegVector &RV, unsigned Reg) { 95 RV.push_back(Reg); 96 if (TargetRegisterInfo::isPhysicalRegister(Reg)) 97 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs) 98 RV.push_back(*SubRegs); 99 } 100 101 struct BBInfo { 102 // Is this MBB reachable from the MF entry point? 103 bool reachable; 104 105 // Vregs that must be live in because they are used without being 106 // defined. Map value is the user. 107 RegMap vregsLiveIn; 108 109 // Regs killed in MBB. They may be defined again, and will then be in both 110 // regsKilled and regsLiveOut. 111 RegSet regsKilled; 112 113 // Regs defined in MBB and live out. Note that vregs passing through may 114 // be live out without being mentioned here. 115 RegSet regsLiveOut; 116 117 // Vregs that pass through MBB untouched. This set is disjoint from 118 // regsKilled and regsLiveOut. 119 RegSet vregsPassed; 120 121 // Vregs that must pass through MBB because they are needed by a successor 122 // block. This set is disjoint from regsLiveOut. 123 RegSet vregsRequired; 124 125 // Set versions of block's predecessor and successor lists. 126 BlockSet Preds, Succs; 127 128 BBInfo() : reachable(false) {} 129 130 // Add register to vregsPassed if it belongs there. Return true if 131 // anything changed. 132 bool addPassed(unsigned Reg) { 133 if (!TargetRegisterInfo::isVirtualRegister(Reg)) 134 return false; 135 if (regsKilled.count(Reg) || regsLiveOut.count(Reg)) 136 return false; 137 return vregsPassed.insert(Reg).second; 138 } 139 140 // Same for a full set. 141 bool addPassed(const RegSet &RS) { 142 bool changed = false; 143 for (RegSet::const_iterator I = RS.begin(), E = RS.end(); I != E; ++I) 144 if (addPassed(*I)) 145 changed = true; 146 return changed; 147 } 148 149 // Add register to vregsRequired if it belongs there. Return true if 150 // anything changed. 151 bool addRequired(unsigned Reg) { 152 if (!TargetRegisterInfo::isVirtualRegister(Reg)) 153 return false; 154 if (regsLiveOut.count(Reg)) 155 return false; 156 return vregsRequired.insert(Reg).second; 157 } 158 159 // Same for a full set. 160 bool addRequired(const RegSet &RS) { 161 bool changed = false; 162 for (RegSet::const_iterator I = RS.begin(), E = RS.end(); I != E; ++I) 163 if (addRequired(*I)) 164 changed = true; 165 return changed; 166 } 167 168 // Same for a full map. 169 bool addRequired(const RegMap &RM) { 170 bool changed = false; 171 for (RegMap::const_iterator I = RM.begin(), E = RM.end(); I != E; ++I) 172 if (addRequired(I->first)) 173 changed = true; 174 return changed; 175 } 176 177 // Live-out registers are either in regsLiveOut or vregsPassed. 178 bool isLiveOut(unsigned Reg) const { 179 return regsLiveOut.count(Reg) || vregsPassed.count(Reg); 180 } 181 }; 182 183 // Extra register info per MBB. 184 DenseMap<const MachineBasicBlock*, BBInfo> MBBInfoMap; 185 186 bool isReserved(unsigned Reg) { 187 return Reg < regsReserved.size() && regsReserved.test(Reg); 188 } 189 190 bool isAllocatable(unsigned Reg) const { 191 return Reg < TRI->getNumRegs() && TRI->isInAllocatableClass(Reg) && 192 !regsReserved.test(Reg); 193 } 194 195 // Analysis information if available 196 LiveVariables *LiveVars; 197 LiveIntervals *LiveInts; 198 LiveStacks *LiveStks; 199 SlotIndexes *Indexes; 200 201 void visitMachineFunctionBefore(); 202 void visitMachineBasicBlockBefore(const MachineBasicBlock *MBB); 203 void visitMachineBundleBefore(const MachineInstr *MI); 204 void visitMachineInstrBefore(const MachineInstr *MI); 205 void visitMachineOperand(const MachineOperand *MO, unsigned MONum); 206 void visitMachineInstrAfter(const MachineInstr *MI); 207 void visitMachineBundleAfter(const MachineInstr *MI); 208 void visitMachineBasicBlockAfter(const MachineBasicBlock *MBB); 209 void visitMachineFunctionAfter(); 210 211 void report(const char *msg, const MachineFunction *MF); 212 void report(const char *msg, const MachineBasicBlock *MBB); 213 void report(const char *msg, const MachineInstr *MI); 214 void report(const char *msg, const MachineOperand *MO, unsigned MONum); 215 216 void report_context(const LiveInterval &LI) const; 217 void report_context(const LiveRange &LR, unsigned VRegUnit, 218 LaneBitmask LaneMask) const; 219 void report_context(const LiveRange::Segment &S) const; 220 void report_context(const VNInfo &VNI) const; 221 void report_context(SlotIndex Pos) const; 222 void report_context_liverange(const LiveRange &LR) const; 223 void report_context_lanemask(LaneBitmask LaneMask) const; 224 void report_context_vreg(unsigned VReg) const; 225 void report_context_vreg_regunit(unsigned VRegOrRegUnit) const; 226 227 void verifyInlineAsm(const MachineInstr *MI); 228 229 void checkLiveness(const MachineOperand *MO, unsigned MONum); 230 void checkLivenessAtUse(const MachineOperand *MO, unsigned MONum, 231 SlotIndex UseIdx, const LiveRange &LR, unsigned Reg, 232 LaneBitmask LaneMask = LaneBitmask::getNone()); 233 void checkLivenessAtDef(const MachineOperand *MO, unsigned MONum, 234 SlotIndex DefIdx, const LiveRange &LR, unsigned Reg, 235 LaneBitmask LaneMask = LaneBitmask::getNone()); 236 237 void markReachable(const MachineBasicBlock *MBB); 238 void calcRegsPassed(); 239 void checkPHIOps(const MachineBasicBlock *MBB); 240 241 void calcRegsRequired(); 242 void verifyLiveVariables(); 243 void verifyLiveIntervals(); 244 void verifyLiveInterval(const LiveInterval&); 245 void verifyLiveRangeValue(const LiveRange&, const VNInfo*, unsigned, 246 LaneBitmask); 247 void verifyLiveRangeSegment(const LiveRange&, 248 const LiveRange::const_iterator I, unsigned, 249 LaneBitmask); 250 void verifyLiveRange(const LiveRange&, unsigned, 251 LaneBitmask LaneMask = LaneBitmask::getNone()); 252 253 void verifyStackFrame(); 254 255 void verifySlotIndexes() const; 256 void verifyProperties(const MachineFunction &MF); 257 }; 258 259 struct MachineVerifierPass : public MachineFunctionPass { 260 static char ID; // Pass ID, replacement for typeid 261 const std::string Banner; 262 263 MachineVerifierPass(std::string banner = std::string()) 264 : MachineFunctionPass(ID), Banner(std::move(banner)) { 265 initializeMachineVerifierPassPass(*PassRegistry::getPassRegistry()); 266 } 267 268 void getAnalysisUsage(AnalysisUsage &AU) const override { 269 AU.setPreservesAll(); 270 MachineFunctionPass::getAnalysisUsage(AU); 271 } 272 273 bool runOnMachineFunction(MachineFunction &MF) override { 274 unsigned FoundErrors = MachineVerifier(this, Banner.c_str()).verify(MF); 275 if (FoundErrors) 276 report_fatal_error("Found "+Twine(FoundErrors)+" machine code errors."); 277 return false; 278 } 279 }; 280 281 } 282 283 char MachineVerifierPass::ID = 0; 284 INITIALIZE_PASS(MachineVerifierPass, "machineverifier", 285 "Verify generated machine code", false, false) 286 287 FunctionPass *llvm::createMachineVerifierPass(const std::string &Banner) { 288 return new MachineVerifierPass(Banner); 289 } 290 291 bool MachineFunction::verify(Pass *p, const char *Banner, bool AbortOnErrors) 292 const { 293 MachineFunction &MF = const_cast<MachineFunction&>(*this); 294 unsigned FoundErrors = MachineVerifier(p, Banner).verify(MF); 295 if (AbortOnErrors && FoundErrors) 296 report_fatal_error("Found "+Twine(FoundErrors)+" machine code errors."); 297 return FoundErrors == 0; 298 } 299 300 void MachineVerifier::verifySlotIndexes() const { 301 if (Indexes == nullptr) 302 return; 303 304 // Ensure the IdxMBB list is sorted by slot indexes. 305 SlotIndex Last; 306 for (SlotIndexes::MBBIndexIterator I = Indexes->MBBIndexBegin(), 307 E = Indexes->MBBIndexEnd(); I != E; ++I) { 308 assert(!Last.isValid() || I->first > Last); 309 Last = I->first; 310 } 311 } 312 313 void MachineVerifier::verifyProperties(const MachineFunction &MF) { 314 // If a pass has introduced virtual registers without clearing the 315 // NoVRegs property (or set it without allocating the vregs) 316 // then report an error. 317 if (MF.getProperties().hasProperty( 318 MachineFunctionProperties::Property::NoVRegs) && 319 MRI->getNumVirtRegs()) 320 report("Function has NoVRegs property but there are VReg operands", &MF); 321 } 322 323 unsigned MachineVerifier::verify(MachineFunction &MF) { 324 foundErrors = 0; 325 326 this->MF = &MF; 327 TM = &MF.getTarget(); 328 TII = MF.getSubtarget().getInstrInfo(); 329 TRI = MF.getSubtarget().getRegisterInfo(); 330 MRI = &MF.getRegInfo(); 331 332 isFunctionRegBankSelected = MF.getProperties().hasProperty( 333 MachineFunctionProperties::Property::RegBankSelected); 334 isFunctionSelected = MF.getProperties().hasProperty( 335 MachineFunctionProperties::Property::Selected); 336 337 LiveVars = nullptr; 338 LiveInts = nullptr; 339 LiveStks = nullptr; 340 Indexes = nullptr; 341 if (PASS) { 342 LiveInts = PASS->getAnalysisIfAvailable<LiveIntervals>(); 343 // We don't want to verify LiveVariables if LiveIntervals is available. 344 if (!LiveInts) 345 LiveVars = PASS->getAnalysisIfAvailable<LiveVariables>(); 346 LiveStks = PASS->getAnalysisIfAvailable<LiveStacks>(); 347 Indexes = PASS->getAnalysisIfAvailable<SlotIndexes>(); 348 } 349 350 verifySlotIndexes(); 351 352 verifyProperties(MF); 353 354 visitMachineFunctionBefore(); 355 for (MachineFunction::const_iterator MFI = MF.begin(), MFE = MF.end(); 356 MFI!=MFE; ++MFI) { 357 visitMachineBasicBlockBefore(&*MFI); 358 // Keep track of the current bundle header. 359 const MachineInstr *CurBundle = nullptr; 360 // Do we expect the next instruction to be part of the same bundle? 361 bool InBundle = false; 362 363 for (MachineBasicBlock::const_instr_iterator MBBI = MFI->instr_begin(), 364 MBBE = MFI->instr_end(); MBBI != MBBE; ++MBBI) { 365 if (MBBI->getParent() != &*MFI) { 366 report("Bad instruction parent pointer", &*MFI); 367 errs() << "Instruction: " << *MBBI; 368 continue; 369 } 370 371 // Check for consistent bundle flags. 372 if (InBundle && !MBBI->isBundledWithPred()) 373 report("Missing BundledPred flag, " 374 "BundledSucc was set on predecessor", 375 &*MBBI); 376 if (!InBundle && MBBI->isBundledWithPred()) 377 report("BundledPred flag is set, " 378 "but BundledSucc not set on predecessor", 379 &*MBBI); 380 381 // Is this a bundle header? 382 if (!MBBI->isInsideBundle()) { 383 if (CurBundle) 384 visitMachineBundleAfter(CurBundle); 385 CurBundle = &*MBBI; 386 visitMachineBundleBefore(CurBundle); 387 } else if (!CurBundle) 388 report("No bundle header", &*MBBI); 389 visitMachineInstrBefore(&*MBBI); 390 for (unsigned I = 0, E = MBBI->getNumOperands(); I != E; ++I) { 391 const MachineInstr &MI = *MBBI; 392 const MachineOperand &Op = MI.getOperand(I); 393 if (Op.getParent() != &MI) { 394 // Make sure to use correct addOperand / RemoveOperand / ChangeTo 395 // functions when replacing operands of a MachineInstr. 396 report("Instruction has operand with wrong parent set", &MI); 397 } 398 399 visitMachineOperand(&Op, I); 400 } 401 402 visitMachineInstrAfter(&*MBBI); 403 404 // Was this the last bundled instruction? 405 InBundle = MBBI->isBundledWithSucc(); 406 } 407 if (CurBundle) 408 visitMachineBundleAfter(CurBundle); 409 if (InBundle) 410 report("BundledSucc flag set on last instruction in block", &MFI->back()); 411 visitMachineBasicBlockAfter(&*MFI); 412 } 413 visitMachineFunctionAfter(); 414 415 // Clean up. 416 regsLive.clear(); 417 regsDefined.clear(); 418 regsDead.clear(); 419 regsKilled.clear(); 420 regMasks.clear(); 421 MBBInfoMap.clear(); 422 423 return foundErrors; 424 } 425 426 void MachineVerifier::report(const char *msg, const MachineFunction *MF) { 427 assert(MF); 428 errs() << '\n'; 429 if (!foundErrors++) { 430 if (Banner) 431 errs() << "# " << Banner << '\n'; 432 if (LiveInts != nullptr) 433 LiveInts->print(errs()); 434 else 435 MF->print(errs(), Indexes); 436 } 437 errs() << "*** Bad machine code: " << msg << " ***\n" 438 << "- function: " << MF->getName() << "\n"; 439 } 440 441 void MachineVerifier::report(const char *msg, const MachineBasicBlock *MBB) { 442 assert(MBB); 443 report(msg, MBB->getParent()); 444 errs() << "- basic block: BB#" << MBB->getNumber() 445 << ' ' << MBB->getName() 446 << " (" << (const void*)MBB << ')'; 447 if (Indexes) 448 errs() << " [" << Indexes->getMBBStartIdx(MBB) 449 << ';' << Indexes->getMBBEndIdx(MBB) << ')'; 450 errs() << '\n'; 451 } 452 453 void MachineVerifier::report(const char *msg, const MachineInstr *MI) { 454 assert(MI); 455 report(msg, MI->getParent()); 456 errs() << "- instruction: "; 457 if (Indexes && Indexes->hasIndex(*MI)) 458 errs() << Indexes->getInstructionIndex(*MI) << '\t'; 459 MI->print(errs(), /*SkipOpers=*/true); 460 errs() << '\n'; 461 } 462 463 void MachineVerifier::report(const char *msg, 464 const MachineOperand *MO, unsigned MONum) { 465 assert(MO); 466 report(msg, MO->getParent()); 467 errs() << "- operand " << MONum << ": "; 468 MO->print(errs(), TRI); 469 errs() << "\n"; 470 } 471 472 void MachineVerifier::report_context(SlotIndex Pos) const { 473 errs() << "- at: " << Pos << '\n'; 474 } 475 476 void MachineVerifier::report_context(const LiveInterval &LI) const { 477 errs() << "- interval: " << LI << '\n'; 478 } 479 480 void MachineVerifier::report_context(const LiveRange &LR, unsigned VRegUnit, 481 LaneBitmask LaneMask) const { 482 report_context_liverange(LR); 483 report_context_vreg_regunit(VRegUnit); 484 if (LaneMask.any()) 485 report_context_lanemask(LaneMask); 486 } 487 488 void MachineVerifier::report_context(const LiveRange::Segment &S) const { 489 errs() << "- segment: " << S << '\n'; 490 } 491 492 void MachineVerifier::report_context(const VNInfo &VNI) const { 493 errs() << "- ValNo: " << VNI.id << " (def " << VNI.def << ")\n"; 494 } 495 496 void MachineVerifier::report_context_liverange(const LiveRange &LR) const { 497 errs() << "- liverange: " << LR << '\n'; 498 } 499 500 void MachineVerifier::report_context_vreg(unsigned VReg) const { 501 errs() << "- v. register: " << PrintReg(VReg, TRI) << '\n'; 502 } 503 504 void MachineVerifier::report_context_vreg_regunit(unsigned VRegOrUnit) const { 505 if (TargetRegisterInfo::isVirtualRegister(VRegOrUnit)) { 506 report_context_vreg(VRegOrUnit); 507 } else { 508 errs() << "- regunit: " << PrintRegUnit(VRegOrUnit, TRI) << '\n'; 509 } 510 } 511 512 void MachineVerifier::report_context_lanemask(LaneBitmask LaneMask) const { 513 errs() << "- lanemask: " << PrintLaneMask(LaneMask) << '\n'; 514 } 515 516 void MachineVerifier::markReachable(const MachineBasicBlock *MBB) { 517 BBInfo &MInfo = MBBInfoMap[MBB]; 518 if (!MInfo.reachable) { 519 MInfo.reachable = true; 520 for (MachineBasicBlock::const_succ_iterator SuI = MBB->succ_begin(), 521 SuE = MBB->succ_end(); SuI != SuE; ++SuI) 522 markReachable(*SuI); 523 } 524 } 525 526 void MachineVerifier::visitMachineFunctionBefore() { 527 lastIndex = SlotIndex(); 528 regsReserved = MRI->reservedRegsFrozen() ? MRI->getReservedRegs() 529 : TRI->getReservedRegs(*MF); 530 531 if (!MF->empty()) 532 markReachable(&MF->front()); 533 534 // Build a set of the basic blocks in the function. 535 FunctionBlocks.clear(); 536 for (const auto &MBB : *MF) { 537 FunctionBlocks.insert(&MBB); 538 BBInfo &MInfo = MBBInfoMap[&MBB]; 539 540 MInfo.Preds.insert(MBB.pred_begin(), MBB.pred_end()); 541 if (MInfo.Preds.size() != MBB.pred_size()) 542 report("MBB has duplicate entries in its predecessor list.", &MBB); 543 544 MInfo.Succs.insert(MBB.succ_begin(), MBB.succ_end()); 545 if (MInfo.Succs.size() != MBB.succ_size()) 546 report("MBB has duplicate entries in its successor list.", &MBB); 547 } 548 549 // Check that the register use lists are sane. 550 MRI->verifyUseLists(); 551 552 if (!MF->empty()) 553 verifyStackFrame(); 554 } 555 556 // Does iterator point to a and b as the first two elements? 557 static bool matchPair(MachineBasicBlock::const_succ_iterator i, 558 const MachineBasicBlock *a, const MachineBasicBlock *b) { 559 if (*i == a) 560 return *++i == b; 561 if (*i == b) 562 return *++i == a; 563 return false; 564 } 565 566 void 567 MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) { 568 FirstTerminator = nullptr; 569 570 if (!MF->getProperties().hasProperty( 571 MachineFunctionProperties::Property::NoPHIs) && MRI->tracksLiveness()) { 572 // If this block has allocatable physical registers live-in, check that 573 // it is an entry block or landing pad. 574 for (const auto &LI : MBB->liveins()) { 575 if (isAllocatable(LI.PhysReg) && !MBB->isEHPad() && 576 MBB->getIterator() != MBB->getParent()->begin()) { 577 report("MBB has allocatable live-in, but isn't entry or landing-pad.", MBB); 578 } 579 } 580 } 581 582 // Count the number of landing pad successors. 583 SmallPtrSet<MachineBasicBlock*, 4> LandingPadSuccs; 584 for (MachineBasicBlock::const_succ_iterator I = MBB->succ_begin(), 585 E = MBB->succ_end(); I != E; ++I) { 586 if ((*I)->isEHPad()) 587 LandingPadSuccs.insert(*I); 588 if (!FunctionBlocks.count(*I)) 589 report("MBB has successor that isn't part of the function.", MBB); 590 if (!MBBInfoMap[*I].Preds.count(MBB)) { 591 report("Inconsistent CFG", MBB); 592 errs() << "MBB is not in the predecessor list of the successor BB#" 593 << (*I)->getNumber() << ".\n"; 594 } 595 } 596 597 // Check the predecessor list. 598 for (MachineBasicBlock::const_pred_iterator I = MBB->pred_begin(), 599 E = MBB->pred_end(); I != E; ++I) { 600 if (!FunctionBlocks.count(*I)) 601 report("MBB has predecessor that isn't part of the function.", MBB); 602 if (!MBBInfoMap[*I].Succs.count(MBB)) { 603 report("Inconsistent CFG", MBB); 604 errs() << "MBB is not in the successor list of the predecessor BB#" 605 << (*I)->getNumber() << ".\n"; 606 } 607 } 608 609 const MCAsmInfo *AsmInfo = TM->getMCAsmInfo(); 610 const BasicBlock *BB = MBB->getBasicBlock(); 611 const Function *Fn = MF->getFunction(); 612 if (LandingPadSuccs.size() > 1 && 613 !(AsmInfo && 614 AsmInfo->getExceptionHandlingType() == ExceptionHandling::SjLj && 615 BB && isa<SwitchInst>(BB->getTerminator())) && 616 !isFuncletEHPersonality(classifyEHPersonality(Fn->getPersonalityFn()))) 617 report("MBB has more than one landing pad successor", MBB); 618 619 // Call AnalyzeBranch. If it succeeds, there several more conditions to check. 620 MachineBasicBlock *TBB = nullptr, *FBB = nullptr; 621 SmallVector<MachineOperand, 4> Cond; 622 if (!TII->analyzeBranch(*const_cast<MachineBasicBlock *>(MBB), TBB, FBB, 623 Cond)) { 624 // Ok, AnalyzeBranch thinks it knows what's going on with this block. Let's 625 // check whether its answers match up with reality. 626 if (!TBB && !FBB) { 627 // Block falls through to its successor. 628 MachineFunction::const_iterator MBBI = MBB->getIterator(); 629 ++MBBI; 630 if (MBBI == MF->end()) { 631 // It's possible that the block legitimately ends with a noreturn 632 // call or an unreachable, in which case it won't actually fall 633 // out the bottom of the function. 634 } else if (MBB->succ_size() == LandingPadSuccs.size()) { 635 // It's possible that the block legitimately ends with a noreturn 636 // call or an unreachable, in which case it won't actuall fall 637 // out of the block. 638 } else if (MBB->succ_size() != 1+LandingPadSuccs.size()) { 639 report("MBB exits via unconditional fall-through but doesn't have " 640 "exactly one CFG successor!", MBB); 641 } else if (!MBB->isSuccessor(&*MBBI)) { 642 report("MBB exits via unconditional fall-through but its successor " 643 "differs from its CFG successor!", MBB); 644 } 645 if (!MBB->empty() && MBB->back().isBarrier() && 646 !TII->isPredicated(MBB->back())) { 647 report("MBB exits via unconditional fall-through but ends with a " 648 "barrier instruction!", MBB); 649 } 650 if (!Cond.empty()) { 651 report("MBB exits via unconditional fall-through but has a condition!", 652 MBB); 653 } 654 } else if (TBB && !FBB && Cond.empty()) { 655 // Block unconditionally branches somewhere. 656 // If the block has exactly one successor, that happens to be a 657 // landingpad, accept it as valid control flow. 658 if (MBB->succ_size() != 1+LandingPadSuccs.size() && 659 (MBB->succ_size() != 1 || LandingPadSuccs.size() != 1 || 660 *MBB->succ_begin() != *LandingPadSuccs.begin())) { 661 report("MBB exits via unconditional branch but doesn't have " 662 "exactly one CFG successor!", MBB); 663 } else if (!MBB->isSuccessor(TBB)) { 664 report("MBB exits via unconditional branch but the CFG " 665 "successor doesn't match the actual successor!", MBB); 666 } 667 if (MBB->empty()) { 668 report("MBB exits via unconditional branch but doesn't contain " 669 "any instructions!", MBB); 670 } else if (!MBB->back().isBarrier()) { 671 report("MBB exits via unconditional branch but doesn't end with a " 672 "barrier instruction!", MBB); 673 } else if (!MBB->back().isTerminator()) { 674 report("MBB exits via unconditional branch but the branch isn't a " 675 "terminator instruction!", MBB); 676 } 677 } else if (TBB && !FBB && !Cond.empty()) { 678 // Block conditionally branches somewhere, otherwise falls through. 679 MachineFunction::const_iterator MBBI = MBB->getIterator(); 680 ++MBBI; 681 if (MBBI == MF->end()) { 682 report("MBB conditionally falls through out of function!", MBB); 683 } else if (MBB->succ_size() == 1) { 684 // A conditional branch with only one successor is weird, but allowed. 685 if (&*MBBI != TBB) 686 report("MBB exits via conditional branch/fall-through but only has " 687 "one CFG successor!", MBB); 688 else if (TBB != *MBB->succ_begin()) 689 report("MBB exits via conditional branch/fall-through but the CFG " 690 "successor don't match the actual successor!", MBB); 691 } else if (MBB->succ_size() != 2) { 692 report("MBB exits via conditional branch/fall-through but doesn't have " 693 "exactly two CFG successors!", MBB); 694 } else if (!matchPair(MBB->succ_begin(), TBB, &*MBBI)) { 695 report("MBB exits via conditional branch/fall-through but the CFG " 696 "successors don't match the actual successors!", MBB); 697 } 698 if (MBB->empty()) { 699 report("MBB exits via conditional branch/fall-through but doesn't " 700 "contain any instructions!", MBB); 701 } else if (MBB->back().isBarrier()) { 702 report("MBB exits via conditional branch/fall-through but ends with a " 703 "barrier instruction!", MBB); 704 } else if (!MBB->back().isTerminator()) { 705 report("MBB exits via conditional branch/fall-through but the branch " 706 "isn't a terminator instruction!", MBB); 707 } 708 } else if (TBB && FBB) { 709 // Block conditionally branches somewhere, otherwise branches 710 // somewhere else. 711 if (MBB->succ_size() == 1) { 712 // A conditional branch with only one successor is weird, but allowed. 713 if (FBB != TBB) 714 report("MBB exits via conditional branch/branch through but only has " 715 "one CFG successor!", MBB); 716 else if (TBB != *MBB->succ_begin()) 717 report("MBB exits via conditional branch/branch through but the CFG " 718 "successor don't match the actual successor!", MBB); 719 } else if (MBB->succ_size() != 2) { 720 report("MBB exits via conditional branch/branch but doesn't have " 721 "exactly two CFG successors!", MBB); 722 } else if (!matchPair(MBB->succ_begin(), TBB, FBB)) { 723 report("MBB exits via conditional branch/branch but the CFG " 724 "successors don't match the actual successors!", MBB); 725 } 726 if (MBB->empty()) { 727 report("MBB exits via conditional branch/branch but doesn't " 728 "contain any instructions!", MBB); 729 } else if (!MBB->back().isBarrier()) { 730 report("MBB exits via conditional branch/branch but doesn't end with a " 731 "barrier instruction!", MBB); 732 } else if (!MBB->back().isTerminator()) { 733 report("MBB exits via conditional branch/branch but the branch " 734 "isn't a terminator instruction!", MBB); 735 } 736 if (Cond.empty()) { 737 report("MBB exits via conditinal branch/branch but there's no " 738 "condition!", MBB); 739 } 740 } else { 741 report("AnalyzeBranch returned invalid data!", MBB); 742 } 743 } 744 745 regsLive.clear(); 746 if (MRI->tracksLiveness()) { 747 for (const auto &LI : MBB->liveins()) { 748 if (!TargetRegisterInfo::isPhysicalRegister(LI.PhysReg)) { 749 report("MBB live-in list contains non-physical register", MBB); 750 continue; 751 } 752 for (MCSubRegIterator SubRegs(LI.PhysReg, TRI, /*IncludeSelf=*/true); 753 SubRegs.isValid(); ++SubRegs) 754 regsLive.insert(*SubRegs); 755 } 756 } 757 758 const MachineFrameInfo &MFI = MF->getFrameInfo(); 759 BitVector PR = MFI.getPristineRegs(*MF); 760 for (unsigned I : PR.set_bits()) { 761 for (MCSubRegIterator SubRegs(I, TRI, /*IncludeSelf=*/true); 762 SubRegs.isValid(); ++SubRegs) 763 regsLive.insert(*SubRegs); 764 } 765 766 regsKilled.clear(); 767 regsDefined.clear(); 768 769 if (Indexes) 770 lastIndex = Indexes->getMBBStartIdx(MBB); 771 } 772 773 // This function gets called for all bundle headers, including normal 774 // stand-alone unbundled instructions. 775 void MachineVerifier::visitMachineBundleBefore(const MachineInstr *MI) { 776 if (Indexes && Indexes->hasIndex(*MI)) { 777 SlotIndex idx = Indexes->getInstructionIndex(*MI); 778 if (!(idx > lastIndex)) { 779 report("Instruction index out of order", MI); 780 errs() << "Last instruction was at " << lastIndex << '\n'; 781 } 782 lastIndex = idx; 783 } 784 785 // Ensure non-terminators don't follow terminators. 786 // Ignore predicated terminators formed by if conversion. 787 // FIXME: If conversion shouldn't need to violate this rule. 788 if (MI->isTerminator() && !TII->isPredicated(*MI)) { 789 if (!FirstTerminator) 790 FirstTerminator = MI; 791 } else if (FirstTerminator) { 792 report("Non-terminator instruction after the first terminator", MI); 793 errs() << "First terminator was:\t" << *FirstTerminator; 794 } 795 } 796 797 // The operands on an INLINEASM instruction must follow a template. 798 // Verify that the flag operands make sense. 799 void MachineVerifier::verifyInlineAsm(const MachineInstr *MI) { 800 // The first two operands on INLINEASM are the asm string and global flags. 801 if (MI->getNumOperands() < 2) { 802 report("Too few operands on inline asm", MI); 803 return; 804 } 805 if (!MI->getOperand(0).isSymbol()) 806 report("Asm string must be an external symbol", MI); 807 if (!MI->getOperand(1).isImm()) 808 report("Asm flags must be an immediate", MI); 809 // Allowed flags are Extra_HasSideEffects = 1, Extra_IsAlignStack = 2, 810 // Extra_AsmDialect = 4, Extra_MayLoad = 8, and Extra_MayStore = 16, 811 // and Extra_IsConvergent = 32. 812 if (!isUInt<6>(MI->getOperand(1).getImm())) 813 report("Unknown asm flags", &MI->getOperand(1), 1); 814 815 static_assert(InlineAsm::MIOp_FirstOperand == 2, "Asm format changed"); 816 817 unsigned OpNo = InlineAsm::MIOp_FirstOperand; 818 unsigned NumOps; 819 for (unsigned e = MI->getNumOperands(); OpNo < e; OpNo += NumOps) { 820 const MachineOperand &MO = MI->getOperand(OpNo); 821 // There may be implicit ops after the fixed operands. 822 if (!MO.isImm()) 823 break; 824 NumOps = 1 + InlineAsm::getNumOperandRegisters(MO.getImm()); 825 } 826 827 if (OpNo > MI->getNumOperands()) 828 report("Missing operands in last group", MI); 829 830 // An optional MDNode follows the groups. 831 if (OpNo < MI->getNumOperands() && MI->getOperand(OpNo).isMetadata()) 832 ++OpNo; 833 834 // All trailing operands must be implicit registers. 835 for (unsigned e = MI->getNumOperands(); OpNo < e; ++OpNo) { 836 const MachineOperand &MO = MI->getOperand(OpNo); 837 if (!MO.isReg() || !MO.isImplicit()) 838 report("Expected implicit register after groups", &MO, OpNo); 839 } 840 } 841 842 void MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) { 843 const MCInstrDesc &MCID = MI->getDesc(); 844 if (MI->getNumOperands() < MCID.getNumOperands()) { 845 report("Too few operands", MI); 846 errs() << MCID.getNumOperands() << " operands expected, but " 847 << MI->getNumOperands() << " given.\n"; 848 } 849 850 if (MI->isPHI() && MF->getProperties().hasProperty( 851 MachineFunctionProperties::Property::NoPHIs)) 852 report("Found PHI instruction with NoPHIs property set", MI); 853 854 // Check the tied operands. 855 if (MI->isInlineAsm()) 856 verifyInlineAsm(MI); 857 858 // Check the MachineMemOperands for basic consistency. 859 for (MachineInstr::mmo_iterator I = MI->memoperands_begin(), 860 E = MI->memoperands_end(); I != E; ++I) { 861 if ((*I)->isLoad() && !MI->mayLoad()) 862 report("Missing mayLoad flag", MI); 863 if ((*I)->isStore() && !MI->mayStore()) 864 report("Missing mayStore flag", MI); 865 } 866 867 // Debug values must not have a slot index. 868 // Other instructions must have one, unless they are inside a bundle. 869 if (LiveInts) { 870 bool mapped = !LiveInts->isNotInMIMap(*MI); 871 if (MI->isDebugValue()) { 872 if (mapped) 873 report("Debug instruction has a slot index", MI); 874 } else if (MI->isInsideBundle()) { 875 if (mapped) 876 report("Instruction inside bundle has a slot index", MI); 877 } else { 878 if (!mapped) 879 report("Missing slot index", MI); 880 } 881 } 882 883 // Check types. 884 if (isPreISelGenericOpcode(MCID.getOpcode())) { 885 if (isFunctionSelected) 886 report("Unexpected generic instruction in a Selected function", MI); 887 888 // Generic instructions specify equality constraints between some 889 // of their operands. Make sure these are consistent. 890 SmallVector<LLT, 4> Types; 891 for (unsigned i = 0; i < MCID.getNumOperands(); ++i) { 892 if (!MCID.OpInfo[i].isGenericType()) 893 continue; 894 size_t TypeIdx = MCID.OpInfo[i].getGenericTypeIndex(); 895 Types.resize(std::max(TypeIdx + 1, Types.size())); 896 897 LLT OpTy = MRI->getType(MI->getOperand(i).getReg()); 898 if (Types[TypeIdx].isValid() && Types[TypeIdx] != OpTy) 899 report("type mismatch in generic instruction", MI); 900 Types[TypeIdx] = OpTy; 901 } 902 } 903 904 // Generic opcodes must not have physical register operands. 905 if (isPreISelGenericOpcode(MCID.getOpcode())) { 906 for (auto &Op : MI->operands()) { 907 if (Op.isReg() && TargetRegisterInfo::isPhysicalRegister(Op.getReg())) 908 report("Generic instruction cannot have physical register", MI); 909 } 910 } 911 912 // Generic loads and stores must have a single MachineMemOperand 913 // describing that access. 914 if ((MI->getOpcode() == TargetOpcode::G_LOAD || 915 MI->getOpcode() == TargetOpcode::G_STORE) && 916 !MI->hasOneMemOperand()) 917 report("Generic instruction accessing memory must have one mem operand", 918 MI); 919 920 StringRef ErrorInfo; 921 if (!TII->verifyInstruction(*MI, ErrorInfo)) 922 report(ErrorInfo.data(), MI); 923 } 924 925 void 926 MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) { 927 const MachineInstr *MI = MO->getParent(); 928 const MCInstrDesc &MCID = MI->getDesc(); 929 unsigned NumDefs = MCID.getNumDefs(); 930 if (MCID.getOpcode() == TargetOpcode::PATCHPOINT) 931 NumDefs = (MONum == 0 && MO->isReg()) ? NumDefs : 0; 932 933 // The first MCID.NumDefs operands must be explicit register defines 934 if (MONum < NumDefs) { 935 const MCOperandInfo &MCOI = MCID.OpInfo[MONum]; 936 if (!MO->isReg()) 937 report("Explicit definition must be a register", MO, MONum); 938 else if (!MO->isDef() && !MCOI.isOptionalDef()) 939 report("Explicit definition marked as use", MO, MONum); 940 else if (MO->isImplicit()) 941 report("Explicit definition marked as implicit", MO, MONum); 942 } else if (MONum < MCID.getNumOperands()) { 943 const MCOperandInfo &MCOI = MCID.OpInfo[MONum]; 944 // Don't check if it's the last operand in a variadic instruction. See, 945 // e.g., LDM_RET in the arm back end. 946 if (MO->isReg() && 947 !(MI->isVariadic() && MONum == MCID.getNumOperands()-1)) { 948 if (MO->isDef() && !MCOI.isOptionalDef()) 949 report("Explicit operand marked as def", MO, MONum); 950 if (MO->isImplicit()) 951 report("Explicit operand marked as implicit", MO, MONum); 952 } 953 954 int TiedTo = MCID.getOperandConstraint(MONum, MCOI::TIED_TO); 955 if (TiedTo != -1) { 956 if (!MO->isReg()) 957 report("Tied use must be a register", MO, MONum); 958 else if (!MO->isTied()) 959 report("Operand should be tied", MO, MONum); 960 else if (unsigned(TiedTo) != MI->findTiedOperandIdx(MONum)) 961 report("Tied def doesn't match MCInstrDesc", MO, MONum); 962 } else if (MO->isReg() && MO->isTied()) 963 report("Explicit operand should not be tied", MO, MONum); 964 } else { 965 // ARM adds %reg0 operands to indicate predicates. We'll allow that. 966 if (MO->isReg() && !MO->isImplicit() && !MI->isVariadic() && MO->getReg()) 967 report("Extra explicit operand on non-variadic instruction", MO, MONum); 968 } 969 970 switch (MO->getType()) { 971 case MachineOperand::MO_Register: { 972 const unsigned Reg = MO->getReg(); 973 if (!Reg) 974 return; 975 if (MRI->tracksLiveness() && !MI->isDebugValue()) 976 checkLiveness(MO, MONum); 977 978 // Verify the consistency of tied operands. 979 if (MO->isTied()) { 980 unsigned OtherIdx = MI->findTiedOperandIdx(MONum); 981 const MachineOperand &OtherMO = MI->getOperand(OtherIdx); 982 if (!OtherMO.isReg()) 983 report("Must be tied to a register", MO, MONum); 984 if (!OtherMO.isTied()) 985 report("Missing tie flags on tied operand", MO, MONum); 986 if (MI->findTiedOperandIdx(OtherIdx) != MONum) 987 report("Inconsistent tie links", MO, MONum); 988 if (MONum < MCID.getNumDefs()) { 989 if (OtherIdx < MCID.getNumOperands()) { 990 if (-1 == MCID.getOperandConstraint(OtherIdx, MCOI::TIED_TO)) 991 report("Explicit def tied to explicit use without tie constraint", 992 MO, MONum); 993 } else { 994 if (!OtherMO.isImplicit()) 995 report("Explicit def should be tied to implicit use", MO, MONum); 996 } 997 } 998 } 999 1000 // Verify two-address constraints after leaving SSA form. 1001 unsigned DefIdx; 1002 if (!MRI->isSSA() && MO->isUse() && 1003 MI->isRegTiedToDefOperand(MONum, &DefIdx) && 1004 Reg != MI->getOperand(DefIdx).getReg()) 1005 report("Two-address instruction operands must be identical", MO, MONum); 1006 1007 // Check register classes. 1008 if (MONum < MCID.getNumOperands() && !MO->isImplicit()) { 1009 unsigned SubIdx = MO->getSubReg(); 1010 1011 if (TargetRegisterInfo::isPhysicalRegister(Reg)) { 1012 if (SubIdx) { 1013 report("Illegal subregister index for physical register", MO, MONum); 1014 return; 1015 } 1016 if (const TargetRegisterClass *DRC = 1017 TII->getRegClass(MCID, MONum, TRI, *MF)) { 1018 if (!DRC->contains(Reg)) { 1019 report("Illegal physical register for instruction", MO, MONum); 1020 errs() << TRI->getName(Reg) << " is not a " 1021 << TRI->getRegClassName(DRC) << " register.\n"; 1022 } 1023 } 1024 } else { 1025 // Virtual register. 1026 const TargetRegisterClass *RC = MRI->getRegClassOrNull(Reg); 1027 if (!RC) { 1028 // This is a generic virtual register. 1029 1030 // If we're post-Select, we can't have gvregs anymore. 1031 if (isFunctionSelected) { 1032 report("Generic virtual register invalid in a Selected function", 1033 MO, MONum); 1034 return; 1035 } 1036 1037 // The gvreg must have a type and it must not have a SubIdx. 1038 LLT Ty = MRI->getType(Reg); 1039 if (!Ty.isValid()) { 1040 report("Generic virtual register must have a valid type", MO, 1041 MONum); 1042 return; 1043 } 1044 1045 const RegisterBank *RegBank = MRI->getRegBankOrNull(Reg); 1046 1047 // If we're post-RegBankSelect, the gvreg must have a bank. 1048 if (!RegBank && isFunctionRegBankSelected) { 1049 report("Generic virtual register must have a bank in a " 1050 "RegBankSelected function", 1051 MO, MONum); 1052 return; 1053 } 1054 1055 // Make sure the register fits into its register bank if any. 1056 if (RegBank && Ty.isValid() && 1057 RegBank->getSize() < Ty.getSizeInBits()) { 1058 report("Register bank is too small for virtual register", MO, 1059 MONum); 1060 errs() << "Register bank " << RegBank->getName() << " too small(" 1061 << RegBank->getSize() << ") to fit " << Ty.getSizeInBits() 1062 << "-bits\n"; 1063 return; 1064 } 1065 if (SubIdx) { 1066 report("Generic virtual register does not subregister index", MO, 1067 MONum); 1068 return; 1069 } 1070 1071 // If this is a target specific instruction and this operand 1072 // has register class constraint, the virtual register must 1073 // comply to it. 1074 if (!isPreISelGenericOpcode(MCID.getOpcode()) && 1075 TII->getRegClass(MCID, MONum, TRI, *MF)) { 1076 report("Virtual register does not match instruction constraint", MO, 1077 MONum); 1078 errs() << "Expect register class " 1079 << TRI->getRegClassName( 1080 TII->getRegClass(MCID, MONum, TRI, *MF)) 1081 << " but got nothing\n"; 1082 return; 1083 } 1084 1085 break; 1086 } 1087 if (SubIdx) { 1088 const TargetRegisterClass *SRC = 1089 TRI->getSubClassWithSubReg(RC, SubIdx); 1090 if (!SRC) { 1091 report("Invalid subregister index for virtual register", MO, MONum); 1092 errs() << "Register class " << TRI->getRegClassName(RC) 1093 << " does not support subreg index " << SubIdx << "\n"; 1094 return; 1095 } 1096 if (RC != SRC) { 1097 report("Invalid register class for subregister index", MO, MONum); 1098 errs() << "Register class " << TRI->getRegClassName(RC) 1099 << " does not fully support subreg index " << SubIdx << "\n"; 1100 return; 1101 } 1102 } 1103 if (const TargetRegisterClass *DRC = 1104 TII->getRegClass(MCID, MONum, TRI, *MF)) { 1105 if (SubIdx) { 1106 const TargetRegisterClass *SuperRC = 1107 TRI->getLargestLegalSuperClass(RC, *MF); 1108 if (!SuperRC) { 1109 report("No largest legal super class exists.", MO, MONum); 1110 return; 1111 } 1112 DRC = TRI->getMatchingSuperRegClass(SuperRC, DRC, SubIdx); 1113 if (!DRC) { 1114 report("No matching super-reg register class.", MO, MONum); 1115 return; 1116 } 1117 } 1118 if (!RC->hasSuperClassEq(DRC)) { 1119 report("Illegal virtual register for instruction", MO, MONum); 1120 errs() << "Expected a " << TRI->getRegClassName(DRC) 1121 << " register, but got a " << TRI->getRegClassName(RC) 1122 << " register\n"; 1123 } 1124 } 1125 } 1126 } 1127 break; 1128 } 1129 1130 case MachineOperand::MO_RegisterMask: 1131 regMasks.push_back(MO->getRegMask()); 1132 break; 1133 1134 case MachineOperand::MO_MachineBasicBlock: 1135 if (MI->isPHI() && !MO->getMBB()->isSuccessor(MI->getParent())) 1136 report("PHI operand is not in the CFG", MO, MONum); 1137 break; 1138 1139 case MachineOperand::MO_FrameIndex: 1140 if (LiveStks && LiveStks->hasInterval(MO->getIndex()) && 1141 LiveInts && !LiveInts->isNotInMIMap(*MI)) { 1142 int FI = MO->getIndex(); 1143 LiveInterval &LI = LiveStks->getInterval(FI); 1144 SlotIndex Idx = LiveInts->getInstructionIndex(*MI); 1145 1146 bool stores = MI->mayStore(); 1147 bool loads = MI->mayLoad(); 1148 // For a memory-to-memory move, we need to check if the frame 1149 // index is used for storing or loading, by inspecting the 1150 // memory operands. 1151 if (stores && loads) { 1152 for (auto *MMO : MI->memoperands()) { 1153 const PseudoSourceValue *PSV = MMO->getPseudoValue(); 1154 if (PSV == nullptr) continue; 1155 const FixedStackPseudoSourceValue *Value = 1156 dyn_cast<FixedStackPseudoSourceValue>(PSV); 1157 if (Value == nullptr) continue; 1158 if (Value->getFrameIndex() != FI) continue; 1159 1160 if (MMO->isStore()) 1161 loads = false; 1162 else 1163 stores = false; 1164 break; 1165 } 1166 if (loads == stores) 1167 report("Missing fixed stack memoperand.", MI); 1168 } 1169 if (loads && !LI.liveAt(Idx.getRegSlot(true))) { 1170 report("Instruction loads from dead spill slot", MO, MONum); 1171 errs() << "Live stack: " << LI << '\n'; 1172 } 1173 if (stores && !LI.liveAt(Idx.getRegSlot())) { 1174 report("Instruction stores to dead spill slot", MO, MONum); 1175 errs() << "Live stack: " << LI << '\n'; 1176 } 1177 } 1178 break; 1179 1180 default: 1181 break; 1182 } 1183 } 1184 1185 void MachineVerifier::checkLivenessAtUse(const MachineOperand *MO, 1186 unsigned MONum, SlotIndex UseIdx, const LiveRange &LR, unsigned VRegOrUnit, 1187 LaneBitmask LaneMask) { 1188 LiveQueryResult LRQ = LR.Query(UseIdx); 1189 // Check if we have a segment at the use, note however that we only need one 1190 // live subregister range, the others may be dead. 1191 if (!LRQ.valueIn() && LaneMask.none()) { 1192 report("No live segment at use", MO, MONum); 1193 report_context_liverange(LR); 1194 report_context_vreg_regunit(VRegOrUnit); 1195 report_context(UseIdx); 1196 } 1197 if (MO->isKill() && !LRQ.isKill()) { 1198 report("Live range continues after kill flag", MO, MONum); 1199 report_context_liverange(LR); 1200 report_context_vreg_regunit(VRegOrUnit); 1201 if (LaneMask.any()) 1202 report_context_lanemask(LaneMask); 1203 report_context(UseIdx); 1204 } 1205 } 1206 1207 void MachineVerifier::checkLivenessAtDef(const MachineOperand *MO, 1208 unsigned MONum, SlotIndex DefIdx, const LiveRange &LR, unsigned VRegOrUnit, 1209 LaneBitmask LaneMask) { 1210 if (const VNInfo *VNI = LR.getVNInfoAt(DefIdx)) { 1211 assert(VNI && "NULL valno is not allowed"); 1212 if (VNI->def != DefIdx) { 1213 report("Inconsistent valno->def", MO, MONum); 1214 report_context_liverange(LR); 1215 report_context_vreg_regunit(VRegOrUnit); 1216 if (LaneMask.any()) 1217 report_context_lanemask(LaneMask); 1218 report_context(*VNI); 1219 report_context(DefIdx); 1220 } 1221 } else { 1222 report("No live segment at def", MO, MONum); 1223 report_context_liverange(LR); 1224 report_context_vreg_regunit(VRegOrUnit); 1225 if (LaneMask.any()) 1226 report_context_lanemask(LaneMask); 1227 report_context(DefIdx); 1228 } 1229 // Check that, if the dead def flag is present, LiveInts agree. 1230 if (MO->isDead()) { 1231 LiveQueryResult LRQ = LR.Query(DefIdx); 1232 if (!LRQ.isDeadDef()) { 1233 // In case of physregs we can have a non-dead definition on another 1234 // operand. 1235 bool otherDef = false; 1236 if (!TargetRegisterInfo::isVirtualRegister(VRegOrUnit)) { 1237 const MachineInstr &MI = *MO->getParent(); 1238 for (const MachineOperand &MO : MI.operands()) { 1239 if (!MO.isReg() || !MO.isDef() || MO.isDead()) 1240 continue; 1241 unsigned Reg = MO.getReg(); 1242 for (MCRegUnitIterator Units(Reg, TRI); Units.isValid(); ++Units) { 1243 if (*Units == VRegOrUnit) { 1244 otherDef = true; 1245 break; 1246 } 1247 } 1248 } 1249 } 1250 1251 if (!otherDef) { 1252 report("Live range continues after dead def flag", MO, MONum); 1253 report_context_liverange(LR); 1254 report_context_vreg_regunit(VRegOrUnit); 1255 if (LaneMask.any()) 1256 report_context_lanemask(LaneMask); 1257 } 1258 } 1259 } 1260 } 1261 1262 void MachineVerifier::checkLiveness(const MachineOperand *MO, unsigned MONum) { 1263 const MachineInstr *MI = MO->getParent(); 1264 const unsigned Reg = MO->getReg(); 1265 1266 // Both use and def operands can read a register. 1267 if (MO->readsReg()) { 1268 if (MO->isKill()) 1269 addRegWithSubRegs(regsKilled, Reg); 1270 1271 // Check that LiveVars knows this kill. 1272 if (LiveVars && TargetRegisterInfo::isVirtualRegister(Reg) && 1273 MO->isKill()) { 1274 LiveVariables::VarInfo &VI = LiveVars->getVarInfo(Reg); 1275 if (!is_contained(VI.Kills, MI)) 1276 report("Kill missing from LiveVariables", MO, MONum); 1277 } 1278 1279 // Check LiveInts liveness and kill. 1280 if (LiveInts && !LiveInts->isNotInMIMap(*MI)) { 1281 SlotIndex UseIdx = LiveInts->getInstructionIndex(*MI); 1282 // Check the cached regunit intervals. 1283 if (TargetRegisterInfo::isPhysicalRegister(Reg) && !isReserved(Reg)) { 1284 for (MCRegUnitIterator Units(Reg, TRI); Units.isValid(); ++Units) { 1285 if (const LiveRange *LR = LiveInts->getCachedRegUnit(*Units)) 1286 checkLivenessAtUse(MO, MONum, UseIdx, *LR, *Units); 1287 } 1288 } 1289 1290 if (TargetRegisterInfo::isVirtualRegister(Reg)) { 1291 if (LiveInts->hasInterval(Reg)) { 1292 // This is a virtual register interval. 1293 const LiveInterval &LI = LiveInts->getInterval(Reg); 1294 checkLivenessAtUse(MO, MONum, UseIdx, LI, Reg); 1295 1296 if (LI.hasSubRanges() && !MO->isDef()) { 1297 unsigned SubRegIdx = MO->getSubReg(); 1298 LaneBitmask MOMask = SubRegIdx != 0 1299 ? TRI->getSubRegIndexLaneMask(SubRegIdx) 1300 : MRI->getMaxLaneMaskForVReg(Reg); 1301 LaneBitmask LiveInMask; 1302 for (const LiveInterval::SubRange &SR : LI.subranges()) { 1303 if ((MOMask & SR.LaneMask).none()) 1304 continue; 1305 checkLivenessAtUse(MO, MONum, UseIdx, SR, Reg, SR.LaneMask); 1306 LiveQueryResult LRQ = SR.Query(UseIdx); 1307 if (LRQ.valueIn()) 1308 LiveInMask |= SR.LaneMask; 1309 } 1310 // At least parts of the register has to be live at the use. 1311 if ((LiveInMask & MOMask).none()) { 1312 report("No live subrange at use", MO, MONum); 1313 report_context(LI); 1314 report_context(UseIdx); 1315 } 1316 } 1317 } else { 1318 report("Virtual register has no live interval", MO, MONum); 1319 } 1320 } 1321 } 1322 1323 // Use of a dead register. 1324 if (!regsLive.count(Reg)) { 1325 if (TargetRegisterInfo::isPhysicalRegister(Reg)) { 1326 // Reserved registers may be used even when 'dead'. 1327 bool Bad = !isReserved(Reg); 1328 // We are fine if just any subregister has a defined value. 1329 if (Bad) { 1330 for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); 1331 ++SubRegs) { 1332 if (regsLive.count(*SubRegs)) { 1333 Bad = false; 1334 break; 1335 } 1336 } 1337 } 1338 // If there is an additional implicit-use of a super register we stop 1339 // here. By definition we are fine if the super register is not 1340 // (completely) dead, if the complete super register is dead we will 1341 // get a report for its operand. 1342 if (Bad) { 1343 for (const MachineOperand &MOP : MI->uses()) { 1344 if (!MOP.isReg()) 1345 continue; 1346 if (!MOP.isImplicit()) 1347 continue; 1348 for (MCSubRegIterator SubRegs(MOP.getReg(), TRI); SubRegs.isValid(); 1349 ++SubRegs) { 1350 if (*SubRegs == Reg) { 1351 Bad = false; 1352 break; 1353 } 1354 } 1355 } 1356 } 1357 if (Bad) 1358 report("Using an undefined physical register", MO, MONum); 1359 } else if (MRI->def_empty(Reg)) { 1360 report("Reading virtual register without a def", MO, MONum); 1361 } else { 1362 BBInfo &MInfo = MBBInfoMap[MI->getParent()]; 1363 // We don't know which virtual registers are live in, so only complain 1364 // if vreg was killed in this MBB. Otherwise keep track of vregs that 1365 // must be live in. PHI instructions are handled separately. 1366 if (MInfo.regsKilled.count(Reg)) 1367 report("Using a killed virtual register", MO, MONum); 1368 else if (!MI->isPHI()) 1369 MInfo.vregsLiveIn.insert(std::make_pair(Reg, MI)); 1370 } 1371 } 1372 } 1373 1374 if (MO->isDef()) { 1375 // Register defined. 1376 // TODO: verify that earlyclobber ops are not used. 1377 if (MO->isDead()) 1378 addRegWithSubRegs(regsDead, Reg); 1379 else 1380 addRegWithSubRegs(regsDefined, Reg); 1381 1382 // Verify SSA form. 1383 if (MRI->isSSA() && TargetRegisterInfo::isVirtualRegister(Reg) && 1384 std::next(MRI->def_begin(Reg)) != MRI->def_end()) 1385 report("Multiple virtual register defs in SSA form", MO, MONum); 1386 1387 // Check LiveInts for a live segment, but only for virtual registers. 1388 if (LiveInts && !LiveInts->isNotInMIMap(*MI)) { 1389 SlotIndex DefIdx = LiveInts->getInstructionIndex(*MI); 1390 DefIdx = DefIdx.getRegSlot(MO->isEarlyClobber()); 1391 1392 if (TargetRegisterInfo::isVirtualRegister(Reg)) { 1393 if (LiveInts->hasInterval(Reg)) { 1394 const LiveInterval &LI = LiveInts->getInterval(Reg); 1395 checkLivenessAtDef(MO, MONum, DefIdx, LI, Reg); 1396 1397 if (LI.hasSubRanges()) { 1398 unsigned SubRegIdx = MO->getSubReg(); 1399 LaneBitmask MOMask = SubRegIdx != 0 1400 ? TRI->getSubRegIndexLaneMask(SubRegIdx) 1401 : MRI->getMaxLaneMaskForVReg(Reg); 1402 for (const LiveInterval::SubRange &SR : LI.subranges()) { 1403 if ((SR.LaneMask & MOMask).none()) 1404 continue; 1405 checkLivenessAtDef(MO, MONum, DefIdx, SR, Reg, SR.LaneMask); 1406 } 1407 } 1408 } else { 1409 report("Virtual register has no Live interval", MO, MONum); 1410 } 1411 } 1412 } 1413 } 1414 } 1415 1416 void MachineVerifier::visitMachineInstrAfter(const MachineInstr *MI) { 1417 } 1418 1419 // This function gets called after visiting all instructions in a bundle. The 1420 // argument points to the bundle header. 1421 // Normal stand-alone instructions are also considered 'bundles', and this 1422 // function is called for all of them. 1423 void MachineVerifier::visitMachineBundleAfter(const MachineInstr *MI) { 1424 BBInfo &MInfo = MBBInfoMap[MI->getParent()]; 1425 set_union(MInfo.regsKilled, regsKilled); 1426 set_subtract(regsLive, regsKilled); regsKilled.clear(); 1427 // Kill any masked registers. 1428 while (!regMasks.empty()) { 1429 const uint32_t *Mask = regMasks.pop_back_val(); 1430 for (RegSet::iterator I = regsLive.begin(), E = regsLive.end(); I != E; ++I) 1431 if (TargetRegisterInfo::isPhysicalRegister(*I) && 1432 MachineOperand::clobbersPhysReg(Mask, *I)) 1433 regsDead.push_back(*I); 1434 } 1435 set_subtract(regsLive, regsDead); regsDead.clear(); 1436 set_union(regsLive, regsDefined); regsDefined.clear(); 1437 } 1438 1439 void 1440 MachineVerifier::visitMachineBasicBlockAfter(const MachineBasicBlock *MBB) { 1441 MBBInfoMap[MBB].regsLiveOut = regsLive; 1442 regsLive.clear(); 1443 1444 if (Indexes) { 1445 SlotIndex stop = Indexes->getMBBEndIdx(MBB); 1446 if (!(stop > lastIndex)) { 1447 report("Block ends before last instruction index", MBB); 1448 errs() << "Block ends at " << stop 1449 << " last instruction was at " << lastIndex << '\n'; 1450 } 1451 lastIndex = stop; 1452 } 1453 } 1454 1455 // Calculate the largest possible vregsPassed sets. These are the registers that 1456 // can pass through an MBB live, but may not be live every time. It is assumed 1457 // that all vregsPassed sets are empty before the call. 1458 void MachineVerifier::calcRegsPassed() { 1459 // First push live-out regs to successors' vregsPassed. Remember the MBBs that 1460 // have any vregsPassed. 1461 SmallPtrSet<const MachineBasicBlock*, 8> todo; 1462 for (const auto &MBB : *MF) { 1463 BBInfo &MInfo = MBBInfoMap[&MBB]; 1464 if (!MInfo.reachable) 1465 continue; 1466 for (MachineBasicBlock::const_succ_iterator SuI = MBB.succ_begin(), 1467 SuE = MBB.succ_end(); SuI != SuE; ++SuI) { 1468 BBInfo &SInfo = MBBInfoMap[*SuI]; 1469 if (SInfo.addPassed(MInfo.regsLiveOut)) 1470 todo.insert(*SuI); 1471 } 1472 } 1473 1474 // Iteratively push vregsPassed to successors. This will converge to the same 1475 // final state regardless of DenseSet iteration order. 1476 while (!todo.empty()) { 1477 const MachineBasicBlock *MBB = *todo.begin(); 1478 todo.erase(MBB); 1479 BBInfo &MInfo = MBBInfoMap[MBB]; 1480 for (MachineBasicBlock::const_succ_iterator SuI = MBB->succ_begin(), 1481 SuE = MBB->succ_end(); SuI != SuE; ++SuI) { 1482 if (*SuI == MBB) 1483 continue; 1484 BBInfo &SInfo = MBBInfoMap[*SuI]; 1485 if (SInfo.addPassed(MInfo.vregsPassed)) 1486 todo.insert(*SuI); 1487 } 1488 } 1489 } 1490 1491 // Calculate the set of virtual registers that must be passed through each basic 1492 // block in order to satisfy the requirements of successor blocks. This is very 1493 // similar to calcRegsPassed, only backwards. 1494 void MachineVerifier::calcRegsRequired() { 1495 // First push live-in regs to predecessors' vregsRequired. 1496 SmallPtrSet<const MachineBasicBlock*, 8> todo; 1497 for (const auto &MBB : *MF) { 1498 BBInfo &MInfo = MBBInfoMap[&MBB]; 1499 for (MachineBasicBlock::const_pred_iterator PrI = MBB.pred_begin(), 1500 PrE = MBB.pred_end(); PrI != PrE; ++PrI) { 1501 BBInfo &PInfo = MBBInfoMap[*PrI]; 1502 if (PInfo.addRequired(MInfo.vregsLiveIn)) 1503 todo.insert(*PrI); 1504 } 1505 } 1506 1507 // Iteratively push vregsRequired to predecessors. This will converge to the 1508 // same final state regardless of DenseSet iteration order. 1509 while (!todo.empty()) { 1510 const MachineBasicBlock *MBB = *todo.begin(); 1511 todo.erase(MBB); 1512 BBInfo &MInfo = MBBInfoMap[MBB]; 1513 for (MachineBasicBlock::const_pred_iterator PrI = MBB->pred_begin(), 1514 PrE = MBB->pred_end(); PrI != PrE; ++PrI) { 1515 if (*PrI == MBB) 1516 continue; 1517 BBInfo &SInfo = MBBInfoMap[*PrI]; 1518 if (SInfo.addRequired(MInfo.vregsRequired)) 1519 todo.insert(*PrI); 1520 } 1521 } 1522 } 1523 1524 // Check PHI instructions at the beginning of MBB. It is assumed that 1525 // calcRegsPassed has been run so BBInfo::isLiveOut is valid. 1526 void MachineVerifier::checkPHIOps(const MachineBasicBlock *MBB) { 1527 SmallPtrSet<const MachineBasicBlock*, 8> seen; 1528 for (const auto &BBI : *MBB) { 1529 if (!BBI.isPHI()) 1530 break; 1531 seen.clear(); 1532 1533 for (unsigned i = 1, e = BBI.getNumOperands(); i != e; i += 2) { 1534 unsigned Reg = BBI.getOperand(i).getReg(); 1535 const MachineBasicBlock *Pre = BBI.getOperand(i + 1).getMBB(); 1536 if (!Pre->isSuccessor(MBB)) 1537 continue; 1538 seen.insert(Pre); 1539 BBInfo &PrInfo = MBBInfoMap[Pre]; 1540 if (PrInfo.reachable && !PrInfo.isLiveOut(Reg)) 1541 report("PHI operand is not live-out from predecessor", 1542 &BBI.getOperand(i), i); 1543 } 1544 1545 // Did we see all predecessors? 1546 for (MachineBasicBlock::const_pred_iterator PrI = MBB->pred_begin(), 1547 PrE = MBB->pred_end(); PrI != PrE; ++PrI) { 1548 if (!seen.count(*PrI)) { 1549 report("Missing PHI operand", &BBI); 1550 errs() << "BB#" << (*PrI)->getNumber() 1551 << " is a predecessor according to the CFG.\n"; 1552 } 1553 } 1554 } 1555 } 1556 1557 void MachineVerifier::visitMachineFunctionAfter() { 1558 calcRegsPassed(); 1559 1560 for (const auto &MBB : *MF) { 1561 BBInfo &MInfo = MBBInfoMap[&MBB]; 1562 1563 // Skip unreachable MBBs. 1564 if (!MInfo.reachable) 1565 continue; 1566 1567 checkPHIOps(&MBB); 1568 } 1569 1570 // Now check liveness info if available 1571 calcRegsRequired(); 1572 1573 // Check for killed virtual registers that should be live out. 1574 for (const auto &MBB : *MF) { 1575 BBInfo &MInfo = MBBInfoMap[&MBB]; 1576 for (RegSet::iterator 1577 I = MInfo.vregsRequired.begin(), E = MInfo.vregsRequired.end(); I != E; 1578 ++I) 1579 if (MInfo.regsKilled.count(*I)) { 1580 report("Virtual register killed in block, but needed live out.", &MBB); 1581 errs() << "Virtual register " << PrintReg(*I) 1582 << " is used after the block.\n"; 1583 } 1584 } 1585 1586 if (!MF->empty()) { 1587 BBInfo &MInfo = MBBInfoMap[&MF->front()]; 1588 for (RegSet::iterator 1589 I = MInfo.vregsRequired.begin(), E = MInfo.vregsRequired.end(); I != E; 1590 ++I) { 1591 report("Virtual register defs don't dominate all uses.", MF); 1592 report_context_vreg(*I); 1593 } 1594 } 1595 1596 if (LiveVars) 1597 verifyLiveVariables(); 1598 if (LiveInts) 1599 verifyLiveIntervals(); 1600 } 1601 1602 void MachineVerifier::verifyLiveVariables() { 1603 assert(LiveVars && "Don't call verifyLiveVariables without LiveVars"); 1604 for (unsigned i = 0, e = MRI->getNumVirtRegs(); i != e; ++i) { 1605 unsigned Reg = TargetRegisterInfo::index2VirtReg(i); 1606 LiveVariables::VarInfo &VI = LiveVars->getVarInfo(Reg); 1607 for (const auto &MBB : *MF) { 1608 BBInfo &MInfo = MBBInfoMap[&MBB]; 1609 1610 // Our vregsRequired should be identical to LiveVariables' AliveBlocks 1611 if (MInfo.vregsRequired.count(Reg)) { 1612 if (!VI.AliveBlocks.test(MBB.getNumber())) { 1613 report("LiveVariables: Block missing from AliveBlocks", &MBB); 1614 errs() << "Virtual register " << PrintReg(Reg) 1615 << " must be live through the block.\n"; 1616 } 1617 } else { 1618 if (VI.AliveBlocks.test(MBB.getNumber())) { 1619 report("LiveVariables: Block should not be in AliveBlocks", &MBB); 1620 errs() << "Virtual register " << PrintReg(Reg) 1621 << " is not needed live through the block.\n"; 1622 } 1623 } 1624 } 1625 } 1626 } 1627 1628 void MachineVerifier::verifyLiveIntervals() { 1629 assert(LiveInts && "Don't call verifyLiveIntervals without LiveInts"); 1630 for (unsigned i = 0, e = MRI->getNumVirtRegs(); i != e; ++i) { 1631 unsigned Reg = TargetRegisterInfo::index2VirtReg(i); 1632 1633 // Spilling and splitting may leave unused registers around. Skip them. 1634 if (MRI->reg_nodbg_empty(Reg)) 1635 continue; 1636 1637 if (!LiveInts->hasInterval(Reg)) { 1638 report("Missing live interval for virtual register", MF); 1639 errs() << PrintReg(Reg, TRI) << " still has defs or uses\n"; 1640 continue; 1641 } 1642 1643 const LiveInterval &LI = LiveInts->getInterval(Reg); 1644 assert(Reg == LI.reg && "Invalid reg to interval mapping"); 1645 verifyLiveInterval(LI); 1646 } 1647 1648 // Verify all the cached regunit intervals. 1649 for (unsigned i = 0, e = TRI->getNumRegUnits(); i != e; ++i) 1650 if (const LiveRange *LR = LiveInts->getCachedRegUnit(i)) 1651 verifyLiveRange(*LR, i); 1652 } 1653 1654 void MachineVerifier::verifyLiveRangeValue(const LiveRange &LR, 1655 const VNInfo *VNI, unsigned Reg, 1656 LaneBitmask LaneMask) { 1657 if (VNI->isUnused()) 1658 return; 1659 1660 const VNInfo *DefVNI = LR.getVNInfoAt(VNI->def); 1661 1662 if (!DefVNI) { 1663 report("Value not live at VNInfo def and not marked unused", MF); 1664 report_context(LR, Reg, LaneMask); 1665 report_context(*VNI); 1666 return; 1667 } 1668 1669 if (DefVNI != VNI) { 1670 report("Live segment at def has different VNInfo", MF); 1671 report_context(LR, Reg, LaneMask); 1672 report_context(*VNI); 1673 return; 1674 } 1675 1676 const MachineBasicBlock *MBB = LiveInts->getMBBFromIndex(VNI->def); 1677 if (!MBB) { 1678 report("Invalid VNInfo definition index", MF); 1679 report_context(LR, Reg, LaneMask); 1680 report_context(*VNI); 1681 return; 1682 } 1683 1684 if (VNI->isPHIDef()) { 1685 if (VNI->def != LiveInts->getMBBStartIdx(MBB)) { 1686 report("PHIDef VNInfo is not defined at MBB start", MBB); 1687 report_context(LR, Reg, LaneMask); 1688 report_context(*VNI); 1689 } 1690 return; 1691 } 1692 1693 // Non-PHI def. 1694 const MachineInstr *MI = LiveInts->getInstructionFromIndex(VNI->def); 1695 if (!MI) { 1696 report("No instruction at VNInfo def index", MBB); 1697 report_context(LR, Reg, LaneMask); 1698 report_context(*VNI); 1699 return; 1700 } 1701 1702 if (Reg != 0) { 1703 bool hasDef = false; 1704 bool isEarlyClobber = false; 1705 for (ConstMIBundleOperands MOI(*MI); MOI.isValid(); ++MOI) { 1706 if (!MOI->isReg() || !MOI->isDef()) 1707 continue; 1708 if (TargetRegisterInfo::isVirtualRegister(Reg)) { 1709 if (MOI->getReg() != Reg) 1710 continue; 1711 } else { 1712 if (!TargetRegisterInfo::isPhysicalRegister(MOI->getReg()) || 1713 !TRI->hasRegUnit(MOI->getReg(), Reg)) 1714 continue; 1715 } 1716 if (LaneMask.any() && 1717 (TRI->getSubRegIndexLaneMask(MOI->getSubReg()) & LaneMask).none()) 1718 continue; 1719 hasDef = true; 1720 if (MOI->isEarlyClobber()) 1721 isEarlyClobber = true; 1722 } 1723 1724 if (!hasDef) { 1725 report("Defining instruction does not modify register", MI); 1726 report_context(LR, Reg, LaneMask); 1727 report_context(*VNI); 1728 } 1729 1730 // Early clobber defs begin at USE slots, but other defs must begin at 1731 // DEF slots. 1732 if (isEarlyClobber) { 1733 if (!VNI->def.isEarlyClobber()) { 1734 report("Early clobber def must be at an early-clobber slot", MBB); 1735 report_context(LR, Reg, LaneMask); 1736 report_context(*VNI); 1737 } 1738 } else if (!VNI->def.isRegister()) { 1739 report("Non-PHI, non-early clobber def must be at a register slot", MBB); 1740 report_context(LR, Reg, LaneMask); 1741 report_context(*VNI); 1742 } 1743 } 1744 } 1745 1746 void MachineVerifier::verifyLiveRangeSegment(const LiveRange &LR, 1747 const LiveRange::const_iterator I, 1748 unsigned Reg, LaneBitmask LaneMask) 1749 { 1750 const LiveRange::Segment &S = *I; 1751 const VNInfo *VNI = S.valno; 1752 assert(VNI && "Live segment has no valno"); 1753 1754 if (VNI->id >= LR.getNumValNums() || VNI != LR.getValNumInfo(VNI->id)) { 1755 report("Foreign valno in live segment", MF); 1756 report_context(LR, Reg, LaneMask); 1757 report_context(S); 1758 report_context(*VNI); 1759 } 1760 1761 if (VNI->isUnused()) { 1762 report("Live segment valno is marked unused", MF); 1763 report_context(LR, Reg, LaneMask); 1764 report_context(S); 1765 } 1766 1767 const MachineBasicBlock *MBB = LiveInts->getMBBFromIndex(S.start); 1768 if (!MBB) { 1769 report("Bad start of live segment, no basic block", MF); 1770 report_context(LR, Reg, LaneMask); 1771 report_context(S); 1772 return; 1773 } 1774 SlotIndex MBBStartIdx = LiveInts->getMBBStartIdx(MBB); 1775 if (S.start != MBBStartIdx && S.start != VNI->def) { 1776 report("Live segment must begin at MBB entry or valno def", MBB); 1777 report_context(LR, Reg, LaneMask); 1778 report_context(S); 1779 } 1780 1781 const MachineBasicBlock *EndMBB = 1782 LiveInts->getMBBFromIndex(S.end.getPrevSlot()); 1783 if (!EndMBB) { 1784 report("Bad end of live segment, no basic block", MF); 1785 report_context(LR, Reg, LaneMask); 1786 report_context(S); 1787 return; 1788 } 1789 1790 // No more checks for live-out segments. 1791 if (S.end == LiveInts->getMBBEndIdx(EndMBB)) 1792 return; 1793 1794 // RegUnit intervals are allowed dead phis. 1795 if (!TargetRegisterInfo::isVirtualRegister(Reg) && VNI->isPHIDef() && 1796 S.start == VNI->def && S.end == VNI->def.getDeadSlot()) 1797 return; 1798 1799 // The live segment is ending inside EndMBB 1800 const MachineInstr *MI = 1801 LiveInts->getInstructionFromIndex(S.end.getPrevSlot()); 1802 if (!MI) { 1803 report("Live segment doesn't end at a valid instruction", EndMBB); 1804 report_context(LR, Reg, LaneMask); 1805 report_context(S); 1806 return; 1807 } 1808 1809 // The block slot must refer to a basic block boundary. 1810 if (S.end.isBlock()) { 1811 report("Live segment ends at B slot of an instruction", EndMBB); 1812 report_context(LR, Reg, LaneMask); 1813 report_context(S); 1814 } 1815 1816 if (S.end.isDead()) { 1817 // Segment ends on the dead slot. 1818 // That means there must be a dead def. 1819 if (!SlotIndex::isSameInstr(S.start, S.end)) { 1820 report("Live segment ending at dead slot spans instructions", EndMBB); 1821 report_context(LR, Reg, LaneMask); 1822 report_context(S); 1823 } 1824 } 1825 1826 // A live segment can only end at an early-clobber slot if it is being 1827 // redefined by an early-clobber def. 1828 if (S.end.isEarlyClobber()) { 1829 if (I+1 == LR.end() || (I+1)->start != S.end) { 1830 report("Live segment ending at early clobber slot must be " 1831 "redefined by an EC def in the same instruction", EndMBB); 1832 report_context(LR, Reg, LaneMask); 1833 report_context(S); 1834 } 1835 } 1836 1837 // The following checks only apply to virtual registers. Physreg liveness 1838 // is too weird to check. 1839 if (TargetRegisterInfo::isVirtualRegister(Reg)) { 1840 // A live segment can end with either a redefinition, a kill flag on a 1841 // use, or a dead flag on a def. 1842 bool hasRead = false; 1843 bool hasSubRegDef = false; 1844 bool hasDeadDef = false; 1845 for (ConstMIBundleOperands MOI(*MI); MOI.isValid(); ++MOI) { 1846 if (!MOI->isReg() || MOI->getReg() != Reg) 1847 continue; 1848 unsigned Sub = MOI->getSubReg(); 1849 LaneBitmask SLM = Sub != 0 ? TRI->getSubRegIndexLaneMask(Sub) 1850 : LaneBitmask::getAll(); 1851 if (MOI->isDef()) { 1852 if (Sub != 0) { 1853 hasSubRegDef = true; 1854 // An operand vreg0:sub0<def> reads vreg0:sub1..n. Invert the lane 1855 // mask for subregister defs. Read-undef defs will be handled by 1856 // readsReg below. 1857 SLM = ~SLM; 1858 } 1859 if (MOI->isDead()) 1860 hasDeadDef = true; 1861 } 1862 if (LaneMask.any() && (LaneMask & SLM).none()) 1863 continue; 1864 if (MOI->readsReg()) 1865 hasRead = true; 1866 } 1867 if (S.end.isDead()) { 1868 // Make sure that the corresponding machine operand for a "dead" live 1869 // range has the dead flag. We cannot perform this check for subregister 1870 // liveranges as partially dead values are allowed. 1871 if (LaneMask.none() && !hasDeadDef) { 1872 report("Instruction ending live segment on dead slot has no dead flag", 1873 MI); 1874 report_context(LR, Reg, LaneMask); 1875 report_context(S); 1876 } 1877 } else { 1878 if (!hasRead) { 1879 // When tracking subregister liveness, the main range must start new 1880 // values on partial register writes, even if there is no read. 1881 if (!MRI->shouldTrackSubRegLiveness(Reg) || LaneMask.any() || 1882 !hasSubRegDef) { 1883 report("Instruction ending live segment doesn't read the register", 1884 MI); 1885 report_context(LR, Reg, LaneMask); 1886 report_context(S); 1887 } 1888 } 1889 } 1890 } 1891 1892 // Now check all the basic blocks in this live segment. 1893 MachineFunction::const_iterator MFI = MBB->getIterator(); 1894 // Is this live segment the beginning of a non-PHIDef VN? 1895 if (S.start == VNI->def && !VNI->isPHIDef()) { 1896 // Not live-in to any blocks. 1897 if (MBB == EndMBB) 1898 return; 1899 // Skip this block. 1900 ++MFI; 1901 } 1902 for (;;) { 1903 assert(LiveInts->isLiveInToMBB(LR, &*MFI)); 1904 // We don't know how to track physregs into a landing pad. 1905 if (!TargetRegisterInfo::isVirtualRegister(Reg) && 1906 MFI->isEHPad()) { 1907 if (&*MFI == EndMBB) 1908 break; 1909 ++MFI; 1910 continue; 1911 } 1912 1913 // Is VNI a PHI-def in the current block? 1914 bool IsPHI = VNI->isPHIDef() && 1915 VNI->def == LiveInts->getMBBStartIdx(&*MFI); 1916 1917 // Check that VNI is live-out of all predecessors. 1918 for (MachineBasicBlock::const_pred_iterator PI = MFI->pred_begin(), 1919 PE = MFI->pred_end(); PI != PE; ++PI) { 1920 SlotIndex PEnd = LiveInts->getMBBEndIdx(*PI); 1921 const VNInfo *PVNI = LR.getVNInfoBefore(PEnd); 1922 1923 // All predecessors must have a live-out value if this is not a 1924 // subregister liverange. 1925 if (!PVNI && LaneMask.none()) { 1926 report("Register not marked live out of predecessor", *PI); 1927 report_context(LR, Reg, LaneMask); 1928 report_context(*VNI); 1929 errs() << " live into BB#" << MFI->getNumber() 1930 << '@' << LiveInts->getMBBStartIdx(&*MFI) << ", not live before " 1931 << PEnd << '\n'; 1932 continue; 1933 } 1934 1935 // Only PHI-defs can take different predecessor values. 1936 if (!IsPHI && PVNI != VNI) { 1937 report("Different value live out of predecessor", *PI); 1938 report_context(LR, Reg, LaneMask); 1939 errs() << "Valno #" << PVNI->id << " live out of BB#" 1940 << (*PI)->getNumber() << '@' << PEnd << "\nValno #" << VNI->id 1941 << " live into BB#" << MFI->getNumber() << '@' 1942 << LiveInts->getMBBStartIdx(&*MFI) << '\n'; 1943 } 1944 } 1945 if (&*MFI == EndMBB) 1946 break; 1947 ++MFI; 1948 } 1949 } 1950 1951 void MachineVerifier::verifyLiveRange(const LiveRange &LR, unsigned Reg, 1952 LaneBitmask LaneMask) { 1953 for (const VNInfo *VNI : LR.valnos) 1954 verifyLiveRangeValue(LR, VNI, Reg, LaneMask); 1955 1956 for (LiveRange::const_iterator I = LR.begin(), E = LR.end(); I != E; ++I) 1957 verifyLiveRangeSegment(LR, I, Reg, LaneMask); 1958 } 1959 1960 void MachineVerifier::verifyLiveInterval(const LiveInterval &LI) { 1961 unsigned Reg = LI.reg; 1962 assert(TargetRegisterInfo::isVirtualRegister(Reg)); 1963 verifyLiveRange(LI, Reg); 1964 1965 LaneBitmask Mask; 1966 LaneBitmask MaxMask = MRI->getMaxLaneMaskForVReg(Reg); 1967 for (const LiveInterval::SubRange &SR : LI.subranges()) { 1968 if ((Mask & SR.LaneMask).any()) { 1969 report("Lane masks of sub ranges overlap in live interval", MF); 1970 report_context(LI); 1971 } 1972 if ((SR.LaneMask & ~MaxMask).any()) { 1973 report("Subrange lanemask is invalid", MF); 1974 report_context(LI); 1975 } 1976 if (SR.empty()) { 1977 report("Subrange must not be empty", MF); 1978 report_context(SR, LI.reg, SR.LaneMask); 1979 } 1980 Mask |= SR.LaneMask; 1981 verifyLiveRange(SR, LI.reg, SR.LaneMask); 1982 if (!LI.covers(SR)) { 1983 report("A Subrange is not covered by the main range", MF); 1984 report_context(LI); 1985 } 1986 } 1987 1988 // Check the LI only has one connected component. 1989 ConnectedVNInfoEqClasses ConEQ(*LiveInts); 1990 unsigned NumComp = ConEQ.Classify(LI); 1991 if (NumComp > 1) { 1992 report("Multiple connected components in live interval", MF); 1993 report_context(LI); 1994 for (unsigned comp = 0; comp != NumComp; ++comp) { 1995 errs() << comp << ": valnos"; 1996 for (LiveInterval::const_vni_iterator I = LI.vni_begin(), 1997 E = LI.vni_end(); I!=E; ++I) 1998 if (comp == ConEQ.getEqClass(*I)) 1999 errs() << ' ' << (*I)->id; 2000 errs() << '\n'; 2001 } 2002 } 2003 } 2004 2005 namespace { 2006 // FrameSetup and FrameDestroy can have zero adjustment, so using a single 2007 // integer, we can't tell whether it is a FrameSetup or FrameDestroy if the 2008 // value is zero. 2009 // We use a bool plus an integer to capture the stack state. 2010 struct StackStateOfBB { 2011 StackStateOfBB() : EntryValue(0), ExitValue(0), EntryIsSetup(false), 2012 ExitIsSetup(false) { } 2013 StackStateOfBB(int EntryVal, int ExitVal, bool EntrySetup, bool ExitSetup) : 2014 EntryValue(EntryVal), ExitValue(ExitVal), EntryIsSetup(EntrySetup), 2015 ExitIsSetup(ExitSetup) { } 2016 // Can be negative, which means we are setting up a frame. 2017 int EntryValue; 2018 int ExitValue; 2019 bool EntryIsSetup; 2020 bool ExitIsSetup; 2021 }; 2022 } 2023 2024 /// Make sure on every path through the CFG, a FrameSetup <n> is always followed 2025 /// by a FrameDestroy <n>, stack adjustments are identical on all 2026 /// CFG edges to a merge point, and frame is destroyed at end of a return block. 2027 void MachineVerifier::verifyStackFrame() { 2028 unsigned FrameSetupOpcode = TII->getCallFrameSetupOpcode(); 2029 unsigned FrameDestroyOpcode = TII->getCallFrameDestroyOpcode(); 2030 if (FrameSetupOpcode == ~0u && FrameDestroyOpcode == ~0u) 2031 return; 2032 2033 SmallVector<StackStateOfBB, 8> SPState; 2034 SPState.resize(MF->getNumBlockIDs()); 2035 df_iterator_default_set<const MachineBasicBlock*> Reachable; 2036 2037 // Visit the MBBs in DFS order. 2038 for (df_ext_iterator<const MachineFunction*, 2039 df_iterator_default_set<const MachineBasicBlock*> > 2040 DFI = df_ext_begin(MF, Reachable), DFE = df_ext_end(MF, Reachable); 2041 DFI != DFE; ++DFI) { 2042 const MachineBasicBlock *MBB = *DFI; 2043 2044 StackStateOfBB BBState; 2045 // Check the exit state of the DFS stack predecessor. 2046 if (DFI.getPathLength() >= 2) { 2047 const MachineBasicBlock *StackPred = DFI.getPath(DFI.getPathLength() - 2); 2048 assert(Reachable.count(StackPred) && 2049 "DFS stack predecessor is already visited.\n"); 2050 BBState.EntryValue = SPState[StackPred->getNumber()].ExitValue; 2051 BBState.EntryIsSetup = SPState[StackPred->getNumber()].ExitIsSetup; 2052 BBState.ExitValue = BBState.EntryValue; 2053 BBState.ExitIsSetup = BBState.EntryIsSetup; 2054 } 2055 2056 // Update stack state by checking contents of MBB. 2057 for (const auto &I : *MBB) { 2058 if (I.getOpcode() == FrameSetupOpcode) { 2059 if (BBState.ExitIsSetup) 2060 report("FrameSetup is after another FrameSetup", &I); 2061 BBState.ExitValue -= TII->getFrameTotalSize(I); 2062 BBState.ExitIsSetup = true; 2063 } 2064 2065 if (I.getOpcode() == FrameDestroyOpcode) { 2066 int Size = TII->getFrameTotalSize(I); 2067 if (!BBState.ExitIsSetup) 2068 report("FrameDestroy is not after a FrameSetup", &I); 2069 int AbsSPAdj = BBState.ExitValue < 0 ? -BBState.ExitValue : 2070 BBState.ExitValue; 2071 if (BBState.ExitIsSetup && AbsSPAdj != Size) { 2072 report("FrameDestroy <n> is after FrameSetup <m>", &I); 2073 errs() << "FrameDestroy <" << Size << "> is after FrameSetup <" 2074 << AbsSPAdj << ">.\n"; 2075 } 2076 BBState.ExitValue += Size; 2077 BBState.ExitIsSetup = false; 2078 } 2079 } 2080 SPState[MBB->getNumber()] = BBState; 2081 2082 // Make sure the exit state of any predecessor is consistent with the entry 2083 // state. 2084 for (MachineBasicBlock::const_pred_iterator I = MBB->pred_begin(), 2085 E = MBB->pred_end(); I != E; ++I) { 2086 if (Reachable.count(*I) && 2087 (SPState[(*I)->getNumber()].ExitValue != BBState.EntryValue || 2088 SPState[(*I)->getNumber()].ExitIsSetup != BBState.EntryIsSetup)) { 2089 report("The exit stack state of a predecessor is inconsistent.", MBB); 2090 errs() << "Predecessor BB#" << (*I)->getNumber() << " has exit state (" 2091 << SPState[(*I)->getNumber()].ExitValue << ", " 2092 << SPState[(*I)->getNumber()].ExitIsSetup 2093 << "), while BB#" << MBB->getNumber() << " has entry state (" 2094 << BBState.EntryValue << ", " << BBState.EntryIsSetup << ").\n"; 2095 } 2096 } 2097 2098 // Make sure the entry state of any successor is consistent with the exit 2099 // state. 2100 for (MachineBasicBlock::const_succ_iterator I = MBB->succ_begin(), 2101 E = MBB->succ_end(); I != E; ++I) { 2102 if (Reachable.count(*I) && 2103 (SPState[(*I)->getNumber()].EntryValue != BBState.ExitValue || 2104 SPState[(*I)->getNumber()].EntryIsSetup != BBState.ExitIsSetup)) { 2105 report("The entry stack state of a successor is inconsistent.", MBB); 2106 errs() << "Successor BB#" << (*I)->getNumber() << " has entry state (" 2107 << SPState[(*I)->getNumber()].EntryValue << ", " 2108 << SPState[(*I)->getNumber()].EntryIsSetup 2109 << "), while BB#" << MBB->getNumber() << " has exit state (" 2110 << BBState.ExitValue << ", " << BBState.ExitIsSetup << ").\n"; 2111 } 2112 } 2113 2114 // Make sure a basic block with return ends with zero stack adjustment. 2115 if (!MBB->empty() && MBB->back().isReturn()) { 2116 if (BBState.ExitIsSetup) 2117 report("A return block ends with a FrameSetup.", MBB); 2118 if (BBState.ExitValue) 2119 report("A return block ends with a nonzero stack adjustment.", MBB); 2120 } 2121 } 2122 } 2123