aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Transforms/IPO/FunctionResolution.cpp6
-rw-r--r--lib/Transforms/IPO/GlobalOpt.cpp20
2 files changed, 10 insertions, 16 deletions
diff --git a/lib/Transforms/IPO/FunctionResolution.cpp b/lib/Transforms/IPO/FunctionResolution.cpp
index b63d98c20d..090755b25c 100644
--- a/lib/Transforms/IPO/FunctionResolution.cpp
+++ b/lib/Transforms/IPO/FunctionResolution.cpp
@@ -98,11 +98,11 @@ static bool ResolveFunctions(Module &M, std::vector<GlobalValue*> &Globals,
// functions and that the Old function has no varargs fns specified. In
// otherwords it's just <retty> (...)
//
- if (!Old->use_empty()) { // Avoid making the CPR unless we really need it
+ if (!Old->use_empty()) {
Value *Replacement = Concrete;
if (Concrete->getType() != Old->getType())
- Replacement = ConstantExpr::getCast(Concrete,Old->getType());
- NumResolved += Old->use_size();
+ Replacement = ConstantExpr::getCast(Concrete, Old->getType());
+ NumResolved += Old->getNumUses();
Old->replaceAllUsesWith(Replacement);
}
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp
index 1068052f1c..f2c9647e13 100644
--- a/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/lib/Transforms/IPO/GlobalOpt.cpp
@@ -361,7 +361,8 @@ static GlobalVariable *SRAGlobal(GlobalVariable *GV) {
else
assert(0 && "Unknown aggregate sequential type!");
- if (NumElements > 16 && GV->use_size() > 16) return 0; // It's not worth it.
+ if (NumElements > 16 && GV->getNumUses() > 16)
+ return 0; // It's not worth it.
NewGlobals.reserve(NumElements);
for (unsigned i = 0, e = NumElements; i != e; ++i) {
Constant *In = getAggregateConstantElement(Init,
@@ -614,17 +615,11 @@ static void ConstantPropUsersOf(Value *V) {
if (Constant *NewC = ConstantFoldInstruction(I)) {
I->replaceAllUsesWith(NewC);
- // Back up UI to avoid invalidating it!
- bool AtBegin = false;
- if (UI == V->use_begin())
- AtBegin = true;
- else
- --UI;
- I->eraseFromParent();
- if (AtBegin)
- UI = V->use_begin();
- else
+ // Advance UI to the next non-I use to avoid invalidating it!
+ // Instructions could multiply use V.
+ while (UI != E && *UI == I)
++UI;
+ I->eraseFromParent();
}
}
@@ -683,8 +678,7 @@ static GlobalVariable *OptimizeGlobalAddressOfMalloc(GlobalVariable *GV,
while (!GV->use_empty())
if (LoadInst *LI = dyn_cast<LoadInst>(GV->use_back())) {
while (!LI->use_empty()) {
- // FIXME: the iterator should expose a getUse() method.
- Use &LoadUse = *(const iplist<Use>::iterator&)LI->use_begin();
+ Use &LoadUse = LI->use_begin().getUse();
if (!isa<SetCondInst>(LoadUse.getUser()))
LoadUse = RepValue;
else {