mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-14 15:19:33 +00:00
Inline the postResolveValues method. It was poorly named anyway
llvm-svn: 8976
This commit is contained in:
parent
58114a907c
commit
c920c81739
lib/Bytecode/Reader
@ -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>
|
||||
BytecodeParser::ParseBasicBlock(const unsigned char *&Buf,
|
||||
const unsigned char *EndBuf) {
|
||||
@ -381,9 +354,31 @@ void BytecodeParser::materializeFunction(Function* F) {
|
||||
}
|
||||
|
||||
// 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...
|
||||
FunctionTypeValues.clear();
|
||||
|
@ -77,11 +77,9 @@ public:
|
||||
std::cerr << "BytecodeParser instance!\n";
|
||||
}
|
||||
|
||||
private: // All of this data is transient across calls to ParseBytecode
|
||||
private:
|
||||
struct ValueList : public User {
|
||||
ValueList() : User(Type::TypeTy, Value::TypeVal) {
|
||||
}
|
||||
~ValueList() {}
|
||||
ValueList() : User(Type::TypeTy, Value::TypeVal) {}
|
||||
|
||||
// vector compatibility methods
|
||||
unsigned size() const { return getNumOperands(); }
|
||||
@ -185,7 +183,6 @@ private:
|
||||
|
||||
int insertValue(Value *V, ValueTable &Table); // -1 = Failure
|
||||
void setValueTo(ValueTable &D, unsigned Slot, Value *V);
|
||||
void postResolveValues(ValueTable &ValTab);
|
||||
|
||||
unsigned getTypeSlot(const Type *Ty);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user