From 7d68c2604a2ed40c92c2c55380de9290631d042c Mon Sep 17 00:00:00 2001 From: Alexander Potapenko Date: Mon, 23 May 2016 13:58:04 +0000 Subject: [PATCH] [InlineAsm] Avoid creating extra string instances in ConstraintInfo::Parse() Don't create unnecessary std::string objects when pushing back to |pCodes|. NFC. llvm-svn: 270436 --- llvm/lib/IR/InlineAsm.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/llvm/lib/IR/InlineAsm.cpp b/llvm/lib/IR/InlineAsm.cpp index 15d3b830b8fc..d6cf8c543dbd 100644 --- a/llvm/lib/IR/InlineAsm.cpp +++ b/llvm/lib/IR/InlineAsm.cpp @@ -142,14 +142,14 @@ bool InlineAsm::ConstraintInfo::Parse(StringRef Str, // Find the end of the register name. StringRef::iterator ConstraintEnd = std::find(I+1, E, '}'); if (ConstraintEnd == E) return true; // "{foo" - pCodes->push_back(std::string(I, ConstraintEnd+1)); + pCodes->push_back(StringRef(I, ConstraintEnd+1 - I)); I = ConstraintEnd+1; } else if (isdigit(static_cast(*I))) { // Matching Constraint // Maximal munch numbers. StringRef::iterator NumStart = I; while (I != E && isdigit(static_cast(*I))) ++I; - pCodes->push_back(std::string(NumStart, I)); + pCodes->push_back(StringRef(NumStart, I - NumStart)); unsigned N = atoi(pCodes->back().c_str()); // Check that this is a valid matching constraint! if (N >= ConstraintsSoFar.size() || ConstraintsSoFar[N].Type != isOutput|| @@ -183,11 +183,11 @@ bool InlineAsm::ConstraintInfo::Parse(StringRef Str, } else if (*I == '^') { // Multi-letter constraint // FIXME: For now assuming these are 2-character constraints. - pCodes->push_back(std::string(I+1, I+3)); + pCodes->push_back(StringRef(I+1, 2)); I += 3; } else { // Single letter constraint. - pCodes->push_back(std::string(I, I+1)); + pCodes->push_back(StringRef(I, 1)); ++I; } }