diff options
author | Chris Lattner <sabre@nondot.org> | 2007-05-06 00:00:00 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-05-06 00:00:00 +0000 |
commit | 7337ab9e929a4a787f90d37ee0ed8f4cc27170ab (patch) | |
tree | 1720043850cf97a6f7dfbd20ac650d87287c5693 /lib/Bitcode/Reader/BitcodeReader.h | |
parent | 2bf6e6a632b445b363707f99aa35ca304e7a9176 (diff) |
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
Diffstat (limited to 'lib/Bitcode/Reader/BitcodeReader.h')
-rw-r--r-- | lib/Bitcode/Reader/BitcodeReader.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/Bitcode/Reader/BitcodeReader.h b/lib/Bitcode/Reader/BitcodeReader.h index 44d69a6eca..2dcce0b6a8 100644 --- a/lib/Bitcode/Reader/BitcodeReader.h +++ b/lib/Bitcode/Reader/BitcodeReader.h @@ -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); |