diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 52e8391..30a4c9f 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -175,6 +175,9 @@
     SDOperand visitLOAD(SDNode *N);
     SDOperand visitSTORE(SDNode *N);
 
+    SDOperand visitLOCATION(SDNode *N);
+    SDOperand visitDEBUGLOC(SDNode *N);
+
     bool SimplifySelectOps(SDNode *SELECT, SDOperand LHS, SDOperand RHS);
     SDOperand SimplifySelect(SDOperand N0, SDOperand N1, SDOperand N2);
     SDOperand SimplifySelectCC(SDOperand N0, SDOperand N1, SDOperand N2, 
@@ -631,6 +634,8 @@
   case ISD::BRTWOWAY_CC:        return visitBRTWOWAY_CC(N);
   case ISD::LOAD:               return visitLOAD(N);
   case ISD::STORE:              return visitSTORE(N);
+  case ISD::LOCATION:           return visitLOCATION(N);
+  case ISD::DEBUG_LOC:          return visitDEBUGLOC(N);
   }
   return SDOperand();
 }
@@ -2089,6 +2094,35 @@
   return SDOperand();
 }
 
+SDOperand DAGCombiner::visitLOCATION(SDNode *N) {
+  SDOperand Chain    = N->getOperand(0);
+  
+  // Remove redundant locations (last one holds)
+  if (Chain.getOpcode() == ISD::LOCATION && Chain.hasOneUse()) {
+    return DAG.getNode(ISD::LOCATION, MVT::Other, Chain.getOperand(0),
+                                                  N->getOperand(1),
+                                                  N->getOperand(2),
+                                                  N->getOperand(3),
+                                                  N->getOperand(4));
+  }
+  
+  return SDOperand();
+}
+
+SDOperand DAGCombiner::visitDEBUGLOC(SDNode *N) {
+  SDOperand Chain    = N->getOperand(0);
+  
+  // Remove redundant debug locations (last one holds)
+  if (Chain.getOpcode() == ISD::DEBUG_LOC && Chain.hasOneUse()) {
+    return DAG.getNode(ISD::DEBUG_LOC, MVT::Other, Chain.getOperand(0),
+                                                   N->getOperand(1),
+                                                   N->getOperand(2),
+                                                   N->getOperand(3));
+  }
+  
+  return SDOperand();
+}
+
 SDOperand DAGCombiner::SimplifySelect(SDOperand N0, SDOperand N1, SDOperand N2){
   assert(N0.getOpcode() ==ISD::SETCC && "First argument must be a SetCC node!");
   
