[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelPattern.cpp
Chris Lattner
lattner at cs.uiuc.edu
Wed Jan 25 00:01:28 PST 2006
Changes in directory llvm/lib/Target/X86:
X86ISelPattern.cpp updated: 1.200 -> 1.201
---
Log message:
Loosen up these checks to allow direct uses of ESP
---
Diffs of the changes: (+12 -4)
X86ISelPattern.cpp | 16 ++++++++++++----
1 files changed, 12 insertions(+), 4 deletions(-)
Index: llvm/lib/Target/X86/X86ISelPattern.cpp
diff -u llvm/lib/Target/X86/X86ISelPattern.cpp:1.200 llvm/lib/Target/X86/X86ISelPattern.cpp:1.201
--- llvm/lib/Target/X86/X86ISelPattern.cpp:1.200 Sun Jan 22 17:37:17 2006
+++ llvm/lib/Target/X86/X86ISelPattern.cpp Wed Jan 25 02:00:36 2006
@@ -2903,13 +2903,21 @@
if (OrigDest.getOpcode() == ISD::CopyFromReg) {
OrigOffset = 0;
assert(cast<RegisterSDNode>(OrigDest.getOperand(1))->getReg() == X86::ESP);
- } else {
+ } else if (OrigDest.getOpcode() == ISD::ADD &&
+ isa<ConstantSDNode>(OrigDest.getOperand(1)) &&
+ OrigDest.getOperand(0).getOpcode() == ISD::CopyFromReg &&
+ cast<RegisterSDNode>(OrigDest.getOperand(0).getOperand(1))->getReg()
+ == X86::ESP) {
+ // We expect only (ESP+C)
+ OrigOffset = cast<ConstantSDNode>(OrigDest.getOperand(1))->getValue();
+ } else if (OrigDest.getOpcode() == ISD::Register) {
// We expect only (ESP+C)
+ OrigOffset = 0;
+ } else {
assert(OrigDest.getOpcode() == ISD::ADD &&
isa<ConstantSDNode>(OrigDest.getOperand(1)) &&
- OrigDest.getOperand(0).getOpcode() == ISD::CopyFromReg &&
- cast<RegisterSDNode>(OrigDest.getOperand(0).getOperand(1))->getReg()
- == X86::ESP);
+ OrigDest.getOperand(0).getOpcode() == ISD::Register &&
+ cast<RegisterSDNode>(OrigDest.getOperand(0))->getReg() == X86::ESP);
OrigOffset = cast<ConstantSDNode>(OrigDest.getOperand(1))->getValue();
}
More information about the llvm-commits
mailing list