Check for extra kill flags on live-out virtual registers.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 29 Jun 2012 21:00:00 +0000 (21:00 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Fri, 29 Jun 2012 21:00:00 +0000 (21:00 +0000)
This would previously get reported as the misleading "Virtual register
def doesn't dominate all uses."

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159460 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineVerifier.cpp

index a443b51d15e1ade99394c75669ff5bfa6cf1cb56..45ce3ab28b5c07189f9eb705471c7b346da5e346 100644 (file)
@@ -1049,6 +1049,20 @@ void MachineVerifier::visitMachineFunctionAfter() {
   // Now check liveness info if available
   calcRegsRequired();
 
+  // Check for killed virtual registers that should be live out.
+  for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end();
+       MFI != MFE; ++MFI) {
+    BBInfo &MInfo = MBBInfoMap[MFI];
+    for (RegSet::iterator
+         I = MInfo.vregsRequired.begin(), E = MInfo.vregsRequired.end(); I != E;
+         ++I)
+      if (MInfo.regsKilled.count(*I)) {
+       report("Virtual register killed in block, but needed live out.", MFI);
+       *OS << "Virtual register " << PrintReg(*I)
+            << " is used after the block.\n";
+      }
+  }
+
   if (!MF->empty()) {
     BBInfo &MInfo = MBBInfoMap[&MF->front()];
     for (RegSet::iterator