diff --git a/utils/TableGen/InstrSelectorEmitter.cpp b/utils/TableGen/InstrSelectorEmitter.cpp
index 98bd994..522cd11 100644
--- a/utils/TableGen/InstrSelectorEmitter.cpp
+++ b/utils/TableGen/InstrSelectorEmitter.cpp
@@ -24,7 +24,6 @@
 ///
 void InstrSelectorEmitter::ProcessNodeTypes() {
   std::vector<Record*> Nodes = Records.getAllDerivedDefinitions("DagNode");
-
   for (unsigned i = 0, e = Nodes.size(); i != e; ++i) {
     Record *Node = Nodes[i];
     
@@ -36,21 +35,48 @@
     ListInit *Args = Node->getValueAsListInit("ArgTypes");
     std::vector<NodeType::ArgResultTypes> ArgTypes;
 
-    for (unsigned a = 0, e = Args->getSize(); a != e; ++a)
+    for (unsigned a = 0, e = Args->getSize(); a != e; ++a) {
       if (DefInit *DI = dynamic_cast<DefInit*>(Args->getElement(a)))
         ArgTypes.push_back(NodeType::Translate(DI->getDef()));
       else
         throw "In node " + Node->getName() + ", argument is not a Def!";
 
+      if (a == 0 && ArgTypes.back() == NodeType::Arg0)
+        throw "In node " + Node->getName() + ", arg 0 cannot have type 'arg0'!";
+      if (ArgTypes.back() == NodeType::Void)
+        throw "In node " + Node->getName() + ", args cannot be void type!";
+    }
+    if (RetTy == NodeType::Arg0 && Args->getSize() == 0)
+      throw "In node " + Node->getName() +
+            ", invalid return type for nullary node!";
+
     // Add the node type mapping now...
     NodeTypes[Node] = NodeType(RetTy, ArgTypes);
   }  
 }
 
+/// ProcessInstructionPatterns - Read in all subclasses of Instruction, and
+/// process those with a useful Pattern field.
+///
+void InstrSelectorEmitter::ProcessInstructionPatterns() {
+  std::vector<Record*> Insts = Records.getAllDerivedDefinitions("Instruction");
+  for (unsigned i = 0, e = Insts.size(); i != e; ++i) {
+    Record *Inst = Insts[i];
+    if (DagInit *PatternInit =
+          dynamic_cast<DagInit*>(Inst->getValueInit("Pattern"))) {
+
+    }
+  }
+}
+
+
 void InstrSelectorEmitter::run(std::ostream &OS) {
   // Type-check all of the node types to ensure we "understand" them.
   ProcessNodeTypes();
   
-  
+  // Read all of the instruction patterns in...
+  ProcessInstructionPatterns();
+
+  // Read all of the Expander patterns in...
   
 }
diff --git a/utils/TableGen/InstrSelectorEmitter.h b/utils/TableGen/InstrSelectorEmitter.h
index 5033a41..941763e 100644
--- a/utils/TableGen/InstrSelectorEmitter.h
+++ b/utils/TableGen/InstrSelectorEmitter.h
@@ -17,12 +17,10 @@
     // Both argument and return types...
     Val,            // A non-void type
     Arg0,           // Value matches the type of Arg0
+    Ptr,            // Tree node is the type of the target pointer
 
     // Return types
     Void,           // Tree node always returns void
-
-    // Argument types
-    Ptr,            // Tree node is the target argument type
   };
 
   ArgResultTypes ResultType;
@@ -36,7 +34,6 @@
   NodeType(const NodeType &N) : ResultType(N.ResultType), ArgTypes(N.ArgTypes){}
 
   static ArgResultTypes Translate(Record *R);
-
 };
 
 class InstrSelectorEmitter : public TableGenBackend {
@@ -54,6 +51,10 @@
   // RecordKeeper, turning them into the more accessible NodeTypes data
   // structure.
   void ProcessNodeTypes();
+
+  // ProcessInstructionPatterns - Read in all subclasses of Instruction, and
+  // process those with a useful Pattern field.
+  void ProcessInstructionPatterns();
 };
 
 #endif
