Ensure that HandlePHINodesInSuccessorBlocks is run for all blocks,
authorDan Gohman <gohman@apple.com>
Tue, 2 Sep 2008 20:17:56 +0000 (20:17 +0000)
committerDan Gohman <gohman@apple.com>
Tue, 2 Sep 2008 20:17:56 +0000 (20:17 +0000)
even in FastISel mode in the case where FastISel successfully
selects all the instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55641 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index 9b982f4fb4a91092df9021f35674a32dbc19cdd9..f0afdae866be429cd62114f96bed00704e489944 100644 (file)
@@ -5536,7 +5536,7 @@ void SelectionDAGISel::SelectBasicBlock(BasicBlock *LLVMBB,
     }
 
   // Handle PHI nodes in successor blocks.
-  if (Begin != End && End == LLVMBB->end())
+  if (End == LLVMBB->end())
     HandlePHINodesInSuccessorBlocks(LLVMBB);
     
   // Make sure the root of the DAG is up-to-date.
@@ -5798,8 +5798,14 @@ void SelectionDAGISel::SelectAllBasicBlocks(Function &Fn, MachineFunction &MF) {
       }
     }
 
-    if (Begin != End)
-      SelectBasicBlock(LLVMBB, Begin, End);
+    // Run SelectionDAG instruction selection on the remainder of the block
+    // not handled by FastISel. If FastISel is not run, this is the entire
+    // block. If FastISel is run and happens to handle all of the
+    // LLVM Instructions in the block, [Begin,End) will be an empty range,
+    // but we still need to run this so that
+    // HandlePHINodesInSuccessorBlocks is called and any resulting code
+    // is emitted.
+    SelectBasicBlock(LLVMBB, Begin, End);
 
     FinishBasicBlock();
   }