Factor out offset printing code into generic AsmPrinter.
authorAnton Korobeynikov <asl@math.spbu.ru>
Sat, 8 Nov 2008 17:21:38 +0000 (17:21 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Sat, 8 Nov 2008 17:21:38 +0000 (17:21 +0000)
FIXME: it seems, that most of targets don't support
offsets wrt CPI/GlobalAddress', was it intentional?

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

include/llvm/CodeGen/AsmPrinter.h
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp

index d3850a5fb3602ee55eda6fdf3cd612f4112efaa7..3b79b11f9d9fa5d17f2fa24c88b882da05289a2c 100644 (file)
@@ -362,6 +362,9 @@ namespace llvm {
     /// this is suported by the target.
     void printVisibility(const std::string& Name, unsigned Visibility) const;
 
+    /// printOffset - This is just convenient handler for printing offsets.
+    void printOffset(int64_t Offset) const;
+
   private:
     const GlobalValue *findGlobalValue(const Constant* CV);
     void EmitLLVMUsedList(Constant *List);
index 018544150902066b594c91ec690e531e1752fd30..c75957a677840dd8253831b4242222bad13e4400 100644 (file)
@@ -1520,6 +1520,13 @@ void AsmPrinter::printVisibility(const std::string& Name,
   }
 }
 
+void AsmPrinter::printOffset(int64_t Offset) const {
+  if (Offset > 0)
+    O << '+' << Offset;
+  else if (Offset < 0)
+    O << Offset;
+}
+
 GCMetadataPrinter *AsmPrinter::GetOrCreateGCPrinter(GCStrategy *S) {
   if (!S->usesMetadata())
     return 0;
index 36cd98eb927472af7e6b376b5ad20ab64a498608..ae6c3544bb9577fc047ca419520db1488f1ef56a 100644 (file)
@@ -300,12 +300,9 @@ void ARMAsmPrinter::printOperand(const MachineInstr *MI, int opNum,
       FnStubs.insert(Name);
     } else
       O << Name;
-    
-    if (MO.getOffset() > 0)
-      O << '+' << MO.getOffset();
-    else if (MO.getOffset() < 0)
-      O << MO.getOffset();
-    
+
+    printOffset(MO.getOffset());
+
     if (isCallOp && Subtarget->isTargetELF() &&
         TM.getRelocationModel() == Reloc::PIC_)
       O << "(PLT)";
@@ -345,7 +342,7 @@ static void printSOImm(raw_ostream &O, int64_t V, const TargetAsmInfo *TAI) {
   assert(V < (1 << 12) && "Not a valid so_imm value!");
   unsigned Imm = ARM_AM::getSOImmValImm(V);
   unsigned Rot = ARM_AM::getSOImmValRot(V);
-  
+
   // Print low-level immediate formation info, per
   // A5.1.3: "Data-processing operands - Immediate".
   if (Rot) {
index 6c17dbece07e673ea419c8e0209c3c01486dbcb9..280003a776aa9e8fe7e0243166dcb5323ee33b98 100644 (file)
@@ -398,10 +398,7 @@ void PPCAsmPrinter::printOp(const MachineOperand &MO) {
     }
     O << Name;
 
-    if (MO.getOffset() > 0)
-      O << "+" << MO.getOffset();
-    else if (MO.getOffset() < 0)
-      O << MO.getOffset();
+    printOffset(MO.getOffset());
 
     if (GV->hasExternalWeakLinkage())
       ExtWeakSymbols.insert(GV);
index 556757aaabf3b31c0a434827b1f0a32fb0c9fdbc..66319c398161ef286079d5213ff04ab8b7dc4cdd 100644 (file)
@@ -344,11 +344,7 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
         O << "@GOTOFF";
     }
 
-    int Offset = MO.getOffset();
-    if (Offset > 0)
-      O << '+' << Offset;
-    else if (Offset < 0)
-      O << Offset;
+    printOffset(MO.getOffset());
 
     if (isMemOp && Subtarget->isPICStyleRIPRel() && !NotRIPRel)
       O << "(%rip)";
@@ -429,11 +425,7 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
     if (GV->hasExternalWeakLinkage())
       ExtWeakSymbols.insert(GV);
 
-    int Offset = MO.getOffset();
-    if (Offset > 0)
-      O << '+' << Offset;
-    else if (Offset < 0)
-      O << Offset;
+    printOffset(MO.getOffset());
 
     if (isThreadLocal) {
       if (TM.getRelocationModel() == Reloc::PIC_ || Subtarget->is64Bit())
index 4868906a041644d211515d43de358842f58a9aa6..1d4a695bfc969b9aea0c8fe3141e53f1db3c622f 100644 (file)
@@ -235,11 +235,7 @@ void X86IntelAsmPrinter::printOp(const MachineOperand &MO,
     if (!isMemOp) O << "OFFSET ";
     O << "[" << TAI->getPrivateGlobalPrefix() << "CPI"
       << getFunctionNumber() << "_" << MO.getIndex();
-    int Offset = MO.getOffset();
-    if (Offset > 0)
-      O << " + " << Offset;
-    else if (Offset < 0)
-      O << Offset;
+    printOffset(MO.getOffset());
     O << "]";
     return;
   }
@@ -258,11 +254,7 @@ void X86IntelAsmPrinter::printOp(const MachineOperand &MO,
       O << "__imp_";
     }
     O << Name;
-    int Offset = MO.getOffset();
-    if (Offset > 0)
-      O << " + " << Offset;
-    else if (Offset < 0)
-      O << Offset;
+    printOffset(MO.getOffset());
     return;
   }
   case MachineOperand::MO_ExternalSymbol: {