MachineVerifier.cpp revision 2f3a4aa550f8f196a546f7957b2df944e04404a2
1//===-- MachineVerifier.cpp - Machine Code Verifier -----------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Pass to verify generated machine code. The following is checked:
11//
12// Operand counts: All explicit operands must be present.
13//
14// Register classes: All physical and virtual register operands must be
15// compatible with the register class required by the instruction descriptor.
16//
17// Register live intervals: Registers must be defined only once, and must be
18// defined before use.
19//
20// The machine code verifier is enabled from LLVMTargetMachine.cpp with the
21// command-line option -verify-machineinstrs, or by defining the environment
22// variable LLVM_VERIFY_MACHINEINSTRS to the name of a file that will receive
23// the verifier errors.
24//===----------------------------------------------------------------------===//
25
26#include "llvm/Function.h"
27#include "llvm/CodeGen/LiveIntervalAnalysis.h"
28#include "llvm/CodeGen/LiveVariables.h"
29#include "llvm/CodeGen/LiveStackAnalysis.h"
30#include "llvm/CodeGen/MachineFunctionPass.h"
31#include "llvm/CodeGen/MachineFrameInfo.h"
32#include "llvm/CodeGen/MachineMemOperand.h"
33#include "llvm/CodeGen/MachineRegisterInfo.h"
34#include "llvm/CodeGen/Passes.h"
35#include "llvm/Target/TargetMachine.h"
36#include "llvm/Target/TargetRegisterInfo.h"
37#include "llvm/Target/TargetInstrInfo.h"
38#include "llvm/ADT/DenseSet.h"
39#include "llvm/ADT/SetOperations.h"
40#include "llvm/ADT/SmallVector.h"
41#include "llvm/Support/Debug.h"
42#include "llvm/Support/ErrorHandling.h"
43#include "llvm/Support/raw_ostream.h"
44using namespace llvm;
45
46namespace {
47  struct MachineVerifier {
48
49    MachineVerifier(Pass *pass) :
50      PASS(pass),
51      OutFileName(getenv("LLVM_VERIFY_MACHINEINSTRS"))
52      {}
53
54    bool runOnMachineFunction(MachineFunction &MF);
55
56    Pass *const PASS;
57    const char *const OutFileName;
58    raw_ostream *OS;
59    const MachineFunction *MF;
60    const TargetMachine *TM;
61    const TargetRegisterInfo *TRI;
62    const MachineRegisterInfo *MRI;
63
64    unsigned foundErrors;
65
66    typedef SmallVector<unsigned, 16> RegVector;
67    typedef DenseSet<unsigned> RegSet;
68    typedef DenseMap<unsigned, const MachineInstr*> RegMap;
69
70    BitVector regsReserved;
71    RegSet regsLive;
72    RegVector regsDefined, regsDead, regsKilled;
73    RegSet regsLiveInButUnused;
74
75    // Add Reg and any sub-registers to RV
76    void addRegWithSubRegs(RegVector &RV, unsigned Reg) {
77      RV.push_back(Reg);
78      if (TargetRegisterInfo::isPhysicalRegister(Reg))
79        for (const unsigned *R = TRI->getSubRegisters(Reg); *R; R++)
80          RV.push_back(*R);
81    }
82
83    struct BBInfo {
84      // Is this MBB reachable from the MF entry point?
85      bool reachable;
86
87      // Vregs that must be live in because they are used without being
88      // defined. Map value is the user.
89      RegMap vregsLiveIn;
90
91      // Regs killed in MBB. They may be defined again, and will then be in both
92      // regsKilled and regsLiveOut.
93      RegSet regsKilled;
94
95      // Regs defined in MBB and live out. Note that vregs passing through may
96      // be live out without being mentioned here.
97      RegSet regsLiveOut;
98
99      // Vregs that pass through MBB untouched. This set is disjoint from
100      // regsKilled and regsLiveOut.
101      RegSet vregsPassed;
102
103      // Vregs that must pass through MBB because they are needed by a successor
104      // block. This set is disjoint from regsLiveOut.
105      RegSet vregsRequired;
106
107      BBInfo() : reachable(false) {}
108
109      // Add register to vregsPassed if it belongs there. Return true if
110      // anything changed.
111      bool addPassed(unsigned Reg) {
112        if (!TargetRegisterInfo::isVirtualRegister(Reg))
113          return false;
114        if (regsKilled.count(Reg) || regsLiveOut.count(Reg))
115          return false;
116        return vregsPassed.insert(Reg).second;
117      }
118
119      // Same for a full set.
120      bool addPassed(const RegSet &RS) {
121        bool changed = false;
122        for (RegSet::const_iterator I = RS.begin(), E = RS.end(); I != E; ++I)
123          if (addPassed(*I))
124            changed = true;
125        return changed;
126      }
127
128      // Add register to vregsRequired if it belongs there. Return true if
129      // anything changed.
130      bool addRequired(unsigned Reg) {
131        if (!TargetRegisterInfo::isVirtualRegister(Reg))
132          return false;
133        if (regsLiveOut.count(Reg))
134          return false;
135        return vregsRequired.insert(Reg).second;
136      }
137
138      // Same for a full set.
139      bool addRequired(const RegSet &RS) {
140        bool changed = false;
141        for (RegSet::const_iterator I = RS.begin(), E = RS.end(); I != E; ++I)
142          if (addRequired(*I))
143            changed = true;
144        return changed;
145      }
146
147      // Same for a full map.
148      bool addRequired(const RegMap &RM) {
149        bool changed = false;
150        for (RegMap::const_iterator I = RM.begin(), E = RM.end(); I != E; ++I)
151          if (addRequired(I->first))
152            changed = true;
153        return changed;
154      }
155
156      // Live-out registers are either in regsLiveOut or vregsPassed.
157      bool isLiveOut(unsigned Reg) const {
158        return regsLiveOut.count(Reg) || vregsPassed.count(Reg);
159      }
160    };
161
162    // Extra register info per MBB.
163    DenseMap<const MachineBasicBlock*, BBInfo> MBBInfoMap;
164
165    bool isReserved(unsigned Reg) {
166      return Reg < regsReserved.size() && regsReserved.test(Reg);
167    }
168
169    // Analysis information if available
170    LiveVariables *LiveVars;
171    LiveIntervals *LiveInts;
172    LiveStacks *LiveStks;
173    SlotIndexes *Indexes;
174
175    void visitMachineFunctionBefore();
176    void visitMachineBasicBlockBefore(const MachineBasicBlock *MBB);
177    void visitMachineInstrBefore(const MachineInstr *MI);
178    void visitMachineOperand(const MachineOperand *MO, unsigned MONum);
179    void visitMachineInstrAfter(const MachineInstr *MI);
180    void visitMachineBasicBlockAfter(const MachineBasicBlock *MBB);
181    void visitMachineFunctionAfter();
182
183    void report(const char *msg, const MachineFunction *MF);
184    void report(const char *msg, const MachineBasicBlock *MBB);
185    void report(const char *msg, const MachineInstr *MI);
186    void report(const char *msg, const MachineOperand *MO, unsigned MONum);
187
188    void markReachable(const MachineBasicBlock *MBB);
189    void calcRegsPassed();
190    void checkPHIOps(const MachineBasicBlock *MBB);
191
192    void calcRegsRequired();
193    void verifyLiveVariables();
194    void verifyLiveIntervals();
195  };
196
197  struct MachineVerifierPass : public MachineFunctionPass {
198    static char ID; // Pass ID, replacement for typeid
199
200    MachineVerifierPass()
201      : MachineFunctionPass(ID) {
202        initializeMachineVerifierPassPass(*PassRegistry::getPassRegistry());
203      }
204
205    void getAnalysisUsage(AnalysisUsage &AU) const {
206      AU.setPreservesAll();
207      MachineFunctionPass::getAnalysisUsage(AU);
208    }
209
210    bool runOnMachineFunction(MachineFunction &MF) {
211      MF.verify(this);
212      return false;
213    }
214  };
215
216}
217
218char MachineVerifierPass::ID = 0;
219INITIALIZE_PASS(MachineVerifierPass, "machineverifier",
220                "Verify generated machine code", false, false)
221
222FunctionPass *llvm::createMachineVerifierPass() {
223  return new MachineVerifierPass();
224}
225
226void MachineFunction::verify(Pass *p) const {
227  MachineVerifier(p).runOnMachineFunction(const_cast<MachineFunction&>(*this));
228}
229
230bool MachineVerifier::runOnMachineFunction(MachineFunction &MF) {
231  raw_ostream *OutFile = 0;
232  if (OutFileName) {
233    std::string ErrorInfo;
234    OutFile = new raw_fd_ostream(OutFileName, ErrorInfo,
235                                 raw_fd_ostream::F_Append);
236    if (!ErrorInfo.empty()) {
237      errs() << "Error opening '" << OutFileName << "': " << ErrorInfo << '\n';
238      exit(1);
239    }
240
241    OS = OutFile;
242  } else {
243    OS = &errs();
244  }
245
246  foundErrors = 0;
247
248  this->MF = &MF;
249  TM = &MF.getTarget();
250  TRI = TM->getRegisterInfo();
251  MRI = &MF.getRegInfo();
252
253  LiveVars = NULL;
254  LiveInts = NULL;
255  LiveStks = NULL;
256  Indexes = NULL;
257  if (PASS) {
258    LiveInts = PASS->getAnalysisIfAvailable<LiveIntervals>();
259    // We don't want to verify LiveVariables if LiveIntervals is available.
260    if (!LiveInts)
261      LiveVars = PASS->getAnalysisIfAvailable<LiveVariables>();
262    LiveStks = PASS->getAnalysisIfAvailable<LiveStacks>();
263    Indexes = PASS->getAnalysisIfAvailable<SlotIndexes>();
264  }
265
266  visitMachineFunctionBefore();
267  for (MachineFunction::const_iterator MFI = MF.begin(), MFE = MF.end();
268       MFI!=MFE; ++MFI) {
269    visitMachineBasicBlockBefore(MFI);
270    for (MachineBasicBlock::const_iterator MBBI = MFI->begin(),
271           MBBE = MFI->end(); MBBI != MBBE; ++MBBI) {
272      visitMachineInstrBefore(MBBI);
273      for (unsigned I = 0, E = MBBI->getNumOperands(); I != E; ++I)
274        visitMachineOperand(&MBBI->getOperand(I), I);
275      visitMachineInstrAfter(MBBI);
276    }
277    visitMachineBasicBlockAfter(MFI);
278  }
279  visitMachineFunctionAfter();
280
281  if (OutFile)
282    delete OutFile;
283  else if (foundErrors)
284    report_fatal_error("Found "+Twine(foundErrors)+" machine code errors.");
285
286  // Clean up.
287  regsLive.clear();
288  regsDefined.clear();
289  regsDead.clear();
290  regsKilled.clear();
291  regsLiveInButUnused.clear();
292  MBBInfoMap.clear();
293
294  return false;                 // no changes
295}
296
297void MachineVerifier::report(const char *msg, const MachineFunction *MF) {
298  assert(MF);
299  *OS << '\n';
300  if (!foundErrors++)
301    MF->print(*OS, Indexes);
302  *OS << "*** Bad machine code: " << msg << " ***\n"
303      << "- function:    " << MF->getFunction()->getNameStr() << "\n";
304}
305
306void MachineVerifier::report(const char *msg, const MachineBasicBlock *MBB) {
307  assert(MBB);
308  report(msg, MBB->getParent());
309  *OS << "- basic block: " << MBB->getName()
310      << " " << (void*)MBB
311      << " (BB#" << MBB->getNumber() << ")";
312  if (Indexes)
313    *OS << " [" << Indexes->getMBBStartIdx(MBB)
314        << ';' <<  Indexes->getMBBEndIdx(MBB) << ')';
315  *OS << '\n';
316}
317
318void MachineVerifier::report(const char *msg, const MachineInstr *MI) {
319  assert(MI);
320  report(msg, MI->getParent());
321  *OS << "- instruction: ";
322  if (Indexes && Indexes->hasIndex(MI))
323    *OS << Indexes->getInstructionIndex(MI) << '\t';
324  MI->print(*OS, TM);
325}
326
327void MachineVerifier::report(const char *msg,
328                             const MachineOperand *MO, unsigned MONum) {
329  assert(MO);
330  report(msg, MO->getParent());
331  *OS << "- operand " << MONum << ":   ";
332  MO->print(*OS, TM);
333  *OS << "\n";
334}
335
336void MachineVerifier::markReachable(const MachineBasicBlock *MBB) {
337  BBInfo &MInfo = MBBInfoMap[MBB];
338  if (!MInfo.reachable) {
339    MInfo.reachable = true;
340    for (MachineBasicBlock::const_succ_iterator SuI = MBB->succ_begin(),
341           SuE = MBB->succ_end(); SuI != SuE; ++SuI)
342      markReachable(*SuI);
343  }
344}
345
346void MachineVerifier::visitMachineFunctionBefore() {
347  regsReserved = TRI->getReservedRegs(*MF);
348
349  // A sub-register of a reserved register is also reserved
350  for (int Reg = regsReserved.find_first(); Reg>=0;
351       Reg = regsReserved.find_next(Reg)) {
352    for (const unsigned *Sub = TRI->getSubRegisters(Reg); *Sub; ++Sub) {
353      // FIXME: This should probably be:
354      // assert(regsReserved.test(*Sub) && "Non-reserved sub-register");
355      regsReserved.set(*Sub);
356    }
357  }
358  markReachable(&MF->front());
359}
360
361// Does iterator point to a and b as the first two elements?
362static bool matchPair(MachineBasicBlock::const_succ_iterator i,
363                      const MachineBasicBlock *a, const MachineBasicBlock *b) {
364  if (*i == a)
365    return *++i == b;
366  if (*i == b)
367    return *++i == a;
368  return false;
369}
370
371void
372MachineVerifier::visitMachineBasicBlockBefore(const MachineBasicBlock *MBB) {
373  const TargetInstrInfo *TII = MF->getTarget().getInstrInfo();
374
375  // Count the number of landing pad successors.
376  unsigned LandingPadSuccs = 0;
377  for (MachineBasicBlock::const_succ_iterator I = MBB->succ_begin(),
378       E = MBB->succ_end(); I != E; ++I)
379    LandingPadSuccs += (*I)->isLandingPad();
380  if (LandingPadSuccs > 1)
381    report("MBB has more than one landing pad successor", MBB);
382
383  // Call AnalyzeBranch. If it succeeds, there several more conditions to check.
384  MachineBasicBlock *TBB = 0, *FBB = 0;
385  SmallVector<MachineOperand, 4> Cond;
386  if (!TII->AnalyzeBranch(*const_cast<MachineBasicBlock *>(MBB),
387                          TBB, FBB, Cond)) {
388    // Ok, AnalyzeBranch thinks it knows what's going on with this block. Let's
389    // check whether its answers match up with reality.
390    if (!TBB && !FBB) {
391      // Block falls through to its successor.
392      MachineFunction::const_iterator MBBI = MBB;
393      ++MBBI;
394      if (MBBI == MF->end()) {
395        // It's possible that the block legitimately ends with a noreturn
396        // call or an unreachable, in which case it won't actually fall
397        // out the bottom of the function.
398      } else if (MBB->succ_size() == LandingPadSuccs) {
399        // It's possible that the block legitimately ends with a noreturn
400        // call or an unreachable, in which case it won't actuall fall
401        // out of the block.
402      } else if (MBB->succ_size() != 1+LandingPadSuccs) {
403        report("MBB exits via unconditional fall-through but doesn't have "
404               "exactly one CFG successor!", MBB);
405      } else if (!MBB->isSuccessor(MBBI)) {
406        report("MBB exits via unconditional fall-through but its successor "
407               "differs from its CFG successor!", MBB);
408      }
409      if (!MBB->empty() && MBB->back().getDesc().isBarrier() &&
410          !TII->isPredicated(&MBB->back())) {
411        report("MBB exits via unconditional fall-through but ends with a "
412               "barrier instruction!", MBB);
413      }
414      if (!Cond.empty()) {
415        report("MBB exits via unconditional fall-through but has a condition!",
416               MBB);
417      }
418    } else if (TBB && !FBB && Cond.empty()) {
419      // Block unconditionally branches somewhere.
420      if (MBB->succ_size() != 1+LandingPadSuccs) {
421        report("MBB exits via unconditional branch but doesn't have "
422               "exactly one CFG successor!", MBB);
423      } else if (!MBB->isSuccessor(TBB)) {
424        report("MBB exits via unconditional branch but the CFG "
425               "successor doesn't match the actual successor!", MBB);
426      }
427      if (MBB->empty()) {
428        report("MBB exits via unconditional branch but doesn't contain "
429               "any instructions!", MBB);
430      } else if (!MBB->back().getDesc().isBarrier()) {
431        report("MBB exits via unconditional branch but doesn't end with a "
432               "barrier instruction!", MBB);
433      } else if (!MBB->back().getDesc().isTerminator()) {
434        report("MBB exits via unconditional branch but the branch isn't a "
435               "terminator instruction!", MBB);
436      }
437    } else if (TBB && !FBB && !Cond.empty()) {
438      // Block conditionally branches somewhere, otherwise falls through.
439      MachineFunction::const_iterator MBBI = MBB;
440      ++MBBI;
441      if (MBBI == MF->end()) {
442        report("MBB conditionally falls through out of function!", MBB);
443      } if (MBB->succ_size() != 2) {
444        report("MBB exits via conditional branch/fall-through but doesn't have "
445               "exactly two CFG successors!", MBB);
446      } else if (!matchPair(MBB->succ_begin(), TBB, MBBI)) {
447        report("MBB exits via conditional branch/fall-through but the CFG "
448               "successors don't match the actual successors!", MBB);
449      }
450      if (MBB->empty()) {
451        report("MBB exits via conditional branch/fall-through but doesn't "
452               "contain any instructions!", MBB);
453      } else if (MBB->back().getDesc().isBarrier()) {
454        report("MBB exits via conditional branch/fall-through but ends with a "
455               "barrier instruction!", MBB);
456      } else if (!MBB->back().getDesc().isTerminator()) {
457        report("MBB exits via conditional branch/fall-through but the branch "
458               "isn't a terminator instruction!", MBB);
459      }
460    } else if (TBB && FBB) {
461      // Block conditionally branches somewhere, otherwise branches
462      // somewhere else.
463      if (MBB->succ_size() != 2) {
464        report("MBB exits via conditional branch/branch but doesn't have "
465               "exactly two CFG successors!", MBB);
466      } else if (!matchPair(MBB->succ_begin(), TBB, FBB)) {
467        report("MBB exits via conditional branch/branch but the CFG "
468               "successors don't match the actual successors!", MBB);
469      }
470      if (MBB->empty()) {
471        report("MBB exits via conditional branch/branch but doesn't "
472               "contain any instructions!", MBB);
473      } else if (!MBB->back().getDesc().isBarrier()) {
474        report("MBB exits via conditional branch/branch but doesn't end with a "
475               "barrier instruction!", MBB);
476      } else if (!MBB->back().getDesc().isTerminator()) {
477        report("MBB exits via conditional branch/branch but the branch "
478               "isn't a terminator instruction!", MBB);
479      }
480      if (Cond.empty()) {
481        report("MBB exits via conditinal branch/branch but there's no "
482               "condition!", MBB);
483      }
484    } else {
485      report("AnalyzeBranch returned invalid data!", MBB);
486    }
487  }
488
489  regsLive.clear();
490  for (MachineBasicBlock::livein_iterator I = MBB->livein_begin(),
491         E = MBB->livein_end(); I != E; ++I) {
492    if (!TargetRegisterInfo::isPhysicalRegister(*I)) {
493      report("MBB live-in list contains non-physical register", MBB);
494      continue;
495    }
496    regsLive.insert(*I);
497    for (const unsigned *R = TRI->getSubRegisters(*I); *R; R++)
498      regsLive.insert(*R);
499  }
500  regsLiveInButUnused = regsLive;
501
502  const MachineFrameInfo *MFI = MF->getFrameInfo();
503  assert(MFI && "Function has no frame info");
504  BitVector PR = MFI->getPristineRegs(MBB);
505  for (int I = PR.find_first(); I>0; I = PR.find_next(I)) {
506    regsLive.insert(I);
507    for (const unsigned *R = TRI->getSubRegisters(I); *R; R++)
508      regsLive.insert(*R);
509  }
510
511  regsKilled.clear();
512  regsDefined.clear();
513}
514
515void MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) {
516  const TargetInstrDesc &TI = MI->getDesc();
517  if (MI->getNumOperands() < TI.getNumOperands()) {
518    report("Too few operands", MI);
519    *OS << TI.getNumOperands() << " operands expected, but "
520        << MI->getNumExplicitOperands() << " given.\n";
521  }
522
523  // Check the MachineMemOperands for basic consistency.
524  for (MachineInstr::mmo_iterator I = MI->memoperands_begin(),
525       E = MI->memoperands_end(); I != E; ++I) {
526    if ((*I)->isLoad() && !TI.mayLoad())
527      report("Missing mayLoad flag", MI);
528    if ((*I)->isStore() && !TI.mayStore())
529      report("Missing mayStore flag", MI);
530  }
531
532  // Debug values must not have a slot index.
533  // Other instructions must have one.
534  if (LiveInts) {
535    bool mapped = !LiveInts->isNotInMIMap(MI);
536    if (MI->isDebugValue()) {
537      if (mapped)
538        report("Debug instruction has a slot index", MI);
539    } else {
540      if (!mapped)
541        report("Missing slot index", MI);
542    }
543  }
544
545}
546
547void
548MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) {
549  const MachineInstr *MI = MO->getParent();
550  const TargetInstrDesc &TI = MI->getDesc();
551
552  // The first TI.NumDefs operands must be explicit register defines
553  if (MONum < TI.getNumDefs()) {
554    if (!MO->isReg())
555      report("Explicit definition must be a register", MO, MONum);
556    else if (!MO->isDef())
557      report("Explicit definition marked as use", MO, MONum);
558    else if (MO->isImplicit())
559      report("Explicit definition marked as implicit", MO, MONum);
560  } else if (MONum < TI.getNumOperands()) {
561    // Don't check if it's the last operand in a variadic instruction. See,
562    // e.g., LDM_RET in the arm back end.
563    if (MO->isReg() && !(TI.isVariadic() && MONum == TI.getNumOperands()-1)) {
564      if (MO->isDef())
565        report("Explicit operand marked as def", MO, MONum);
566      if (MO->isImplicit())
567        report("Explicit operand marked as implicit", MO, MONum);
568    }
569  } else {
570    // ARM adds %reg0 operands to indicate predicates. We'll allow that.
571    if (MO->isReg() && !MO->isImplicit() && !TI.isVariadic() && MO->getReg())
572      report("Extra explicit operand on non-variadic instruction", MO, MONum);
573  }
574
575  switch (MO->getType()) {
576  case MachineOperand::MO_Register: {
577    const unsigned Reg = MO->getReg();
578    if (!Reg)
579      return;
580
581    // Check Live Variables.
582    if (MO->isUndef()) {
583      // An <undef> doesn't refer to any register, so just skip it.
584    } else if (MO->isUse()) {
585      regsLiveInButUnused.erase(Reg);
586
587      bool isKill = false;
588      unsigned defIdx;
589      if (MI->isRegTiedToDefOperand(MONum, &defIdx)) {
590        // A two-addr use counts as a kill if use and def are the same.
591        unsigned DefReg = MI->getOperand(defIdx).getReg();
592        if (Reg == DefReg) {
593          isKill = true;
594          // And in that case an explicit kill flag is not allowed.
595          if (MO->isKill())
596            report("Illegal kill flag on two-address instruction operand",
597                   MO, MONum);
598        } else if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
599          report("Two-address instruction operands must be identical",
600                 MO, MONum);
601        }
602      } else
603        isKill = MO->isKill();
604
605      if (isKill)
606        addRegWithSubRegs(regsKilled, Reg);
607
608      // Check that LiveVars knows this kill.
609      if (LiveVars && TargetRegisterInfo::isVirtualRegister(Reg) &&
610          MO->isKill()) {
611        LiveVariables::VarInfo &VI = LiveVars->getVarInfo(Reg);
612        if (std::find(VI.Kills.begin(),
613                      VI.Kills.end(), MI) == VI.Kills.end())
614          report("Kill missing from LiveVariables", MO, MONum);
615      }
616
617      // Check LiveInts liveness and kill.
618      if (TargetRegisterInfo::isVirtualRegister(Reg) &&
619          LiveInts && !LiveInts->isNotInMIMap(MI)) {
620        SlotIndex UseIdx = LiveInts->getInstructionIndex(MI).getUseIndex();
621        if (LiveInts->hasInterval(Reg)) {
622          const LiveInterval &LI = LiveInts->getInterval(Reg);
623          if (!LI.liveAt(UseIdx)) {
624            report("No live range at use", MO, MONum);
625            *OS << UseIdx << " is not live in " << LI << '\n';
626          }
627          // Verify isKill == LI.killedAt.
628          // Two-address instrs don't have kill flags on the tied operands, and
629          // we even allow
630          //   %r1 = add %r1, %r1
631          // without a kill flag on the untied operand.
632          // MI->findRegisterUseOperandIdx finds the first operand using reg.
633          if (!MI->isRegTiedToDefOperand(MI->findRegisterUseOperandIdx(Reg))) {
634            // MI could kill register without a kill flag on MO.
635            bool miKill = MI->killsRegister(Reg);
636            bool liKill = LI.killedAt(UseIdx.getDefIndex());
637            if (miKill && !liKill) {
638              report("Live range continues after kill flag", MO, MONum);
639              *OS << "Live range: " << LI << '\n';
640            }
641            if (!miKill && liKill) {
642              report("Live range ends without kill flag", MO, MONum);
643              *OS << "Live range: " << LI << '\n';
644            }
645          }
646        } else {
647          report("Virtual register has no Live interval", MO, MONum);
648        }
649      }
650
651      // Use of a dead register.
652      if (!regsLive.count(Reg)) {
653        if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
654          // Reserved registers may be used even when 'dead'.
655          if (!isReserved(Reg))
656            report("Using an undefined physical register", MO, MONum);
657        } else {
658          BBInfo &MInfo = MBBInfoMap[MI->getParent()];
659          // We don't know which virtual registers are live in, so only complain
660          // if vreg was killed in this MBB. Otherwise keep track of vregs that
661          // must be live in. PHI instructions are handled separately.
662          if (MInfo.regsKilled.count(Reg))
663            report("Using a killed virtual register", MO, MONum);
664          else if (!MI->isPHI())
665            MInfo.vregsLiveIn.insert(std::make_pair(Reg, MI));
666        }
667      }
668    } else {
669      assert(MO->isDef());
670      // Register defined.
671      // TODO: verify that earlyclobber ops are not used.
672      if (MO->isDead())
673        addRegWithSubRegs(regsDead, Reg);
674      else
675        addRegWithSubRegs(regsDefined, Reg);
676
677      // Check LiveInts for a live range, but only for virtual registers.
678      if (LiveInts && TargetRegisterInfo::isVirtualRegister(Reg) &&
679          !LiveInts->isNotInMIMap(MI)) {
680        SlotIndex DefIdx = LiveInts->getInstructionIndex(MI).getDefIndex();
681        if (LiveInts->hasInterval(Reg)) {
682          const LiveInterval &LI = LiveInts->getInterval(Reg);
683          if (const VNInfo *VNI = LI.getVNInfoAt(DefIdx)) {
684            assert(VNI && "NULL valno is not allowed");
685            if (VNI->def != DefIdx) {
686              report("Inconsistent valno->def", MO, MONum);
687              *OS << "Valno " << VNI->id << " is not defined at "
688                  << DefIdx << " in " << LI << '\n';
689            }
690          } else {
691            report("No live range at def", MO, MONum);
692            *OS << DefIdx << " is not live in " << LI << '\n';
693          }
694        } else {
695          report("Virtual register has no Live interval", MO, MONum);
696        }
697      }
698    }
699
700    // Check register classes.
701    if (MONum < TI.getNumOperands() && !MO->isImplicit()) {
702      const TargetOperandInfo &TOI = TI.OpInfo[MONum];
703      unsigned SubIdx = MO->getSubReg();
704
705      if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
706        unsigned sr = Reg;
707        if (SubIdx) {
708          unsigned s = TRI->getSubReg(Reg, SubIdx);
709          if (!s) {
710            report("Invalid subregister index for physical register",
711                   MO, MONum);
712            return;
713          }
714          sr = s;
715        }
716        if (const TargetRegisterClass *DRC = TOI.getRegClass(TRI)) {
717          if (!DRC->contains(sr)) {
718            report("Illegal physical register for instruction", MO, MONum);
719            *OS << TRI->getName(sr) << " is not a "
720                << DRC->getName() << " register.\n";
721          }
722        }
723      } else {
724        // Virtual register.
725        const TargetRegisterClass *RC = MRI->getRegClass(Reg);
726        if (SubIdx) {
727          const TargetRegisterClass *SRC = RC->getSubRegisterRegClass(SubIdx);
728          if (!SRC) {
729            report("Invalid subregister index for virtual register", MO, MONum);
730            *OS << "Register class " << RC->getName()
731                << " does not support subreg index " << SubIdx << "\n";
732            return;
733          }
734          RC = SRC;
735        }
736        if (const TargetRegisterClass *DRC = TOI.getRegClass(TRI)) {
737          if (RC != DRC && !RC->hasSuperClass(DRC)) {
738            report("Illegal virtual register for instruction", MO, MONum);
739            *OS << "Expected a " << DRC->getName() << " register, but got a "
740                << RC->getName() << " register\n";
741          }
742        }
743      }
744    }
745    break;
746  }
747
748  case MachineOperand::MO_MachineBasicBlock:
749    if (MI->isPHI() && !MO->getMBB()->isSuccessor(MI->getParent()))
750      report("PHI operand is not in the CFG", MO, MONum);
751    break;
752
753  case MachineOperand::MO_FrameIndex:
754    if (LiveStks && LiveStks->hasInterval(MO->getIndex()) &&
755        LiveInts && !LiveInts->isNotInMIMap(MI)) {
756      LiveInterval &LI = LiveStks->getInterval(MO->getIndex());
757      SlotIndex Idx = LiveInts->getInstructionIndex(MI);
758      if (TI.mayLoad() && !LI.liveAt(Idx.getUseIndex())) {
759        report("Instruction loads from dead spill slot", MO, MONum);
760        *OS << "Live stack: " << LI << '\n';
761      }
762      if (TI.mayStore() && !LI.liveAt(Idx.getDefIndex())) {
763        report("Instruction stores to dead spill slot", MO, MONum);
764        *OS << "Live stack: " << LI << '\n';
765      }
766    }
767    break;
768
769  default:
770    break;
771  }
772}
773
774void MachineVerifier::visitMachineInstrAfter(const MachineInstr *MI) {
775  BBInfo &MInfo = MBBInfoMap[MI->getParent()];
776  set_union(MInfo.regsKilled, regsKilled);
777  set_subtract(regsLive, regsKilled); regsKilled.clear();
778  set_subtract(regsLive, regsDead);   regsDead.clear();
779  set_union(regsLive, regsDefined);   regsDefined.clear();
780}
781
782void
783MachineVerifier::visitMachineBasicBlockAfter(const MachineBasicBlock *MBB) {
784  MBBInfoMap[MBB].regsLiveOut = regsLive;
785  regsLive.clear();
786}
787
788// Calculate the largest possible vregsPassed sets. These are the registers that
789// can pass through an MBB live, but may not be live every time. It is assumed
790// that all vregsPassed sets are empty before the call.
791void MachineVerifier::calcRegsPassed() {
792  // First push live-out regs to successors' vregsPassed. Remember the MBBs that
793  // have any vregsPassed.
794  DenseSet<const MachineBasicBlock*> todo;
795  for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end();
796       MFI != MFE; ++MFI) {
797    const MachineBasicBlock &MBB(*MFI);
798    BBInfo &MInfo = MBBInfoMap[&MBB];
799    if (!MInfo.reachable)
800      continue;
801    for (MachineBasicBlock::const_succ_iterator SuI = MBB.succ_begin(),
802           SuE = MBB.succ_end(); SuI != SuE; ++SuI) {
803      BBInfo &SInfo = MBBInfoMap[*SuI];
804      if (SInfo.addPassed(MInfo.regsLiveOut))
805        todo.insert(*SuI);
806    }
807  }
808
809  // Iteratively push vregsPassed to successors. This will converge to the same
810  // final state regardless of DenseSet iteration order.
811  while (!todo.empty()) {
812    const MachineBasicBlock *MBB = *todo.begin();
813    todo.erase(MBB);
814    BBInfo &MInfo = MBBInfoMap[MBB];
815    for (MachineBasicBlock::const_succ_iterator SuI = MBB->succ_begin(),
816           SuE = MBB->succ_end(); SuI != SuE; ++SuI) {
817      if (*SuI == MBB)
818        continue;
819      BBInfo &SInfo = MBBInfoMap[*SuI];
820      if (SInfo.addPassed(MInfo.vregsPassed))
821        todo.insert(*SuI);
822    }
823  }
824}
825
826// Calculate the set of virtual registers that must be passed through each basic
827// block in order to satisfy the requirements of successor blocks. This is very
828// similar to calcRegsPassed, only backwards.
829void MachineVerifier::calcRegsRequired() {
830  // First push live-in regs to predecessors' vregsRequired.
831  DenseSet<const MachineBasicBlock*> todo;
832  for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end();
833       MFI != MFE; ++MFI) {
834    const MachineBasicBlock &MBB(*MFI);
835    BBInfo &MInfo = MBBInfoMap[&MBB];
836    for (MachineBasicBlock::const_pred_iterator PrI = MBB.pred_begin(),
837           PrE = MBB.pred_end(); PrI != PrE; ++PrI) {
838      BBInfo &PInfo = MBBInfoMap[*PrI];
839      if (PInfo.addRequired(MInfo.vregsLiveIn))
840        todo.insert(*PrI);
841    }
842  }
843
844  // Iteratively push vregsRequired to predecessors. This will converge to the
845  // same final state regardless of DenseSet iteration order.
846  while (!todo.empty()) {
847    const MachineBasicBlock *MBB = *todo.begin();
848    todo.erase(MBB);
849    BBInfo &MInfo = MBBInfoMap[MBB];
850    for (MachineBasicBlock::const_pred_iterator PrI = MBB->pred_begin(),
851           PrE = MBB->pred_end(); PrI != PrE; ++PrI) {
852      if (*PrI == MBB)
853        continue;
854      BBInfo &SInfo = MBBInfoMap[*PrI];
855      if (SInfo.addRequired(MInfo.vregsRequired))
856        todo.insert(*PrI);
857    }
858  }
859}
860
861// Check PHI instructions at the beginning of MBB. It is assumed that
862// calcRegsPassed has been run so BBInfo::isLiveOut is valid.
863void MachineVerifier::checkPHIOps(const MachineBasicBlock *MBB) {
864  for (MachineBasicBlock::const_iterator BBI = MBB->begin(), BBE = MBB->end();
865       BBI != BBE && BBI->isPHI(); ++BBI) {
866    DenseSet<const MachineBasicBlock*> seen;
867
868    for (unsigned i = 1, e = BBI->getNumOperands(); i != e; i += 2) {
869      unsigned Reg = BBI->getOperand(i).getReg();
870      const MachineBasicBlock *Pre = BBI->getOperand(i + 1).getMBB();
871      if (!Pre->isSuccessor(MBB))
872        continue;
873      seen.insert(Pre);
874      BBInfo &PrInfo = MBBInfoMap[Pre];
875      if (PrInfo.reachable && !PrInfo.isLiveOut(Reg))
876        report("PHI operand is not live-out from predecessor",
877               &BBI->getOperand(i), i);
878    }
879
880    // Did we see all predecessors?
881    for (MachineBasicBlock::const_pred_iterator PrI = MBB->pred_begin(),
882           PrE = MBB->pred_end(); PrI != PrE; ++PrI) {
883      if (!seen.count(*PrI)) {
884        report("Missing PHI operand", BBI);
885        *OS << "BB#" << (*PrI)->getNumber()
886            << " is a predecessor according to the CFG.\n";
887      }
888    }
889  }
890}
891
892void MachineVerifier::visitMachineFunctionAfter() {
893  calcRegsPassed();
894
895  for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end();
896       MFI != MFE; ++MFI) {
897    BBInfo &MInfo = MBBInfoMap[MFI];
898
899    // Skip unreachable MBBs.
900    if (!MInfo.reachable)
901      continue;
902
903    checkPHIOps(MFI);
904  }
905
906  // Now check liveness info if available
907  if (LiveVars || LiveInts)
908    calcRegsRequired();
909  if (LiveVars)
910    verifyLiveVariables();
911  if (LiveInts)
912    verifyLiveIntervals();
913}
914
915void MachineVerifier::verifyLiveVariables() {
916  assert(LiveVars && "Don't call verifyLiveVariables without LiveVars");
917  for (unsigned Reg = TargetRegisterInfo::FirstVirtualRegister,
918         RegE = MRI->getLastVirtReg()-1; Reg != RegE; ++Reg) {
919    LiveVariables::VarInfo &VI = LiveVars->getVarInfo(Reg);
920    for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end();
921         MFI != MFE; ++MFI) {
922      BBInfo &MInfo = MBBInfoMap[MFI];
923
924      // Our vregsRequired should be identical to LiveVariables' AliveBlocks
925      if (MInfo.vregsRequired.count(Reg)) {
926        if (!VI.AliveBlocks.test(MFI->getNumber())) {
927          report("LiveVariables: Block missing from AliveBlocks", MFI);
928          *OS << "Virtual register %reg" << Reg
929              << " must be live through the block.\n";
930        }
931      } else {
932        if (VI.AliveBlocks.test(MFI->getNumber())) {
933          report("LiveVariables: Block should not be in AliveBlocks", MFI);
934          *OS << "Virtual register %reg" << Reg
935              << " is not needed live through the block.\n";
936        }
937      }
938    }
939  }
940}
941
942void MachineVerifier::verifyLiveIntervals() {
943  assert(LiveInts && "Don't call verifyLiveIntervals without LiveInts");
944  for (LiveIntervals::const_iterator LVI = LiveInts->begin(),
945       LVE = LiveInts->end(); LVI != LVE; ++LVI) {
946    const LiveInterval &LI = *LVI->second;
947
948    // Spilling and splitting may leave unused registers around. Skip them.
949    if (MRI->use_empty(LI.reg))
950      continue;
951
952    // Physical registers have much weirdness going on, mostly from coalescing.
953    // We should probably fix it, but for now just ignore them.
954    if (TargetRegisterInfo::isPhysicalRegister(LI.reg))
955      continue;
956
957    assert(LVI->first == LI.reg && "Invalid reg to interval mapping");
958
959    for (LiveInterval::const_vni_iterator I = LI.vni_begin(), E = LI.vni_end();
960         I!=E; ++I) {
961      VNInfo *VNI = *I;
962      const VNInfo *DefVNI = LI.getVNInfoAt(VNI->def);
963
964      if (!DefVNI) {
965        if (!VNI->isUnused()) {
966          report("Valno not live at def and not marked unused", MF);
967          *OS << "Valno #" << VNI->id << " in " << LI << '\n';
968        }
969        continue;
970      }
971
972      if (VNI->isUnused())
973        continue;
974
975      if (DefVNI != VNI) {
976        report("Live range at def has different valno", MF);
977        *OS << "Valno #" << VNI->id << " is defined at " << VNI->def
978            << " where valno #" << DefVNI->id << " is live in " << LI << '\n';
979        continue;
980      }
981
982      const MachineBasicBlock *MBB = LiveInts->getMBBFromIndex(VNI->def);
983      if (!MBB) {
984        report("Invalid definition index", MF);
985        *OS << "Valno #" << VNI->id << " is defined at " << VNI->def
986            << " in " << LI << '\n';
987        continue;
988      }
989
990      if (VNI->isPHIDef()) {
991        if (VNI->def != LiveInts->getMBBStartIdx(MBB)) {
992          report("PHIDef value is not defined at MBB start", MF);
993          *OS << "Valno #" << VNI->id << " is defined at " << VNI->def
994              << ", not at the beginning of BB#" << MBB->getNumber()
995              << " in " << LI << '\n';
996        }
997      } else {
998        // Non-PHI def.
999        if (!VNI->def.isDef()) {
1000          report("Non-PHI def must be at a DEF slot", MF);
1001          *OS << "Valno #" << VNI->id << " is defined at " << VNI->def
1002              << " in " << LI << '\n';
1003        }
1004        const MachineInstr *MI = LiveInts->getInstructionFromIndex(VNI->def);
1005        if (!MI) {
1006          report("No instruction at def index", MF);
1007          *OS << "Valno #" << VNI->id << " is defined at " << VNI->def
1008              << " in " << LI << '\n';
1009        } else if (!MI->modifiesRegister(LI.reg, TRI)) {
1010          report("Defining instruction does not modify register", MI);
1011          *OS << "Valno #" << VNI->id << " in " << LI << '\n';
1012        }
1013      }
1014    }
1015
1016    for (LiveInterval::const_iterator I = LI.begin(), E = LI.end(); I!=E; ++I) {
1017      const VNInfo *VNI = I->valno;
1018      assert(VNI && "Live range has no valno");
1019
1020      if (VNI->id >= LI.getNumValNums() || VNI != LI.getValNumInfo(VNI->id)) {
1021        report("Foreign valno in live range", MF);
1022        I->print(*OS);
1023        *OS << " has a valno not in " << LI << '\n';
1024      }
1025
1026      if (VNI->isUnused()) {
1027        report("Live range valno is marked unused", MF);
1028        I->print(*OS);
1029        *OS << " in " << LI << '\n';
1030      }
1031
1032      const MachineBasicBlock *MBB = LiveInts->getMBBFromIndex(I->start);
1033      if (!MBB) {
1034        report("Bad start of live segment, no basic block", MF);
1035        I->print(*OS);
1036        *OS << " in " << LI << '\n';
1037        continue;
1038      }
1039      SlotIndex MBBStartIdx = LiveInts->getMBBStartIdx(MBB);
1040      if (I->start != MBBStartIdx && I->start != VNI->def) {
1041        report("Live segment must begin at MBB entry or valno def", MBB);
1042        I->print(*OS);
1043        *OS << " in " << LI << '\n' << "Basic block starts at "
1044            << MBBStartIdx << '\n';
1045      }
1046
1047      const MachineBasicBlock *EndMBB =
1048                                LiveInts->getMBBFromIndex(I->end.getPrevSlot());
1049      if (!EndMBB) {
1050        report("Bad end of live segment, no basic block", MF);
1051        I->print(*OS);
1052        *OS << " in " << LI << '\n';
1053        continue;
1054      }
1055      if (I->end != LiveInts->getMBBEndIdx(EndMBB)) {
1056        // The live segment is ending inside EndMBB
1057        const MachineInstr *MI =
1058                        LiveInts->getInstructionFromIndex(I->end.getPrevSlot());
1059        if (!MI) {
1060          report("Live segment doesn't end at a valid instruction", EndMBB);
1061        I->print(*OS);
1062        *OS << " in " << LI << '\n' << "Basic block starts at "
1063            << MBBStartIdx << '\n';
1064        } else if (TargetRegisterInfo::isVirtualRegister(LI.reg) &&
1065                   !MI->readsVirtualRegister(LI.reg)) {
1066          // FIXME: Should we require a kill flag?
1067          report("Instruction killing live segment doesn't read register", MI);
1068          I->print(*OS);
1069          *OS << " in " << LI << '\n';
1070        }
1071      }
1072
1073      // Now check all the basic blocks in this live segment.
1074      MachineFunction::const_iterator MFI = MBB;
1075      // Is LI live-in to MBB and not a PHIDef?
1076      if (I->start == VNI->def) {
1077        // Not live-in to any blocks.
1078        if (MBB == EndMBB)
1079          continue;
1080        // Skip this block.
1081        ++MFI;
1082      }
1083      for (;;) {
1084        assert(LiveInts->isLiveInToMBB(LI, MFI));
1085        // We don't know how to track physregs into a landing pad.
1086        if (TargetRegisterInfo::isPhysicalRegister(LI.reg) &&
1087            MFI->isLandingPad()) {
1088          if (&*MFI == EndMBB)
1089            break;
1090          ++MFI;
1091          continue;
1092        }
1093        // Check that VNI is live-out of all predecessors.
1094        for (MachineBasicBlock::const_pred_iterator PI = MFI->pred_begin(),
1095             PE = MFI->pred_end(); PI != PE; ++PI) {
1096          SlotIndex PEnd = LiveInts->getMBBEndIdx(*PI).getPrevSlot();
1097          const VNInfo *PVNI = LI.getVNInfoAt(PEnd);
1098          if (!PVNI) {
1099            report("Register not marked live out of predecessor", *PI);
1100            *OS << "Valno #" << VNI->id << " live into BB#" << MFI->getNumber()
1101                << '@' << LiveInts->getMBBStartIdx(MFI) << ", not live at "
1102                << PEnd << " in " << LI << '\n';
1103          } else if (PVNI != VNI) {
1104            report("Different value live out of predecessor", *PI);
1105            *OS << "Valno #" << PVNI->id << " live out of BB#"
1106                << (*PI)->getNumber() << '@' << PEnd
1107                << "\nValno #" << VNI->id << " live into BB#" << MFI->getNumber()
1108                << '@' << LiveInts->getMBBStartIdx(MFI) << " in " << LI << '\n';
1109          }
1110        }
1111        if (&*MFI == EndMBB)
1112          break;
1113        ++MFI;
1114      }
1115    }
1116
1117    // Check the LI only has one connected component.
1118    if (TargetRegisterInfo::isVirtualRegister(LI.reg)) {
1119      ConnectedVNInfoEqClasses ConEQ(*LiveInts);
1120      unsigned NumComp = ConEQ.Classify(&LI);
1121      if (NumComp > 1) {
1122        report("Multiple connected components in live interval", MF);
1123        *OS << NumComp << " components in " << LI << '\n';
1124        for (unsigned comp = 0; comp != NumComp; ++comp) {
1125          *OS << comp << ": valnos";
1126          for (LiveInterval::const_vni_iterator I = LI.vni_begin(),
1127               E = LI.vni_end(); I!=E; ++I)
1128            if (comp == ConEQ.getEqClass(*I))
1129              *OS << ' ' << (*I)->id;
1130          *OS << '\n';
1131        }
1132      }
1133    }
1134  }
1135}
1136
1137