Who calls getAsString? I just noticed it's using a std::stringstream again, which has terrible performance. One of the biggest improvements i made originally was converting stringstream operations to llvm streams.<br><br>Is it possible to change this function to not return a std::string but to instead accept a llvm::raw_ostream&?<br><div class="gmail_quote"><div dir="ltr">On Fri, Sep 22, 2017 at 5:22 AM Simon Pilgrim via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">RKSimon created this revision.<br>
<br>
Avoid unnecessary std::string creations during TypeSetByHwMode::writeToStream.<br>
<br>
Found during investigations into PR28222<br>
<br>
<br>
Repository:<br>
rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D38174" rel="noreferrer" target="_blank">https://reviews.llvm.org/D38174</a><br>
<br>
Files:<br>
utils/TableGen/InfoByHwMode.cpp<br>
utils/TableGen/InfoByHwMode.h<br>
<br>
<br>
Index: utils/TableGen/InfoByHwMode.h<br>
===================================================================<br>
--- utils/TableGen/InfoByHwMode.h<br>
+++ utils/TableGen/InfoByHwMode.h<br>
@@ -129,7 +129,7 @@<br>
MVT getType(unsigned Mode) const { return get(Mode); }<br>
MVT &getOrCreateTypeForMode(unsigned Mode, MVT Type);<br>
<br>
- static std::string getMVTName(MVT T);<br>
+ static StringRef getMVTName(MVT T);<br>
std::string getAsString() const;<br>
void dump() const;<br>
};<br>
Index: utils/TableGen/InfoByHwMode.cpp<br>
===================================================================<br>
--- utils/TableGen/InfoByHwMode.cpp<br>
+++ utils/TableGen/InfoByHwMode.cpp<br>
@@ -70,10 +70,9 @@<br>
return Map.insert(std::make_pair(Mode, Type)).first->second;<br>
}<br>
<br>
-std::string ValueTypeByHwMode::getMVTName(MVT T) {<br>
- std::string N = llvm::getEnumName(T.SimpleTy);<br>
- if (N.substr(0,5) == "MVT::")<br>
- N = N.substr(5);<br>
+StringRef ValueTypeByHwMode::getMVTName(MVT T) {<br>
+ StringRef N = llvm::getEnumName(T.SimpleTy);<br>
+ N.consume_front("MVT::");<br>
return N;<br>
}<br>
<br>
@@ -91,7 +90,7 @@<br>
for (unsigned i = 0, e = Pairs.size(); i != e; ++i) {<br>
const PairType *P = Pairs[i];<br>
str << '(' << getModeName(P->first)<br>
- << ':' << getMVTName(P->second) << ')';<br>
+ << ':' << getMVTName(P->second).str() << ')';<br>
if (i != e-1)<br>
str << ',';<br>
}<br>
<br>
<br>
</blockquote></div>