Change encoding of instruction operands in bitcode binaries to be relative
authorJan Wen Voung <jvoung@google.com>
Thu, 11 Oct 2012 20:20:40 +0000 (20:20 +0000)
committerJan Wen Voung <jvoung@google.com>
Thu, 11 Oct 2012 20:20:40 +0000 (20:20 +0000)
commitd9a3bad4487dee0b9ed1a0f5555dffe605826158
tree27a95548da86ff096537f0d7ee9cae21404a7ecd
parent81eb88f7d2a33a1ef1f5b3b6dea14415593f6544
Change encoding of instruction operands in bitcode binaries to be relative
to the instruction position.  The old encoding would give an absolute
ID which counts up within a function, and only resets at the next function.

I.e., Instead of having:

... = icmp eq i32 n-1, n-2
br i1 ..., label %bb1, label %bb2

it will now be roughly:

... = icmp eq i32 1, 2
br i1 1, label %bb1, label %bb2

This makes it so that ids remain relatively small and can be encoded
in fewer bits.

With this encoding, forward reference operands will be given
negative-valued IDs.  Use signed VBRs for the most common case
of forward references, which is phi instructions.

To retain backward compatibility we bump the bitcode version
from 0 to 1 to distinguish between the different encodings.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165739 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Bitcode/BitstreamReader.h
lib/Bitcode/Reader/BitcodeReader.cpp
lib/Bitcode/Reader/BitcodeReader.h
lib/Bitcode/Writer/BitcodeWriter.cpp
test/Bitcode/function-encoding-rel-operands.ll [new file with mode: 0644]