[llvm-commits] [llvm] r84558 - in /llvm/trunk/lib/Target/ARM/AsmPrinter: ARMAsmPrinter.cpp ARMInstPrinter.cpp ARMInstPrinter.h

Chris Lattner sabre at nondot.org
Mon Oct 19 15:33:06 PDT 2009


Author: lattner
Date: Mon Oct 19 17:33:05 2009
New Revision: 84558

URL: http://llvm.org/viewvc/llvm-project?rev=84558&view=rev
Log:
lower the ARM::CONSTPOOL_ENTRY pseudo op, giving us constant pool entries
like:

@ BB#1:
	.align	2
LCPI1_0:
	.long	L_.str-(LPC0+8)

Note that proper indentation of the label :)


Modified:
    llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
    llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
    llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.h

Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp?rev=84558&r1=84557&r2=84558&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp Mon Oct 19 17:33:05 2009
@@ -1029,16 +1029,16 @@
 void ARMAsmPrinter::printMachineInstruction(const MachineInstr *MI) {
   ++EmittedInsts;
 
-  int Opc = MI->getOpcode();
-  if (Opc == ARM::CONSTPOOL_ENTRY)
-    EmitAlignment(2);
-
   // Call the autogenerated instruction printer routines.
   processDebugLoc(MI, true);
   
   if (EnableMCInst) {
     printInstructionThroughMCStreamer(MI);
   } else {
+    int Opc = MI->getOpcode();
+    if (Opc == ARM::CONSTPOOL_ENTRY)
+      EmitAlignment(2);
+    
     printInstruction(MI);
   }
   
@@ -1337,7 +1337,7 @@
     // Emit the label.
     // FIXME: MOVE TO SHARED PLACE.
     SmallString<60> Name;
-    int Id = (int)MI->getOperand(2).getImm();
+    unsigned Id = (unsigned)MI->getOperand(2).getImm();
     raw_svector_ostream(Name) << MAI->getPrivateGlobalPrefix() << "PC" << Id;
     OutStreamer.EmitLabel(OutContext.GetOrCreateSymbol(Name.str()));
     
@@ -1351,6 +1351,27 @@
     printMCInst(&AddInst);
     return;
   }
+  case ARM::CONSTPOOL_ENTRY: { // FIXME: Remove asm string from td file.
+    /// CONSTPOOL_ENTRY - This instruction represents a floating constant pool
+    /// in the function.  The first operand is the ID# for this instruction, the
+    /// second is the index into the MachineConstantPool that this is, the third
+    /// is the size in bytes of this constant pool entry.
+    unsigned LabelId = (unsigned)MI->getOperand(0).getImm();
+    unsigned CPIdx   = (unsigned)MI->getOperand(1).getIndex();
+
+    EmitAlignment(2);
+
+    O << MAI->getPrivateGlobalPrefix() << "CPI" << getFunctionNumber()
+      << '_' << LabelId << ":\n";
+
+    const MachineConstantPoolEntry &MCPE = MCP->getConstants()[CPIdx];
+    if (MCPE.isMachineConstantPoolEntry())
+      EmitMachineConstantPoolValue(MCPE.Val.MachineCPVal);
+    else
+      EmitGlobalConstant(MCPE.Val.ConstVal);
+    
+    return;
+  }
   }
       
   MCInst TmpInst;

Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp?rev=84558&r1=84557&r2=84558&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.cpp Mon Oct 19 17:33:05 2009
@@ -159,6 +159,11 @@
 }
 
 
+void ARMInstPrinter::printCPInstOperand(const MCInst *MI, unsigned OpNum,
+                                        const char *Modifier) {
+  // FIXME: remove this.
+  abort();
+}
 
 void ARMInstPrinter::printPCLabel(const MCInst *MI, unsigned OpNum) {
   // FIXME: remove this.

Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.h?rev=84558&r1=84557&r2=84558&view=diff

==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.h (original)
+++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMInstPrinter.h Mon Oct 19 17:33:05 2009
@@ -73,7 +73,7 @@
   void printSBitModifierOperand(const MCInst *MI, unsigned OpNum) {}
   void printRegisterList(const MCInst *MI, unsigned OpNum);
   void printCPInstOperand(const MCInst *MI, unsigned OpNum,
-                          const char *Modifier) {}
+                          const char *Modifier);
   void printJTBlockOperand(const MCInst *MI, unsigned OpNum) {}
   void printJT2BlockOperand(const MCInst *MI, unsigned OpNum) {}
   void printTBAddrMode(const MCInst *MI, unsigned OpNum) {}





More information about the llvm-commits mailing list