Inline the postResolveValues method. It was poorly named anyway

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8976 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2003-10-08 21:51:46 +00:00
parent 1f9bcd3988
commit 6e44802ec0
2 changed files with 26 additions and 34 deletions

View File

@ -176,33 +176,6 @@ Constant *BytecodeParser::getConstantValue(const Type *Ty, unsigned Slot) {
} }
void BytecodeParser::postResolveValues(ValueTable &ValTab) {
while (!ValTab.empty()) {
ValueList &VL = *ValTab.back();
ValTab.pop_back();
while (!VL.empty()) {
Value *V = VL.back();
unsigned IDNumber = getValueIDNumberFromPlaceHolder(V);
VL.pop_back();
Value *NewVal = getValue(V->getType(), IDNumber, false);
if (NewVal == 0)
throw std::string("Unresolvable reference found: <" +
V->getType()->getDescription() + ">:" +
utostr(IDNumber) + ".");
// Fixup all of the uses of this placeholder def...
V->replaceAllUsesWith(NewVal);
// Now that all the uses are gone, delete the placeholder...
// If we couldn't find a def (error case), then leak a little
delete V; // memory, 'cause otherwise we can't remove all uses!
}
delete &VL;
}
}
std::auto_ptr<BasicBlock> std::auto_ptr<BasicBlock>
BytecodeParser::ParseBasicBlock(const unsigned char *&Buf, BytecodeParser::ParseBasicBlock(const unsigned char *&Buf,
const unsigned char *EndBuf) { const unsigned char *EndBuf) {
@ -381,9 +354,31 @@ void BytecodeParser::materializeFunction(Function* F) {
} }
// Check for unresolvable references // Check for unresolvable references
postResolveValues(LateResolveValues); while (!LateResolveValues.empty()) {
ValueList &VL = *LateResolveValues.back();
LateResolveValues.pop_back();
//ResolveReferencesToValue(F, FunctionSlot); while (!VL.empty()) {
Value *V = VL.back();
unsigned IDNumber = getValueIDNumberFromPlaceHolder(V);
VL.pop_back();
Value *NewVal = getValue(V->getType(), IDNumber, false);
if (NewVal == 0)
throw std::string("Unresolvable reference found: <" +
V->getType()->getDescription() + ">:" +
utostr(IDNumber) + ".");
// Fixup all of the uses of this placeholder def...
V->replaceAllUsesWith(NewVal);
// Now that all the uses are gone, delete the placeholder...
// If we couldn't find a def (error case), then leak a little
// memory, because otherwise we can't remove all uses!
delete V;
}
delete &VL;
}
// Clear out function-level types... // Clear out function-level types...
FunctionTypeValues.clear(); FunctionTypeValues.clear();

View File

@ -77,11 +77,9 @@ public:
std::cerr << "BytecodeParser instance!\n"; std::cerr << "BytecodeParser instance!\n";
} }
private: // All of this data is transient across calls to ParseBytecode private:
struct ValueList : public User { struct ValueList : public User {
ValueList() : User(Type::TypeTy, Value::TypeVal) { ValueList() : User(Type::TypeTy, Value::TypeVal) {}
}
~ValueList() {}
// vector compatibility methods // vector compatibility methods
unsigned size() const { return getNumOperands(); } unsigned size() const { return getNumOperands(); }
@ -185,7 +183,6 @@ private:
int insertValue(Value *V, ValueTable &Table); // -1 = Failure int insertValue(Value *V, ValueTable &Table); // -1 = Failure
void setValueTo(ValueTable &D, unsigned Slot, Value *V); void setValueTo(ValueTable &D, unsigned Slot, Value *V);
void postResolveValues(ValueTable &ValTab);
unsigned getTypeSlot(const Type *Ty); unsigned getTypeSlot(const Type *Ty);