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 :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84558 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
index 1394772..7e89b9f 100644
--- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
+++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
@@ -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;