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

Reply via email to