diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 6238d16..55ff0b7 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -339,8 +339,8 @@
         << CPI << ':';
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
-        O << TAI->getCommentString() << ' ';
-        WriteTypeSymbolic(O, CPE.getType(), 0);
+        O << TAI->getCommentString() << " constant ";
+        WriteTypeSymbolic(O, CPE.getType(), MF->getFunction()->getParent());
       }
       O << '\n';
       if (CPE.isMachineConstantPoolEntry())
@@ -1024,7 +1024,7 @@
       O << TAI->getData64bitsDirective(AddrSpace) << i;
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
-        O << TAI->getCommentString() << " double value: " << Val;
+        O << TAI->getCommentString() << " double " << Val;
       }
       O << '\n';
     } else if (TD->isBigEndian()) {
@@ -1032,14 +1032,14 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " double most significant word " << Val;
+          << " most significant word of double " << Val;
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << unsigned(i);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " double least significant word " << Val;
+          << " least significant word of double " << Val;
       }
       O << '\n';
     } else {
@@ -1047,14 +1047,14 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " double least significant word " << Val;
+          << " least significant word of double " << Val;
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << unsigned(i >> 32);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " double most significant word " << Val;
+          << " most significant word of double " << Val;
       }
       O << '\n';
     }
@@ -1084,33 +1084,33 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double most significant halfword of ~"
+          << " most significant halfword of x86_fp80 ~"
           << DoubleVal.convertToDouble();
       }
       O << '\n';
       O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
-        O << TAI->getCommentString() << " long double next halfword";
+        O << TAI->getCommentString() << " next halfword";
       }
       O << '\n';
       O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
-        O << TAI->getCommentString() << " long double next halfword";
+        O << TAI->getCommentString() << " next halfword";
       }
       O << '\n';
       O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 16);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
-        O << TAI->getCommentString() << " long double next halfword";
+        O << TAI->getCommentString() << " next halfword";
       }
       O << '\n';
       O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0]);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double least significant halfword";
+          << " least significant halfword";
       }
       O << '\n';
      } else {
@@ -1118,7 +1118,7 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double least significant halfword of ~"
+          << " least significant halfword of x86_fp80 ~"
           << DoubleVal.convertToDouble();
       }
       O << '\n';
@@ -1126,28 +1126,28 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double next halfword";
+          << " next halfword";
       }
       O << '\n';
       O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 32);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double next halfword";
+          << " next halfword";
       }
       O << '\n';
       O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[0] >> 48);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double next halfword";
+          << " next halfword";
       }
       O << '\n';
       O << TAI->getData16bitsDirective(AddrSpace) << uint16_t(p[1]);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double most significant halfword";
+          << " most significant halfword";
       }
       O << '\n';
     }
@@ -1164,28 +1164,28 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double most significant word";
+          << " most significant word of ppc_fp128";
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0]);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-        << " long double next word";
+        << " next word";
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1] >> 32);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double next word";
+          << " next word";
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1]);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double least significant word";
+          << " least significant word";
       }
       O << '\n';
      } else {
@@ -1193,28 +1193,28 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double least significant word";
+          << " least significant word of ppc_fp128";
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[1] >> 32);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double next word";
+          << " next word";
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0]);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double next word";
+          << " next word";
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << uint32_t(p[0] >> 32);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " long double most significant word";
+          << " most significant word";
       }
       O << '\n';
     }
@@ -1247,14 +1247,14 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " Double-word most significant word " << Val;
+          << " most significant half of i64 " << Val;
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << unsigned(Val);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " Double-word least significant word " << Val;
+          << " least significant half of i64 " << Val;
       }
       O << '\n';
     } else {
@@ -1262,14 +1262,14 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " Double-word least significant word " << Val;
+          << " least significant half of i64 " << Val;
       }
       O << '\n';
       O << TAI->getData32bitsDirective(AddrSpace) << unsigned(Val >> 32);
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString()
-          << " Double-word most significant word " << Val;
+          << " most significant half of i64 " << Val;
       }
       O << '\n';
     }
diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
index d527485..178b7a2 100644
--- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
+++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
@@ -21,6 +21,7 @@
 #include "ARMMachineFunctionInfo.h"
 #include "llvm/Constants.h"
 #include "llvm/Module.h"
+#include "llvm/Assembly/Writer.h"
 #include "llvm/CodeGen/AsmPrinter.h"
 #include "llvm/CodeGen/DwarfWriter.h"
 #include "llvm/CodeGen/MachineModuleInfo.h"
@@ -1128,16 +1129,6 @@
   return Result;
 }
 
-/// PrintUnmangledNameSafely - Print out the printable characters in the name.
-/// Don't print things like \\n or \\0.
-static void PrintUnmangledNameSafely(const Value *V, 
-                                     formatted_raw_ostream &OS) {
-  for (StringRef::iterator it = V->getName().begin(), 
-         ie = V->getName().end(); it != ie; ++it)
-    if (isprint(*it))
-      OS << *it;
-}
-
 void ARMAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
   const TargetData *TD = TM.getTargetData();
 
@@ -1204,7 +1195,7 @@
           O << name << ":";
           if (VerboseAsm) {
             O << "\t\t\t\t" << TAI->getCommentString() << ' ';
-            PrintUnmangledNameSafely(GVar, O);
+            WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
           }
           O << '\n';
           EmitGlobalConstant(C);
@@ -1227,7 +1218,7 @@
       }
       if (VerboseAsm) {
         O << "\t\t" << TAI->getCommentString() << " ";
-        PrintUnmangledNameSafely(GVar, O);
+        WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
       }
       O << "\n";
       return;
@@ -1265,7 +1256,7 @@
   O << name << ":";
   if (VerboseAsm) {
     O << "\t\t\t\t" << TAI->getCommentString() << " ";
-    PrintUnmangledNameSafely(GVar, O);
+    WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
   }
   O << "\n";
   if (TAI->hasDotTypeDotSizeDirective())
diff --git a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
index 0fd485a..3efcc92 100644
--- a/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
+++ b/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp
@@ -487,16 +487,6 @@
   return Result;
 }
 
-/// PrintUnmangledNameSafely - Print out the printable characters in the name.
-/// Don't print things like \\n or \\0.
-static void PrintUnmangledNameSafely(const Value *V, 
-                                     formatted_raw_ostream &OS) {
-  for (StringRef::iterator it = V->getName().begin(), 
-         ie = V->getName().end(); it != ie; ++it)
-    if (isprint(*it))
-      OS << *it;
-}
-
 /*!
   Emit a global variable according to its section, alignment, etc.
 
@@ -541,7 +531,7 @@
         O << ".comm " << name << ',' << Size;
       }
       O << "\t\t" << TAI->getCommentString() << " '";
-      PrintUnmangledNameSafely(GVar, O);
+      WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
       O << "'\n";
       return;
   }
@@ -575,7 +565,7 @@
 
   EmitAlignment(Align, GVar);
   O << name << ":\t\t\t\t" << TAI->getCommentString() << " '";
-  PrintUnmangledNameSafely(GVar, O);
+  WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
   O << "'\n";
 
   EmitGlobalConstant(C);
diff --git a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
index dce379e..e024b75 100644
--- a/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
+++ b/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
@@ -646,16 +646,6 @@
   return false;
 }
 
-/// PrintUnmangledNameSafely - Print out the printable characters in the name.
-/// Don't print things like \\n or \\0.
-static void PrintUnmangledNameSafely(const Value *V, 
-                                     formatted_raw_ostream &OS) {
-  for (StringRef::iterator it = V->getName().begin(), 
-         ie = V->getName().end(); it != ie; ++it)
-    if (isprint(*it))
-      OS << *it;
-}
-
 void PPCLinuxAsmPrinter::PrintGlobalVariable(const GlobalVariable *GVar) {
   const TargetData *TD = TM.getTargetData();
 
@@ -695,7 +685,7 @@
       }
       if (VerboseAsm) {
         O << "\t\t" << TAI->getCommentString() << " '";
-        PrintUnmangledNameSafely(GVar, O);
+        WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
         O << "'";
       }
       O << '\n';
@@ -732,7 +722,7 @@
   O << name << ":";
   if (VerboseAsm) {
     O << "\t\t\t\t" << TAI->getCommentString() << " '";
-    PrintUnmangledNameSafely(GVar, O);
+    WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
     O << "'";
   }
   O << '\n';
@@ -916,7 +906,7 @@
       O << name << ":";
       if (VerboseAsm) {
         O << "\t\t\t\t" << TAI->getCommentString() << " ";
-        PrintUnmangledNameSafely(GVar, O);
+        WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
       }
       O << '\n';
       EmitGlobalConstant(C);
@@ -929,7 +919,7 @@
     }
     if (VerboseAsm) {
       O << "\t\t" << TAI->getCommentString() << " '";
-      PrintUnmangledNameSafely(GVar, O);
+      WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
       O << "'";
     }
     O << '\n';
@@ -964,7 +954,7 @@
   O << name << ":";
   if (VerboseAsm) {
     O << "\t\t\t\t" << TAI->getCommentString() << " '";
-    PrintUnmangledNameSafely(GVar, O);
+    WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
     O << "'";
   }
   O << '\n';
diff --git a/lib/Target/SystemZ/AsmPrinter/SystemZAsmPrinter.cpp b/lib/Target/SystemZ/AsmPrinter/SystemZAsmPrinter.cpp
index 00ebf4c..de6ff96 100644
--- a/lib/Target/SystemZ/AsmPrinter/SystemZAsmPrinter.cpp
+++ b/lib/Target/SystemZ/AsmPrinter/SystemZAsmPrinter.cpp
@@ -19,6 +19,7 @@
 #include "llvm/Constants.h"
 #include "llvm/DerivedTypes.h"
 #include "llvm/Module.h"
+#include "llvm/Assembly/Writer.h"
 #include "llvm/CodeGen/AsmPrinter.h"
 #include "llvm/CodeGen/DwarfWriter.h"
 #include "llvm/CodeGen/MachineModuleInfo.h"
@@ -297,16 +298,6 @@
     assert(!Index.getReg() && "Should allocate base register first!");
 }
 
-/// PrintUnmangledNameSafely - Print out the printable characters in the name.
-/// Don't print things like \\n or \\0.
-static void PrintUnmangledNameSafely(const Value *V, 
-                                     formatted_raw_ostream &OS) {
-  for (StringRef::iterator it = V->getName().begin(), 
-         ie = V->getName().end(); it != ie; ++it)
-    if (isprint(*it))
-      OS << *it;
-}
-
 void SystemZAsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
   const TargetData *TD = TM.getTargetData();
 
@@ -343,7 +334,7 @@
 
     if (VerboseAsm) {
       O << "\t\t" << TAI->getCommentString() << ' ';
-      PrintUnmangledNameSafely(GVar, O);
+      WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
     }
     O << '\n';
     return;
@@ -378,7 +369,7 @@
   O << name << ":";
   if (VerboseAsm) {
     O << "\t\t\t\t" << TAI->getCommentString() << ' ';
-    PrintUnmangledNameSafely(GVar, O);
+    WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
   }
   O << '\n';
   if (TAI->hasDotTypeDotSizeDirective())
diff --git a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
index 31a979d..ae5f59e 100644
--- a/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
+++ b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
@@ -26,6 +26,7 @@
 #include "llvm/Type.h"
 #include "llvm/ADT/Statistic.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/Assembly/Writer.h"
 #include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCInst.h"
 #include "llvm/MC/MCSectionMachO.h"
@@ -59,16 +60,6 @@
     llvm_unreachable("Don't know how to print PIC label!");
 }
 
-/// PrintUnmangledNameSafely - Print out the printable characters in the name.
-/// Don't print things like \\n or \\0.
-static void PrintUnmangledNameSafely(const Value *V, 
-                                     formatted_raw_ostream &OS) {
-  for (StringRef::iterator it = V->getName().begin(), 
-         ie = V->getName().end(); it != ie; ++it)
-    if (isprint(*it))
-      OS << *it;
-}
-
 static X86MachineFunctionInfo calculateFunctionInfo(const Function *F,
                                                     const TargetData *TD) {
   X86MachineFunctionInfo Info;
@@ -208,7 +199,14 @@
       << ";\t.endef\n";
   }
 
-  O << CurrentFnName << ":\n";
+  O << CurrentFnName << ':';
+  if (VerboseAsm) {
+    O.PadToColumn(TAI->getCommentColumn(), 1);
+    O << TAI->getCommentString() << ' ';
+    WriteAsOperand(O, F, /*PrintType=*/false, F->getParent());
+  }
+  O << '\n';
+
   // Add some workaround for linkonce linkage on Cygwin\MinGW
   if (Subtarget->isTargetCygMing() &&
       (F->hasLinkOnceLinkage() || F->hasWeakLinkage()))
@@ -403,7 +401,7 @@
     O << MO.getImm();
     return;
   case MachineOperand::MO_MachineBasicBlock:
-    printBasicBlockLabel(MO.getMBB(), false, false, VerboseAsm);
+    printBasicBlockLabel(MO.getMBB(), false, false, false);
     return;
   case MachineOperand::MO_GlobalAddress:
   case MachineOperand::MO_ExternalSymbol:
@@ -818,7 +816,7 @@
           if (VerboseAsm) {
             O.PadToColumn(TAI->getCommentColumn(), 1);
             O << TAI->getCommentString() << ' ';
-            PrintUnmangledNameSafely(GVar, O);
+            WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
           }
           O << '\n';
           EmitGlobalConstant(C);
@@ -840,7 +838,7 @@
       if (VerboseAsm) {
         O.PadToColumn(TAI->getCommentColumn(), 1);
         O << TAI->getCommentString() << ' ';
-        PrintUnmangledNameSafely(GVar, O);
+        WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
       }
       O << '\n';
       return;
@@ -884,13 +882,14 @@
   if (VerboseAsm){
     O.PadToColumn(TAI->getCommentColumn(), 1);
     O << TAI->getCommentString() << ' ';
-    PrintUnmangledNameSafely(GVar, O);
+    WriteAsOperand(O, GVar, /*PrintType=*/false, GVar->getParent());
   }
   O << '\n';
-  if (TAI->hasDotTypeDotSizeDirective())
-    O << "\t.size\t" << name << ", " << Size << '\n';
 
   EmitGlobalConstant(C);
+
+  if (TAI->hasDotTypeDotSizeDirective())
+    O << "\t.size\t" << name << ", " << Size << '\n';
 }
 
 bool X86ATTAsmPrinter::doFinalization(Module &M) {
diff --git a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp
index 8b4ca58..00d0ddb 100644
--- a/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp
+++ b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp
@@ -273,7 +273,7 @@
     O << MO.getImm();
     return;
   case MachineOperand::MO_MachineBasicBlock:
-    printBasicBlockLabel(MO.getMBB());
+    printBasicBlockLabel(MO.getMBB(), false, false, false);
     return;
     
   case MachineOperand::MO_GlobalAddress: {
diff --git a/test/Assembler/unnamed.ll b/test/Assembler/unnamed.ll
index 31f1b58..fb4fa62 100644
--- a/test/Assembler/unnamed.ll
+++ b/test/Assembler/unnamed.ll
@@ -1,12 +1,18 @@
 ; RUN: llvm-as < %s | llvm-dis
 
-%0 = type { %1, %2 }                              ; type %0
-%1 = type { i32 }                                 ; type %1
-%2 = type { float, double }                       ; type %2
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
+
+module asm "this is an inline asm block"
+module asm "this is another inline asm block"
+
+%0 = type { %1, %2 }
+%1 = type { i32 }
+%2 = type { float, double }
 
 @0 = global i32 0
 @1 = global float 3.0
 @2 = global i8* null
+@3 = global x86_fp80 0xK4001E000000000000000
 
 define float @foo(%0* %p) nounwind {
   %t = load %0* %p                                ; <%0> [#uses=2]
@@ -40,3 +46,6 @@
 define i8** @sss() {
   ret i8** @2
 }
+define x86_fp80* @nnn() {
+  ret x86_fp80* @3
+}
diff --git a/test/CodeGen/SystemZ/05-MemLoadsStores.ll b/test/CodeGen/SystemZ/05-MemLoadsStores.ll
index 6eb2ddb..5e8fcd6 100644
--- a/test/CodeGen/SystemZ/05-MemLoadsStores.ll
+++ b/test/CodeGen/SystemZ/05-MemLoadsStores.ll
@@ -1,7 +1,7 @@
 ; RUN: llvm-as < %s | llc | grep ly     | count 2
 ; RUN: llvm-as < %s | llc | grep sty    | count 2
-; RUN: llvm-as < %s | llc | grep {l.%}  | count 2
-; RUN: llvm-as < %s | llc | grep {st.%} | count 2
+; RUN: llvm-as < %s | llc | grep {l	%}  | count 2
+; RUN: llvm-as < %s | llc | grep {st	%} | count 2
 
 target datalayout = "E-p:64:64:64-i8:8:16-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-a0:16:16"
 target triple = "s390x-linux"
diff --git a/test/CodeGen/X86/global-sections.ll b/test/CodeGen/X86/global-sections.ll
index 0fcb17f..a3eaa5f 100644
--- a/test/CodeGen/X86/global-sections.ll
+++ b/test/CodeGen/X86/global-sections.ll
@@ -75,9 +75,9 @@
 ; LINUX:   .type	G6,@object
 ; LINUX:   .section	.gnu.linkonce.r.G6,"a",@progbits
 ; LINUX:   .weak	G6
-; LINUX: G6:				# G6
-; LINUX:   .size	G6, 1
+; LINUX: G6:
 ; LINUX:   .ascii	"\001"
+; LINUX:   .size	G6, 1
 
 ; DARWIN:  .section __TEXT,__const_coal,coalesced
 ; DARWIN:  .globl _G6
