diff --git a/lib/CodeGen/SelectionDAG/SDNodeOrdering.h b/lib/CodeGen/SelectionDAG/SDNodeOrdering.h
index 264753b..f88b26d 100644
--- a/lib/CodeGen/SelectionDAG/SDNodeOrdering.h
+++ b/lib/CodeGen/SelectionDAG/SDNodeOrdering.h
@@ -34,7 +34,6 @@
   SDNodeOrdering() {}
 
   void add(const SDNode *Node, unsigned O) {
-    assert(O && "Invalid ordering!");
     OrderMap[Node] = O;
   }
   void remove(const SDNode *Node) {
@@ -46,9 +45,7 @@
     OrderMap.clear();
   }
   unsigned getOrder(const SDNode *Node) {
-    unsigned Order = OrderMap[Node];
-    assert(Order && "Node isn't in ordering map!");
-    return Order;
+    return OrderMap[Node];
   }
 };
 
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 68a2e7b..0d54b97 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -6430,7 +6430,6 @@
   SelectionDAG &DAG = SDB->DAG;
   SDValue OldRoot = DAG.getRoot();
   DebugLoc dl = SDB->getCurDebugLoc();
-  unsigned Order = SDB->getSDNodeOrder();
   const TargetData *TD = TLI.getTargetData();
   SmallVector<ISD::InputArg, 16> Ins;
 
@@ -6522,15 +6521,14 @@
          "LowerFormalArguments didn't return a valid chain!");
   assert(InVals.size() == Ins.size() &&
          "LowerFormalArguments didn't emit the correct number of values!");
-  DEBUG(for (unsigned i = 0, e = Ins.size(); i != e; ++i) {
-          assert(InVals[i].getNode() &&
-                 "LowerFormalArguments emitted a null value!");
-          assert(Ins[i].VT == InVals[i].getValueType() &&
-                 "LowerFormalArguments emitted a value with the wrong type!");
-        });
-
-  if (DisableScheduling)
-    DAG.AssignOrdering(NewRoot.getNode(), Order);
+  DEBUG({
+      for (unsigned i = 0, e = Ins.size(); i != e; ++i) {
+        assert(InVals[i].getNode() &&
+               "LowerFormalArguments emitted a null value!");
+        assert(Ins[i].VT == InVals[i].getValueType() &&
+               "LowerFormalArguments emitted a value with the wrong type!");
+      }
+    });
 
   // Update the DAG with the new chain value resulting from argument lowering.
   DAG.setRoot(NewRoot);
@@ -6546,7 +6544,7 @@
     EVT VT = ValueVTs[0];
     EVT RegVT = TLI.getRegisterType(*CurDAG->getContext(), VT);
     ISD::NodeType AssertOp = ISD::DELETED_NODE;
-    SDValue ArgValue = getCopyFromParts(DAG, dl, Order, &InVals[0], 1,
+    SDValue ArgValue = getCopyFromParts(DAG, dl, 0, &InVals[0], 1,
                                         RegVT, VT, AssertOp);
 
     MachineFunction& MF = SDB->DAG.getMachineFunction();
@@ -6555,8 +6553,6 @@
     FLI.DemoteRegister = SRetReg;
     NewRoot = SDB->DAG.getCopyToReg(NewRoot, SDB->getCurDebugLoc(), SRetReg, ArgValue);
     DAG.setRoot(NewRoot);
-    if (DisableScheduling)
-      DAG.AssignOrdering(NewRoot.getNode(), Order);
 
     // i indexes lowered arguments.  Bump it past the hidden sret argument.
     // Idx indexes LLVM arguments.  Don't touch it.
@@ -6581,7 +6577,7 @@
         else if (F.paramHasAttr(Idx, Attribute::ZExt))
           AssertOp = ISD::AssertZext;
 
-        ArgValues.push_back(getCopyFromParts(DAG, dl, Order, &InVals[i],
+        ArgValues.push_back(getCopyFromParts(DAG, dl, 0, &InVals[i],
                                              NumParts, PartVT, VT,
                                              AssertOp));
       }
@@ -6594,9 +6590,6 @@
                                        SDB->getCurDebugLoc());
       SDB->setValue(I, Res);
 
-      if (DisableScheduling)
-        DAG.AssignOrdering(Res.getNode(), Order);
-
       // If this argument is live outside of the entry block, insert a copy from
       // whereever we got it to the vreg that other BB's will reference it as.
       SDB->CopyToExportRegsIfNeeded(I);
