summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2016-04-20 20:14:09 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2016-04-20 20:14:09 +0000
commit3c406c2da52302eb5cced431373f240b9c037841 (patch)
tree0036fa3b9a770cedd54db3a83bfd890cb2799c2a /llvm/lib/Bitcode/Reader/BitcodeReader.cpp
parent07320e403001cc192f8565d77001d281d41f4572 (diff)
downloadbcm5719-llvm-3c406c2da52302eb5cced431373f240b9c037841.tar.gz
bcm5719-llvm-3c406c2da52302eb5cced431373f240b9c037841.zip
IR: Use SmallVector instead of std::vector of TrackingMDRef
Don't use std::vector<TrackingMDRef>, since (at least in some versions of libc++) std::vector apparently copies values on grow operations instead of moving them. Found this when I was temporarily deleting the copy constructor for TrackingMDRef to investigate a performance bottleneck. llvm-svn: 266909
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index 9c65eecad81..ae1f98f0fd6 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -107,7 +107,12 @@ class BitcodeReaderMetadataList {
bool AnyFwdRefs;
unsigned MinFwdRef;
unsigned MaxFwdRef;
- std::vector<TrackingMDRef> MetadataPtrs;
+
+ /// Array of metadata references.
+ ///
+ /// Don't use std::vector here. Some versions of libc++ copy (instead of
+ /// move) on resize, and TrackingMDRef is very expensive to copy.
+ SmallVector<TrackingMDRef, 1> MetadataPtrs;
LLVMContext &Context;
public:
OpenPOWER on IntegriCloud