summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2016-04-23 04:42:39 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2016-04-23 04:42:39 +0000
commit1483fff271d01ee16c55c0a4c678aac9fde45951 (patch)
treea428659a633b9cfe3ba5221674056e3bedb3d198 /llvm/test
parent004eb55feb1f0a44afe462b48061c9b1ab78eab0 (diff)
downloadbcm5719-llvm-1483fff271d01ee16c55c0a4c678aac9fde45951.tar.gz
bcm5719-llvm-1483fff271d01ee16c55c0a4c678aac9fde45951.zip
BitcodeWriter: Emit distinct nodes before uniqued nodes
When an operand of a distinct node hasn't been read yet, the reader can use a DistinctMDOperandPlaceholder. This is much cheaper than forward referencing from a uniqued node. Change ValueEnumerator::organizeMetadata to partition distinct nodes and uniqued nodes to reduce the overhead of cycles broken by distinct nodes. Mehdi measured this for me; this removes most of the RAUW from the importing step of -flto=thin, even after a WIP patch that removes string-based DITypeRefs (introducing many more cycles to the metadata graph). llvm-svn: 267276
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Bitcode/mdnodes-distinct-nodes-first.ll18
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/test/Bitcode/mdnodes-distinct-nodes-first.ll b/llvm/test/Bitcode/mdnodes-distinct-nodes-first.ll
new file mode 100644
index 00000000000..1d146817e6b
--- /dev/null
+++ b/llvm/test/Bitcode/mdnodes-distinct-nodes-first.ll
@@ -0,0 +1,18 @@
+; RUN: llvm-as <%s | llvm-bcanalyzer -dump | FileCheck %s
+; Check that distinct nodes are emitted before uniqued nodes, even if that
+; breaks post-order traversals.
+
+; Nodes in this testcase are numbered to match how they are referenced in
+; bitcode. !1 is referenced as opN=1.
+
+; CHECK: <DISTINCT_NODE op0=2/>
+!1 = distinct !{!2}
+
+; CHECK-NEXT: <NODE op0=1/>
+!2 = !{!1}
+
+; Note: named metadata nodes are not cannot reference null so their operands
+; are numbered off-by-one.
+; CHECK-NEXT: <NAME
+; CHECK-NEXT: <NAMED_NODE op0=1/>
+!named = !{!2}
OpenPOWER on IntegriCloud