In debug builds check that the key property holds: all
authorDuncan Sands <baldrick@free.fr>
Mon, 25 Feb 2008 16:21:21 +0000 (16:21 +0000)
committerDuncan Sands <baldrick@free.fr>
Mon, 25 Feb 2008 16:21:21 +0000 (16:21 +0000)
result and operand types are legal.

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

lib/CodeGen/SelectionDAG/LegalizeTypes.cpp

index 3d419552826b16552b0abe0fce033007d7a5ca6d..7497ba2c8deaf255e754e6c94271296d4be1f8a8 100644 (file)
@@ -173,18 +173,36 @@ NodeDone:
 #ifndef NDEBUG
   for (SelectionDAG::allnodes_iterator I = DAG.allnodes_begin(),
        E = DAG.allnodes_end(); I != E; ++I) {
-    if (I->getNodeId() == Processed)
-      continue;
-    cerr << "Unprocessed node: ";
-    I->dump(&DAG); cerr << "\n";
-
-    if (I->getNodeId() == NewNode)
-      cerr << "New node not 'noticed'?\n";
-    else if (I->getNodeId() > 0)
-      cerr << "Operand not processed?\n";
-    else if (I->getNodeId() == ReadyToProcess)
-      cerr << "Not added to worklist?\n";
-    abort();
+    bool Failed = false;
+
+    // Check that all result types are legal.
+    for (unsigned i = 0, NumVals = I->getNumValues(); i < NumVals; ++i)
+      if (!isTypeLegal(I->getValueType(i))) {
+        cerr << "Result type " << i << " illegal!\n";
+        Failed = true;
+      }
+
+    // Check that all operand types are legal.
+    for (unsigned i = 0, NumOps = I->getNumOperands(); i < NumOps; ++i)
+      if (!isTypeLegal(I->getOperand(i).getValueType())) {
+        cerr << "Operand type " << i << " illegal!\n";
+        Failed = true;
+      }
+
+    if (I->getNodeId() != Processed) {
+       if (I->getNodeId() == NewNode)
+         cerr << "New node not 'noticed'?\n";
+       else if (I->getNodeId() > 0)
+         cerr << "Operand not processed?\n";
+       else if (I->getNodeId() == ReadyToProcess)
+         cerr << "Not added to worklist?\n";
+       Failed = true;
+    }
+
+    if (Failed) {
+      I->dump(&DAG); cerr << "\n";
+      abort();
+    }
   }
 #endif
 }