[llvm-commits] [llvm] r54438 - in /llvm/trunk: include/llvm/CodeGen/SelectionDAGISel.h lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

Evan Cheng evan.cheng at apple.com
Wed Aug 6 17:43:25 PDT 2008


Author: evancheng
Date: Wed Aug  6 19:43:25 2008
New Revision: 54438

URL: http://llvm.org/viewvc/llvm-project?rev=54438&view=rev
Log:
Factor code that finalize PHI nodes, jump tables, etc. out of SelectBasicBlock. No functionality changes.

Modified:
    llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h?rev=54438&r1=54437&r2=54438&view=diff

==============================================================================
--- llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h (original)
+++ llvm/trunk/include/llvm/CodeGen/SelectionDAGISel.h Wed Aug  6 19:43:25 2008
@@ -182,10 +182,15 @@
                             FunctionLoweringInfo &FuncInfo);
   void SelectBasicBlock(BasicBlock *BB, MachineFunction &MF,
                         FunctionLoweringInfo &FuncInfo,
+             std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate,
+                        NodeAllocatorType &NodeAllocator);
+  void FinishBasicBlock(BasicBlock *BB, MachineFunction &MF,
+                        FunctionLoweringInfo &FuncInfo,
+             std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate,
                         NodeAllocatorType &NodeAllocator);
 
   void BuildSelectionDAG(SelectionDAG &DAG, BasicBlock *LLVMBB,
-           std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate,
+             std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate,
                          FunctionLoweringInfo &FuncInfo);
   void CodeGenAndEmitDAG(SelectionDAG &DAG);
   void LowerArguments(BasicBlock *BB, SelectionDAGLowering &SDL);

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp?rev=54438&r1=54437&r2=54438&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp Wed Aug  6 19:43:25 2008
@@ -5441,29 +5441,38 @@
   // each basic block.
   NodeAllocatorType NodeAllocator;
 
-  for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I)
-    SelectBasicBlock(I, MF, FuncInfo, NodeAllocator);
+  std::vector<std::pair<MachineInstr*, unsigned> > PHINodesToUpdate;
+  for (Function::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) {
+    BasicBlock *LLVMBB = &*I;
+    PHINodesToUpdate.clear();
+    SelectBasicBlock(LLVMBB, MF, FuncInfo, PHINodesToUpdate, NodeAllocator);
+    FinishBasicBlock(LLVMBB, MF, FuncInfo, PHINodesToUpdate, NodeAllocator);
+  }
 }
 
 void
 SelectionDAGISel::SelectBasicBlock(BasicBlock *LLVMBB, MachineFunction &MF,
                                    FunctionLoweringInfo &FuncInfo,
+             std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate,
                                    NodeAllocatorType &NodeAllocator) {
-  std::vector<std::pair<MachineInstr*, unsigned> > PHINodesToUpdate;
-  {
-    SelectionDAG DAG(TLI, MF, FuncInfo, 
-                     getAnalysisToUpdate<MachineModuleInfo>(),
-                     NodeAllocator);
-    CurDAG = &DAG;
-  
-    // First step, lower LLVM code to some DAG.  This DAG may use operations and
-    // types that are not supported by the target.
-    BuildSelectionDAG(DAG, LLVMBB, PHINodesToUpdate, FuncInfo);
+  SelectionDAG DAG(TLI, MF, FuncInfo, 
+                   getAnalysisToUpdate<MachineModuleInfo>(),
+                   NodeAllocator);
+  CurDAG = &DAG;
+  
+  // First step, lower LLVM code to some DAG.  This DAG may use operations and
+  // types that are not supported by the target.
+  BuildSelectionDAG(DAG, LLVMBB, PHINodesToUpdate, FuncInfo);
 
-    // Second step, emit the lowered DAG as machine code.
-    CodeGenAndEmitDAG(DAG);
-  }
+  // Second step, emit the lowered DAG as machine code.
+  CodeGenAndEmitDAG(DAG);
+}
 
+void
+SelectionDAGISel::FinishBasicBlock(BasicBlock *LLVMBB, MachineFunction &MF,
+                                   FunctionLoweringInfo &FuncInfo,
+             std::vector<std::pair<MachineInstr*, unsigned> > &PHINodesToUpdate,
+                                   NodeAllocatorType &NodeAllocator) {
   DOUT << "Total amount of phi nodes to update: "
        << PHINodesToUpdate.size() << "\n";
   DEBUG(for (unsigned i = 0, e = PHINodesToUpdate.size(); i != e; ++i)





More information about the llvm-commits mailing list