Fix the optimized code handling of user asm strings


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24296 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/VMCore/Mangler.cpp b/lib/VMCore/Mangler.cpp
index 264b84c..5257ca1 100644
--- a/lib/VMCore/Mangler.cpp
+++ b/lib/VMCore/Mangler.cpp
@@ -54,13 +54,10 @@
   } 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 @@
         }
     
     // 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_";