OSDN Git Service

Add an index for Module Metadata record in the bitcode
authorMehdi Amini <mehdi.amini@apple.com>
Wed, 28 Dec 2016 22:30:28 +0000 (22:30 +0000)
committerMehdi Amini <mehdi.amini@apple.com>
Wed, 28 Dec 2016 22:30:28 +0000 (22:30 +0000)
commit89bf9692cc954b29de3360d129d80988b64cf559
treeb6223f5c63117a7f2ee103a73bcac630b08190a5
parent0ece61756a2d3ee2b951afd73d3da62dfc506d08
Add an index for Module Metadata record in the bitcode

This index record the position for each metadata record in
the bitcode, so that the reader will be able to lazy-load
on demand each individual record.

We also make sure that every abbrev is emitted upfront so
that the block can be skipped while reading.

I don't plan to commit this before having the reader
counterpart, but I figured this can be reviewed mostly
independently.

Recommit r290684 (was reverted in r290686 because a test
was broken) after adding a threshold to avoid emitting
the index when unnecessary (little amount of metadata).
This optimization "hides" a limitation of the ability
to backpatch in the bitstream: we can only backpatch
safely when the position has been flushed. So if we emit
an index for one metadata, it is possible that (part of)
the offset placeholder hasn't been flushed and the backpatch
will fail.

Differential Revision: https://reviews.llvm.org/D28083

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290690 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Bitcode/BitstreamWriter.h
include/llvm/Bitcode/LLVMBitCodes.h
lib/Bitcode/Writer/BitcodeWriter.cpp
test/Bitcode/mdnodes-distinct-in-post-order.ll
test/Bitcode/mdnodes-distinct-nodes-break-cycles.ll
test/Bitcode/mdnodes-distinct-nodes-first.ll
test/Bitcode/mdnodes-in-post-order.ll
test/Bitcode/metadata-function-blocks.ll
tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp