Do not emit copies for physical register output if it's not used.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40722 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 4b7863d..7ac8ea8 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -3242,7 +3242,7 @@
   // If there is only one value, this is easy.
   if (getNumValues() == 1)
     return use_size() == NUses;
-  if (Uses.size() < NUses) return false;
+  if (use_size() < NUses) return false;
 
   SDOperand TheValue(const_cast<SDNode *>(this), Value);
 
@@ -3265,6 +3265,31 @@
 }
 
 
+/// hasAnyUseOfValue - Return true if there are any use of the indicated
+/// value. This method ignores uses of other values defined by this operation.
+bool SDNode::hasAnyUseOfValue(unsigned Value) const {
+  assert(Value < getNumValues() && "Bad value!");
+
+  if (use_size() == 0) return false;
+
+  SDOperand TheValue(const_cast<SDNode *>(this), Value);
+
+  SmallPtrSet<SDNode*, 32> UsersHandled;
+
+  for (SDNode::use_iterator UI = Uses.begin(), E = Uses.end(); UI != E; ++UI) {
+    SDNode *User = *UI;
+    if (User->getNumOperands() == 1 ||
+        UsersHandled.insert(User))     // First time we've seen this?
+      for (unsigned i = 0, e = User->getNumOperands(); i != e; ++i)
+        if (User->getOperand(i) == TheValue) {
+          return true;
+        }
+  }
+
+  return false;
+}
+
+
 /// isOnlyUse - Return true if this node is the only use of N.
 ///
 bool SDNode::isOnlyUse(SDNode *N) const {