This code was trying too hard. By eliminating redundant edges in the CFG
authorChris Lattner <sabre@nondot.org>
Sun, 10 Sep 2006 06:36:57 +0000 (06:36 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 10 Sep 2006 06:36:57 +0000 (06:36 +0000)
due to switch cases going to the same place, it make #pred != #phi entries,
breaking live interval analysis.

This fixes 458.sjeng on x86 with llc.

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

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

index 578f8d2f3da88982babddcead346142c604165f9..4c4b0f951d5e0ec9b16fb72183296facb077bd16 100644 (file)
@@ -970,24 +970,21 @@ void SelectionDAGLowering::visitSwitch(SwitchInst &I) {
       // of the jump table.  If the value of the jump table slot corresponds to
       // a case statement, push the case's BB onto the vector, otherwise, push
       // the default BB.
-      std::set<MachineBasicBlock*> UniqueBBs;
       std::vector<MachineBasicBlock*> DestBBs;
       uint64_t TEI = First;
       for (CaseItr ii = Cases.begin(), ee = Cases.end(); ii != ee; ++TEI) {
         if (cast<ConstantIntegral>(ii->first)->getRawValue() == TEI) {
           DestBBs.push_back(ii->second);
-          UniqueBBs.insert(ii->second);
           ++ii;
         } else {
           DestBBs.push_back(Default);
-          UniqueBBs.insert(Default);
         }
       }
       
       // Update successor info
-      for (std::set<MachineBasicBlock*>::iterator ii = UniqueBBs.begin(), 
-           ee = UniqueBBs.end(); ii != ee; ++ii)
-        JumpTableBB->addSuccessor(*ii);
+      for (std::vector<MachineBasicBlock*>::iterator I = DestBBs.begin(), 
+           E = DestBBs.end(); I != E; ++I)
+        JumpTableBB->addSuccessor(*I);
       
       // Create a jump table index for this jump table, or return an existing
       // one.