diff options
author | Mehdi Amini <mehdi.amini@apple.com> | 2016-12-28 22:30:28 +0000 |
---|---|---|
committer | Mehdi Amini <mehdi.amini@apple.com> | 2016-12-28 22:30:28 +0000 |
commit | e98f9258349aeb8414a556326aeee8ba94a7c839 (patch) | |
tree | c89aa70009bc765d95ba8f43d3950b469b49930f /llvm/test/Bitcode/mdnodes-in-post-order.ll | |
parent | c0e82d6bfce5e2fc9bc65ada9930f5099315b8aa (diff) | |
download | bcm5719-llvm-e98f9258349aeb8414a556326aeee8ba94a7c839.tar.gz bcm5719-llvm-e98f9258349aeb8414a556326aeee8ba94a7c839.zip |
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
llvm-svn: 290690
Diffstat (limited to 'llvm/test/Bitcode/mdnodes-in-post-order.ll')
-rw-r--r-- | llvm/test/Bitcode/mdnodes-in-post-order.ll | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/llvm/test/Bitcode/mdnodes-in-post-order.ll b/llvm/test/Bitcode/mdnodes-in-post-order.ll index fbe1c34cf00..3ab90e85821 100644 --- a/llvm/test/Bitcode/mdnodes-in-post-order.ll +++ b/llvm/test/Bitcode/mdnodes-in-post-order.ll @@ -1,4 +1,4 @@ -; RUN: llvm-as <%s | llvm-bcanalyzer -dump | FileCheck %s +; RUN: llvm-as <%s -bitcode-mdindex-threshold=0 | llvm-bcanalyzer -dump | FileCheck %s ; Check that nodes are emitted in post-order to minimize the need for temporary ; nodes. The graph structure is designed to foil naive implementations of ; iteratitive post-order traersals: the leaves, !3 and !4, are reachable from @@ -15,6 +15,9 @@ ; CHECK-NEXT: 'leaf ; CHECK-NEXT: } +; Before the records we emit an offset to the index for the block +; CHECK-NEXT: <INDEX_OFFSET + ; The leafs should come first (in either order). ; CHECK-NEXT: <NODE op0=1/> ; CHECK-NEXT: <NODE op0=2/> @@ -27,6 +30,10 @@ ; CHECK-NEXT: <NODE op0=3 op1=5 op2=4/> !6 = !{!3, !5, !4} +; Before the named records we emit the index containing the position of the +; previously emitted records +; CHECK-NEXT: <INDEX {{.*}} (offset match) + ; Note: named metadata nodes are not cannot reference null so their operands ; are numbered off-by-one. ; CHECK-NEXT: <NAME |