fix divide and remainder

llvm-svn: 24628
diff --git a/llvm/lib/Target/Alpha/AlphaISelDAGToDAG.cpp b/llvm/lib/Target/Alpha/AlphaISelDAGToDAG.cpp
index 112671f..910c85e 100644
--- a/llvm/lib/Target/Alpha/AlphaISelDAGToDAG.cpp
+++ b/llvm/lib/Target/Alpha/AlphaISelDAGToDAG.cpp
@@ -339,19 +339,17 @@
       }
       SDOperand Tmp1 = Select(N->getOperand(0)),
         Tmp2 = Select(N->getOperand(1)),
-        Addr = CurDAG->getExternalSymbol(opstr, AlphaLowering.getPointerTy());
-      SDOperand Tmp3 = Select(Addr);
-      SDOperand Chain = CurDAG->getCopyToReg(CurDAG->getRoot(), Alpha::R24, 
-                                             Tmp1, SDOperand());
-      Chain = CurDAG->getCopyToReg(CurDAG->getRoot(), Alpha::R25, 
-                                   Tmp2, Chain.getValue(1));
-      Chain = CurDAG->getCopyToReg(CurDAG->getRoot(), Alpha::R27, 
-                                   Tmp3, Chain.getValue(1));
-      Chain = CurDAG->getTargetNode(Alpha::JSRs, MVT::i64, MVT::Flag,
-                                    CurDAG->getRegister(Alpha::R27, MVT::i64),
-                                    getI64Imm(0));
-      return CurDAG->getCopyFromReg(Chain.getValue(1), Alpha::R27, MVT::i64, 
-                                    Chain.getValue(1));
+        Addr = Select(CurDAG->getExternalSymbol(opstr, 
+						AlphaLowering.getPointerTy()));
+      SDOperand Chain;
+      Chain = CurDAG->getCopyToReg(CurDAG->getEntryNode(), Alpha::R24, Tmp1,
+				   SDOperand(0,0));
+      Chain = CurDAG->getCopyToReg(Chain, Alpha::R25, Tmp2, Chain.getValue(1));
+      Chain = CurDAG->getCopyToReg(Chain, Alpha::R27, Addr, Chain.getValue(1));
+      Chain = CurDAG->getTargetNode(Alpha::JSRsDAG, MVT::Other, MVT::Flag, 
+				    Chain, Chain.getValue(1));
+      return CurDAG->getCopyFromReg(Chain, Alpha::R27, MVT::i64, 
+				    Chain.getValue(1));
     }
     break;