[llvm] r270436 - [InlineAsm] Avoid creating extra string instances in ConstraintInfo::Parse()

Alexander Potapenko via llvm-commits llvm-commits at lists.llvm.org
Mon May 23 06:58:06 PDT 2016


Author: glider
Date: Mon May 23 08:58:04 2016
New Revision: 270436

URL: http://llvm.org/viewvc/llvm-project?rev=270436&view=rev
Log:
[InlineAsm] Avoid creating extra string instances in ConstraintInfo::Parse()

Don't create unnecessary std::string objects when pushing back to |pCodes|.
NFC.

Modified:
    llvm/trunk/lib/IR/InlineAsm.cpp

Modified: llvm/trunk/lib/IR/InlineAsm.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/InlineAsm.cpp?rev=270436&r1=270435&r2=270436&view=diff
==============================================================================
--- llvm/trunk/lib/IR/InlineAsm.cpp (original)
+++ llvm/trunk/lib/IR/InlineAsm.cpp Mon May 23 08:58:04 2016
@@ -142,14 +142,14 @@ bool InlineAsm::ConstraintInfo::Parse(St
       // 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<unsigned char>(*I))) { // Matching Constraint
       // Maximal munch numbers.
       StringRef::iterator NumStart = I;
       while (I != E && isdigit(static_cast<unsigned char>(*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(St
     } 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;
     }
   }




More information about the llvm-commits mailing list