LLVM  8.0.1
MachineVerifier.cpp
Go to the documentation of this file.
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 "LiveRangeCalc.h"
27 #include "llvm/ADT/BitVector.h"
28 #include "llvm/ADT/DenseMap.h"
29 #include "llvm/ADT/DenseSet.h"
31 #include "llvm/ADT/STLExtras.h"
32 #include "llvm/ADT/SetOperations.h"
33 #include "llvm/ADT/SmallPtrSet.h"
34 #include "llvm/ADT/SmallVector.h"
35 #include "llvm/ADT/StringRef.h"
36 #include "llvm/ADT/Twine.h"
54 #include "llvm/CodeGen/StackMaps.h"
59 #include "llvm/IR/BasicBlock.h"
60 #include "llvm/IR/Function.h"
61 #include "llvm/IR/InlineAsm.h"
62 #include "llvm/IR/Instructions.h"
63 #include "llvm/MC/LaneBitmask.h"
64 #include "llvm/MC/MCAsmInfo.h"
65 #include "llvm/MC/MCInstrDesc.h"
66 #include "llvm/MC/MCRegisterInfo.h"
68 #include "llvm/Pass.h"
69 #include "llvm/Support/Casting.h"
75 #include <algorithm>
76 #include <cassert>
77 #include <cstddef>
78 #include <cstdint>
79 #include <iterator>
80 #include <string>
81 #include <utility>
82 
83 using namespace llvm;
84 
85 namespace {
86 
87  struct MachineVerifier {
88  MachineVerifier(Pass *pass, const char *b) : PASS(pass), Banner(b) {}
89 
90  unsigned verify(MachineFunction &MF);
91 
92  Pass *const PASS;
93  const char *Banner;
94  const MachineFunction *MF;
95  const TargetMachine *TM;
96  const TargetInstrInfo *TII;
97  const TargetRegisterInfo *TRI;
98  const MachineRegisterInfo *MRI;
99 
100  unsigned foundErrors;
101 
102  // Avoid querying the MachineFunctionProperties for each operand.
103  bool isFunctionRegBankSelected;
104  bool isFunctionSelected;
105 
106  using RegVector = SmallVector<unsigned, 16>;
107  using RegMaskVector = SmallVector<const uint32_t *, 4>;
108  using RegSet = DenseSet<unsigned>;
111 
112  const MachineInstr *FirstNonPHI;
113  const MachineInstr *FirstTerminator;
114  BlockSet FunctionBlocks;
115 
116  BitVector regsReserved;
117  RegSet regsLive;
118  RegVector regsDefined, regsDead, regsKilled;
119  RegMaskVector regMasks;
120 
121  SlotIndex lastIndex;
122 
123  // Add Reg and any sub-registers to RV
124  void addRegWithSubRegs(RegVector &RV, unsigned Reg) {
125  RV.push_back(Reg);
127  for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid(); ++SubRegs)
128  RV.push_back(*SubRegs);
129  }
130 
131  struct BBInfo {
132  // Is this MBB reachable from the MF entry point?
133  bool reachable = false;
134 
135  // Vregs that must be live in because they are used without being
136  // defined. Map value is the user.
137  RegMap vregsLiveIn;
138 
139  // Regs killed in MBB. They may be defined again, and will then be in both
140  // regsKilled and regsLiveOut.
141  RegSet regsKilled;
142 
143  // Regs defined in MBB and live out. Note that vregs passing through may
144  // be live out without being mentioned here.
145  RegSet regsLiveOut;
146 
147  // Vregs that pass through MBB untouched. This set is disjoint from
148  // regsKilled and regsLiveOut.
149  RegSet vregsPassed;
150 
151  // Vregs that must pass through MBB because they are needed by a successor
152  // block. This set is disjoint from regsLiveOut.
153  RegSet vregsRequired;
154 
155  // Set versions of block's predecessor and successor lists.
156  BlockSet Preds, Succs;
157 
158  BBInfo() = default;
159 
160  // Add register to vregsPassed if it belongs there. Return true if
161  // anything changed.
162  bool addPassed(unsigned Reg) {
164  return false;
165  if (regsKilled.count(Reg) || regsLiveOut.count(Reg))
166  return false;
167  return vregsPassed.insert(Reg).second;
168  }
169 
170  // Same for a full set.
171  bool addPassed(const RegSet &RS) {
172  bool changed = false;
173  for (RegSet::const_iterator I = RS.begin(), E = RS.end(); I != E; ++I)
174  if (addPassed(*I))
175  changed = true;
176  return changed;
177  }
178 
179  // Add register to vregsRequired if it belongs there. Return true if
180  // anything changed.
181  bool addRequired(unsigned Reg) {
183  return false;
184  if (regsLiveOut.count(Reg))
185  return false;
186  return vregsRequired.insert(Reg).second;
187  }
188 
189  // Same for a full set.
190  bool addRequired(const RegSet &RS) {
191  bool changed = false;
192  for (RegSet::const_iterator I = RS.begin(), E = RS.end(); I != E; ++I)
193  if (addRequired(*I))
194  changed = true;
195  return changed;
196  }
197 
198  // Same for a full map.
199  bool addRequired(const RegMap &RM) {
200  bool changed = false;
201  for (RegMap::const_iterator I = RM.begin(), E = RM.end(); I != E; ++I)
202  if (addRequired(I->first))
203  changed = true;
204  return changed;
205  }
206 
207  // Live-out registers are either in regsLiveOut or vregsPassed.
208  bool isLiveOut(unsigned Reg) const {
209  return regsLiveOut.count(Reg) || vregsPassed.count(Reg);
210  }
211  };
212 
213  // Extra register info per MBB.
215 
216  bool isReserved(unsigned Reg) {
217  return Reg < regsReserved.size() && regsReserved.test(Reg);
218  }
219 
220  bool isAllocatable(unsigned Reg) const {
221  return Reg < TRI->getNumRegs() && TRI->isInAllocatableClass(Reg) &&
222  !regsReserved.test(Reg);
223  }
224 
225  // Analysis information if available
226  LiveVariables *LiveVars;
227  LiveIntervals *LiveInts;
228  LiveStacks *LiveStks;
229  SlotIndexes *Indexes;
230 
231  void visitMachineFunctionBefore();
232  void visitMachineBasicBlockBefore(const MachineBasicBlock *MBB);
233  void visitMachineBundleBefore(const MachineInstr *MI);
234  void visitMachineInstrBefore(const MachineInstr *MI);
235  void visitMachineOperand(const MachineOperand *MO, unsigned MONum);
236  void visitMachineInstrAfter(const MachineInstr *MI);
237  void visitMachineBundleAfter(const MachineInstr *MI);
238  void visitMachineBasicBlockAfter(const MachineBasicBlock *MBB);
239  void visitMachineFunctionAfter();
240 
241  void report(const char *msg, const MachineFunction *MF);
242  void report(const char *msg, const MachineBasicBlock *MBB);
243  void report(const char *msg, const MachineInstr *MI);
244  void report(const char *msg, const MachineOperand *MO, unsigned MONum,
245  LLT MOVRegType = LLT{});
246 
247  void report_context(const LiveInterval &LI) const;
248  void report_context(const LiveRange &LR, unsigned VRegUnit,
249  LaneBitmask LaneMask) const;
250  void report_context(const LiveRange::Segment &S) const;
251  void report_context(const VNInfo &VNI) const;
252  void report_context(SlotIndex Pos) const;
253  void report_context(MCPhysReg PhysReg) const;
254  void report_context_liverange(const LiveRange &LR) const;
255  void report_context_lanemask(LaneBitmask LaneMask) const;
256  void report_context_vreg(unsigned VReg) const;
257  void report_context_vreg_regunit(unsigned VRegOrUnit) const;
258 
259  void verifyInlineAsm(const MachineInstr *MI);
260 
261  void checkLiveness(const MachineOperand *MO, unsigned MONum);
262  void checkLivenessAtUse(const MachineOperand *MO, unsigned MONum,
263  SlotIndex UseIdx, const LiveRange &LR, unsigned VRegOrUnit,
264  LaneBitmask LaneMask = LaneBitmask::getNone());
265  void checkLivenessAtDef(const MachineOperand *MO, unsigned MONum,
266  SlotIndex DefIdx, const LiveRange &LR, unsigned VRegOrUnit,
267  bool SubRangeCheck = false,
268  LaneBitmask LaneMask = LaneBitmask::getNone());
269 
270  void markReachable(const MachineBasicBlock *MBB);
271  void calcRegsPassed();
272  void checkPHIOps(const MachineBasicBlock &MBB);
273 
274  void calcRegsRequired();
275  void verifyLiveVariables();
276  void verifyLiveIntervals();
277  void verifyLiveInterval(const LiveInterval&);
278  void verifyLiveRangeValue(const LiveRange&, const VNInfo*, unsigned,
279  LaneBitmask);
280  void verifyLiveRangeSegment(const LiveRange&,
281  const LiveRange::const_iterator I, unsigned,
282  LaneBitmask);
283  void verifyLiveRange(const LiveRange&, unsigned,
284  LaneBitmask LaneMask = LaneBitmask::getNone());
285 
286  void verifyStackFrame();
287 
288  void verifySlotIndexes() const;
289  void verifyProperties(const MachineFunction &MF);
290  };
291 
292  struct MachineVerifierPass : public MachineFunctionPass {
293  static char ID; // Pass ID, replacement for typeid
294 
295  const std::string Banner;
296 
297  MachineVerifierPass(std::string banner = std::string())
298  : MachineFunctionPass(ID), Banner(std::move(banner)) {
300  }
301 
302  void getAnalysisUsage(AnalysisUsage &AU) const override {
303  AU.setPreservesAll();
305  }
306 
307  bool runOnMachineFunction(MachineFunction &MF) override {
308  unsigned FoundErrors = MachineVerifier(this, Banner.c_str()).verify(MF);
309  if (FoundErrors)
310  report_fatal_error("Found "+Twine(FoundErrors)+" machine code errors.");
311  return false;
312  }
313  };
314 
315 } // end anonymous namespace
316 
317 char MachineVerifierPass::ID = 0;
318 
319 INITIALIZE_PASS(MachineVerifierPass, "machineverifier",
320  "Verify generated machine code", false, false)
321 
323  return new MachineVerifierPass(Banner);
324 }
325 
326 bool MachineFunction::verify(Pass *p, const char *Banner, bool AbortOnErrors)
327  const {
328  MachineFunction &MF = const_cast<MachineFunction&>(*this);
329  unsigned FoundErrors = MachineVerifier(p, Banner).verify(MF);
330  if (AbortOnErrors && FoundErrors)
331  report_fatal_error("Found "+Twine(FoundErrors)+" machine code errors.");
332  return FoundErrors == 0;
333 }
334 
335 void MachineVerifier::verifySlotIndexes() const {
336  if (Indexes == nullptr)
337  return;
338 
339  // Ensure the IdxMBB list is sorted by slot indexes.
340  SlotIndex Last;
342  E = Indexes->MBBIndexEnd(); I != E; ++I) {
343  assert(!Last.isValid() || I->first > Last);
344  Last = I->first;
345  }
346 }
347 
348 void MachineVerifier::verifyProperties(const MachineFunction &MF) {
349  // If a pass has introduced virtual registers without clearing the
350  // NoVRegs property (or set it without allocating the vregs)
351  // then report an error.
352  if (MF.getProperties().hasProperty(
354  MRI->getNumVirtRegs())
355  report("Function has NoVRegs property but there are VReg operands", &MF);
356 }
357 
359  foundErrors = 0;
360 
361  this->MF = &MF;
362  TM = &MF.getTarget();
363  TII = MF.getSubtarget().getInstrInfo();
364  TRI = MF.getSubtarget().getRegisterInfo();
365  MRI = &MF.getRegInfo();
366 
367  const bool isFunctionFailedISel = MF.getProperties().hasProperty(
369 
370  // If we're mid-GlobalISel and we already triggered the fallback path then
371  // it's expected that the MIR is somewhat broken but that's ok since we'll
372  // reset it and clear the FailedISel attribute in ResetMachineFunctions.
373  if (isFunctionFailedISel)
374  return foundErrors;
375 
376  isFunctionRegBankSelected =
377  !isFunctionFailedISel &&
380  isFunctionSelected = !isFunctionFailedISel &&
383  LiveVars = nullptr;
384  LiveInts = nullptr;
385  LiveStks = nullptr;
386  Indexes = nullptr;
387  if (PASS) {
388  LiveInts = PASS->getAnalysisIfAvailable<LiveIntervals>();
389  // We don't want to verify LiveVariables if LiveIntervals is available.
390  if (!LiveInts)
391  LiveVars = PASS->getAnalysisIfAvailable<LiveVariables>();
392  LiveStks = PASS->getAnalysisIfAvailable<LiveStacks>();
393  Indexes = PASS->getAnalysisIfAvailable<SlotIndexes>();
394  }
395 
396  verifySlotIndexes();
397 
398  verifyProperties(MF);
399 
400  visitMachineFunctionBefore();
401  for (MachineFunction::const_iterator MFI = MF.begin(), MFE = MF.end();
402  MFI!=MFE; ++MFI) {
403  visitMachineBasicBlockBefore(&*MFI);
404  // Keep track of the current bundle header.
405  const MachineInstr *CurBundle = nullptr;
406  // Do we expect the next instruction to be part of the same bundle?
407  bool InBundle = false;
408 
409  for (MachineBasicBlock::const_instr_iterator MBBI = MFI->instr_begin(),
410  MBBE = MFI->instr_end(); MBBI != MBBE; ++MBBI) {
411  if (MBBI->getParent() != &*MFI) {
412  report("Bad instruction parent pointer", &*MFI);
413  errs() << "Instruction: " << *MBBI;
414  continue;
415  }
416 
417  // Check for consistent bundle flags.
418  if (InBundle && !MBBI->isBundledWithPred())
419  report("Missing BundledPred flag, "
420  "BundledSucc was set on predecessor",
421  &*MBBI);
422  if (!InBundle && MBBI->isBundledWithPred())
423  report("BundledPred flag is set, "
424  "but BundledSucc not set on predecessor",
425  &*MBBI);
426 
427  // Is this a bundle header?
428  if (!MBBI->isInsideBundle()) {
429  if (CurBundle)
430  visitMachineBundleAfter(CurBundle);
431  CurBundle = &*MBBI;
432  visitMachineBundleBefore(CurBundle);
433  } else if (!CurBundle)
434  report("No bundle header", &*MBBI);
435  visitMachineInstrBefore(&*MBBI);
436  for (unsigned I = 0, E = MBBI->getNumOperands(); I != E; ++I) {
437  const MachineInstr &MI = *MBBI;
438  const MachineOperand &Op = MI.getOperand(I);
439  if (Op.getParent() != &MI) {
440  // Make sure to use correct addOperand / RemoveOperand / ChangeTo
441  // functions when replacing operands of a MachineInstr.
442  report("Instruction has operand with wrong parent set", &MI);
443  }
444 
445  visitMachineOperand(&Op, I);
446  }
447 
448  visitMachineInstrAfter(&*MBBI);
449 
450  // Was this the last bundled instruction?
451  InBundle = MBBI->isBundledWithSucc();
452  }
453  if (CurBundle)
454  visitMachineBundleAfter(CurBundle);
455  if (InBundle)
456  report("BundledSucc flag set on last instruction in block", &MFI->back());
457  visitMachineBasicBlockAfter(&*MFI);
458  }
459  visitMachineFunctionAfter();
460 
461  // Clean up.
462  regsLive.clear();
463  regsDefined.clear();
464  regsDead.clear();
465  regsKilled.clear();
466  regMasks.clear();
467  MBBInfoMap.clear();
468 
469  return foundErrors;
470 }
471 
472 void MachineVerifier::report(const char *msg, const MachineFunction *MF) {
473  assert(MF);
474  errs() << '\n';
475  if (!foundErrors++) {
476  if (Banner)
477  errs() << "# " << Banner << '\n';
478  if (LiveInts != nullptr)
479  LiveInts->print(errs());
480  else
481  MF->print(errs(), Indexes);
482  }
483  errs() << "*** Bad machine code: " << msg << " ***\n"
484  << "- function: " << MF->getName() << "\n";
485 }
486 
487 void MachineVerifier::report(const char *msg, const MachineBasicBlock *MBB) {
488  assert(MBB);
489  report(msg, MBB->getParent());
490  errs() << "- basic block: " << printMBBReference(*MBB) << ' '
491  << MBB->getName() << " (" << (const void *)MBB << ')';
492  if (Indexes)
493  errs() << " [" << Indexes->getMBBStartIdx(MBB)
494  << ';' << Indexes->getMBBEndIdx(MBB) << ')';
495  errs() << '\n';
496 }
497 
498 void MachineVerifier::report(const char *msg, const MachineInstr *MI) {
499  assert(MI);
500  report(msg, MI->getParent());
501  errs() << "- instruction: ";
502  if (Indexes && Indexes->hasIndex(*MI))
503  errs() << Indexes->getInstructionIndex(*MI) << '\t';
504  MI->print(errs(), /*SkipOpers=*/true);
505 }
506 
507 void MachineVerifier::report(const char *msg, const MachineOperand *MO,
508  unsigned MONum, LLT MOVRegType) {
509  assert(MO);
510  report(msg, MO->getParent());
511  errs() << "- operand " << MONum << ": ";
512  MO->print(errs(), MOVRegType, TRI);
513  errs() << "\n";
514 }
515 
516 void MachineVerifier::report_context(SlotIndex Pos) const {
517  errs() << "- at: " << Pos << '\n';
518 }
519 
520 void MachineVerifier::report_context(const LiveInterval &LI) const {
521  errs() << "- interval: " << LI << '\n';
522 }
523 
524 void MachineVerifier::report_context(const LiveRange &LR, unsigned VRegUnit,
525  LaneBitmask LaneMask) const {
526  report_context_liverange(LR);
527  report_context_vreg_regunit(VRegUnit);
528  if (LaneMask.any())
529  report_context_lanemask(LaneMask);
530 }
531 
532 void MachineVerifier::report_context(const LiveRange::Segment &S) const {
533  errs() << "- segment: " << S << '\n';
534 }
535 
536 void MachineVerifier::report_context(const VNInfo &VNI) const {
537  errs() << "- ValNo: " << VNI.id << " (def " << VNI.def << ")\n";
538 }
539 
540 void MachineVerifier::report_context_liverange(const LiveRange &LR) const {
541  errs() << "- liverange: " << LR << '\n';
542 }
543 
544 void MachineVerifier::report_context(MCPhysReg PReg) const {
545  errs() << "- p. register: " << printReg(PReg, TRI) << '\n';
546 }
547 
548 void MachineVerifier::report_context_vreg(unsigned VReg) const {
549  errs() << "- v. register: " << printReg(VReg, TRI) << '\n';
550 }
551 
552 void MachineVerifier::report_context_vreg_regunit(unsigned VRegOrUnit) const {
553  if (TargetRegisterInfo::isVirtualRegister(VRegOrUnit)) {
554  report_context_vreg(VRegOrUnit);
555  } else {
556  errs() << "- regunit: " << printRegUnit(VRegOrUnit, TRI) << '\n';
557  }
558 }
559 
560 void MachineVerifier::report_context_lanemask(LaneBitmask LaneMask) const {
561  errs() << "- lanemask: " << PrintLaneMask(LaneMask) << '\n';
562 }
563 
564 void MachineVerifier::markReachable(const MachineBasicBlock *MBB) {
565  BBInfo &MInfo = MBBInfoMap[MBB];
566  if (!MInfo.reachable) {
567  MInfo.reachable = true;
569  SuE = MBB->succ_end(); SuI != SuE; ++SuI)
570  markReachable(*SuI);
571  }
572 }
573 
574 void MachineVerifier::visitMachineFunctionBefore() {
575  lastIndex = SlotIndex();
576  regsReserved = MRI->reservedRegsFrozen() ? MRI->getReservedRegs()
577  : TRI->getReservedRegs(*MF);
578 
579  if (!MF->empty())
580  markReachable(&MF->front());
581 
582  // Build a set of the basic blocks in the function.
583  FunctionBlocks.clear();
584  for (const auto &MBB : *MF) {
585  FunctionBlocks.insert(&MBB);
586  BBInfo &MInfo = MBBInfoMap[&MBB];
587 
588  MInfo.Preds.insert(MBB.pred_begin(), MBB.pred_end());
589  if (MInfo.Preds.size() != MBB.pred_size())
590  report("MBB has duplicate entries in its predecessor list.", &MBB);
591 
592  MInfo.Succs.insert(MBB.succ_begin(), MBB.succ_end());
593  if (MInfo.Succs.size() != MBB.succ_size())
594  report("MBB has duplicate entries in its successor list.", &MBB);
595  }
596 
597  // Check that the register use lists are sane.
598  MRI->verifyUseLists();
599 
600  if (!MF->empty())
601  verifyStackFrame();
602 }
603 
604 // Does iterator point to a and b as the first two elements?
606  const MachineBasicBlock *a, const MachineBasicBlock *b) {
607  if (*i == a)
608  return *++i == b;
609  if (*i == b)
610  return *++i == a;
611  return false;
612 }
613 
614 void
615 MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
616  FirstTerminator = nullptr;
617  FirstNonPHI = nullptr;
618 
619  if (!MF->getProperties().hasProperty(
621  // If this block has allocatable physical registers live-in, check that
622  // it is an entry block or landing pad.
623  for (const auto &LI : MBB->liveins()) {
624  if (isAllocatable(LI.PhysReg) && !MBB->isEHPad() &&
625  MBB->getIterator() != MBB->getParent()->begin()) {
626  report("MBB has allocatable live-in, but isn't entry or landing-pad.", MBB);
627  report_context(LI.PhysReg);
628  }
629  }
630  }
631 
632  // Count the number of landing pad successors.
633  SmallPtrSet<MachineBasicBlock*, 4> LandingPadSuccs;
635  E = MBB->succ_end(); I != E; ++I) {
636  if ((*I)->isEHPad())
637  LandingPadSuccs.insert(*I);
638  if (!FunctionBlocks.count(*I))
639  report("MBB has successor that isn't part of the function.", MBB);
640  if (!MBBInfoMap[*I].Preds.count(MBB)) {
641  report("Inconsistent CFG", MBB);
642  errs() << "MBB is not in the predecessor list of the successor "
643  << printMBBReference(*(*I)) << ".\n";
644  }
645  }
646 
647  // Check the predecessor list.
649  E = MBB->pred_end(); I != E; ++I) {
650  if (!FunctionBlocks.count(*I))
651  report("MBB has predecessor that isn't part of the function.", MBB);
652  if (!MBBInfoMap[*I].Succs.count(MBB)) {
653  report("Inconsistent CFG", MBB);
654  errs() << "MBB is not in the successor list of the predecessor "
655  << printMBBReference(*(*I)) << ".\n";
656  }
657  }
658 
659  const MCAsmInfo *AsmInfo = TM->getMCAsmInfo();
660  const BasicBlock *BB = MBB->getBasicBlock();
661  const Function &F = MF->getFunction();
662  if (LandingPadSuccs.size() > 1 &&
663  !(AsmInfo &&
665  BB && isa<SwitchInst>(BB->getTerminator())) &&
667  report("MBB has more than one landing pad successor", MBB);
668 
669  // Call AnalyzeBranch. If it succeeds, there several more conditions to check.
670  MachineBasicBlock *TBB = nullptr, *FBB = nullptr;
672  if (!TII->analyzeBranch(*const_cast<MachineBasicBlock *>(MBB), TBB, FBB,
673  Cond)) {
674  // Ok, AnalyzeBranch thinks it knows what's going on with this block. Let's
675  // check whether its answers match up with reality.
676  if (!TBB && !FBB) {
677  // Block falls through to its successor.
679  ++MBBI;
680  if (MBBI == MF->end()) {
681  // It's possible that the block legitimately ends with a noreturn
682  // call or an unreachable, in which case it won't actually fall
683  // out the bottom of the function.
684  } else if (MBB->succ_size() == LandingPadSuccs.size()) {
685  // It's possible that the block legitimately ends with a noreturn
686  // call or an unreachable, in which case it won't actually fall
687  // out of the block.
688  } else if (MBB->succ_size() != 1+LandingPadSuccs.size()) {
689  report("MBB exits via unconditional fall-through but doesn't have "
690  "exactly one CFG successor!", MBB);
691  } else if (!MBB->isSuccessor(&*MBBI)) {
692  report("MBB exits via unconditional fall-through but its successor "
693  "differs from its CFG successor!", MBB);
694  }
695  if (!MBB->empty() && MBB->back().isBarrier() &&
696  !TII->isPredicated(MBB->back())) {
697  report("MBB exits via unconditional fall-through but ends with a "
698  "barrier instruction!", MBB);
699  }
700  if (!Cond.empty()) {
701  report("MBB exits via unconditional fall-through but has a condition!",
702  MBB);
703  }
704  } else if (TBB && !FBB && Cond.empty()) {
705  // Block unconditionally branches somewhere.
706  // If the block has exactly one successor, that happens to be a
707  // landingpad, accept it as valid control flow.
708  if (MBB->succ_size() != 1+LandingPadSuccs.size() &&
709  (MBB->succ_size() != 1 || LandingPadSuccs.size() != 1 ||
710  *MBB->succ_begin() != *LandingPadSuccs.begin())) {
711  report("MBB exits via unconditional branch but doesn't have "
712  "exactly one CFG successor!", MBB);
713  } else if (!MBB->isSuccessor(TBB)) {
714  report("MBB exits via unconditional branch but the CFG "
715  "successor doesn't match the actual successor!", MBB);
716  }
717  if (MBB->empty()) {
718  report("MBB exits via unconditional branch but doesn't contain "
719  "any instructions!", MBB);
720  } else if (!MBB->back().isBarrier()) {
721  report("MBB exits via unconditional branch but doesn't end with a "
722  "barrier instruction!", MBB);
723  } else if (!MBB->back().isTerminator()) {
724  report("MBB exits via unconditional branch but the branch isn't a "
725  "terminator instruction!", MBB);
726  }
727  } else if (TBB && !FBB && !Cond.empty()) {
728  // Block conditionally branches somewhere, otherwise falls through.
730  ++MBBI;
731  if (MBBI == MF->end()) {
732  report("MBB conditionally falls through out of function!", MBB);
733  } else if (MBB->succ_size() == 1) {
734  // A conditional branch with only one successor is weird, but allowed.
735  if (&*MBBI != TBB)
736  report("MBB exits via conditional branch/fall-through but only has "
737  "one CFG successor!", MBB);
738  else if (TBB != *MBB->succ_begin())
739  report("MBB exits via conditional branch/fall-through but the CFG "
740  "successor don't match the actual successor!", MBB);
741  } else if (MBB->succ_size() != 2) {
742  report("MBB exits via conditional branch/fall-through but doesn't have "
743  "exactly two CFG successors!", MBB);
744  } else if (!matchPair(MBB->succ_begin(), TBB, &*MBBI)) {
745  report("MBB exits via conditional branch/fall-through but the CFG "
746  "successors don't match the actual successors!", MBB);
747  }
748  if (MBB->empty()) {
749  report("MBB exits via conditional branch/fall-through but doesn't "
750  "contain any instructions!", MBB);
751  } else if (MBB->back().isBarrier()) {
752  report("MBB exits via conditional branch/fall-through but ends with a "
753  "barrier instruction!", MBB);
754  } else if (!MBB->back().isTerminator()) {
755  report("MBB exits via conditional branch/fall-through but the branch "
756  "isn't a terminator instruction!", MBB);
757  }
758  } else if (TBB && FBB) {
759  // Block conditionally branches somewhere, otherwise branches
760  // somewhere else.
761  if (MBB->succ_size() == 1) {
762  // A conditional branch with only one successor is weird, but allowed.
763  if (FBB != TBB)
764  report("MBB exits via conditional branch/branch through but only has "
765  "one CFG successor!", MBB);
766  else if (TBB != *MBB->succ_begin())
767  report("MBB exits via conditional branch/branch through but the CFG "
768  "successor don't match the actual successor!", MBB);
769  } else if (MBB->succ_size() != 2) {
770  report("MBB exits via conditional branch/branch but doesn't have "
771  "exactly two CFG successors!", MBB);
772  } else if (!matchPair(MBB->succ_begin(), TBB, FBB)) {
773  report("MBB exits via conditional branch/branch but the CFG "
774  "successors don't match the actual successors!", MBB);
775  }
776  if (MBB->empty()) {
777  report("MBB exits via conditional branch/branch but doesn't "
778  "contain any instructions!", MBB);
779  } else if (!MBB->back().isBarrier()) {
780  report("MBB exits via conditional branch/branch but doesn't end with a "
781  "barrier instruction!", MBB);
782  } else if (!MBB->back().isTerminator()) {
783  report("MBB exits via conditional branch/branch but the branch "
784  "isn't a terminator instruction!", MBB);
785  }
786  if (Cond.empty()) {
787  report("MBB exits via conditional branch/branch but there's no "
788  "condition!", MBB);
789  }
790  } else {
791  report("AnalyzeBranch returned invalid data!", MBB);
792  }
793  }
794 
795  regsLive.clear();
796  if (MRI->tracksLiveness()) {
797  for (const auto &LI : MBB->liveins()) {
798  if (!TargetRegisterInfo::isPhysicalRegister(LI.PhysReg)) {
799  report("MBB live-in list contains non-physical register", MBB);
800  continue;
801  }
802  for (MCSubRegIterator SubRegs(LI.PhysReg, TRI, /*IncludeSelf=*/true);
803  SubRegs.isValid(); ++SubRegs)
804  regsLive.insert(*SubRegs);
805  }
806  }
807 
808  const MachineFrameInfo &MFI = MF->getFrameInfo();
809  BitVector PR = MFI.getPristineRegs(*MF);
810  for (unsigned I : PR.set_bits()) {
811  for (MCSubRegIterator SubRegs(I, TRI, /*IncludeSelf=*/true);
812  SubRegs.isValid(); ++SubRegs)
813  regsLive.insert(*SubRegs);
814  }
815 
816  regsKilled.clear();
817  regsDefined.clear();
818 
819  if (Indexes)
820  lastIndex = Indexes->getMBBStartIdx(MBB);
821 }
822 
823 // This function gets called for all bundle headers, including normal
824 // stand-alone unbundled instructions.
825 void MachineVerifier::visitMachineBundleBefore(const MachineInstr *MI) {
826  if (Indexes && Indexes->hasIndex(*MI)) {
827  SlotIndex idx = Indexes->getInstructionIndex(*MI);
828  if (!(idx > lastIndex)) {
829  report("Instruction index out of order", MI);
830  errs() << "Last instruction was at " << lastIndex << '\n';
831  }
832  lastIndex = idx;
833  }
834 
835  // Ensure non-terminators don't follow terminators.
836  // Ignore predicated terminators formed by if conversion.
837  // FIXME: If conversion shouldn't need to violate this rule.
838  if (MI->isTerminator() && !TII->isPredicated(*MI)) {
839  if (!FirstTerminator)
840  FirstTerminator = MI;
841  } else if (FirstTerminator) {
842  report("Non-terminator instruction after the first terminator", MI);
843  errs() << "First terminator was:\t" << *FirstTerminator;
844  }
845 }
846 
847 // The operands on an INLINEASM instruction must follow a template.
848 // Verify that the flag operands make sense.
849 void MachineVerifier::verifyInlineAsm(const MachineInstr *MI) {
850  // The first two operands on INLINEASM are the asm string and global flags.
851  if (MI->getNumOperands() < 2) {
852  report("Too few operands on inline asm", MI);
853  return;
854  }
855  if (!MI->getOperand(0).isSymbol())
856  report("Asm string must be an external symbol", MI);
857  if (!MI->getOperand(1).isImm())
858  report("Asm flags must be an immediate", MI);
859  // Allowed flags are Extra_HasSideEffects = 1, Extra_IsAlignStack = 2,
860  // Extra_AsmDialect = 4, Extra_MayLoad = 8, and Extra_MayStore = 16,
861  // and Extra_IsConvergent = 32.
862  if (!isUInt<6>(MI->getOperand(1).getImm()))
863  report("Unknown asm flags", &MI->getOperand(1), 1);
864 
865  static_assert(InlineAsm::MIOp_FirstOperand == 2, "Asm format changed");
866 
867  unsigned OpNo = InlineAsm::MIOp_FirstOperand;
868  unsigned NumOps;
869  for (unsigned e = MI->getNumOperands(); OpNo < e; OpNo += NumOps) {
870  const MachineOperand &MO = MI->getOperand(OpNo);
871  // There may be implicit ops after the fixed operands.
872  if (!MO.isImm())
873  break;
874  NumOps = 1 + InlineAsm::getNumOperandRegisters(MO.getImm());
875  }
876 
877  if (OpNo > MI->getNumOperands())
878  report("Missing operands in last group", MI);
879 
880  // An optional MDNode follows the groups.
881  if (OpNo < MI->getNumOperands() && MI->getOperand(OpNo).isMetadata())
882  ++OpNo;
883 
884  // All trailing operands must be implicit registers.
885  for (unsigned e = MI->getNumOperands(); OpNo < e; ++OpNo) {
886  const MachineOperand &MO = MI->getOperand(OpNo);
887  if (!MO.isReg() || !MO.isImplicit())
888  report("Expected implicit register after groups", &MO, OpNo);
889  }
890 }
891 
892 void MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) {
893  const MCInstrDesc &MCID = MI->getDesc();
894  if (MI->getNumOperands() < MCID.getNumOperands()) {
895  report("Too few operands", MI);
896  errs() << MCID.getNumOperands() << " operands expected, but "
897  << MI->getNumOperands() << " given.\n";
898  }
899 
900  if (MI->isPHI()) {
901  if (MF->getProperties().hasProperty(
903  report("Found PHI instruction with NoPHIs property set", MI);
904 
905  if (FirstNonPHI)
906  report("Found PHI instruction after non-PHI", MI);
907  } else if (FirstNonPHI == nullptr)
908  FirstNonPHI = MI;
909 
910  // Check the tied operands.
911  if (MI->isInlineAsm())
912  verifyInlineAsm(MI);
913 
914  // Check the MachineMemOperands for basic consistency.
916  E = MI->memoperands_end();
917  I != E; ++I) {
918  if ((*I)->isLoad() && !MI->mayLoad())
919  report("Missing mayLoad flag", MI);
920  if ((*I)->isStore() && !MI->mayStore())
921  report("Missing mayStore flag", MI);
922  }
923 
924  // Debug values must not have a slot index.
925  // Other instructions must have one, unless they are inside a bundle.
926  if (LiveInts) {
927  bool mapped = !LiveInts->isNotInMIMap(*MI);
928  if (MI->isDebugInstr()) {
929  if (mapped)
930  report("Debug instruction has a slot index", MI);
931  } else if (MI->isInsideBundle()) {
932  if (mapped)
933  report("Instruction inside bundle has a slot index", MI);
934  } else {
935  if (!mapped)
936  report("Missing slot index", MI);
937  }
938  }
939 
940  if (isPreISelGenericOpcode(MCID.getOpcode())) {
941  if (isFunctionSelected)
942  report("Unexpected generic instruction in a Selected function", MI);
943 
944  // Check types.
945  SmallVector<LLT, 4> Types;
946  for (unsigned I = 0; I < MCID.getNumOperands(); ++I) {
947  if (!MCID.OpInfo[I].isGenericType())
948  continue;
949  // Generic instructions specify type equality constraints between some of
950  // their operands. Make sure these are consistent.
951  size_t TypeIdx = MCID.OpInfo[I].getGenericTypeIndex();
952  Types.resize(std::max(TypeIdx + 1, Types.size()));
953 
954  const MachineOperand *MO = &MI->getOperand(I);
955  LLT OpTy = MRI->getType(MO->getReg());
956  // Don't report a type mismatch if there is no actual mismatch, only a
957  // type missing, to reduce noise:
958  if (OpTy.isValid()) {
959  // Only the first valid type for a type index will be printed: don't
960  // overwrite it later so it's always clear which type was expected:
961  if (!Types[TypeIdx].isValid())
962  Types[TypeIdx] = OpTy;
963  else if (Types[TypeIdx] != OpTy)
964  report("Type mismatch in generic instruction", MO, I, OpTy);
965  } else {
966  // Generic instructions must have types attached to their operands.
967  report("Generic instruction is missing a virtual register type", MO, I);
968  }
969  }
970 
971  // Generic opcodes must not have physical register operands.
972  for (unsigned I = 0; I < MI->getNumOperands(); ++I) {
973  const MachineOperand *MO = &MI->getOperand(I);
975  report("Generic instruction cannot have physical register", MO, I);
976  }
977  }
978 
980  if (!TII->verifyInstruction(*MI, ErrorInfo))
981  report(ErrorInfo.data(), MI);
982 
983  // Verify properties of various specific instruction types
984  switch(MI->getOpcode()) {
985  default:
986  break;
987  case TargetOpcode::G_LOAD:
988  case TargetOpcode::G_STORE:
989  // Generic loads and stores must have a single MachineMemOperand
990  // describing that access.
991  if (!MI->hasOneMemOperand())
992  report("Generic instruction accessing memory must have one mem operand",
993  MI);
994  break;
995  case TargetOpcode::G_PHI: {
996  LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
997  if (!DstTy.isValid() ||
998  !std::all_of(MI->operands_begin() + 1, MI->operands_end(),
999  [this, &DstTy](const MachineOperand &MO) {
1000  if (!MO.isReg())
1001  return true;
1002  LLT Ty = MRI->getType(MO.getReg());
1003  if (!Ty.isValid() || (Ty != DstTy))
1004  return false;
1005  return true;
1006  }))
1007  report("Generic Instruction G_PHI has operands with incompatible/missing "
1008  "types",
1009  MI);
1010  break;
1011  }
1012  case TargetOpcode::G_SEXT:
1013  case TargetOpcode::G_ZEXT:
1014  case TargetOpcode::G_ANYEXT:
1015  case TargetOpcode::G_TRUNC:
1016  case TargetOpcode::G_FPEXT:
1017  case TargetOpcode::G_FPTRUNC: {
1018  // Number of operands and presense of types is already checked (and
1019  // reported in case of any issues), so no need to report them again. As
1020  // we're trying to report as many issues as possible at once, however, the
1021  // instructions aren't guaranteed to have the right number of operands or
1022  // types attached to them at this point
1023  assert(MCID.getNumOperands() == 2 && "Expected 2 operands G_*{EXT,TRUNC}");
1024  if (MI->getNumOperands() < MCID.getNumOperands())
1025  break;
1026  LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
1027  LLT SrcTy = MRI->getType(MI->getOperand(1).getReg());
1028  if (!DstTy.isValid() || !SrcTy.isValid())
1029  break;
1030 
1031  LLT DstElTy = DstTy.isVector() ? DstTy.getElementType() : DstTy;
1032  LLT SrcElTy = SrcTy.isVector() ? SrcTy.getElementType() : SrcTy;
1033  if (DstElTy.isPointer() || SrcElTy.isPointer())
1034  report("Generic extend/truncate can not operate on pointers", MI);
1035 
1036  if (DstTy.isVector() != SrcTy.isVector()) {
1037  report("Generic extend/truncate must be all-vector or all-scalar", MI);
1038  // Generally we try to report as many issues as possible at once, but in
1039  // this case it's not clear what should we be comparing the size of the
1040  // scalar with: the size of the whole vector or its lane. Instead of
1041  // making an arbitrary choice and emitting not so helpful message, let's
1042  // avoid the extra noise and stop here.
1043  break;
1044  }
1045  if (DstTy.isVector() && DstTy.getNumElements() != SrcTy.getNumElements())
1046  report("Generic vector extend/truncate must preserve number of lanes",
1047  MI);
1048  unsigned DstSize = DstElTy.getSizeInBits();
1049  unsigned SrcSize = SrcElTy.getSizeInBits();
1050  switch (MI->getOpcode()) {
1051  default:
1052  if (DstSize <= SrcSize)
1053  report("Generic extend has destination type no larger than source", MI);
1054  break;
1055  case TargetOpcode::G_TRUNC:
1056  case TargetOpcode::G_FPTRUNC:
1057  if (DstSize >= SrcSize)
1058  report("Generic truncate has destination type no smaller than source",
1059  MI);
1060  break;
1061  }
1062  break;
1063  }
1064  case TargetOpcode::G_MERGE_VALUES: {
1065  // G_MERGE_VALUES should only be used to merge scalars into a larger scalar,
1066  // e.g. s2N = MERGE sN, sN
1067  // Merging multiple scalars into a vector is not allowed, should use
1068  // G_BUILD_VECTOR for that.
1069  LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
1070  LLT SrcTy = MRI->getType(MI->getOperand(1).getReg());
1071  if (DstTy.isVector() || SrcTy.isVector())
1072  report("G_MERGE_VALUES cannot operate on vectors", MI);
1073  break;
1074  }
1075  case TargetOpcode::G_UNMERGE_VALUES: {
1076  LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
1077  LLT SrcTy = MRI->getType(MI->getOperand(MI->getNumOperands()-1).getReg());
1078  // For now G_UNMERGE can split vectors.
1079  for (unsigned i = 0; i < MI->getNumOperands()-1; ++i) {
1080  if (MRI->getType(MI->getOperand(i).getReg()) != DstTy)
1081  report("G_UNMERGE_VALUES destination types do not match", MI);
1082  }
1083  if (SrcTy.getSizeInBits() !=
1084  (DstTy.getSizeInBits() * (MI->getNumOperands() - 1))) {
1085  report("G_UNMERGE_VALUES source operand does not cover dest operands",
1086  MI);
1087  }
1088  break;
1089  }
1090  case TargetOpcode::G_BUILD_VECTOR: {
1091  // Source types must be scalars, dest type a vector. Total size of scalars
1092  // must match the dest vector size.
1093  LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
1094  LLT SrcEltTy = MRI->getType(MI->getOperand(1).getReg());
1095  if (!DstTy.isVector() || SrcEltTy.isVector())
1096  report("G_BUILD_VECTOR must produce a vector from scalar operands", MI);
1097  for (unsigned i = 2; i < MI->getNumOperands(); ++i) {
1098  if (MRI->getType(MI->getOperand(1).getReg()) !=
1099  MRI->getType(MI->getOperand(i).getReg()))
1100  report("G_BUILD_VECTOR source operand types are not homogeneous", MI);
1101  }
1102  if (DstTy.getSizeInBits() !=
1103  SrcEltTy.getSizeInBits() * (MI->getNumOperands() - 1))
1104  report("G_BUILD_VECTOR src operands total size don't match dest "
1105  "size.",
1106  MI);
1107  break;
1108  }
1109  case TargetOpcode::G_BUILD_VECTOR_TRUNC: {
1110  // Source types must be scalars, dest type a vector. Scalar types must be
1111  // larger than the dest vector elt type, as this is a truncating operation.
1112  LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
1113  LLT SrcEltTy = MRI->getType(MI->getOperand(1).getReg());
1114  if (!DstTy.isVector() || SrcEltTy.isVector())
1115  report("G_BUILD_VECTOR_TRUNC must produce a vector from scalar operands",
1116  MI);
1117  for (unsigned i = 2; i < MI->getNumOperands(); ++i) {
1118  if (MRI->getType(MI->getOperand(1).getReg()) !=
1119  MRI->getType(MI->getOperand(i).getReg()))
1120  report("G_BUILD_VECTOR_TRUNC source operand types are not homogeneous",
1121  MI);
1122  }
1123  if (SrcEltTy.getSizeInBits() <= DstTy.getElementType().getSizeInBits())
1124  report("G_BUILD_VECTOR_TRUNC source operand types are not larger than "
1125  "dest elt type",
1126  MI);
1127  break;
1128  }
1129  case TargetOpcode::G_CONCAT_VECTORS: {
1130  // Source types should be vectors, and total size should match the dest
1131  // vector size.
1132  LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
1133  LLT SrcTy = MRI->getType(MI->getOperand(1).getReg());
1134  if (!DstTy.isVector() || !SrcTy.isVector())
1135  report("G_CONCAT_VECTOR requires vector source and destination operands",
1136  MI);
1137  for (unsigned i = 2; i < MI->getNumOperands(); ++i) {
1138  if (MRI->getType(MI->getOperand(1).getReg()) !=
1139  MRI->getType(MI->getOperand(i).getReg()))
1140  report("G_CONCAT_VECTOR source operand types are not homogeneous", MI);
1141  }
1142  if (DstTy.getNumElements() !=
1143  SrcTy.getNumElements() * (MI->getNumOperands() - 1))
1144  report("G_CONCAT_VECTOR num dest and source elements should match", MI);
1145  break;
1146  }
1147  case TargetOpcode::COPY: {
1148  if (foundErrors)
1149  break;
1150  const MachineOperand &DstOp = MI->getOperand(0);
1151  const MachineOperand &SrcOp = MI->getOperand(1);
1152  LLT DstTy = MRI->getType(DstOp.getReg());
1153  LLT SrcTy = MRI->getType(SrcOp.getReg());
1154  if (SrcTy.isValid() && DstTy.isValid()) {
1155  // If both types are valid, check that the types are the same.
1156  if (SrcTy != DstTy) {
1157  report("Copy Instruction is illegal with mismatching types", MI);
1158  errs() << "Def = " << DstTy << ", Src = " << SrcTy << "\n";
1159  }
1160  }
1161  if (SrcTy.isValid() || DstTy.isValid()) {
1162  // If one of them have valid types, let's just check they have the same
1163  // size.
1164  unsigned SrcSize = TRI->getRegSizeInBits(SrcOp.getReg(), *MRI);
1165  unsigned DstSize = TRI->getRegSizeInBits(DstOp.getReg(), *MRI);
1166  assert(SrcSize && "Expecting size here");
1167  assert(DstSize && "Expecting size here");
1168  if (SrcSize != DstSize)
1169  if (!DstOp.getSubReg() && !SrcOp.getSubReg()) {
1170  report("Copy Instruction is illegal with mismatching sizes", MI);
1171  errs() << "Def Size = " << DstSize << ", Src Size = " << SrcSize
1172  << "\n";
1173  }
1174  }
1175  break;
1176  }
1177  case TargetOpcode::STATEPOINT:
1178  if (!MI->getOperand(StatepointOpers::IDPos).isImm() ||
1181  report("meta operands to STATEPOINT not constant!", MI);
1182  break;
1183 
1184  auto VerifyStackMapConstant = [&](unsigned Offset) {
1185  if (!MI->getOperand(Offset).isImm() ||
1186  MI->getOperand(Offset).getImm() != StackMaps::ConstantOp ||
1187  !MI->getOperand(Offset + 1).isImm())
1188  report("stack map constant to STATEPOINT not well formed!", MI);
1189  };
1190  const unsigned VarStart = StatepointOpers(MI).getVarIdx();
1191  VerifyStackMapConstant(VarStart + StatepointOpers::CCOffset);
1192  VerifyStackMapConstant(VarStart + StatepointOpers::FlagsOffset);
1193  VerifyStackMapConstant(VarStart + StatepointOpers::NumDeoptOperandsOffset);
1194 
1195  // TODO: verify we have properly encoded deopt arguments
1196  };
1197 }
1198 
1199 void
1200 MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) {
1201  const MachineInstr *MI = MO->getParent();
1202  const MCInstrDesc &MCID = MI->getDesc();
1203  unsigned NumDefs = MCID.getNumDefs();
1204  if (MCID.getOpcode() == TargetOpcode::PATCHPOINT)
1205  NumDefs = (MONum == 0 && MO->isReg()) ? NumDefs : 0;
1206 
1207  // The first MCID.NumDefs operands must be explicit register defines
1208  if (MONum < NumDefs) {
1209  const MCOperandInfo &MCOI = MCID.OpInfo[MONum];
1210  if (!MO->isReg())
1211  report("Explicit definition must be a register", MO, MONum);
1212  else if (!MO->isDef() && !MCOI.isOptionalDef())
1213  report("Explicit definition marked as use", MO, MONum);
1214  else if (MO->isImplicit())
1215  report("Explicit definition marked as implicit", MO, MONum);
1216  } else if (MONum < MCID.getNumOperands()) {
1217  const MCOperandInfo &MCOI = MCID.OpInfo[MONum];
1218  // Don't check if it's the last operand in a variadic instruction. See,
1219  // e.g., LDM_RET in the arm back end.
1220  if (MO->isReg() &&
1221  !(MI->isVariadic() && MONum == MCID.getNumOperands()-1)) {
1222  if (MO->isDef() && !MCOI.isOptionalDef())
1223  report("Explicit operand marked as def", MO, MONum);
1224  if (MO->isImplicit())
1225  report("Explicit operand marked as implicit", MO, MONum);
1226  }
1227 
1228  int TiedTo = MCID.getOperandConstraint(MONum, MCOI::TIED_TO);
1229  if (TiedTo != -1) {
1230  if (!MO->isReg())
1231  report("Tied use must be a register", MO, MONum);
1232  else if (!MO->isTied())
1233  report("Operand should be tied", MO, MONum);
1234  else if (unsigned(TiedTo) != MI->findTiedOperandIdx(MONum))
1235  report("Tied def doesn't match MCInstrDesc", MO, MONum);
1237  const MachineOperand &MOTied = MI->getOperand(TiedTo);
1238  if (!MOTied.isReg())
1239  report("Tied counterpart must be a register", &MOTied, TiedTo);
1240  else if (TargetRegisterInfo::isPhysicalRegister(MOTied.getReg()) &&
1241  MO->getReg() != MOTied.getReg())
1242  report("Tied physical registers must match.", &MOTied, TiedTo);
1243  }
1244  } else if (MO->isReg() && MO->isTied())
1245  report("Explicit operand should not be tied", MO, MONum);
1246  } else {
1247  // ARM adds %reg0 operands to indicate predicates. We'll allow that.
1248  if (MO->isReg() && !MO->isImplicit() && !MI->isVariadic() && MO->getReg())
1249  report("Extra explicit operand on non-variadic instruction", MO, MONum);
1250  }
1251 
1252  switch (MO->getType()) {
1254  const unsigned Reg = MO->getReg();
1255  if (!Reg)
1256  return;
1257  if (MRI->tracksLiveness() && !MI->isDebugValue())
1258  checkLiveness(MO, MONum);
1259 
1260  // Verify the consistency of tied operands.
1261  if (MO->isTied()) {
1262  unsigned OtherIdx = MI->findTiedOperandIdx(MONum);
1263  const MachineOperand &OtherMO = MI->getOperand(OtherIdx);
1264  if (!OtherMO.isReg())
1265  report("Must be tied to a register", MO, MONum);
1266  if (!OtherMO.isTied())
1267  report("Missing tie flags on tied operand", MO, MONum);
1268  if (MI->findTiedOperandIdx(OtherIdx) != MONum)
1269  report("Inconsistent tie links", MO, MONum);
1270  if (MONum < MCID.getNumDefs()) {
1271  if (OtherIdx < MCID.getNumOperands()) {
1272  if (-1 == MCID.getOperandConstraint(OtherIdx, MCOI::TIED_TO))
1273  report("Explicit def tied to explicit use without tie constraint",
1274  MO, MONum);
1275  } else {
1276  if (!OtherMO.isImplicit())
1277  report("Explicit def should be tied to implicit use", MO, MONum);
1278  }
1279  }
1280  }
1281 
1282  // Verify two-address constraints after leaving SSA form.
1283  unsigned DefIdx;
1284  if (!MRI->isSSA() && MO->isUse() &&
1285  MI->isRegTiedToDefOperand(MONum, &DefIdx) &&
1286  Reg != MI->getOperand(DefIdx).getReg())
1287  report("Two-address instruction operands must be identical", MO, MONum);
1288 
1289  // Check register classes.
1290  unsigned SubIdx = MO->getSubReg();
1291 
1293  if (SubIdx) {
1294  report("Illegal subregister index for physical register", MO, MONum);
1295  return;
1296  }
1297  if (MONum < MCID.getNumOperands()) {
1298  if (const TargetRegisterClass *DRC =
1299  TII->getRegClass(MCID, MONum, TRI, *MF)) {
1300  if (!DRC->contains(Reg)) {
1301  report("Illegal physical register for instruction", MO, MONum);
1302  errs() << printReg(Reg, TRI) << " is not a "
1303  << TRI->getRegClassName(DRC) << " register.\n";
1304  }
1305  }
1306  }
1307  if (MO->isRenamable()) {
1308  if (MRI->isReserved(Reg)) {
1309  report("isRenamable set on reserved register", MO, MONum);
1310  return;
1311  }
1312  }
1313  if (MI->isDebugValue() && MO->isUse() && !MO->isDebug()) {
1314  report("Use-reg is not IsDebug in a DBG_VALUE", MO, MONum);
1315  return;
1316  }
1317  } else {
1318  // Virtual register.
1319  const TargetRegisterClass *RC = MRI->getRegClassOrNull(Reg);
1320  if (!RC) {
1321  // This is a generic virtual register.
1322 
1323  // If we're post-Select, we can't have gvregs anymore.
1324  if (isFunctionSelected) {
1325  report("Generic virtual register invalid in a Selected function",
1326  MO, MONum);
1327  return;
1328  }
1329 
1330  // The gvreg must have a type and it must not have a SubIdx.
1331  LLT Ty = MRI->getType(Reg);
1332  if (!Ty.isValid()) {
1333  report("Generic virtual register must have a valid type", MO,
1334  MONum);
1335  return;
1336  }
1337 
1338  const RegisterBank *RegBank = MRI->getRegBankOrNull(Reg);
1339 
1340  // If we're post-RegBankSelect, the gvreg must have a bank.
1341  if (!RegBank && isFunctionRegBankSelected) {
1342  report("Generic virtual register must have a bank in a "
1343  "RegBankSelected function",
1344  MO, MONum);
1345  return;
1346  }
1347 
1348  // Make sure the register fits into its register bank if any.
1349  if (RegBank && Ty.isValid() &&
1350  RegBank->getSize() < Ty.getSizeInBits()) {
1351  report("Register bank is too small for virtual register", MO,
1352  MONum);
1353  errs() << "Register bank " << RegBank->getName() << " too small("
1354  << RegBank->getSize() << ") to fit " << Ty.getSizeInBits()
1355  << "-bits\n";
1356  return;
1357  }
1358  if (SubIdx) {
1359  report("Generic virtual register does not subregister index", MO,
1360  MONum);
1361  return;
1362  }
1363 
1364  // If this is a target specific instruction and this operand
1365  // has register class constraint, the virtual register must
1366  // comply to it.
1367  if (!isPreISelGenericOpcode(MCID.getOpcode()) &&
1368  MONum < MCID.getNumOperands() &&
1369  TII->getRegClass(MCID, MONum, TRI, *MF)) {
1370  report("Virtual register does not match instruction constraint", MO,
1371  MONum);
1372  errs() << "Expect register class "
1373  << TRI->getRegClassName(
1374  TII->getRegClass(MCID, MONum, TRI, *MF))
1375  << " but got nothing\n";
1376  return;
1377  }
1378 
1379  break;
1380  }
1381  if (SubIdx) {
1382  const TargetRegisterClass *SRC =
1383  TRI->getSubClassWithSubReg(RC, SubIdx);
1384  if (!SRC) {
1385  report("Invalid subregister index for virtual register", MO, MONum);
1386  errs() << "Register class " << TRI->getRegClassName(RC)
1387  << " does not support subreg index " << SubIdx << "\n";
1388  return;
1389  }
1390  if (RC != SRC) {
1391  report("Invalid register class for subregister index", MO, MONum);
1392  errs() << "Register class " << TRI->getRegClassName(RC)
1393  << " does not fully support subreg index " << SubIdx << "\n";
1394  return;
1395  }
1396  }
1397  if (MONum < MCID.getNumOperands()) {
1398  if (const TargetRegisterClass *DRC =
1399  TII->getRegClass(MCID, MONum, TRI, *MF)) {
1400  if (SubIdx) {
1401  const TargetRegisterClass *SuperRC =
1402  TRI->getLargestLegalSuperClass(RC, *MF);
1403  if (!SuperRC) {
1404  report("No largest legal super class exists.", MO, MONum);
1405  return;
1406  }
1407  DRC = TRI->getMatchingSuperRegClass(SuperRC, DRC, SubIdx);
1408  if (!DRC) {
1409  report("No matching super-reg register class.", MO, MONum);
1410  return;
1411  }
1412  }
1413  if (!RC->hasSuperClassEq(DRC)) {
1414  report("Illegal virtual register for instruction", MO, MONum);
1415  errs() << "Expected a " << TRI->getRegClassName(DRC)
1416  << " register, but got a " << TRI->getRegClassName(RC)
1417  << " register\n";
1418  }
1419  }
1420  }
1421  }
1422  break;
1423  }
1424 
1426  regMasks.push_back(MO->getRegMask());
1427  break;
1428 
1430  if (MI->isPHI() && !MO->getMBB()->isSuccessor(MI->getParent()))
1431  report("PHI operand is not in the CFG", MO, MONum);
1432  break;
1433 
1435  if (LiveStks && LiveStks->hasInterval(MO->getIndex()) &&
1436  LiveInts && !LiveInts->isNotInMIMap(*MI)) {
1437  int FI = MO->getIndex();
1438  LiveInterval &LI = LiveStks->getInterval(FI);
1439  SlotIndex Idx = LiveInts->getInstructionIndex(*MI);
1440 
1441  bool stores = MI->mayStore();
1442  bool loads = MI->mayLoad();
1443  // For a memory-to-memory move, we need to check if the frame
1444  // index is used for storing or loading, by inspecting the
1445  // memory operands.
1446  if (stores && loads) {
1447  for (auto *MMO : MI->memoperands()) {
1448  const PseudoSourceValue *PSV = MMO->getPseudoValue();
1449  if (PSV == nullptr) continue;
1452  if (Value == nullptr) continue;
1453  if (Value->getFrameIndex() != FI) continue;
1454 
1455  if (MMO->isStore())
1456  loads = false;
1457  else
1458  stores = false;
1459  break;
1460  }
1461  if (loads == stores)
1462  report("Missing fixed stack memoperand.", MI);
1463  }
1464  if (loads && !LI.liveAt(Idx.getRegSlot(true))) {
1465  report("Instruction loads from dead spill slot", MO, MONum);
1466  errs() << "Live stack: " << LI << '\n';
1467  }
1468  if (stores && !LI.liveAt(Idx.getRegSlot())) {
1469  report("Instruction stores to dead spill slot", MO, MONum);
1470  errs() << "Live stack: " << LI << '\n';
1471  }
1472  }
1473  break;
1474 
1475  default:
1476  break;
1477  }
1478 }
1479 
1480 void MachineVerifier::checkLivenessAtUse(const MachineOperand *MO,
1481  unsigned MONum, SlotIndex UseIdx, const LiveRange &LR, unsigned VRegOrUnit,
1482  LaneBitmask LaneMask) {
1483  LiveQueryResult LRQ = LR.Query(UseIdx);
1484  // Check if we have a segment at the use, note however that we only need one
1485  // live subregister range, the others may be dead.
1486  if (!LRQ.valueIn() && LaneMask.none()) {
1487  report("No live segment at use", MO, MONum);
1488  report_context_liverange(LR);
1489  report_context_vreg_regunit(VRegOrUnit);
1490  report_context(UseIdx);
1491  }
1492  if (MO->isKill() && !LRQ.isKill()) {
1493  report("Live range continues after kill flag", MO, MONum);
1494  report_context_liverange(LR);
1495  report_context_vreg_regunit(VRegOrUnit);
1496  if (LaneMask.any())
1497  report_context_lanemask(LaneMask);
1498  report_context(UseIdx);
1499  }
1500 }
1501 
1502 void MachineVerifier::checkLivenessAtDef(const MachineOperand *MO,
1503  unsigned MONum, SlotIndex DefIdx, const LiveRange &LR, unsigned VRegOrUnit,
1504  bool SubRangeCheck, LaneBitmask LaneMask) {
1505  if (const VNInfo *VNI = LR.getVNInfoAt(DefIdx)) {
1506  assert(VNI && "NULL valno is not allowed");
1507  if (VNI->def != DefIdx) {
1508  report("Inconsistent valno->def", MO, MONum);
1509  report_context_liverange(LR);
1510  report_context_vreg_regunit(VRegOrUnit);
1511  if (LaneMask.any())
1512  report_context_lanemask(LaneMask);
1513  report_context(*VNI);
1514  report_context(DefIdx);
1515  }
1516  } else {
1517  report("No live segment at def", MO, MONum);
1518  report_context_liverange(LR);
1519  report_context_vreg_regunit(VRegOrUnit);
1520  if (LaneMask.any())
1521  report_context_lanemask(LaneMask);
1522  report_context(DefIdx);
1523  }
1524  // Check that, if the dead def flag is present, LiveInts agree.
1525  if (MO->isDead()) {
1526  LiveQueryResult LRQ = LR.Query(DefIdx);
1527  if (!LRQ.isDeadDef()) {
1529  "Expecting a virtual register.");
1530  // A dead subreg def only tells us that the specific subreg is dead. There
1531  // could be other non-dead defs of other subregs, or we could have other
1532  // parts of the register being live through the instruction. So unless we
1533  // are checking liveness for a subrange it is ok for the live range to
1534  // continue, given that we have a dead def of a subregister.
1535  if (SubRangeCheck || MO->getSubReg() == 0) {
1536  report("Live range continues after dead def flag", MO, MONum);
1537  report_context_liverange(LR);
1538  report_context_vreg_regunit(VRegOrUnit);
1539  if (LaneMask.any())
1540  report_context_lanemask(LaneMask);
1541  }
1542  }
1543  }
1544 }
1545 
1546 void MachineVerifier::checkLiveness(const MachineOperand *MO, unsigned MONum) {
1547  const MachineInstr *MI = MO->getParent();
1548  const unsigned Reg = MO->getReg();
1549 
1550  // Both use and def operands can read a register.
1551  if (MO->readsReg()) {
1552  if (MO->isKill())
1553  addRegWithSubRegs(regsKilled, Reg);
1554 
1555  // Check that LiveVars knows this kill.
1556  if (LiveVars && TargetRegisterInfo::isVirtualRegister(Reg) &&
1557  MO->isKill()) {
1558  LiveVariables::VarInfo &VI = LiveVars->getVarInfo(Reg);
1559  if (!is_contained(VI.Kills, MI))
1560  report("Kill missing from LiveVariables", MO, MONum);
1561  }
1562 
1563  // Check LiveInts liveness and kill.
1564  if (LiveInts && !LiveInts->isNotInMIMap(*MI)) {
1565  SlotIndex UseIdx = LiveInts->getInstructionIndex(*MI);
1566  // Check the cached regunit intervals.
1567  if (TargetRegisterInfo::isPhysicalRegister(Reg) && !isReserved(Reg)) {
1568  for (MCRegUnitIterator Units(Reg, TRI); Units.isValid(); ++Units) {
1569  if (MRI->isReservedRegUnit(*Units))
1570  continue;
1571  if (const LiveRange *LR = LiveInts->getCachedRegUnit(*Units))
1572  checkLivenessAtUse(MO, MONum, UseIdx, *LR, *Units);
1573  }
1574  }
1575 
1577  if (LiveInts->hasInterval(Reg)) {
1578  // This is a virtual register interval.
1579  const LiveInterval &LI = LiveInts->getInterval(Reg);
1580  checkLivenessAtUse(MO, MONum, UseIdx, LI, Reg);
1581 
1582  if (LI.hasSubRanges() && !MO->isDef()) {
1583  unsigned SubRegIdx = MO->getSubReg();
1584  LaneBitmask MOMask = SubRegIdx != 0
1585  ? TRI->getSubRegIndexLaneMask(SubRegIdx)
1586  : MRI->getMaxLaneMaskForVReg(Reg);
1587  LaneBitmask LiveInMask;
1588  for (const LiveInterval::SubRange &SR : LI.subranges()) {
1589  if ((MOMask & SR.LaneMask).none())
1590  continue;
1591  checkLivenessAtUse(MO, MONum, UseIdx, SR, Reg, SR.LaneMask);
1592  LiveQueryResult LRQ = SR.Query(UseIdx);
1593  if (LRQ.valueIn())
1594  LiveInMask |= SR.LaneMask;
1595  }
1596  // At least parts of the register has to be live at the use.
1597  if ((LiveInMask & MOMask).none()) {
1598  report("No live subrange at use", MO, MONum);
1599  report_context(LI);
1600  report_context(UseIdx);
1601  }
1602  }
1603  } else {
1604  report("Virtual register has no live interval", MO, MONum);
1605  }
1606  }
1607  }
1608 
1609  // Use of a dead register.
1610  if (!regsLive.count(Reg)) {
1612  // Reserved registers may be used even when 'dead'.
1613  bool Bad = !isReserved(Reg);
1614  // We are fine if just any subregister has a defined value.
1615  if (Bad) {
1616  for (MCSubRegIterator SubRegs(Reg, TRI); SubRegs.isValid();
1617  ++SubRegs) {
1618  if (regsLive.count(*SubRegs)) {
1619  Bad = false;
1620  break;
1621  }
1622  }
1623  }
1624  // If there is an additional implicit-use of a super register we stop
1625  // here. By definition we are fine if the super register is not
1626  // (completely) dead, if the complete super register is dead we will
1627  // get a report for its operand.
1628  if (Bad) {
1629  for (const MachineOperand &MOP : MI->uses()) {
1630  if (!MOP.isReg() || !MOP.isImplicit())
1631  continue;
1632 
1633  if (!TargetRegisterInfo::isPhysicalRegister(MOP.getReg()))
1634  continue;
1635 
1636  for (MCSubRegIterator SubRegs(MOP.getReg(), TRI); SubRegs.isValid();
1637  ++SubRegs) {
1638  if (*SubRegs == Reg) {
1639  Bad = false;
1640  break;
1641  }
1642  }
1643  }
1644  }
1645  if (Bad)
1646  report("Using an undefined physical register", MO, MONum);
1647  } else if (MRI->def_empty(Reg)) {
1648  report("Reading virtual register without a def", MO, MONum);
1649  } else {
1650  BBInfo &MInfo = MBBInfoMap[MI->getParent()];
1651  // We don't know which virtual registers are live in, so only complain
1652  // if vreg was killed in this MBB. Otherwise keep track of vregs that
1653  // must be live in. PHI instructions are handled separately.
1654  if (MInfo.regsKilled.count(Reg))
1655  report("Using a killed virtual register", MO, MONum);
1656  else if (!MI->isPHI())
1657  MInfo.vregsLiveIn.insert(std::make_pair(Reg, MI));
1658  }
1659  }
1660  }
1661 
1662  if (MO->isDef()) {
1663  // Register defined.
1664  // TODO: verify that earlyclobber ops are not used.
1665  if (MO->isDead())
1666  addRegWithSubRegs(regsDead, Reg);
1667  else
1668  addRegWithSubRegs(regsDefined, Reg);
1669 
1670  // Verify SSA form.
1671  if (MRI->isSSA() && TargetRegisterInfo::isVirtualRegister(Reg) &&
1672  std::next(MRI->def_begin(Reg)) != MRI->def_end())
1673  report("Multiple virtual register defs in SSA form", MO, MONum);
1674 
1675  // Check LiveInts for a live segment, but only for virtual registers.
1676  if (LiveInts && !LiveInts->isNotInMIMap(*MI)) {
1677  SlotIndex DefIdx = LiveInts->getInstructionIndex(*MI);
1678  DefIdx = DefIdx.getRegSlot(MO->isEarlyClobber());
1679 
1681  if (LiveInts->hasInterval(Reg)) {
1682  const LiveInterval &LI = LiveInts->getInterval(Reg);
1683  checkLivenessAtDef(MO, MONum, DefIdx, LI, Reg);
1684 
1685  if (LI.hasSubRanges()) {
1686  unsigned SubRegIdx = MO->getSubReg();
1687  LaneBitmask MOMask = SubRegIdx != 0
1688  ? TRI->getSubRegIndexLaneMask(SubRegIdx)
1689  : MRI->getMaxLaneMaskForVReg(Reg);
1690  for (const LiveInterval::SubRange &SR : LI.subranges()) {
1691  if ((SR.LaneMask & MOMask).none())
1692  continue;
1693  checkLivenessAtDef(MO, MONum, DefIdx, SR, Reg, true, SR.LaneMask);
1694  }
1695  }
1696  } else {
1697  report("Virtual register has no Live interval", MO, MONum);
1698  }
1699  }
1700  }
1701  }
1702 }
1703 
1704 void MachineVerifier::visitMachineInstrAfter(const MachineInstr *MI) {}
1705 
1706 // This function gets called after visiting all instructions in a bundle. The
1707 // argument points to the bundle header.
1708 // Normal stand-alone instructions are also considered 'bundles', and this
1709 // function is called for all of them.
1710 void MachineVerifier::visitMachineBundleAfter(const MachineInstr *MI) {
1711  BBInfo &MInfo = MBBInfoMap[MI->getParent()];
1712  set_union(MInfo.regsKilled, regsKilled);
1713  set_subtract(regsLive, regsKilled); regsKilled.clear();
1714  // Kill any masked registers.
1715  while (!regMasks.empty()) {
1716  const uint32_t *Mask = regMasks.pop_back_val();
1717  for (RegSet::iterator I = regsLive.begin(), E = regsLive.end(); I != E; ++I)
1720  regsDead.push_back(*I);
1721  }
1722  set_subtract(regsLive, regsDead); regsDead.clear();
1723  set_union(regsLive, regsDefined); regsDefined.clear();
1724 }
1725 
1726 void
1727 MachineVerifier::visitMachineBasicBlockAfter(const MachineBasicBlock *MBB) {
1728  MBBInfoMap[MBB].regsLiveOut = regsLive;
1729  regsLive.clear();
1730 
1731  if (Indexes) {
1732  SlotIndex stop = Indexes->getMBBEndIdx(MBB);
1733  if (!(stop > lastIndex)) {
1734  report("Block ends before last instruction index", MBB);
1735  errs() << "Block ends at " << stop
1736  << " last instruction was at " << lastIndex << '\n';
1737  }
1738  lastIndex = stop;
1739  }
1740 }
1741 
1742 // Calculate the largest possible vregsPassed sets. These are the registers that
1743 // can pass through an MBB live, but may not be live every time. It is assumed
1744 // that all vregsPassed sets are empty before the call.
1745 void MachineVerifier::calcRegsPassed() {
1746  // First push live-out regs to successors' vregsPassed. Remember the MBBs that
1747  // have any vregsPassed.
1749  for (const auto &MBB : *MF) {
1750  BBInfo &MInfo = MBBInfoMap[&MBB];
1751  if (!MInfo.reachable)
1752  continue;
1754  SuE = MBB.succ_end(); SuI != SuE; ++SuI) {
1755  BBInfo &SInfo = MBBInfoMap[*SuI];
1756  if (SInfo.addPassed(MInfo.regsLiveOut))
1757  todo.insert(*SuI);
1758  }
1759  }
1760 
1761  // Iteratively push vregsPassed to successors. This will converge to the same
1762  // final state regardless of DenseSet iteration order.
1763  while (!todo.empty()) {
1764  const MachineBasicBlock *MBB = *todo.begin();
1765  todo.erase(MBB);
1766  BBInfo &MInfo = MBBInfoMap[MBB];
1768  SuE = MBB->succ_end(); SuI != SuE; ++SuI) {
1769  if (*SuI == MBB)
1770  continue;
1771  BBInfo &SInfo = MBBInfoMap[*SuI];
1772  if (SInfo.addPassed(MInfo.vregsPassed))
1773  todo.insert(*SuI);
1774  }
1775  }
1776 }
1777 
1778 // Calculate the set of virtual registers that must be passed through each basic
1779 // block in order to satisfy the requirements of successor blocks. This is very
1780 // similar to calcRegsPassed, only backwards.
1781 void MachineVerifier::calcRegsRequired() {
1782  // First push live-in regs to predecessors' vregsRequired.
1784  for (const auto &MBB : *MF) {
1785  BBInfo &MInfo = MBBInfoMap[&MBB];
1787  PrE = MBB.pred_end(); PrI != PrE; ++PrI) {
1788  BBInfo &PInfo = MBBInfoMap[*PrI];
1789  if (PInfo.addRequired(MInfo.vregsLiveIn))
1790  todo.insert(*PrI);
1791  }
1792  }
1793 
1794  // Iteratively push vregsRequired to predecessors. This will converge to the
1795  // same final state regardless of DenseSet iteration order.
1796  while (!todo.empty()) {
1797  const MachineBasicBlock *MBB = *todo.begin();
1798  todo.erase(MBB);
1799  BBInfo &MInfo = MBBInfoMap[MBB];
1801  PrE = MBB->pred_end(); PrI != PrE; ++PrI) {
1802  if (*PrI == MBB)
1803  continue;
1804  BBInfo &SInfo = MBBInfoMap[*PrI];
1805  if (SInfo.addRequired(MInfo.vregsRequired))
1806  todo.insert(*PrI);
1807  }
1808  }
1809 }
1810 
1811 // Check PHI instructions at the beginning of MBB. It is assumed that
1812 // calcRegsPassed has been run so BBInfo::isLiveOut is valid.
1813 void MachineVerifier::checkPHIOps(const MachineBasicBlock &MBB) {
1814  BBInfo &MInfo = MBBInfoMap[&MBB];
1815 
1817  for (const MachineInstr &Phi : MBB) {
1818  if (!Phi.isPHI())
1819  break;
1820  seen.clear();
1821 
1822  const MachineOperand &MODef = Phi.getOperand(0);
1823  if (!MODef.isReg() || !MODef.isDef()) {
1824  report("Expected first PHI operand to be a register def", &MODef, 0);
1825  continue;
1826  }
1827  if (MODef.isTied() || MODef.isImplicit() || MODef.isInternalRead() ||
1828  MODef.isEarlyClobber() || MODef.isDebug())
1829  report("Unexpected flag on PHI operand", &MODef, 0);
1830  unsigned DefReg = MODef.getReg();
1832  report("Expected first PHI operand to be a virtual register", &MODef, 0);
1833 
1834  for (unsigned I = 1, E = Phi.getNumOperands(); I != E; I += 2) {
1835  const MachineOperand &MO0 = Phi.getOperand(I);
1836  if (!MO0.isReg()) {
1837  report("Expected PHI operand to be a register", &MO0, I);
1838  continue;
1839  }
1840  if (MO0.isImplicit() || MO0.isInternalRead() || MO0.isEarlyClobber() ||
1841  MO0.isDebug() || MO0.isTied())
1842  report("Unexpected flag on PHI operand", &MO0, I);
1843 
1844  const MachineOperand &MO1 = Phi.getOperand(I + 1);
1845  if (!MO1.isMBB()) {
1846  report("Expected PHI operand to be a basic block", &MO1, I + 1);
1847  continue;
1848  }
1849 
1850  const MachineBasicBlock &Pre = *MO1.getMBB();
1851  if (!Pre.isSuccessor(&MBB)) {
1852  report("PHI input is not a predecessor block", &MO1, I + 1);
1853  continue;
1854  }
1855 
1856  if (MInfo.reachable) {
1857  seen.insert(&Pre);
1858  BBInfo &PrInfo = MBBInfoMap[&Pre];
1859  if (!MO0.isUndef() && PrInfo.reachable &&
1860  !PrInfo.isLiveOut(MO0.getReg()))
1861  report("PHI operand is not live-out from predecessor", &MO0, I);
1862  }
1863  }
1864 
1865  // Did we see all predecessors?
1866  if (MInfo.reachable) {
1867  for (MachineBasicBlock *Pred : MBB.predecessors()) {
1868  if (!seen.count(Pred)) {
1869  report("Missing PHI operand", &Phi);
1870  errs() << printMBBReference(*Pred)
1871  << " is a predecessor according to the CFG.\n";
1872  }
1873  }
1874  }
1875  }
1876 }
1877 
1878 void MachineVerifier::visitMachineFunctionAfter() {
1879  calcRegsPassed();
1880 
1881  for (const MachineBasicBlock &MBB : *MF)
1882  checkPHIOps(MBB);
1883 
1884  // Now check liveness info if available
1885  calcRegsRequired();
1886 
1887  // Check for killed virtual registers that should be live out.
1888  for (const auto &MBB : *MF) {
1889  BBInfo &MInfo = MBBInfoMap[&MBB];
1890  for (RegSet::iterator
1891  I = MInfo.vregsRequired.begin(), E = MInfo.vregsRequired.end(); I != E;
1892  ++I)
1893  if (MInfo.regsKilled.count(*I)) {
1894  report("Virtual register killed in block, but needed live out.", &MBB);
1895  errs() << "Virtual register " << printReg(*I)
1896  << " is used after the block.\n";
1897  }
1898  }
1899 
1900  if (!MF->empty()) {
1901  BBInfo &MInfo = MBBInfoMap[&MF->front()];
1902  for (RegSet::iterator
1903  I = MInfo.vregsRequired.begin(), E = MInfo.vregsRequired.end(); I != E;
1904  ++I) {
1905  report("Virtual register defs don't dominate all uses.", MF);
1906  report_context_vreg(*I);
1907  }
1908  }
1909 
1910  if (LiveVars)
1911  verifyLiveVariables();
1912  if (LiveInts)
1913  verifyLiveIntervals();
1914 }
1915 
1916 void MachineVerifier::verifyLiveVariables() {
1917  assert(LiveVars && "Don't call verifyLiveVariables without LiveVars");
1918  for (unsigned i = 0, e = MRI->getNumVirtRegs(); i != e; ++i) {
1919  unsigned Reg = TargetRegisterInfo::index2VirtReg(i);
1920  LiveVariables::VarInfo &VI = LiveVars->getVarInfo(Reg);
1921  for (const auto &MBB : *MF) {
1922  BBInfo &MInfo = MBBInfoMap[&MBB];
1923 
1924  // Our vregsRequired should be identical to LiveVariables' AliveBlocks
1925  if (MInfo.vregsRequired.count(Reg)) {
1926  if (!VI.AliveBlocks.test(MBB.getNumber())) {
1927  report("LiveVariables: Block missing from AliveBlocks", &MBB);
1928  errs() << "Virtual register " << printReg(Reg)
1929  << " must be live through the block.\n";
1930  }
1931  } else {
1932  if (VI.AliveBlocks.test(MBB.getNumber())) {
1933  report("LiveVariables: Block should not be in AliveBlocks", &MBB);
1934  errs() << "Virtual register " << printReg(Reg)
1935  << " is not needed live through the block.\n";
1936  }
1937  }
1938  }
1939  }
1940 }
1941 
1942 void MachineVerifier::verifyLiveIntervals() {
1943  assert(LiveInts && "Don't call verifyLiveIntervals without LiveInts");
1944  for (unsigned i = 0, e = MRI->getNumVirtRegs(); i != e; ++i) {
1945  unsigned Reg = TargetRegisterInfo::index2VirtReg(i);
1946 
1947  // Spilling and splitting may leave unused registers around. Skip them.
1948  if (MRI->reg_nodbg_empty(Reg))
1949  continue;
1950 
1951  if (!LiveInts->hasInterval(Reg)) {
1952  report("Missing live interval for virtual register", MF);
1953  errs() << printReg(Reg, TRI) << " still has defs or uses\n";
1954  continue;
1955  }
1956 
1957  const LiveInterval &LI = LiveInts->getInterval(Reg);
1958  assert(Reg == LI.reg && "Invalid reg to interval mapping");
1959  verifyLiveInterval(LI);
1960  }
1961 
1962  // Verify all the cached regunit intervals.
1963  for (unsigned i = 0, e = TRI->getNumRegUnits(); i != e; ++i)
1964  if (const LiveRange *LR = LiveInts->getCachedRegUnit(i))
1965  verifyLiveRange(*LR, i);
1966 }
1967 
1968 void MachineVerifier::verifyLiveRangeValue(const LiveRange &LR,
1969  const VNInfo *VNI, unsigned Reg,
1970  LaneBitmask LaneMask) {
1971  if (VNI->isUnused())
1972  return;
1973 
1974  const VNInfo *DefVNI = LR.getVNInfoAt(VNI->def);
1975 
1976  if (!DefVNI) {
1977  report("Value not live at VNInfo def and not marked unused", MF);
1978  report_context(LR, Reg, LaneMask);
1979  report_context(*VNI);
1980  return;
1981  }
1982 
1983  if (DefVNI != VNI) {
1984  report("Live segment at def has different VNInfo", MF);
1985  report_context(LR, Reg, LaneMask);
1986  report_context(*VNI);
1987  return;
1988  }
1989 
1990  const MachineBasicBlock *MBB = LiveInts->getMBBFromIndex(VNI->def);
1991  if (!MBB) {
1992  report("Invalid VNInfo definition index", MF);
1993  report_context(LR, Reg, LaneMask);
1994  report_context(*VNI);
1995  return;
1996  }
1997 
1998  if (VNI->isPHIDef()) {
1999  if (VNI->def != LiveInts->getMBBStartIdx(MBB)) {
2000  report("PHIDef VNInfo is not defined at MBB start", MBB);
2001  report_context(LR, Reg, LaneMask);
2002  report_context(*VNI);
2003  }
2004  return;
2005  }
2006 
2007  // Non-PHI def.
2008  const MachineInstr *MI = LiveInts->getInstructionFromIndex(VNI->def);
2009  if (!MI) {
2010  report("No instruction at VNInfo def index", MBB);
2011  report_context(LR, Reg, LaneMask);
2012  report_context(*VNI);
2013  return;
2014  }
2015 
2016  if (Reg != 0) {
2017  bool hasDef = false;
2018  bool isEarlyClobber = false;
2019  for (ConstMIBundleOperands MOI(*MI); MOI.isValid(); ++MOI) {
2020  if (!MOI->isReg() || !MOI->isDef())
2021  continue;
2023  if (MOI->getReg() != Reg)
2024  continue;
2025  } else {
2026  if (!TargetRegisterInfo::isPhysicalRegister(MOI->getReg()) ||
2027  !TRI->hasRegUnit(MOI->getReg(), Reg))
2028  continue;
2029  }
2030  if (LaneMask.any() &&
2031  (TRI->getSubRegIndexLaneMask(MOI->getSubReg()) & LaneMask).none())
2032  continue;
2033  hasDef = true;
2034  if (MOI->isEarlyClobber())
2035  isEarlyClobber = true;
2036  }
2037 
2038  if (!hasDef) {
2039  report("Defining instruction does not modify register", MI);
2040  report_context(LR, Reg, LaneMask);
2041  report_context(*VNI);
2042  }
2043 
2044  // Early clobber defs begin at USE slots, but other defs must begin at
2045  // DEF slots.
2046  if (isEarlyClobber) {
2047  if (!VNI->def.isEarlyClobber()) {
2048  report("Early clobber def must be at an early-clobber slot", MBB);
2049  report_context(LR, Reg, LaneMask);
2050  report_context(*VNI);
2051  }
2052  } else if (!VNI->def.isRegister()) {
2053  report("Non-PHI, non-early clobber def must be at a register slot", MBB);
2054  report_context(LR, Reg, LaneMask);
2055  report_context(*VNI);
2056  }
2057  }
2058 }
2059 
2060 void MachineVerifier::verifyLiveRangeSegment(const LiveRange &LR,
2062  unsigned Reg, LaneBitmask LaneMask)
2063 {
2064  const LiveRange::Segment &S = *I;
2065  const VNInfo *VNI = S.valno;
2066  assert(VNI && "Live segment has no valno");
2067 
2068  if (VNI->id >= LR.getNumValNums() || VNI != LR.getValNumInfo(VNI->id)) {
2069  report("Foreign valno in live segment", MF);
2070  report_context(LR, Reg, LaneMask);
2071  report_context(S);
2072  report_context(*VNI);
2073  }
2074 
2075  if (VNI->isUnused()) {
2076  report("Live segment valno is marked unused", MF);
2077  report_context(LR, Reg, LaneMask);
2078  report_context(S);
2079  }
2080 
2081  const MachineBasicBlock *MBB = LiveInts->getMBBFromIndex(S.start);
2082  if (!MBB) {
2083  report("Bad start of live segment, no basic block", MF);
2084  report_context(LR, Reg, LaneMask);
2085  report_context(S);
2086  return;
2087  }
2088  SlotIndex MBBStartIdx = LiveInts->getMBBStartIdx(MBB);
2089  if (S.start != MBBStartIdx && S.start != VNI->def) {
2090  report("Live segment must begin at MBB entry or valno def", MBB);
2091  report_context(LR, Reg, LaneMask);
2092  report_context(S);
2093  }
2094 
2095  const MachineBasicBlock *EndMBB =
2096  LiveInts->getMBBFromIndex(S.end.getPrevSlot());
2097  if (!EndMBB) {
2098  report("Bad end of live segment, no basic block", MF);
2099  report_context(LR, Reg, LaneMask);
2100  report_context(S);
2101  return;
2102  }
2103 
2104  // No more checks for live-out segments.
2105  if (S.end == LiveInts->getMBBEndIdx(EndMBB))
2106  return;
2107 
2108  // RegUnit intervals are allowed dead phis.
2109  if (!TargetRegisterInfo::isVirtualRegister(Reg) && VNI->isPHIDef() &&
2110  S.start == VNI->def && S.end == VNI->def.getDeadSlot())
2111  return;
2112 
2113  // The live segment is ending inside EndMBB
2114  const MachineInstr *MI =
2115  LiveInts->getInstructionFromIndex(S.end.getPrevSlot());
2116  if (!MI) {
2117  report("Live segment doesn't end at a valid instruction", EndMBB);
2118  report_context(LR, Reg, LaneMask);
2119  report_context(S);
2120  return;
2121  }
2122 
2123  // The block slot must refer to a basic block boundary.
2124  if (S.end.isBlock()) {
2125  report("Live segment ends at B slot of an instruction", EndMBB);
2126  report_context(LR, Reg, LaneMask);
2127  report_context(S);
2128  }
2129 
2130  if (S.end.isDead()) {
2131  // Segment ends on the dead slot.
2132  // That means there must be a dead def.
2133  if (!SlotIndex::isSameInstr(S.start, S.end)) {
2134  report("Live segment ending at dead slot spans instructions", EndMBB);
2135  report_context(LR, Reg, LaneMask);
2136  report_context(S);
2137  }
2138  }
2139 
2140  // A live segment can only end at an early-clobber slot if it is being
2141  // redefined by an early-clobber def.
2142  if (S.end.isEarlyClobber()) {
2143  if (I+1 == LR.end() || (I+1)->start != S.end) {
2144  report("Live segment ending at early clobber slot must be "
2145  "redefined by an EC def in the same instruction", EndMBB);
2146  report_context(LR, Reg, LaneMask);
2147  report_context(S);
2148  }
2149  }
2150 
2151  // The following checks only apply to virtual registers. Physreg liveness
2152  // is too weird to check.
2154  // A live segment can end with either a redefinition, a kill flag on a
2155  // use, or a dead flag on a def.
2156  bool hasRead = false;
2157  bool hasSubRegDef = false;
2158  bool hasDeadDef = false;
2159  for (ConstMIBundleOperands MOI(*MI); MOI.isValid(); ++MOI) {
2160  if (!MOI->isReg() || MOI->getReg() != Reg)
2161  continue;
2162  unsigned Sub = MOI->getSubReg();
2163  LaneBitmask SLM = Sub != 0 ? TRI->getSubRegIndexLaneMask(Sub)
2164  : LaneBitmask::getAll();
2165  if (MOI->isDef()) {
2166  if (Sub != 0) {
2167  hasSubRegDef = true;
2168  // An operand %0:sub0 reads %0:sub1..n. Invert the lane
2169  // mask for subregister defs. Read-undef defs will be handled by
2170  // readsReg below.
2171  SLM = ~SLM;
2172  }
2173  if (MOI->isDead())
2174  hasDeadDef = true;
2175  }
2176  if (LaneMask.any() && (LaneMask & SLM).none())
2177  continue;
2178  if (MOI->readsReg())
2179  hasRead = true;
2180  }
2181  if (S.end.isDead()) {
2182  // Make sure that the corresponding machine operand for a "dead" live
2183  // range has the dead flag. We cannot perform this check for subregister
2184  // liveranges as partially dead values are allowed.
2185  if (LaneMask.none() && !hasDeadDef) {
2186  report("Instruction ending live segment on dead slot has no dead flag",
2187  MI);
2188  report_context(LR, Reg, LaneMask);
2189  report_context(S);
2190  }
2191  } else {
2192  if (!hasRead) {
2193  // When tracking subregister liveness, the main range must start new
2194  // values on partial register writes, even if there is no read.
2195  if (!MRI->shouldTrackSubRegLiveness(Reg) || LaneMask.any() ||
2196  !hasSubRegDef) {
2197  report("Instruction ending live segment doesn't read the register",
2198  MI);
2199  report_context(LR, Reg, LaneMask);
2200  report_context(S);
2201  }
2202  }
2203  }
2204  }
2205 
2206  // Now check all the basic blocks in this live segment.
2208  // Is this live segment the beginning of a non-PHIDef VN?
2209  if (S.start == VNI->def && !VNI->isPHIDef()) {
2210  // Not live-in to any blocks.
2211  if (MBB == EndMBB)
2212  return;
2213  // Skip this block.
2214  ++MFI;
2215  }
2216 
2218  if (LaneMask.any()) {
2219  LiveInterval &OwnerLI = LiveInts->getInterval(Reg);
2220  OwnerLI.computeSubRangeUndefs(Undefs, LaneMask, *MRI, *Indexes);
2221  }
2222 
2223  while (true) {
2224  assert(LiveInts->isLiveInToMBB(LR, &*MFI));
2225  // We don't know how to track physregs into a landing pad.
2227  MFI->isEHPad()) {
2228  if (&*MFI == EndMBB)
2229  break;
2230  ++MFI;
2231  continue;
2232  }
2233 
2234  // Is VNI a PHI-def in the current block?
2235  bool IsPHI = VNI->isPHIDef() &&
2236  VNI->def == LiveInts->getMBBStartIdx(&*MFI);
2237 
2238  // Check that VNI is live-out of all predecessors.
2239  for (MachineBasicBlock::const_pred_iterator PI = MFI->pred_begin(),
2240  PE = MFI->pred_end(); PI != PE; ++PI) {
2241  SlotIndex PEnd = LiveInts->getMBBEndIdx(*PI);
2242  const VNInfo *PVNI = LR.getVNInfoBefore(PEnd);
2243 
2244  // All predecessors must have a live-out value. However for a phi
2245  // instruction with subregister intervals
2246  // only one of the subregisters (not necessarily the current one) needs to
2247  // be defined.
2248  if (!PVNI && (LaneMask.none() || !IsPHI)) {
2249  if (LiveRangeCalc::isJointlyDominated(*PI, Undefs, *Indexes))
2250  continue;
2251  report("Register not marked live out of predecessor", *PI);
2252  report_context(LR, Reg, LaneMask);
2253  report_context(*VNI);
2254  errs() << " live into " << printMBBReference(*MFI) << '@'
2255  << LiveInts->getMBBStartIdx(&*MFI) << ", not live before "
2256  << PEnd << '\n';
2257  continue;
2258  }
2259 
2260  // Only PHI-defs can take different predecessor values.
2261  if (!IsPHI && PVNI != VNI) {
2262  report("Different value live out of predecessor", *PI);
2263  report_context(LR, Reg, LaneMask);
2264  errs() << "Valno #" << PVNI->id << " live out of "
2265  << printMBBReference(*(*PI)) << '@' << PEnd << "\nValno #"
2266  << VNI->id << " live into " << printMBBReference(*MFI) << '@'
2267  << LiveInts->getMBBStartIdx(&*MFI) << '\n';
2268  }
2269  }
2270  if (&*MFI == EndMBB)
2271  break;
2272  ++MFI;
2273  }
2274 }
2275 
2276 void MachineVerifier::verifyLiveRange(const LiveRange &LR, unsigned Reg,
2277  LaneBitmask LaneMask) {
2278  for (const VNInfo *VNI : LR.valnos)
2279  verifyLiveRangeValue(LR, VNI, Reg, LaneMask);
2280 
2281  for (LiveRange::const_iterator I = LR.begin(), E = LR.end(); I != E; ++I)
2282  verifyLiveRangeSegment(LR, I, Reg, LaneMask);
2283 }
2284 
2285 void MachineVerifier::verifyLiveInterval(const LiveInterval &LI) {
2286  unsigned Reg = LI.reg;
2288  verifyLiveRange(LI, Reg);
2289 
2290  LaneBitmask Mask;
2291  LaneBitmask MaxMask = MRI->getMaxLaneMaskForVReg(Reg);
2292  for (const LiveInterval::SubRange &SR : LI.subranges()) {
2293  if ((Mask & SR.LaneMask).any()) {
2294  report("Lane masks of sub ranges overlap in live interval", MF);
2295  report_context(LI);
2296  }
2297  if ((SR.LaneMask & ~MaxMask).any()) {
2298  report("Subrange lanemask is invalid", MF);
2299  report_context(LI);
2300  }
2301  if (SR.empty()) {
2302  report("Subrange must not be empty", MF);
2303  report_context(SR, LI.reg, SR.LaneMask);
2304  }
2305  Mask |= SR.LaneMask;
2306  verifyLiveRange(SR, LI.reg, SR.LaneMask);
2307  if (!LI.covers(SR)) {
2308  report("A Subrange is not covered by the main range", MF);
2309  report_context(LI);
2310  }
2311  }
2312 
2313  // Check the LI only has one connected component.
2314  ConnectedVNInfoEqClasses ConEQ(*LiveInts);
2315  unsigned NumComp = ConEQ.Classify(LI);
2316  if (NumComp > 1) {
2317  report("Multiple connected components in live interval", MF);
2318  report_context(LI);
2319  for (unsigned comp = 0; comp != NumComp; ++comp) {
2320  errs() << comp << ": valnos";
2322  E = LI.vni_end(); I!=E; ++I)
2323  if (comp == ConEQ.getEqClass(*I))
2324  errs() << ' ' << (*I)->id;
2325  errs() << '\n';
2326  }
2327  }
2328 }
2329 
2330 namespace {
2331 
2332  // FrameSetup and FrameDestroy can have zero adjustment, so using a single
2333  // integer, we can't tell whether it is a FrameSetup or FrameDestroy if the
2334  // value is zero.
2335  // We use a bool plus an integer to capture the stack state.
2336  struct StackStateOfBB {
2337  StackStateOfBB() = default;
2338  StackStateOfBB(int EntryVal, int ExitVal, bool EntrySetup, bool ExitSetup) :
2339  EntryValue(EntryVal), ExitValue(ExitVal), EntryIsSetup(EntrySetup),
2340  ExitIsSetup(ExitSetup) {}
2341 
2342  // Can be negative, which means we are setting up a frame.
2343  int EntryValue = 0;
2344  int ExitValue = 0;
2345  bool EntryIsSetup = false;
2346  bool ExitIsSetup = false;
2347  };
2348 
2349 } // end anonymous namespace
2350 
2351 /// Make sure on every path through the CFG, a FrameSetup <n> is always followed
2352 /// by a FrameDestroy <n>, stack adjustments are identical on all
2353 /// CFG edges to a merge point, and frame is destroyed at end of a return block.
2354 void MachineVerifier::verifyStackFrame() {
2355  unsigned FrameSetupOpcode = TII->getCallFrameSetupOpcode();
2356  unsigned FrameDestroyOpcode = TII->getCallFrameDestroyOpcode();
2357  if (FrameSetupOpcode == ~0u && FrameDestroyOpcode == ~0u)
2358  return;
2359 
2361  SPState.resize(MF->getNumBlockIDs());
2363 
2364  // Visit the MBBs in DFS order.
2365  for (df_ext_iterator<const MachineFunction *,
2367  DFI = df_ext_begin(MF, Reachable), DFE = df_ext_end(MF, Reachable);
2368  DFI != DFE; ++DFI) {
2369  const MachineBasicBlock *MBB = *DFI;
2370 
2371  StackStateOfBB BBState;
2372  // Check the exit state of the DFS stack predecessor.
2373  if (DFI.getPathLength() >= 2) {
2374  const MachineBasicBlock *StackPred = DFI.getPath(DFI.getPathLength() - 2);
2375  assert(Reachable.count(StackPred) &&
2376  "DFS stack predecessor is already visited.\n");
2377  BBState.EntryValue = SPState[StackPred->getNumber()].ExitValue;
2378  BBState.EntryIsSetup = SPState[StackPred->getNumber()].ExitIsSetup;
2379  BBState.ExitValue = BBState.EntryValue;
2380  BBState.ExitIsSetup = BBState.EntryIsSetup;
2381  }
2382 
2383  // Update stack state by checking contents of MBB.
2384  for (const auto &I : *MBB) {
2385  if (I.getOpcode() == FrameSetupOpcode) {
2386  if (BBState.ExitIsSetup)
2387  report("FrameSetup is after another FrameSetup", &I);
2388  BBState.ExitValue -= TII->getFrameTotalSize(I);
2389  BBState.ExitIsSetup = true;
2390  }
2391 
2392  if (I.getOpcode() == FrameDestroyOpcode) {
2393  int Size = TII->getFrameTotalSize(I);
2394  if (!BBState.ExitIsSetup)
2395  report("FrameDestroy is not after a FrameSetup", &I);
2396  int AbsSPAdj = BBState.ExitValue < 0 ? -BBState.ExitValue :
2397  BBState.ExitValue;
2398  if (BBState.ExitIsSetup && AbsSPAdj != Size) {
2399  report("FrameDestroy <n> is after FrameSetup <m>", &I);
2400  errs() << "FrameDestroy <" << Size << "> is after FrameSetup <"
2401  << AbsSPAdj << ">.\n";
2402  }
2403  BBState.ExitValue += Size;
2404  BBState.ExitIsSetup = false;
2405  }
2406  }
2407  SPState[MBB->getNumber()] = BBState;
2408 
2409  // Make sure the exit state of any predecessor is consistent with the entry
2410  // state.
2411  for (MachineBasicBlock::const_pred_iterator I = MBB->pred_begin(),
2412  E = MBB->pred_end(); I != E; ++I) {
2413  if (Reachable.count(*I) &&
2414  (SPState[(*I)->getNumber()].ExitValue != BBState.EntryValue ||
2415  SPState[(*I)->getNumber()].ExitIsSetup != BBState.EntryIsSetup)) {
2416  report("The exit stack state of a predecessor is inconsistent.", MBB);
2417  errs() << "Predecessor " << printMBBReference(*(*I))
2418  << " has exit state (" << SPState[(*I)->getNumber()].ExitValue
2419  << ", " << SPState[(*I)->getNumber()].ExitIsSetup << "), while "
2420  << printMBBReference(*MBB) << " has entry state ("
2421  << BBState.EntryValue << ", " << BBState.EntryIsSetup << ").\n";
2422  }
2423  }
2424 
2425  // Make sure the entry state of any successor is consistent with the exit
2426  // state.
2427  for (MachineBasicBlock::const_succ_iterator I = MBB->succ_begin(),
2428  E = MBB->succ_end(); I != E; ++I) {
2429  if (Reachable.count(*I) &&
2430  (SPState[(*I)->getNumber()].EntryValue != BBState.ExitValue ||
2431  SPState[(*I)->getNumber()].EntryIsSetup != BBState.ExitIsSetup)) {
2432  report("The entry stack state of a successor is inconsistent.", MBB);
2433  errs() << "Successor " << printMBBReference(*(*I))
2434  << " has entry state (" << SPState[(*I)->getNumber()].EntryValue
2435  << ", " << SPState[(*I)->getNumber()].EntryIsSetup << "), while "
2436  << printMBBReference(*MBB) << " has exit state ("
2437  << BBState.ExitValue << ", " << BBState.ExitIsSetup << ").\n";
2438  }
2439  }
2440 
2441  // Make sure a basic block with return ends with zero stack adjustment.
2442  if (!MBB->empty() && MBB->back().isReturn()) {
2443  if (BBState.ExitIsSetup)
2444  report("A return block ends with a FrameSetup.", MBB);
2445  if (BBState.ExitValue)
2446  report("A return block ends with a nonzero stack adjustment.", MBB);
2447  }
2448  }
2449 }
bool reg_nodbg_empty(unsigned RegNo) const
reg_nodbg_empty - Return true if the only instructions using or defining Reg are Debug instructions...
Pass interface - Implemented by all &#39;passes&#39;.
Definition: Pass.h:81
bool isPHIDef() const
Returns true if this value is defined by a PHI instruction (or was, PHI instructions may have been el...
Definition: LiveInterval.h:78
bool isRegister() const
isRegister - Returns true if this is a normal register use/def slot.
Definition: SlotIndexes.h:234
mop_iterator operands_end()
Definition: MachineInstr.h:454
Safe Stack instrumentation pass
Definition: SafeStack.cpp:907
A common definition of LaneBitmask for use in TableGen and CodeGen.
raw_ostream & errs()
This returns a reference to a raw_ostream for standard error.
MachineInstr * getParent()
getParent - Return the instruction that this operand belongs to.
static PassRegistry * getPassRegistry()
getPassRegistry - Access the global registry object, which is automatically initialized at applicatio...
GCNRegPressure max(const GCNRegPressure &P1, const GCNRegPressure &P2)
const unsigned reg
Definition: LiveInterval.h:667
MachineBasicBlock * getMBB() const
SlotIndex def
The index of the defining instruction.
Definition: LiveInterval.h:61
LaneBitmask getMaxLaneMaskForVReg(unsigned Reg) const
Returns a mask covering all bits that can appear in lane masks of subregisters of the virtual registe...
LLVM_ATTRIBUTE_NORETURN void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
Definition: Error.cpp:140
This class represents lattice values for constants.
Definition: AllocatorList.h:24
iterator_range< mop_iterator > uses()
Returns a range that includes all operands that are register uses.
Definition: MachineInstr.h:492
static unsigned index2VirtReg(unsigned Index)
Convert a 0-based index to a virtual register number.
const char * getName() const
Get a user friendly name of this register bank.
Definition: RegisterBank.h:52
virtual const TargetRegisterInfo * getRegisterInfo() const
getRegisterInfo - If register information is available, return it.
unsigned getNumBlockIDs() const
getNumBlockIDs - Return the number of MBB ID&#39;s allocated.
const MachineFunctionProperties & getProperties() const
Get the function properties.
int64_t getFrameTotalSize(const MachineInstr &I) const
Returns the total frame size, which is made up of the space set up inside the pair of frame start-sto...
DWARF-like instruction based exceptions.
vni_iterator vni_begin()
Definition: LiveInterval.h:220
LiveInterval - This class represents the liveness of a register, or stack slot.
Definition: LiveInterval.h:638
Describe properties that are true of each instruction in the target description file.
Definition: MCInstrDesc.h:164
unsigned getReg() const
getReg - Returns the register number.
static bool isVirtualRegister(unsigned Reg)
Return true if the specified register number is in the virtual register namespace.
static bool matchPair(MachineBasicBlock::const_succ_iterator i, const MachineBasicBlock *a, const MachineBasicBlock *b)
unsigned Reg
unsigned getSubReg() const
bool isInlineAsm() const
MBBIndexIterator MBBIndexEnd() const
Return an iterator for the end of the idx2MBBMap.
Definition: SlotIndexes.h:534
bool test(unsigned Idx) const
Definition: BitVector.h:502
bool isDead() const
isDead - Returns true if this is a dead def kill slot.
Definition: SlotIndexes.h:237
LiveInterval & getInterval(int Slot)
Definition: LiveStacks.h:64
LLT getType(unsigned Reg) const
Get the low-level type of Reg or LLT{} if Reg is not a generic (target independent) virtual register...
bool isDeadDef() const
Return true if this instruction has a dead def.
Definition: LiveInterval.h:117
A live range for subregisters.
Definition: LiveInterval.h:645
bool isMetadata() const
isMetadata - Tests if this is a MO_Metadata operand.
bool all_of(R &&range, UnaryPredicate P)
Provide wrappers to std::all_of which take ranges instead of having to pass begin/end explicitly...
Definition: STLExtras.h:1186
bool isValid() const
Returns true if this is a valid index.
Definition: SlotIndexes.h:152
MachineBasicBlock reference.
This represents a simple continuous liveness interval for a value.
Definition: LiveInterval.h:162
VarInfo - This represents the regions where a virtual register is live in the program.
Definition: LiveVariables.h:79
unsigned const TargetRegisterInfo * TRI
Printable PrintLaneMask(LaneBitmask LaneMask)
Create Printable object to print LaneBitmasks on a raw_ostream.
Definition: LaneBitmask.h:94
F(f)
unsigned getCallFrameDestroyOpcode() const
const Instruction * getTerminator() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
Definition: BasicBlock.cpp:138
bool reservedRegsFrozen() const
reservedRegsFrozen - Returns true after freezeReservedRegs() was called to ensure the set of reserved...
std::vector< MachineBasicBlock * >::const_iterator const_pred_iterator
VNInfo - Value Number Information.
Definition: LiveInterval.h:53
void print(raw_ostream &O, const Module *=nullptr) const override
Implement the dump method.
bool isPHI() const
bool isImm() const
isImm - Tests if this is a MO_Immediate operand.
void verifyUseLists() const
Verify the use list of all registers.
unsigned getNumRegUnits() const
Return the number of (native) register units in the target.
LLVM_NODISCARD LLVM_ATTRIBUTE_ALWAYS_INLINE const char * data() const
data - Get a pointer to the start of the string (which may not be null terminated).
Definition: StringRef.h:128
bool isInternalRead() const
This class represents the liveness of a register, stack slot, etc.
Definition: LiveInterval.h:157
void initializeMachineVerifierPassPass(PassRegistry &)
bool isUnused() const
Returns true if this value is unused.
Definition: LiveInterval.h:81
Mask of preserved registers.
bool isEarlyClobber() const
const char * getRegClassName(const TargetRegisterClass *Class) const
Returns the name of the register class.
bool test(unsigned Idx) const
FunctionPass * createMachineVerifierPass(const std::string &Banner)
createMachineVerifierPass - This pass verifies cenerated machine code instructions for correctness...
bool isVector() const
bool isNotInMIMap(const MachineInstr &Instr) const
Returns true if the specified machine instr has been removed or was never entered in the map...
bool isBlock() const
isBlock - Returns true if this is a block boundary slot.
Definition: SlotIndexes.h:227
Definition: BitVector.h:938
void clear()
clear - Removes all bits from the bitvector. Does not change capacity.
Definition: BitVector.h:367
SlotIndex getDeadSlot() const
Returns the dead def kill slot for the current instruction.
Definition: SlotIndexes.h:260
MachineFunctionPass - This class adapts the FunctionPass interface to allow convenient creation of pa...
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:81
unsigned getNumOperands() const
Return the number of declared MachineOperands for this MachineInstruction.
Definition: MCInstrDesc.h:211
const HexagonInstrInfo * TII
Printable printMBBReference(const MachineBasicBlock &MBB)
Prints a machine basic block reference.
unsigned getVarIdx() const
Get starting index of non call related arguments (calling convention, statepoint flags, vm state and gc state).
Definition: StackMaps.h:173
bool isLiveInToMBB(const LiveRange &LR, const MachineBasicBlock *mbb) const
unsigned getNumOperands() const
Retuns the total number of operands.
Definition: MachineInstr.h:412
const TargetRegisterClass * getRegClass(const MCInstrDesc &MCID, unsigned OpNum, const TargetRegisterInfo *TRI, const MachineFunction &MF) const
Given a machine instruction descriptor, returns the register class constraint for OpNum...
Printable printReg(unsigned Reg, const TargetRegisterInfo *TRI=nullptr, unsigned SubIdx=0, const MachineRegisterInfo *MRI=nullptr)
Prints virtual and physical registers with or without a TRI instance.
iterator end()
Definition: LiveInterval.h:212
iterator_range< subrange_iterator > subranges()
Definition: LiveInterval.h:723
Result of a LiveRange query.
Definition: LiveInterval.h:90
static constexpr LaneBitmask getAll()
Definition: LaneBitmask.h:84
bool isTerminator(QueryType Type=AnyInBundle) const
Returns true if this instruction part of the terminator for a basic block.
Definition: MachineInstr.h:649
SlotIndex getInstructionIndex(const MachineInstr &MI) const
Returns the base index for the given instruction.
Definition: SlotIndexes.h:414
The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted...
unsigned getOpcode() const
Returns the opcode of this MachineInstr.
Definition: MachineInstr.h:409
bool hasSubRanges() const
Returns true if subregister liveness information is available.
Definition: LiveInterval.h:751
SmallVectorImpl< IdxMBBPair >::const_iterator MBBIndexIterator
Iterator over the idx2MBBMap (sorted pairs of slot index of basic block begin and basic block) ...
Definition: SlotIndexes.h:514
virtual const TargetRegisterClass * getSubClassWithSubReg(const TargetRegisterClass *RC, unsigned Idx) const
Returns the largest legal sub-class of RC that supports the sub-register index Idx.
def_iterator def_begin(unsigned RegNo) const
SparseBitVector AliveBlocks
AliveBlocks - Set of blocks in which this value is alive completely through.
Definition: LiveVariables.h:84
static constexpr LaneBitmask getNone()
Definition: LaneBitmask.h:83
LLT getElementType() const
Returns the vector&#39;s element type. Only valid for vector types.
Printable printRegUnit(unsigned Unit, const TargetRegisterInfo *TRI)
Create Printable object to print register units on a raw_ostream.
unsigned getEqClass(const VNInfo *VNI) const
getEqClass - Classify creates equivalence classes numbered 0..N.
Definition: LiveInterval.h:931
bool isScopedEHPersonality(EHPersonality Pers)
Returns true if this personality uses scope-style EH IR instructions: catchswitch, catchpad/ret, and cleanuppad/ret.
bool hasRegUnit(unsigned Reg, unsigned RegUnit) const
Returns true if Reg contains RegUnit.
MachineInstr * getInstructionFromIndex(SlotIndex index) const
Returns the instruction associated with the given index.
bool readsReg() const
readsReg - Returns true if this operand reads the previous value of its register. ...
const MCInstrDesc & getDesc() const
Returns the target instruction descriptor of this MachineInstr.
Definition: MachineInstr.h:406
bool isValid() const
isValid - Returns true until all the operands have been visited.
SlotIndexes pass.
Definition: SlotIndexes.h:331
SlotIndex getRegSlot(bool EC=false) const
Returns the register use/def slot in the current instruction for a normal or early-clobber def...
Definition: SlotIndexes.h:255
virtual const TargetRegisterClass * getLargestLegalSuperClass(const TargetRegisterClass *RC, const MachineFunction &) const
Returns the largest super class of RC that is legal to use in the current sub-target and has the same...
int getNumber() const
MachineBasicBlocks are uniquely numbered at the function level, unless they&#39;re not in a MachineFuncti...
virtual const TargetInstrInfo * getInstrInfo() const
bool isInsideBundle() const
Return true if MI is in a bundle (but not the first MI in a bundle).
Definition: MachineInstr.h:350
bool isKill() const
Return true if the live-in value is killed by this instruction.
Definition: LiveInterval.h:112
LiveRange * getCachedRegUnit(unsigned Unit)
Return the live range for register unit Unit if it has already been computed, or nullptr if it hasn&#39;t...
StringRef getName() const
getName - Return the name of the corresponding LLVM function.
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
VNInfo * valueIn() const
Return the value that is live-in to the instruction.
Definition: LiveInterval.h:105
LiveQueryResult Query(SlotIndex Idx) const
Query Liveness at Idx.
Definition: LiveInterval.h:529
TargetInstrInfo - Interface to description of machine instruction set.
This class is intended to be used as a base class for asm properties and features specific to the tar...
Definition: MCAsmInfo.h:56
VNInfo * getVNInfoAt(SlotIndex Idx) const
getVNInfoAt - Return the VNInfo that is live at Idx, or NULL.
Definition: LiveInterval.h:409
bool isGenericType() const
Definition: MCInstrDesc.h:98
bool mayStore(QueryType Type=AnyInBundle) const
Return true if this instruction could possibly modify memory.
Definition: MachineInstr.h:820
unsigned getNumRegs() const
Return the number of registers this target has (useful for sizing arrays holding per register informa...
unsigned const MachineRegisterInfo * MRI
VNInfoList::const_iterator const_vni_iterator
Definition: LiveInterval.h:218
StringRef getName() const
Return the name of the corresponding LLVM basic block, or an empty string.
bool hasInterval(unsigned Reg) const
bool hasSuperClassEq(const TargetRegisterClass *RC) const
Returns true if RC is a super-class of or equal to this class.
ArrayRef< MachineMemOperand * > memoperands() const
Access to memory operands of the instruction.
Definition: MachineInstr.h:516
LLVM Basic Block Representation.
Definition: BasicBlock.h:58
bool isOptionalDef() const
Set if this operand is a optional def.
Definition: MCInstrDesc.h:96
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - Subclasses that override getAnalysisUsage must call this.
df_ext_iterator< T, SetTy > df_ext_end(const T &G, SetTy &S)
bool liveAt(SlotIndex index) const
Definition: LiveInterval.h:389
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
LLVM_NODISCARD bool empty() const
Definition: SmallPtrSet.h:92
unsigned Classify(const LiveRange &LR)
Classify the values in LR into connected components.
const MCAsmInfo * getMCAsmInfo() const
Return target specific asm information.
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
Definition: SmallPtrSet.h:371
bool hasIndex(const MachineInstr &instr) const
Returns true if the given machine instr is mapped to an index, otherwise returns false.
Definition: SlotIndexes.h:409
static unsigned getNumOperandRegisters(unsigned Flag)
getNumOperandRegisters - Extract the number of registers field from the inline asm operand flag...
Definition: InlineAsm.h:336
virtual bool verifyInstruction(const MachineInstr &MI, StringRef &ErrInfo) const
Perform target-specific instruction verification.
unsigned getCallFrameSetupOpcode() const
These methods return the opcode of the frame setup/destroy instructions if they exist (-1 otherwise)...
EHPersonality classifyEHPersonality(const Value *Pers)
See if the given exception handling personality function is one that we understand.
SlotIndex getMBBStartIdx(unsigned Num) const
Returns the first index in the given basic block number.
Definition: SlotIndexes.h:493
Represent the analysis usage information of a pass.
df_ext_iterator< T, SetTy > df_ext_begin(const T &G, SetTy &S)
bool hasOneMemOperand() const
Return true if this instruction has exactly one MachineMemOperand.
Definition: MachineInstr.h:549
bool isValid() const
constexpr bool none() const
Definition: LaneBitmask.h:52
FunctionPass class - This class is used to implement most global optimizations.
Definition: Pass.h:285
bool isRegTiedToDefOperand(unsigned UseOpIdx, unsigned *DefOpIdx=nullptr) const
Return true if the use operand of the specified index is tied to a def operand.
virtual const TargetRegisterClass * getMatchingSuperRegClass(const TargetRegisterClass *A, const TargetRegisterClass *B, unsigned Idx) const
Return a subclass of the specified register class A so that each register in it has a sub-register of...
bool def_empty(unsigned RegNo) const
def_empty - Return true if there are no instructions defining the specified register (it may be live-...
MBBIndexIterator MBBIndexBegin() const
Returns an iterator for the begin of the idx2MBBMap.
Definition: SlotIndexes.h:529
const RegisterBank * getRegBankOrNull(unsigned Reg) const
Return the register bank of Reg, or null if Reg has not been assigned a register bank or has been ass...
std::vector< MachineBasicBlock * >::const_iterator const_succ_iterator
size_type count(ConstPtrType Ptr) const
count - Return 1 if the specified pointer is in the set, 0 otherwise.
Definition: SmallPtrSet.h:382
self_iterator getIterator()
Definition: ilist_node.h:82
iterator_range< pred_iterator > predecessors()
void print(raw_ostream &OS, bool IsStandalone=true, bool SkipOpers=false, bool SkipDebugLoc=false, bool AddNewLine=true, const TargetInstrInfo *TII=nullptr) const
Print this MI to OS.
MachineBasicBlock * getMBBFromIndex(SlotIndex index) const
unsigned getNumVirtRegs() const
getNumVirtRegs - Return the number of virtual registers created.
SlotIndex getMBBStartIdx(const MachineBasicBlock *mbb) const
Return the first index in the given basic block.
SlotIndex getMBBEndIdx(unsigned Num) const
Returns the last index in the given basic block number.
Definition: SlotIndexes.h:503
VarInfo & getVarInfo(unsigned RegIdx)
getVarInfo - Return the VarInfo structure for the specified VIRTUAL register.
virtual bool analyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, SmallVectorImpl< MachineOperand > &Cond, bool AllowModify=false) const
Analyze the branching code at the end of MBB, returning true if it cannot be understood (e...
TargetRegisterInfo base class - We assume that the target defines a static array of TargetRegisterDes...
const MachineBasicBlock & front() const
MCSubRegIterator enumerates all sub-registers of Reg.
size_t size() const
Definition: SmallVector.h:53
virtual bool isPredicated(const MachineInstr &MI) const
Returns true if the instruction is already predicated.
bool isDebugInstr() const
Definition: MachineInstr.h:999
void print(raw_ostream &OS, const SlotIndexes *=nullptr) const
print - Print out the MachineFunction in a format suitable for debugging to the specified stream...
bool verify(const TargetRegisterInfo &TRI) const
Check that information hold by this instance make sense for the given TRI.
std::vector< MachineInstr * > Kills
Kills - List of MachineInstruction&#39;s which are the last use of this virtual register (kill it) in the...
Definition: LiveVariables.h:89
size_type size() const
Definition: SmallPtrSet.h:93
unsigned id
The ID number of this value.
Definition: LiveInterval.h:58
int getOperandConstraint(unsigned OpNum, MCOI::OperandConstraint Constraint) const
Returns the value of the specific constraint if it is set.
Definition: MCInstrDesc.h:188
unsigned findTiedOperandIdx(unsigned OpIdx) const
Given the index of a tied register operand, find the operand it is tied to.
Iterator for intrusive lists based on ilist_node.
bool covers(const LiveRange &Other) const
Returns true if all segments of the Other live range are completely covered by this live range...
ConstMIBundleOperands - Iterate over all operands in a const bundle of machine instructions.
bool erase(PtrType Ptr)
erase - If the set contains the specified pointer, remove it and return true, otherwise return false...
Definition: SmallPtrSet.h:378
static bool isSameInstr(SlotIndex A, SlotIndex B)
isSameInstr - Return true if A and B refer to the same instruction.
Definition: SlotIndexes.h:198
mmo_iterator memoperands_begin() const
Access to memory operands of the instruction.
Definition: MachineInstr.h:534
Segments::const_iterator const_iterator
Definition: LiveInterval.h:209
void print(raw_ostream &os, const TargetRegisterInfo *TRI=nullptr, const TargetIntrinsicInfo *IntrinsicInfo=nullptr) const
Print the MachineOperand to os.
bool isDebugValue() const
Definition: MachineInstr.h:997
ConnectedVNInfoEqClasses - Helper class that can divide VNInfos in a LiveInterval into equivalence cl...
Definition: LiveInterval.h:918
MachineOperand class - Representation of each machine instruction operand.
bool isInAllocatableClass(unsigned RegNo) const
Return true if the register is in the allocation of any register class.
unsigned getSizeInBits() const
Returns the total size of the type. Must only be called on sized types.
bool isReservedRegUnit(unsigned Unit) const
Returns true when the given register unit is considered reserved.
LaneBitmask getSubRegIndexLaneMask(unsigned SubIdx) const
Return a bitmask representing the parts of a register that are covered by SubIdx. ...
unsigned getNumDefs() const
Return the number of MachineOperands that are register definitions.
Definition: MCInstrDesc.h:226
LiveInterval & getInterval(unsigned Reg)
bool isVariadic(QueryType Type=IgnoreBundle) const
Return true if this instruction can have a variable number of operands.
Definition: MachineInstr.h:607
This class implements the register bank concept.
Definition: RegisterBank.h:29
int64_t getImm() const
unsigned pred_size() const
const Function & getFunction() const
Return the LLVM function that this machine code represents.
INITIALIZE_PASS(MachineVerifierPass, "machineverifier", "Verify generated machine code", false, false) FunctionPass *llvm
static bool clobbersPhysReg(const uint32_t *RegMask, unsigned PhysReg)
clobbersPhysReg - Returns true if this RegMask clobbers PhysReg.
const uint32_t * getRegMask() const
getRegMask - Returns a bit mask of registers preserved by this RegMask operand.
VNInfo * getVNInfoBefore(SlotIndex Idx) const
getVNInfoBefore - Return the VNInfo that is live up to but not necessarilly including Idx...
Definition: LiveInterval.h:417
void computeSubRangeUndefs(SmallVectorImpl< SlotIndex > &Undefs, LaneBitmask LaneMask, const MachineRegisterInfo &MRI, const SlotIndexes &Indexes) const
For a given lane mask LaneMask, compute indexes at which the lane is marked undefined by subregister ...
virtual BitVector getReservedRegs(const MachineFunction &MF) const =0
Returns a bitset indexed by physical register number indicating if a register is a special register t...
Special value supplied for machine level alias analysis.
bool isValid() const
isValid - returns true if this iterator is not yet at the end.
static unsigned getReg(const void *D, unsigned RC, unsigned RegNo)
void setPreservesAll()
Set by analyses that do not transform their input at all.
bool isEarlyClobber() const
isEarlyClobber - Returns true if this is an early-clobber slot.
Definition: SlotIndexes.h:230
bool isRenamable() const
isRenamable - Returns true if this register may be renamed, i.e.
SlotIndex getMBBEndIdx(const MachineBasicBlock *mbb) const
Return the last index in the given basic block.
Base class for user error types.
Definition: Error.h:345
VNInfoList valnos
Definition: LiveInterval.h:200
const BitVector & getReservedRegs() const
getReservedRegs - Returns a reference to the frozen set of reserved registers.
unsigned succ_size() const
VNInfo * getValNumInfo(unsigned ValNo)
getValNumInfo - Returns pointer to the specified val#.
Definition: LiveInterval.h:305
bool isPointer() const
SlotIndex getInstructionIndex(const MachineInstr &Instr) const
Returns the base index of the given instruction.
const MachineBasicBlock * getParent() const
Definition: MachineInstr.h:254
MachineRegisterInfo - Keep track of information for virtual and physical registers, including vreg register classes, use/def chains for registers, etc.
unsigned getNumValNums() const
Definition: LiveInterval.h:301
void set_subtract(S1Ty &S1, const S2Ty &S2)
set_subtract(A, B) - Compute A := A - B
Definition: SetOperations.h:63
Representation of each machine instruction.
Definition: MachineInstr.h:64
static bool isPhysicalRegister(unsigned Reg)
Return true if the specified register number is in the physical register namespace.
const MachineFunction * getParent() const
Return the MachineFunction containing this basic block.
iterator begin() const
Definition: SmallPtrSet.h:397
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
SlotIndex getPrevSlot() const
Returns the previous slot in the index list.
Definition: SlotIndexes.h:290
bool isEHPad() const
Returns true if the block is a landing pad.
LLVM_NODISCARD bool empty() const
Definition: SmallVector.h:56
bool verify(Pass *p=nullptr, const char *Banner=nullptr, bool AbortOnError=true) const
Run the current MachineFunction through the machine code verifier, useful for debugger use...
#define I(x, y, z)
Definition: MD5.cpp:58
constexpr bool any() const
Definition: LaneBitmask.h:53
MI-level Statepoint operands.
Definition: StackMaps.h:155
const BasicBlock * getBasicBlock() const
Return the LLVM basic block that this instance corresponded to originally.
bool tracksLiveness() const
tracksLiveness - Returns true when tracking register liveness accurately.
LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
Definition: Casting.h:323
uint32_t Size
Definition: Profile.cpp:47
size_type size() const
size - Returns the number of bits in this bitvector.
Definition: BitVector.h:170
bool isSuccessor(const MachineBasicBlock *MBB) const
Return true if the specified MBB is a successor of this block.
Abstract Stack Frame Index.
const LLVMTargetMachine & getTarget() const
getTarget - Return the target machine this machine code is compiled with
bool shouldTrackSubRegLiveness(const TargetRegisterClass &RC) const
Returns true if liveness for register class RC should be tracked at the subregister level...
size_type count(const_arg_type_t< KeyT > Val) const
Return 1 if the specified key is in the map, 0 otherwise.
Definition: DenseMap.h:171
bool isSymbol() const
isSymbol - Tests if this is a MO_ExternalSymbol operand.
iterator_range< livein_iterator > liveins() const
bool isReg() const
isReg - Tests if this is a MO_Register operand.
iterator begin()
Definition: LiveInterval.h:211
bool mayLoad(QueryType Type=AnyInBundle) const
Return true if this instruction could possibly read memory.
Definition: MachineInstr.h:807
const TargetRegisterClass * getRegClassOrNull(unsigned Reg) const
Return the register class of Reg, or null if Reg has not been assigned a register class yet...
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
bool hasProperty(Property P) const
bool hasInterval(int Slot) const
Definition: LiveStacks.h:78
static def_iterator def_end()
unsigned getSize() const
Get the maximal size in bits that fits in this register bank.
Definition: RegisterBank.h:55
aarch64 promote const
bool isPreISelGenericOpcode(unsigned Opcode)
Check whether the given Opcode is a generic opcode that is not supposed to appear after ISel...
Definition: TargetOpcodes.h:31
iterator_range< const_set_bits_iterator > set_bits() const
Definition: BitVector.h:130
LLVM Value Representation.
Definition: Value.h:73
Constant * getPersonalityFn() const
Get the personality function associated with this function.
Definition: Function.cpp:1299
mop_iterator operands_begin()
Definition: MachineInstr.h:453
uint16_t getNumElements() const
Returns the number of elements in a vector LLT.
AnalysisType * getAnalysisIfAvailable() const
getAnalysisIfAvailable<AnalysisType>() - Subclasses use this function to get analysis information tha...
const MCOperandInfo * OpInfo
Definition: MCInstrDesc.h:175
std::underlying_type< E >::type Mask()
Get a bitmask with 1s in all places up to the high-order bit of E&#39;s largest value.
Definition: BitmaskEnum.h:81
ExceptionHandling getExceptionHandlingType() const
Definition: MCAsmInfo.h:570
unsigned getOpcode() const
Return the opcode number for this descriptor.
Definition: MCInstrDesc.h:204
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:59
static bool isLiveOut(const MachineBasicBlock &MBB, unsigned Reg)
unsigned getGenericTypeIndex() const
Definition: MCInstrDesc.h:103
IRTranslator LLVM IR MI
bool isBarrier(QueryType Type=AnyInBundle) const
Returns true if the specified instruction stops control flow from executing the instruction immediate...
Definition: MachineInstr.h:640
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
BitVector getPristineRegs(const MachineFunction &MF) const
Return a set of physical registers that are pristine.
bool isMBB() const
isMBB - Tests if this is a MO_MachineBasicBlock operand.
unsigned getRegSizeInBits(const TargetRegisterClass &RC) const
Return the size in bits of a register from class RC.
A specialized PseudoSourceValue for holding FixedStack values, which must include a frame index...
ppc ctr loops verify
This holds information about one operand of a machine instruction, indicating the register class for ...
Definition: MCInstrDesc.h:67
const MachineOperand & getOperand(unsigned i) const
Definition: MachineInstr.h:414
SlotIndex - An opaque wrapper around machine indexes.
Definition: SlotIndexes.h:84
MachineOperandType getType() const
getType - Returns the MachineOperandType for this operand.
vni_iterator vni_end()
Definition: LiveInterval.h:221
bool set_union(S1Ty &S1, const S2Ty &S2)
set_union(A, B) - Compute A := A u B, return whether A changed.
Definition: SetOperations.h:23
static LLVM_ATTRIBUTE_UNUSED bool isJointlyDominated(const MachineBasicBlock *MBB, ArrayRef< SlotIndex > Defs, const SlotIndexes &Indexes)
A diagnostic function to check if the end of the block MBB is jointly dominated by the blocks corresp...
hexagon widen stores
bool isReserved(unsigned PhysReg) const
isReserved - Returns true when PhysReg is a reserved register.
mmo_iterator memoperands_end() const
Access to memory operands of the instruction.
Definition: MachineInstr.h:541
bool isImplicit() const
void resize(size_type N)
Definition: SmallVector.h:351
bool is_contained(R &&Range, const E &Element)
Wrapper function around std::find to detect if an element exists in a container.
Definition: STLExtras.h:1245