summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/StringSaver.cpp
diff options
context:
space:
mode:
authorSam McCall <sam.mccall@gmail.com>2018-07-23 10:44:40 +0000
committerSam McCall <sam.mccall@gmail.com>2018-07-23 10:44:40 +0000
commit4bb7883d097f324d8c1d5f9f50e09c7471340abe (patch)
treeb909789a69f397d7ffc1e0f55cc7481eee01fe77 /llvm/lib/Support/StringSaver.cpp
parent52b85377eb60a41241dc107994eec56215b7f9af (diff)
downloadbcm5719-llvm-4bb7883d097f324d8c1d5f9f50e09c7471340abe.tar.gz
bcm5719-llvm-4bb7883d097f324d8c1d5f9f50e09c7471340abe.zip
[Support] Add a UniqueStringSaver: like StringSaver, but deduplicating.
Summary: Clarify contract of StringSaver (it null-terminates, callers rely on it). Reviewers: hokein Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D49596 llvm-svn: 337677
Diffstat (limited to 'llvm/lib/Support/StringSaver.cpp')
-rw-r--r--llvm/lib/Support/StringSaver.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Support/StringSaver.cpp b/llvm/lib/Support/StringSaver.cpp
index 335fce3a7bb..1ded2bdb09d 100644
--- a/llvm/lib/Support/StringSaver.cpp
+++ b/llvm/lib/Support/StringSaver.cpp
@@ -17,3 +17,10 @@ StringRef StringSaver::save(StringRef S) {
P[S.size()] = '\0';
return StringRef(P, S.size());
}
+
+StringRef UniqueStringSaver::save(StringRef S) {
+ auto R = Unique.insert(S);
+ if (R.second) // cache miss, need to actually save the string
+ *R.first = Strings.save(S); // safe replacement with equal value
+ return *R.first;
+}
OpenPOWER on IntegriCloud