Reserve the required capacity to avoid pointer invalidations for translation functions

--

PiperOrigin-RevId: 245992152
This commit is contained in:
Smit Hinsu 2019-04-30 11:53:00 -07:00 committed by Mehdi Amini
parent 0f89ef30b7
commit 0bd0571e72
1 changed files with 8 additions and 2 deletions

View File

@ -81,7 +81,13 @@ static llvm::SmallVector<TranslateFunction, 16> wrapperStorage;
struct TranslationParser : public llvm::cl::parser<const TranslateFunction *> {
TranslationParser(llvm::cl::Option &opt)
: llvm::cl::parser<const TranslateFunction *>(opt) {
for (const auto &kv : getTranslationToMLIRRegistry()) {
const auto &toMLIRRegistry = getTranslationToMLIRRegistry();
const auto &fromMLIRRegistry = getTranslationFromMLIRRegistry();
// Reserve the required capacity upfront so that pointers are not
// invalidated on reallocation.
wrapperStorage.reserve(toMLIRRegistry.size() + fromMLIRRegistry.size());
for (const auto &kv : toMLIRRegistry) {
TranslateToMLIRFunction function = kv.second;
TranslateFunction wrapper = [function](StringRef inputFilename,
StringRef outputFilename,
@ -95,7 +101,7 @@ struct TranslationParser : public llvm::cl::parser<const TranslateFunction *> {
addLiteralOption(kv.first(), &wrapperStorage.back(), kv.first());
}
for (const auto &kv : getTranslationFromMLIRRegistry()) {
for (const auto &kv : fromMLIRRegistry) {
TranslateFromMLIRFunction function = kv.second;
TranslateFunction wrapper = [function](StringRef inputFilename,
StringRef outputFilename,