* Add special entry code main() (to set x87 to 64-bit precision).
* Allow a register node as SelectAddr() base.
* ExternalSymbol -> TargetExternalSymbol as direct function callee.
* Use X86::ESP register rather than CopyFromReg(X86::ESP) as stack ptr for
  call parmater passing.

llvm-svn: 25207
diff --git a/llvm/lib/Target/X86/X86ISelPattern.cpp b/llvm/lib/Target/X86/X86ISelPattern.cpp
index 146ee752..563539d 100644
--- a/llvm/lib/Target/X86/X86ISelPattern.cpp
+++ b/llvm/lib/Target/X86/X86ISelPattern.cpp
@@ -1223,12 +1223,15 @@
   SDNode *Node = N.Val;
   SDOperand Op0, Op1;
 
-  if (Node->getOpcode() == ISD::CopyFromReg) {
-    unsigned Reg = cast<RegisterSDNode>(Node->getOperand(1))->getReg();
+  if (Node->getOpcode() == ISD::CopyFromReg ||
+      Node->getOpcode() == ISD::Register) {
+    unsigned Reg = (Node->getOpcode() == ISD::CopyFromReg) ?
+      cast<RegisterSDNode>(Node->getOperand(1))->getReg() :
+      cast<RegisterSDNode>(Node)->getReg();
     // Just use the specified register as our input if we can.
     if (MRegisterInfo::isVirtualRegister(Reg) || Reg == X86::ESP)
       return Reg;
-  }
+  } 
 
   unsigned &Reg = ExprMap[N];
   if (Reg) return Reg;