Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(289)

Unified Diff: lib/Transforms/IPO/GlobalOpt.cpp

Issue 183273009: Prep for merging 3.4: Undo changes from 3.3 branch (Closed) Base URL: http://git.chromium.org/native_client/pnacl-llvm.git@master
Patch Set: Retry Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/Target/X86/X86Subtarget.cpp ('k') | lib/Transforms/InstCombine/InstCombineMulDivRem.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/Transforms/IPO/GlobalOpt.cpp
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp
index 6cab6ed0ffa82e7d3b266b5f7d07357b75f659f9..70b066d64bf486ef4414d2b4a820a7371124f09c 100644
--- a/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/lib/Transforms/IPO/GlobalOpt.cpp
@@ -3062,105 +3062,6 @@ bool GlobalOpt::OptimizeGlobalCtorsList(GlobalVariable *&GCL) {
return true;
}
-static Value::use_iterator getFirst(Value *V, SmallPtrSet<Use*, 8> &Tried) {
- for (Value::use_iterator I = V->use_begin(), E = V->use_end(); I != E; ++I) {
- Use *U = &I.getUse();
- if (Tried.count(U))
- continue;
-
- User *Usr = *I;
- GlobalVariable *GV = dyn_cast<GlobalVariable>(Usr);
- if (!GV || !GV->hasName()) {
- Tried.insert(U);
- return I;
- }
-
- StringRef Name = GV->getName();
- if (Name != "llvm.used" && Name != "llvm.compiler_used") {
- Tried.insert(U);
- return I;
- }
- }
- return V->use_end();
-}
-
-static bool replaceAllNonLLVMUsedUsesWith(Constant *Old, Constant *New);
-
-static bool replaceUsesOfWithOnConstant(ConstantArray *CA, Value *From,
- Value *ToV, Use *U) {
- Constant *To = cast<Constant>(ToV);
-
- SmallVector<Constant*, 8> NewOps;
- for (unsigned i = 0, e = CA->getNumOperands(); i != e; ++i) {
- Constant *Op = CA->getOperand(i);
- NewOps.push_back(Op == From ? To : Op);
- }
-
- Constant *Replacement = ConstantArray::get(CA->getType(), NewOps);
- assert(Replacement != CA && "CA didn't contain From!");
-
- bool Ret = replaceAllNonLLVMUsedUsesWith(CA, Replacement);
- if (Replacement->use_empty())
- Replacement->destroyConstant();
- if (CA->use_empty())
- CA->destroyConstant();
- return Ret;
-}
-
-static bool replaceUsesOfWithOnConstant(ConstantExpr *CE, Value *From,
- Value *ToV, Use *U) {
- Constant *To = cast<Constant>(ToV);
- SmallVector<Constant*, 8> NewOps;
- for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) {
- Constant *Op = CE->getOperand(i);
- NewOps.push_back(Op == From ? To : Op);
- }
-
- Constant *Replacement = CE->getWithOperands(NewOps);
- assert(Replacement != CE && "CE didn't contain From!");
-
- bool Ret = replaceAllNonLLVMUsedUsesWith(CE, Replacement);
- if (Replacement->use_empty())
- Replacement->destroyConstant();
- if (CE->use_empty())
- CE->destroyConstant();
- return Ret;
-}
-
-static bool replaceUsesOfWithOnConstant(Constant *C, Value *From, Value *To,
- Use *U) {
- if (ConstantArray *CA = dyn_cast<ConstantArray>(C))
- return replaceUsesOfWithOnConstant(CA, From, To, U);
- if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
- return replaceUsesOfWithOnConstant(CE, From, To, U);
- C->replaceUsesOfWithOnConstant(From, To, U);
- return true;
-}
-
-static bool replaceAllNonLLVMUsedUsesWith(Constant *Old, Constant *New) {
- SmallPtrSet<Use*, 8> Tried;
- bool Ret = false;
- for (;;) {
- Value::use_iterator I = getFirst(Old, Tried);
- if (I == Old->use_end())
- break;
- Use &U = I.getUse();
-
- // Must handle Constants specially, we cannot call replaceUsesOfWith on a
- // constant because they are uniqued.
- if (Constant *C = dyn_cast<Constant>(U.getUser())) {
- if (!isa<GlobalValue>(C)) {
- Ret |= replaceUsesOfWithOnConstant(C, Old, New, &U);
- continue;
- }
- }
-
- U.set(New);
- Ret = true;
- }
- return Ret;
-}
-
bool GlobalOpt::OptimizeGlobalAliases(Module &M) {
bool Changed = false;
@@ -3180,12 +3081,11 @@ bool GlobalOpt::OptimizeGlobalAliases(Module &M) {
bool hasOneUse = Target->hasOneUse() && Aliasee->hasOneUse();
// Make all users of the alias use the aliasee instead.
- if (replaceAllNonLLVMUsedUsesWith(J, Aliasee)) {
+ if (!J->use_empty()) {
+ J->replaceAllUsesWith(Aliasee);
++NumAliasesResolved;
Changed = true;
}
- if (!J->use_empty())
- continue;
// If the alias is externally visible, we may still be able to simplify it.
if (!J->hasLocalLinkage()) {
« no previous file with comments | « lib/Target/X86/X86Subtarget.cpp ('k') | lib/Transforms/InstCombine/InstCombineMulDivRem.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698