Fix the optimized code handling of user asm strings
authorChris Lattner <sabre@nondot.org>
Thu, 10 Nov 2005 23:24:26 +0000 (23:24 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 10 Nov 2005 23:24:26 +0000 (23:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24296 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Mangler.cpp

index 264b84c6fe34bff1d8c7a9bbafc735354de3149c..5257ca13a0c08a5a0f4c6fe32185edf2fcb23a46 100644 (file)
@@ -54,13 +54,10 @@ std::string Mangler::makeNameProper(const std::string &X, const char *Prefix) {
   } else {
     bool NeedsQuotes = false;
     
-    // If X does not start with (char)1, add the prefix.
     std::string::const_iterator I = X.begin();
-    if (*I != 1)
-      Result = Prefix;
-    else
+    if (*I == 1)
       ++I;  // Skip over the marker.
-    
+
     // If the first character is a number, we need quotes.
     if (*I >= '0' && *I <= '9')
       NeedsQuotes = true;
@@ -75,12 +72,22 @@ std::string Mangler::makeNameProper(const std::string &X, const char *Prefix) {
         }
     
     // In the common case, we don't need quotes.  Handle this quickly.
-    if (!NeedsQuotes)
-      return Result + X;
+    if (!NeedsQuotes) {
+      if (*X.begin() != 1)
+        return Prefix+X;
+      else
+        return X.substr(1);
+    }
     
     // Otherwise, construct the string the expensive way.
     I = X.begin();
-    if (*I == 1) ++I;   // Skip the marker if present.
+    
+    // If X does not start with (char)1, add the prefix.
+    if (*I != 1)
+      Result = Prefix;
+    else
+      ++I;   // Skip the marker if present.
+      
     for (std::string::const_iterator E = X.end(); I != E; ++I) {
       if (*I == '"')
         Result += "_QQ_";