Refactor code into a new method.

llvm-svn: 19635
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index a8e3830..95da460 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -567,8 +567,7 @@
     assert(VT == N1.getValueType() &&
            "Shift operators return type must be the same as their first arg");
     assert(MVT::isInteger(VT) && MVT::isInteger(N2.getValueType()) &&
-           "Shifts only work on integers");
-    assert(VT >= MVT::i8 && "Shift amount cannot be a MVT::i1");
+           VT != MVT::i1 && "Shifts only work on integers");
     break;
   default: break;
   }
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index f747b35..64940aa 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -806,6 +806,32 @@
   return DAG.getCopyToReg(DAG.getRoot(), Op, Reg);
 }
 
+void SelectionDAGISel::
+LowerArguments(BasicBlock *BB, SelectionDAGLowering &SDL,
+               std::vector<SDOperand> &UnorderedChains) {
+  // If this is the entry block, emit arguments.
+  Function &F = *BB->getParent();
+
+  if (BB == &F.front()) {
+    // FIXME: If an argument is only used in one basic block, we could directly
+    // emit it (ONLY) into that block, not emitting the COPY_TO_VREG node.  This
+    // would improve codegen in several cases on X86 by allowing the loads to be
+    // folded into the user operation.
+    std::vector<SDOperand> Args = TLI.LowerArguments(F, SDL.DAG);
+
+    FunctionLoweringInfo &FuncInfo = SDL.FuncInfo;
+
+    unsigned a = 0;
+    for (Function::aiterator AI = F.abegin(), E = F.aend(); AI != E; ++AI,++a)
+      if (!AI->use_empty()) {
+        SDL.setValue(AI, Args[a]);
+        UnorderedChains.push_back(
+                 CopyValueToVirtualRegister(SDL, AI, FuncInfo.ValueMap[AI]));
+      }
+  }
+}
+
+
 void SelectionDAGISel::BuildSelectionDAG(SelectionDAG &DAG, BasicBlock *LLVMBB,
        std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate,
                                     FunctionLoweringInfo &FuncInfo) {
@@ -813,23 +839,8 @@
 
   std::vector<SDOperand> UnorderedChains;
   
-  // If this is the entry block, emit arguments.
-  Function *F = LLVMBB->getParent();
-  if (LLVMBB == &F->front()) {
-    // FIXME: If an argument is only used in one basic block, we could directly
-    // emit it (ONLY) into that block, not emitting the COPY_TO_VREG node.  This
-    // would improve codegen in several cases on X86 by allowing the loads to be
-    // folded into the user operation.
-    std::vector<SDOperand> Args = TLI.LowerArguments(*LLVMBB->getParent(), DAG);
-
-    unsigned a = 0;
-    for (Function::aiterator AI = F->abegin(), E = F->aend(); AI != E; ++AI,++a)
-      if (!AI->use_empty()) {
-        SDL.setValue(AI, Args[a]);
-        UnorderedChains.push_back(
-                 CopyValueToVirtualRegister(SDL, AI, FuncInfo.ValueMap[AI]));
-      }
-  }
+  // Lower any arguments needed in this block.
+  LowerArguments(LLVMBB, SDL, UnorderedChains);
 
   BB = FuncInfo.MBBMap[LLVMBB];
   SDL.setCurrentBasicBlock(BB);