MachineVerifier.cpp (198090) | MachineVerifier.cpp (198892) |
---|---|
1//===-- MachineVerifier.cpp - Machine Code Verifier -------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 22 unchanged lines hidden (view full) --- 31#include "llvm/CodeGen/MachineRegisterInfo.h" 32#include "llvm/CodeGen/Passes.h" 33#include "llvm/Target/TargetMachine.h" 34#include "llvm/Target/TargetRegisterInfo.h" 35#include "llvm/Target/TargetInstrInfo.h" 36#include "llvm/ADT/DenseSet.h" 37#include "llvm/ADT/SetOperations.h" 38#include "llvm/ADT/SmallVector.h" | 1//===-- MachineVerifier.cpp - Machine Code Verifier -------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 22 unchanged lines hidden (view full) --- 31#include "llvm/CodeGen/MachineRegisterInfo.h" 32#include "llvm/CodeGen/Passes.h" 33#include "llvm/Target/TargetMachine.h" 34#include "llvm/Target/TargetRegisterInfo.h" 35#include "llvm/Target/TargetInstrInfo.h" 36#include "llvm/ADT/DenseSet.h" 37#include "llvm/ADT/SetOperations.h" 38#include "llvm/ADT/SmallVector.h" |
39#include "llvm/Support/Compiler.h" | |
40#include "llvm/Support/Debug.h" 41#include "llvm/Support/ErrorHandling.h" 42#include "llvm/Support/raw_ostream.h" 43using namespace llvm; 44 45namespace { | 39#include "llvm/Support/Debug.h" 40#include "llvm/Support/ErrorHandling.h" 41#include "llvm/Support/raw_ostream.h" 42using namespace llvm; 43 44namespace { |
46 struct VISIBILITY_HIDDEN MachineVerifier : public MachineFunctionPass { | 45 struct MachineVerifier : public MachineFunctionPass { |
47 static char ID; // Pass ID, replacement for typeid 48 49 MachineVerifier(bool allowDoubleDefs = false) : 50 MachineFunctionPass(&ID), 51 allowVirtDoubleDefs(allowDoubleDefs), 52 allowPhysDoubleDefs(allowDoubleDefs), 53 OutFileName(getenv("LLVM_VERIFY_MACHINEINSTRS")) 54 {} --- 184 unchanged lines hidden (view full) --- 239 << "- function: " << MF->getFunction()->getNameStr() << "\n"; 240} 241 242void MachineVerifier::report(const char *msg, const MachineBasicBlock *MBB) { 243 assert(MBB); 244 report(msg, MBB->getParent()); 245 *OS << "- basic block: " << MBB->getBasicBlock()->getNameStr() 246 << " " << (void*)MBB | 46 static char ID; // Pass ID, replacement for typeid 47 48 MachineVerifier(bool allowDoubleDefs = false) : 49 MachineFunctionPass(&ID), 50 allowVirtDoubleDefs(allowDoubleDefs), 51 allowPhysDoubleDefs(allowDoubleDefs), 52 OutFileName(getenv("LLVM_VERIFY_MACHINEINSTRS")) 53 {} --- 184 unchanged lines hidden (view full) --- 238 << "- function: " << MF->getFunction()->getNameStr() << "\n"; 239} 240 241void MachineVerifier::report(const char *msg, const MachineBasicBlock *MBB) { 242 assert(MBB); 243 report(msg, MBB->getParent()); 244 *OS << "- basic block: " << MBB->getBasicBlock()->getNameStr() 245 << " " << (void*)MBB |
247 << " (#" << MBB->getNumber() << ")\n"; | 246 << " (BB#" << MBB->getNumber() << ")\n"; |
248} 249 250void MachineVerifier::report(const char *msg, const MachineInstr *MI) { 251 assert(MI); 252 report(msg, MI->getParent()); 253 *OS << "- instruction: "; 254 MI->print(*OS, TM); 255} --- 485 unchanged lines hidden (view full) --- 741 &BBI->getOperand(i), i); 742 } 743 744 // Did we see all predecessors? 745 for (MachineBasicBlock::const_pred_iterator PrI = MBB->pred_begin(), 746 PrE = MBB->pred_end(); PrI != PrE; ++PrI) { 747 if (!seen.count(*PrI)) { 748 report("Missing PHI operand", BBI); | 247} 248 249void MachineVerifier::report(const char *msg, const MachineInstr *MI) { 250 assert(MI); 251 report(msg, MI->getParent()); 252 *OS << "- instruction: "; 253 MI->print(*OS, TM); 254} --- 485 unchanged lines hidden (view full) --- 740 &BBI->getOperand(i), i); 741 } 742 743 // Did we see all predecessors? 744 for (MachineBasicBlock::const_pred_iterator PrI = MBB->pred_begin(), 745 PrE = MBB->pred_end(); PrI != PrE; ++PrI) { 746 if (!seen.count(*PrI)) { 747 report("Missing PHI operand", BBI); |
749 *OS << "MBB #" << (*PrI)->getNumber() | 748 *OS << "BB#" << (*PrI)->getNumber() |
750 << " is a predecessor according to the CFG.\n"; 751 } 752 } 753 } 754} 755 756void MachineVerifier::visitMachineFunctionAfter() { 757 calcMaxRegsPassed(); --- 18 unchanged lines hidden (view full) --- 776 if (!MFI->isLandingPad()) { 777 for (MachineBasicBlock::const_livein_iterator I = MFI->livein_begin(), 778 E = MFI->livein_end(); I != E; ++I) { 779 if (TargetRegisterInfo::isPhysicalRegister(*I) && 780 !isReserved (*I) && !PrInfo.isLiveOut(*I)) { 781 report("Live-in physical register is not live-out from predecessor", 782 MFI); 783 *OS << "Register " << TRI->getName(*I) | 749 << " is a predecessor according to the CFG.\n"; 750 } 751 } 752 } 753} 754 755void MachineVerifier::visitMachineFunctionAfter() { 756 calcMaxRegsPassed(); --- 18 unchanged lines hidden (view full) --- 775 if (!MFI->isLandingPad()) { 776 for (MachineBasicBlock::const_livein_iterator I = MFI->livein_begin(), 777 E = MFI->livein_end(); I != E; ++I) { 778 if (TargetRegisterInfo::isPhysicalRegister(*I) && 779 !isReserved (*I) && !PrInfo.isLiveOut(*I)) { 780 report("Live-in physical register is not live-out from predecessor", 781 MFI); 782 *OS << "Register " << TRI->getName(*I) |
784 << " is not live-out from MBB #" << (*PrI)->getNumber() | 783 << " is not live-out from BB#" << (*PrI)->getNumber() |
785 << ".\n"; 786 } 787 } 788 } 789 790 791 // Verify dead-in virtual registers. 792 if (!allowVirtDoubleDefs) { --- 48 unchanged lines hidden --- | 784 << ".\n"; 785 } 786 } 787 } 788 789 790 // Verify dead-in virtual registers. 791 if (!allowVirtDoubleDefs) { --- 48 unchanged lines hidden --- |