stop encoding type/value pairs when the type is implied by the value.

This shrinks the function block of kc++ from 1055K to 906K


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36816 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner
2007-05-06 00:00:00 +00:00
parent 2bf6e6a632
commit 7337ab9e92
3 changed files with 146 additions and 111 deletions

View File

@ -147,6 +147,34 @@ private:
return ParamAttrs[i-1];
return 0;
}
/// getValueTypePair - Read a value/type pair out of the specified record from
/// slot 'Slot'. Increment Slot past the number of slots used in the record.
/// Return true on failure.
bool getValueTypePair(SmallVector<uint64_t, 64> &Record, unsigned &Slot,
unsigned InstNum, Value *&ResVal) {
if (Slot == Record.size()) return true;
unsigned ValNo = Record[Slot++];
if (ValNo < InstNum) {
// If this is not a forward reference, just return the value we already
// have.
ResVal = getFnValueByID(ValNo, 0);
return ResVal == 0;
} else if (Slot == Record.size()) {
return true;
}
unsigned TypeNo = Record[Slot++];
ResVal = getFnValueByID(ValNo, getTypeByID(TypeNo));
return ResVal == 0;
}
bool getValue(SmallVector<uint64_t, 64> &Record, unsigned &Slot,
const Type *Ty, Value *&ResVal) {
if (Slot == Record.size()) return true;
unsigned ValNo = Record[Slot++];
ResVal = getFnValueByID(ValNo, Ty);
return ResVal == 0;
}
bool ParseModule(const std::string &ModuleID);