[llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

Chris Lattner lattner at cs.uiuc.edu
Tue Mar 29 17:11:00 PST 2005



Changes in directory llvm/lib/CodeGen/SelectionDAG:

SelectionDAGISel.cpp updated: 1.35 -> 1.36
---
Log message:

Instead of setting up the CFG edges at selectiondag construction time, set
them up after the code has been emitted.  This allows targets to select one
mbb as multiple mbb's as needed.


---
Diffs of the changes:  (+15 -7)

 SelectionDAGISel.cpp |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)


Index: llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
diff -u llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.35 llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.36
--- llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1.35	Tue Mar 29 13:09:56 2005
+++ llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp	Tue Mar 29 19:10:47 2005
@@ -414,7 +414,6 @@
 void SelectionDAGLowering::visitBr(BranchInst &I) {
   // Update machine-CFG edges.
   MachineBasicBlock *Succ0MBB = FuncInfo.MBBMap[I.getSuccessor(0)];
-  CurMBB->addSuccessor(Succ0MBB);
 
   // Figure out which block is immediately after the current one.
   MachineBasicBlock *NextBlock = 0;
@@ -429,7 +428,6 @@
 			      DAG.getBasicBlock(Succ0MBB)));
   } else {
     MachineBasicBlock *Succ1MBB = FuncInfo.MBBMap[I.getSuccessor(1)];
-    CurMBB->addSuccessor(Succ1MBB);
 
     SDOperand Cond = getValue(I.getCondition());
 
@@ -893,7 +891,8 @@
     // anything special.
     if (OldRoot != SDL.DAG.getRoot()) {
       unsigned a = 0;
-      for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end(); AI != E; ++AI,++a)
+      for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end();
+           AI != E; ++AI,++a)
         if (!AI->use_empty()) {
           SDL.setValue(AI, Args[a]);
           SDOperand Copy = 
@@ -904,7 +903,8 @@
       // Otherwise, if any argument is only accessed in a single basic block,
       // emit that argument only to that basic block.
       unsigned a = 0;
-      for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end(); AI != E; ++AI,++a)
+      for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end();
+           AI != E; ++AI,++a)
         if (!AI->use_empty()) {
           if (BasicBlock *BBU = IsOnlyUsedInOneBasicBlock(AI)) {
             FuncInfo.BlockLocalArguments.insert(std::make_pair(BBU,
@@ -1058,8 +1058,8 @@
   DEBUG(std::cerr << "Legalized selection DAG:\n");
   DEBUG(DAG.dump());
 
-  // Finally, instruction select all of the operations to machine code, adding
-  // the code to the MachineBasicBlock.
+  // Third, instruction select all of the operations to machine code, adding the
+  // code to the MachineBasicBlock.
   InstructionSelectBasicBlock(DAG);
 
   if (ViewDAGs) DAG.viewGraph();
@@ -1067,7 +1067,7 @@
   DEBUG(std::cerr << "Selected machine code:\n");
   DEBUG(BB->dump());
 
-  // Finally, now that we know what the last MBB the LLVM BB expanded is, update
+  // Next, now that we know what the last MBB the LLVM BB expanded is, update
   // PHI nodes in successors.
   for (unsigned i = 0, e = PHINodesToUpdate.size(); i != e; ++i) {
     MachineInstr *PHI = PHINodesToUpdate[i].first;
@@ -1076,4 +1076,12 @@
     PHI->addRegOperand(PHINodesToUpdate[i].second);
     PHI->addMachineBasicBlockOperand(BB);
   }
+
+  // Finally, add the CFG edges from the last selected MBB to the successor
+  // MBBs.
+  TerminatorInst *TI = LLVMBB->getTerminator();
+  for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i) {
+    MachineBasicBlock *Succ0MBB = FuncInfo.MBBMap[TI->getSuccessor(i)];
+    BB->addSuccessor(Succ0MBB);
+  }
 }






More information about the llvm-commits mailing list