aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-02-04 09:24:16 +0000
committerChris Lattner <sabre@nondot.org>2006-02-04 09:24:16 +0000
commitb46ef676794879efc4b79fb36ec606d0ceb83f42 (patch)
treeef222f28cf7ceb3f0f4192652d6ba7cb34af1bd8
parent9ed44818c5ee0385db3d19b59d9c6a020fbdf084 (diff)
Temporarily revert this patch, which probably breaks with the
tblgen patch reverted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25971 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/X86/X86ISelDAGToDAG.cpp20
1 files changed, 13 insertions, 7 deletions
diff --git a/lib/Target/X86/X86ISelDAGToDAG.cpp b/lib/Target/X86/X86ISelDAGToDAG.cpp
index e30be1b41a..f007b28a5d 100644
--- a/lib/Target/X86/X86ISelDAGToDAG.cpp
+++ b/lib/Target/X86/X86ISelDAGToDAG.cpp
@@ -369,11 +369,17 @@ bool X86DAGToDAGISel::SelectAddr(SDOperand N, SDOperand &Base, SDOperand &Scale,
return false;
if (AM.BaseType == X86ISelAddressMode::RegBase) {
- if (!AM.Base.Reg.Val)
+ if (AM.Base.Reg.Val) {
+ if (AM.Base.Reg.getOpcode() != ISD::Register)
+ AM.Base.Reg = Select(AM.Base.Reg);
+ } else {
AM.Base.Reg = CurDAG->getRegister(0, MVT::i32);
+ }
}
- if (!AM.IndexReg.Val)
+ if (AM.IndexReg.Val)
+ AM.IndexReg = Select(AM.IndexReg);
+ else
AM.IndexReg = CurDAG->getRegister(0, MVT::i32);
getAddressOperands(AM, Base, Scale, Index, Disp);
@@ -435,6 +441,11 @@ bool X86DAGToDAGISel::SelectLEAAddr(SDOperand N, SDOperand &Base,
return false;
}
+ if (SelectBase)
+ AM.Base.Reg = Select(AM.Base.Reg);
+ if (SelectIndex)
+ AM.IndexReg = Select(AM.IndexReg);
+
getAddressOperands(AM, Base, Scale, Index, Disp);
return true;
}
@@ -450,11 +461,6 @@ SDOperand X86DAGToDAGISel::Select(SDOperand N) {
if (Opcode >= ISD::BUILTIN_OP_END && Opcode < X86ISD::FIRST_NUMBER)
return N; // Already selected.
- // These are probably emitted by SelectAddr().
- if (Opcode == ISD::TargetConstant || Opcode == ISD::TargetConstantPool ||
- Opcode == ISD::TargetFrameIndex || Opcode == ISD::TargetGlobalAddress)
- return N;
-
std::map<SDOperand, SDOperand>::iterator CGMI = CodeGenMap.find(N);
if (CGMI != CodeGenMap.end()) return CGMI->second;