aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-02-25 09:54:52 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-02-25 09:54:52 +0000
commit404cb4f9fa2df50eac4d84b8a77c84a92188c6d5 (patch)
treebaf5af33b59652d826500e5b0a678856c5ed5d68 /lib
parent05b53740e21ca0ce342f13b05c238134030420fb (diff)
Added an offset field to ConstantPoolSDNode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26371 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/SelectionDAG/ScheduleDAG.cpp3
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAG.cpp20
-rwxr-xr-xlib/Target/X86/X86ATTAsmPrinter.cpp23
-rwxr-xr-xlib/Target/X86/X86IntelAsmPrinter.cpp26
4 files changed, 31 insertions, 41 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
index 9bc168f7a6..611abc3a11 100644
--- a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
@@ -154,6 +154,7 @@ void ScheduleDAG::AddOperand(MachineInstr *MI, SDOperand Op,
MI->addFrameIndexOperand(FI->getIndex());
} else if (ConstantPoolSDNode *CP =
dyn_cast<ConstantPoolSDNode>(Op)) {
+ int Offset = CP->getOffset();
unsigned Align = CP->getAlignment();
// MachineConstantPool wants an explicit alignment.
if (Align == 0) {
@@ -165,7 +166,7 @@ void ScheduleDAG::AddOperand(MachineInstr *MI, SDOperand Op,
}
unsigned Idx = ConstPool->getConstantPoolIndex(CP->get(), Align);
- MI->addConstantPoolIndexOperand(Idx);
+ MI->addConstantPoolIndexOperand(Idx, Offset);
} else if (ExternalSymbolSDNode *ES =
dyn_cast<ExternalSymbolSDNode>(Op)) {
MI->addExternalSymbolOperand(ES->getSymbol(), false);
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 59449625e6..8b930948d2 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -302,12 +302,14 @@ void SelectionDAG::RemoveNodeFromCSEMaps(SDNode *N) {
case ISD::ConstantPool:
Erased = ConstantPoolIndices.
erase(std::make_pair(cast<ConstantPoolSDNode>(N)->get(),
- cast<ConstantPoolSDNode>(N)->getAlignment()));
+ std::make_pair(cast<ConstantPoolSDNode>(N)->getOffset(),
+ cast<ConstantPoolSDNode>(N)->getAlignment())));
break;
case ISD::TargetConstantPool:
Erased = TargetConstantPoolIndices.
erase(std::make_pair(cast<ConstantPoolSDNode>(N)->get(),
- cast<ConstantPoolSDNode>(N)->getAlignment()));
+ std::make_pair(cast<ConstantPoolSDNode>(N)->getOffset(),
+ cast<ConstantPoolSDNode>(N)->getAlignment())));
break;
case ISD::BasicBlock:
Erased = BBNodes.erase(cast<BasicBlockSDNode>(N)->getBasicBlock());
@@ -650,19 +652,21 @@ SDOperand SelectionDAG::getTargetFrameIndex(int FI, MVT::ValueType VT) {
}
SDOperand SelectionDAG::getConstantPool(Constant *C, MVT::ValueType VT,
- unsigned Alignment) {
- SDNode *&N = ConstantPoolIndices[std::make_pair(C, Alignment)];
+ unsigned Alignment, int Offset) {
+ SDNode *&N = ConstantPoolIndices[std::make_pair(C,
+ std::make_pair(Offset, Alignment))];
if (N) return SDOperand(N, 0);
- N = new ConstantPoolSDNode(C, VT, Alignment, false);
+ N = new ConstantPoolSDNode(false, C, VT, Offset, Alignment);
AllNodes.push_back(N);
return SDOperand(N, 0);
}
SDOperand SelectionDAG::getTargetConstantPool(Constant *C, MVT::ValueType VT,
- unsigned Alignment) {
- SDNode *&N = TargetConstantPoolIndices[std::make_pair(C, Alignment)];
+ unsigned Alignment, int Offset) {
+ SDNode *&N = TargetConstantPoolIndices[std::make_pair(C,
+ std::make_pair(Offset, Alignment))];
if (N) return SDOperand(N, 0);
- N = new ConstantPoolSDNode(C, VT, Alignment, true);
+ N = new ConstantPoolSDNode(true, C, VT, Offset, Alignment);
AllNodes.push_back(N);
return SDOperand(N, 0);
}
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp
index 38418b3593..f8f54d434a 100755
--- a/lib/Target/X86/X86ATTAsmPrinter.cpp
+++ b/lib/Target/X86/X86ATTAsmPrinter.cpp
@@ -196,25 +196,18 @@ void X86ATTAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){
O << " + " << DispSpec.getImmedValue();
O << "]";
return;
- } else if (BaseReg.isConstantPoolIndex()) {
- O << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_"
- << BaseReg.getConstantPoolIndex();
- if (forDarwin && TM.getRelocationModel() == Reloc::PIC)
- O << "-\"L" << getFunctionNumber() << "$pb\"";
- if (DispSpec.getImmedValue())
- O << "+" << DispSpec.getImmedValue();
- if (IndexReg.getReg()) {
- O << "(,";
- printOperand(MI, Op+2);
- if (ScaleVal != 1)
- O << "," << ScaleVal;
- O << ")";
- }
- return;
}
if (DispSpec.isGlobalAddress()) {
printOperand(MI, Op+3, "mem");
+ } else if (DispSpec.isConstantPoolIndex()) {
+ O << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_"
+ << DispSpec.getConstantPoolIndex();
+ if (forDarwin && TM.getRelocationModel() == Reloc::PIC)
+ O << "-\"L" << getFunctionNumber() << "$pb\"";
+ if (DispSpec.getOffset())
+ O << "+" << DispSpec.getOffset();
+ return;
} else {
int DispVal = DispSpec.getImmedValue();
if (DispVal || (!IndexReg.getReg() && !BaseReg.getReg()))
diff --git a/lib/Target/X86/X86IntelAsmPrinter.cpp b/lib/Target/X86/X86IntelAsmPrinter.cpp
index de503b924e..7f4592bb5b 100755
--- a/lib/Target/X86/X86IntelAsmPrinter.cpp
+++ b/lib/Target/X86/X86IntelAsmPrinter.cpp
@@ -175,23 +175,6 @@ void X86IntelAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){
O << " + " << DispSpec.getImmedValue();
O << "]";
return;
- } else if (BaseReg.isConstantPoolIndex()) {
- O << "[" << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_"
- << BaseReg.getConstantPoolIndex();
- if (forDarwin && TM.getRelocationModel() == Reloc::PIC)
- O << "-\"L" << getFunctionNumber() << "$pb\"";
-
- if (IndexReg.getReg()) {
- O << " + ";
- if (ScaleVal != 1)
- O << ScaleVal << "*";
- printOp(IndexReg);
- }
-
- if (DispSpec.getImmedValue())
- O << " + " << DispSpec.getImmedValue();
- O << "]";
- return;
}
O << "[";
@@ -213,6 +196,15 @@ void X86IntelAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){
if (NeedPlus)
O << " + ";
printOp(DispSpec, "mem");
+ } else if (DispSpec.isConstantPoolIndex()) {
+ O << "[" << PrivateGlobalPrefix << "CPI" << getFunctionNumber() << "_"
+ << DispSpec.getConstantPoolIndex();
+ if (forDarwin && TM.getRelocationModel() == Reloc::PIC)
+ O << "-\"L" << getFunctionNumber() << "$pb\"";
+ if (DispSpec.getOffset())
+ O << " + " << DispSpec.getOffset();
+ O << "]";
+ return;
} else {
int DispVal = DispSpec.getImmedValue();
if (DispVal || (!BaseReg.getReg() && !IndexReg.getReg())) {