Reuse existing getUnderlyingObject instead of
adding another copy.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71783 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp
index 79b92ea..2cde765 100644
--- a/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -348,21 +348,6 @@
   return 0;
 }
 
-/// findGlobalVariableBase - Recurse into a ConstantExpr to find the underlying
-/// GlobalVariable, if there is one.
-static GlobalVariable* findGlobalVariableBase(ConstantExpr* CE) {
-  if (isa<GlobalVariable>(CE))
-    return dyn_cast<GlobalVariable>(CE);
-  if (CE->getOpcode()==Instruction::GetElementPtr ||
-      CE->getOpcode()==Instruction::BitCast) {
-    if (isa<GlobalVariable>(CE->getOperand(0)))
-      return dyn_cast<GlobalVariable>(CE->getOperand(0));
-    if (ConstantExpr *CE2 = dyn_cast<ConstantExpr>(CE->getOperand(0)))
-      return findGlobalVariableBase(CE2);
-  }
-  return NULL;
-}
-
 /// DominatesMergePoint - If we have a merge point of an "if condition" as
 /// accepted above, return true if the specified value dominates the block.  We
 /// don't handle the true generality of domination here, just a special case
@@ -409,15 +394,12 @@
             !isa<Constant>(I->getOperand(0)))
           return false;
         // External weak globals may have address 0, so we can't load them.
-        GlobalVariable* GV = dyn_cast<GlobalVariable>(I->getOperand(0));
-        if (GV && GV->hasExternalWeakLinkage())
-          return false;
-        // The global may be buried within a ConstantExpr.
-        if (ConstantExpr *CE = dyn_cast<ConstantExpr>(I->getOperand(0)))
-          GV = findGlobalVariableBase(CE);
-        if (GV && GV->hasExternalWeakLinkage())
-          return false;
-
+        Value *V2 = I->getOperand(0)->getUnderlyingObject();
+        if (V2) {
+          GlobalVariable* GV = dyn_cast<GlobalVariable>(V2);
+          if (GV && GV->hasExternalWeakLinkage())
+            return false;
+        }
         // Finally, we have to check to make sure there are no instructions
         // before the load in its basic block, as we are going to hoist the loop
         // out to its predecessor.