[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