aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-06-28 07:55:24 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-06-28 07:55:24 +0000
commitee12e8f28dc520cbc98555bc18749c2828c05495 (patch)
treeb462ee0ab4b83629f9086f2034cd93af50f1eac9
parent07103d312aa1d20f1c9bbc40cbdafe1e312c4a3d (diff)
Oops. Need to keep CP index.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28958 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/X86AsmPrinter.cpp31
-rwxr-xr-xlib/Target/X86/X86AsmPrinter.h2
2 files changed, 16 insertions, 17 deletions
diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp
index 5e35487a21..233e446947 100644
--- a/lib/Target/X86/X86AsmPrinter.cpp
+++ b/lib/Target/X86/X86AsmPrinter.cpp
@@ -231,21 +231,19 @@ void X86SharedAsmPrinter::EmitConstantPool(MachineConstantPool *MCP) {
const std::vector<MachineConstantPoolEntry> &CP = MCP->getConstants();
if (CP.empty()) return;
- std::vector<MachineConstantPoolEntry> FloatCPs;
- std::vector<MachineConstantPoolEntry> DoubleCPs;
- std::vector<MachineConstantPoolEntry> OtherCPs;
- // const TargetData *TD = TM.getTargetData();
- // unsigned Align = MCP->getConstantPoolAlignment();
+ std::vector<std::pair<MachineConstantPoolEntry,unsigned> > FloatCPs;
+ std::vector<std::pair<MachineConstantPoolEntry,unsigned> > DoubleCPs;
+ std::vector<std::pair<MachineConstantPoolEntry,unsigned> > OtherCPs;
for (unsigned i = 0, e = CP.size(); i != e; ++i) {
MachineConstantPoolEntry CPE = CP[i];
const Constant *CV = CPE.Val;
const Type *Ty = CV->getType();
if (Ty->getTypeID() == Type::FloatTyID)
- FloatCPs.push_back(CPE);
+ FloatCPs.push_back(std::make_pair(CPE, i));
else if (Ty->getTypeID() == Type::DoubleTyID)
- DoubleCPs.push_back(CPE);
+ DoubleCPs.push_back(std::make_pair(CPE, i));
else
- OtherCPs.push_back(CPE);
+ OtherCPs.push_back(std::make_pair(CPE, i));
}
EmitConstantPool(MCP, FloatCPs, "\t.literal4");
EmitConstantPool(MCP, DoubleCPs, "\t.literal8");
@@ -254,22 +252,23 @@ void X86SharedAsmPrinter::EmitConstantPool(MachineConstantPool *MCP) {
void
X86SharedAsmPrinter::EmitConstantPool(MachineConstantPool *MCP,
- std::vector<MachineConstantPoolEntry> &CP,
+ std::vector<std::pair<MachineConstantPoolEntry,unsigned> > &CP,
const char *Section) {
if (CP.empty()) return;
SwitchToDataSection(Section, 0);
EmitAlignment(MCP->getConstantPoolAlignment());
for (unsigned i = 0, e = CP.size(); i != e; ++i) {
- O << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << '_' << i
- << ":\t\t\t\t\t" << CommentString << " ";
- WriteTypeSymbolic(O, CP[i].Val->getType(), 0) << '\n';
- EmitGlobalConstant(CP[i].Val);
+ O << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << '_'
+ << CP[i].second << ":\t\t\t\t\t" << CommentString << " ";
+ WriteTypeSymbolic(O, CP[i].first.Val->getType(), 0) << '\n';
+ EmitGlobalConstant(CP[i].first.Val);
if (i != e-1) {
- unsigned EntSize = TM.getTargetData()->getTypeSize(CP[i].Val->getType());
- unsigned ValEnd = CP[i].Offset + EntSize;
+ unsigned EntSize =
+ TM.getTargetData()->getTypeSize(CP[i].first.Val->getType());
+ unsigned ValEnd = CP[i].first.Offset + EntSize;
// Emit inter-object padding for alignment.
- EmitZeros(CP[i+1].Offset-ValEnd);
+ EmitZeros(CP[i+1].first.Offset-ValEnd);
}
}
}
diff --git a/lib/Target/X86/X86AsmPrinter.h b/lib/Target/X86/X86AsmPrinter.h
index 7c1b624424..c01dd8441f 100755
--- a/lib/Target/X86/X86AsmPrinter.h
+++ b/lib/Target/X86/X86AsmPrinter.h
@@ -96,7 +96,7 @@ struct X86SharedAsmPrinter : public AsmPrinter {
virtual void EmitConstantPool(MachineConstantPool *MCP);
void EmitConstantPool(MachineConstantPool *MCP,
- std::vector<MachineConstantPoolEntry> &CP,
+ std::vector<std::pair<MachineConstantPoolEntry, unsigned> > &CP,
const char *Section);
};