Handle \n's in value names for more targets. The asm printers
[oota-llvm.git] / lib / Target / PowerPC / PPCAsmPrinter.cpp
index 95825bb217ef2649e97795f6a56cc86d368b9102..acc6570e976d9fa53b60a6c8a35372631b6fc9e2 100644 (file)
@@ -37,7 +37,7 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Target/TargetAsmInfo.h"
-#include "llvm/Target/MRegisterInfo.h"
+#include "llvm/Target/TargetRegisterInfo.h"
 #include "llvm/Target/TargetInstrInfo.h"
 #include "llvm/Target/TargetOptions.h"
 #include "llvm/ADT/Statistic.h"
@@ -105,7 +105,7 @@ namespace {
     ///
     void printRegister(const MachineOperand &MO, bool R0AsZero) {
       unsigned RegNo = MO.getReg();
-      assert(MRegisterInfo::isPhysicalRegister(RegNo) && "Not physreg??");
+      assert(TargetRegisterInfo::isPhysicalRegister(RegNo) && "Not physreg??");
       
       // If we should use 0 for R0.
       if (R0AsZero && RegNo == PPC::R0) {
@@ -639,6 +639,15 @@ bool LinuxAsmPrinter::doInitialization(Module &M) {
   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, std::ostream &OS) {
+  for (const char *Name = V->getNameStart(), *E = Name+V->getNameLen();
+       Name != E; ++Name)
+    if (isprint(*Name))
+      OS << *Name;
+}
+
 bool LinuxAsmPrinter::doFinalization(Module &M) {
   const TargetData *TD = TM.getTargetData();
 
@@ -680,7 +689,9 @@ bool LinuxAsmPrinter::doFinalization(Module &M) {
         SwitchToDataSection("\t.data", I);
         O << ".comm " << name << "," << Size;
       }
-      O << "\t\t" << TAI->getCommentString() << " '" << I->getName() << "'\n";
+      O << "\t\t" << TAI->getCommentString() << " '";
+      PrintUnmangledNameSafely(I, O);
+      O << "'\n";
     } else {
       switch (I->getLinkage()) {
       case GlobalValue::LinkOnceLinkage:
@@ -727,8 +738,9 @@ bool LinuxAsmPrinter::doFinalization(Module &M) {
       }
 
       EmitAlignment(Align, I);
-      O << name << ":\t\t\t\t" << TAI->getCommentString() << " '"
-        << I->getName() << "'\n";
+      O << name << ":\t\t\t\t" << TAI->getCommentString() << " '";
+      PrintUnmangledNameSafely(I, O);
+      O << "'\n";
 
       // If the initializer is a extern weak symbol, remember to emit the weak
       // reference!
@@ -849,6 +861,7 @@ bool DarwinAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
 
 bool DarwinAsmPrinter::doInitialization(Module &M) {
   static const char *CPUDirectives[] = {
+    "",
     "ppc",
     "ppc601",
     "ppc602",
@@ -941,7 +954,9 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {
         if (Subtarget.isDarwin9())
           O << "," << Align;
       }
-      O << "\t\t" << TAI->getCommentString() << " '" << I->getName() << "'\n";
+      O << "\t\t" << TAI->getCommentString() << " '";
+      PrintUnmangledNameSafely(I, O);
+      O << "'\n";
     } else {
       switch (I->getLinkage()) {
       case GlobalValue::LinkOnceLinkage:
@@ -998,8 +1013,9 @@ bool DarwinAsmPrinter::doFinalization(Module &M) {
       }
 
       EmitAlignment(Align, I);
-      O << name << ":\t\t\t\t" << TAI->getCommentString() << " '"
-        << I->getName() << "'\n";
+      O << name << ":\t\t\t\t" << TAI->getCommentString() << " '";
+      PrintUnmangledNameSafely(I, O);
+      O << "'\n";
 
       // If the initializer is a extern weak symbol, remember to emit the weak
       // reference!