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(); } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits