Reuse existing getUnderlyingObject instead of
authorDale Johannesen <dalej@apple.com>
Thu, 14 May 2009 18:41:18 +0000 (18:41 +0000)
committerDale Johannesen <dalej@apple.com>
Thu, 14 May 2009 18:41:18 +0000 (18:41 +0000)
adding another copy.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71783 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/SimplifyCFG.cpp

index 79b92eaabe05f63045c59684ef24f460f043e92b..2cde765560b8fb0b011696bd495f156e5dc57c77 100644 (file)
@@ -348,21 +348,6 @@ static Value *GetIfCondition(BasicBlock *BB,
   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 @@ static bool DominatesMergePoint(Value *V, BasicBlock *BB,
             !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.