Remove redundant debug locations.
authorJim Laskey <jlaskey@mac.com>
Fri, 23 Dec 2005 20:08:28 +0000 (20:08 +0000)
committerJim Laskey <jlaskey@mac.com>
Fri, 23 Dec 2005 20:08:28 +0000 (20:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24995 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index 52e8391f37273fa1190bd57e4ba4997e54fa35c2..30a4c9f637ccca82ad03f355c08de53b1c2d3f8a 100644 (file)
@@ -175,6 +175,9 @@ namespace {
     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 @@ SDOperand DAGCombiner::visit(SDNode *N) {
   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 @@ SDOperand DAGCombiner::visitSTORE(SDNode *N) {
   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!");