Handle static alloca arguments to PHI nodes.
authorChris Lattner <sabre@nondot.org>
Sun, 9 Jan 2005 01:16:24 +0000 (01:16 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 9 Jan 2005 01:16:24 +0000 (01:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19409 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index 4fe5ddf33354efc8c962e34d7c53fbb5386f876e..090d3ef53e3711830e993dacd138b4c601ccaabe 100644 (file)
@@ -836,8 +836,7 @@ void SelectionDAGISel::BuildSelectionDAG(SelectionDAG &DAG, BasicBlock *LLVMBB,
   // blocks are available as virtual registers.
   for (BasicBlock::iterator I = LLVMBB->begin(), E = LLVMBB->end(); I != E;++I)
     if (!I->use_empty()) {
-      std::map<const Value*, unsigned>::iterator VMI =
-        FuncInfo.ValueMap.find(I);
+      std::map<const Value*, unsigned>::iterator VMI =FuncInfo.ValueMap.find(I);
       if (VMI != FuncInfo.ValueMap.end())
         CopyValueToVirtualRegister(SDL, I, VMI->second);
     }
@@ -878,7 +877,13 @@ void SelectionDAGISel::BuildSelectionDAG(SelectionDAG &DAG, BasicBlock *LLVMBB,
           Reg = RegOut;
         } else {
           Reg = FuncInfo.ValueMap[PHIOp];
-          assert(Reg && "Didn't codegen value into a register!??");
+          if (Reg == 0) {
+            assert(isa<AllocaInst>(PHIOp) && 
+                   FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(PHIOp)) &&
+                   "Didn't codegen value into a register!??");
+            Reg = FuncInfo.CreateRegForValue(PHIOp);
+            CopyValueToVirtualRegister(SDL, PHIOp, Reg);
+          }
         }
         
         // Remember that this register needs to added to the machine PHI node as