// 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);
}
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,
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();
}
}
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 {