mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-15 22:28:18 +00:00
Hacks to make this ugly ugly code work with the new use lists.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19957 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -539,13 +539,14 @@ Value *llvm::ConvertExpressionToType(Value *V, const Type *Ty,
|
|||||||
VMC.ExprMap[I] = Res;
|
VMC.ExprMap[I] = Res;
|
||||||
|
|
||||||
|
|
||||||
unsigned NumUses = I->use_size();
|
//// WTF is this code! FIXME: remove this.
|
||||||
|
unsigned NumUses = I->getNumUses();
|
||||||
for (unsigned It = 0; It < NumUses; ) {
|
for (unsigned It = 0; It < NumUses; ) {
|
||||||
unsigned OldSize = NumUses;
|
unsigned OldSize = NumUses;
|
||||||
Value::use_iterator UI = I->use_begin();
|
Value::use_iterator UI = I->use_begin();
|
||||||
std::advance(UI, It);
|
std::advance(UI, It);
|
||||||
ConvertOperandToType(*UI, I, Res, VMC, TD);
|
ConvertOperandToType(*UI, I, Res, VMC, TD);
|
||||||
NumUses = I->use_size();
|
NumUses = I->getNumUses();
|
||||||
if (NumUses == OldSize) ++It;
|
if (NumUses == OldSize) ++It;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -898,13 +899,14 @@ void llvm::ConvertValueToNewType(Value *V, Value *NewVal, ValueMapCache &VMC,
|
|||||||
const TargetData &TD) {
|
const TargetData &TD) {
|
||||||
ValueHandle VH(VMC, V);
|
ValueHandle VH(VMC, V);
|
||||||
|
|
||||||
unsigned NumUses = V->use_size();
|
// FIXME: This is horrible!
|
||||||
|
unsigned NumUses = V->getNumUses();
|
||||||
for (unsigned It = 0; It < NumUses; ) {
|
for (unsigned It = 0; It < NumUses; ) {
|
||||||
unsigned OldSize = NumUses;
|
unsigned OldSize = NumUses;
|
||||||
Value::use_iterator UI = V->use_begin();
|
Value::use_iterator UI = V->use_begin();
|
||||||
std::advance(UI, It);
|
std::advance(UI, It);
|
||||||
ConvertOperandToType(*UI, V, NewVal, VMC, TD);
|
ConvertOperandToType(*UI, V, NewVal, VMC, TD);
|
||||||
NumUses = V->use_size();
|
NumUses = V->getNumUses();
|
||||||
if (NumUses == OldSize) ++It;
|
if (NumUses == OldSize) ++It;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1237,22 +1239,15 @@ static void ConvertOperandToType(User *U, Value *OldVal, Value *NewVal,
|
|||||||
if (I->getType() != Res->getType())
|
if (I->getType() != Res->getType())
|
||||||
ConvertValueToNewType(I, Res, VMC, TD);
|
ConvertValueToNewType(I, Res, VMC, TD);
|
||||||
else {
|
else {
|
||||||
bool FromStart = true;
|
for (Value::use_iterator UI = I->use_begin(), E = I->use_end();
|
||||||
Value::use_iterator UI;
|
UI != E; )
|
||||||
while (1) {
|
|
||||||
if (FromStart) UI = I->use_begin();
|
|
||||||
if (UI == I->use_end()) break;
|
|
||||||
|
|
||||||
if (isa<ValueHandle>(*UI)) {
|
if (isa<ValueHandle>(*UI)) {
|
||||||
++UI;
|
++UI;
|
||||||
FromStart = false;
|
|
||||||
} else {
|
} else {
|
||||||
User *U = *UI;
|
Use &U = UI.getUse();
|
||||||
if (!FromStart) --UI;
|
++UI; // Do not invalidate UI.
|
||||||
U->replaceUsesOfWith(I, Res);
|
U.set(Res);
|
||||||
if (!FromStart) ++UI;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1301,7 +1296,7 @@ ValueHandle::~ValueHandle() {
|
|||||||
RecursiveDelete(Cache, dyn_cast<Instruction>(V));
|
RecursiveDelete(Cache, dyn_cast<Instruction>(V));
|
||||||
} else {
|
} else {
|
||||||
//DEBUG(std::cerr << "VH RELEASING: " << (void*)Operands[0].get() << " "
|
//DEBUG(std::cerr << "VH RELEASING: " << (void*)Operands[0].get() << " "
|
||||||
// << Operands[0]->use_size() << " " << Operands[0]);
|
// << Operands[0]->getNumUses() << " " << Operands[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user