make intel asmprinter use TRI::getAsmName instead of TRI::getName like
authorChris Lattner <sabre@nondot.org>
Sun, 13 Sep 2009 19:44:38 +0000 (19:44 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 13 Sep 2009 19:44:38 +0000 (19:44 +0000)
all the other targets.  Add support for weak/linkonce linkage so it doesn't
crash on basically all nontrivial testcases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81704 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmPrinter/X86ATTInstPrinter.cpp
lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp

index c37b656e47bf52eb6f9bb4a85d997c70a4c5f150..d989f60a5952831c5f5c099342276eb1d712fb93 100644 (file)
@@ -70,9 +70,7 @@ void X86ATTInstPrinter::printOperand(const MCInst *MI, unsigned OpNo,
   
   const MCOperand &Op = MI->getOperand(OpNo);
   if (Op.isReg()) {
-    O << '%';
-    unsigned Reg = Op.getReg();
-    O << TRI->getAsmName(Reg);
+    O << '%' << TRI->getAsmName(Op.getReg());
     return;
   } else if (Op.isImm()) {
     O << '$' << Op.getImm();
index a3e5286d8eeec9d34c7dec5e50167e0c3558ccc0..484b5e91cdb8dc2695804d6db206c8f31a1c68fe 100644 (file)
@@ -149,6 +149,11 @@ bool X86IntelAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
 
   switch (F->getLinkage()) {
   default: llvm_unreachable("Unsupported linkage type!");
+  case Function::LinkOnceAnyLinkage:
+  case Function::LinkOnceODRLinkage:
+  case Function::WeakAnyLinkage:
+  case Function::WeakODRLinkage:
+      
   case Function::PrivateLinkage:
   case Function::LinkerPrivateLinkage:
   case Function::InternalLinkage:
@@ -204,21 +209,24 @@ void X86IntelAsmPrinter::printSSECC(const MachineInstr *MI, unsigned Op) {
   }
 }
 
+static void PrintRegName(raw_ostream &O, StringRef RegName) {
+  for (unsigned i = 0, e = RegName.size(); i != e; ++i)
+    O << (char)toupper(RegName[i]);
+}
+
 void X86IntelAsmPrinter::printOp(const MachineOperand &MO,
                                  const char *Modifier) {
   switch (MO.getType()) {
   case MachineOperand::MO_Register: {
-    if (TargetRegisterInfo::isPhysicalRegister(MO.getReg())) {
-      unsigned Reg = MO.getReg();
-      if (Modifier && strncmp(Modifier, "subreg", strlen("subreg")) == 0) {
-        EVT VT = (strcmp(Modifier,"subreg64") == 0) ?
-          MVT::i64 : ((strcmp(Modifier, "subreg32") == 0) ? MVT::i32 :
-                      ((strcmp(Modifier,"subreg16") == 0) ? MVT::i16 :MVT::i8));
-        Reg = getX86SubSuperRegister(Reg, VT);
-      }
-      O << TRI->getName(Reg);
-    } else
-      O << "reg" << MO.getReg();
+    assert(TargetRegisterInfo::isPhysicalRegister(MO.getReg()));
+    unsigned Reg = MO.getReg();
+    if (Modifier && strncmp(Modifier, "subreg", strlen("subreg")) == 0) {
+      EVT VT = (strcmp(Modifier,"subreg64") == 0) ?
+        MVT::i64 : ((strcmp(Modifier, "subreg32") == 0) ? MVT::i32 :
+                    ((strcmp(Modifier,"subreg16") == 0) ? MVT::i16 :MVT::i8));
+      Reg = getX86SubSuperRegister(Reg, VT);
+    }
+    PrintRegName(O, TRI->getAsmName(Reg));
     return;
   }
   case MachineOperand::MO_Immediate:
@@ -391,7 +399,7 @@ bool X86IntelAsmPrinter::printAsmMRegister(const MachineOperand &MO,
     break;
   }
 
-  O << TRI->getName(Reg);
+  PrintRegName(O, TRI->getAsmName(Reg));
   return false;
 }