Fix 3113: If we have a dead cyclic PHI, replace the whole thing
authorChris Lattner <sabre@nondot.org>
Mon, 24 Nov 2008 19:25:36 +0000 (19:25 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 24 Nov 2008 19:25:36 +0000 (19:25 +0000)
with an undef.

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

lib/Transforms/Scalar/CodeGenPrepare.cpp
test/Transforms/CodeGenPrepare/2008-11-24-RAUW-Self.ll [new file with mode: 0644]
test/Transforms/CodeGenPrepare/dg.exp [new file with mode: 0644]

index a04ccfea361eefc5a7b33e45e8df40afd1f5db2f..b8664b0d4a1ca4c0ddc1a473ec6d4327945d81b3 100644 (file)
@@ -206,7 +206,10 @@ void CodeGenPrepare::EliminateMostlyEmptyBlock(BasicBlock *BB) {
   if (DestBB->getSinglePredecessor()) {
     // If DestBB has single-entry PHI nodes, fold them.
     while (PHINode *PN = dyn_cast<PHINode>(DestBB->begin())) {
-      PN->replaceAllUsesWith(PN->getIncomingValue(0));
+      Value *NewVal = PN->getIncomingValue(0);
+      // Replace self referencing PHI with undef, it must be dead.
+      if (NewVal == PN) NewVal = UndefValue::get(PN->getType());
+      PN->replaceAllUsesWith(NewVal);
       PN->eraseFromParent();
     }
 
@@ -569,6 +572,9 @@ static bool FindMaximalLegalAddressingMode(Value *Addr, const Type *AccessTy,
   if (Instruction *I = dyn_cast_or_null<Instruction>(AddrInst))
     AddrModeInsts.push_back(I);
 
+  if (AddrInst && !AddrInst->hasOneUse())
+    ;
+  else
   switch (Opcode) {
   case Instruction::PtrToInt:
     // PtrToInt is always a noop, as we know that the int type is pointer sized.
diff --git a/test/Transforms/CodeGenPrepare/2008-11-24-RAUW-Self.ll b/test/Transforms/CodeGenPrepare/2008-11-24-RAUW-Self.ll
new file mode 100644 (file)
index 0000000..12d6c0c
--- /dev/null
@@ -0,0 +1,511 @@
+; RUN: llvm-as < %s | opt -codegenprepare | llvm-dis
+; PR3113
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define fastcc i32 @ascii2flt(i8* %str) nounwind {
+entry:
+       br label %bb2.i
+
+bb2.i:         ; preds = %bb4.i.bb2.i_crit_edge, %entry
+       br i1 false, label %bb4.i, label %base2flt.exit
+
+bb4.i:         ; preds = %bb2.i
+       br i1 false, label %bb11.i, label %bb4.i.bb2.i_crit_edge
+
+bb4.i.bb2.i_crit_edge:         ; preds = %bb4.i
+       br label %bb2.i
+
+bb11.i:                ; preds = %bb4.i
+       br label %bb11.i.base2flt.exit204_crit_edge
+
+bb11.i.base2flt.exit204_crit_edge:             ; preds = %bb11.i
+       br label %base2flt.exit204
+
+bb11.i.bb7.i197_crit_edge:             ; No predecessors!
+       br label %bb7.i197
+
+base2flt.exit:         ; preds = %bb2.i
+       br label %base2flt.exit.base2flt.exit204_crit_edge
+
+base2flt.exit.base2flt.exit204_crit_edge:              ; preds = %base2flt.exit
+       br label %base2flt.exit204
+
+base2flt.exit.bb7.i197_crit_edge:              ; No predecessors!
+       br label %bb7.i197
+
+bb10.i196:             ; preds = %bb7.i197
+       br label %bb10.i196.base2flt.exit204_crit_edge
+
+bb10.i196.base2flt.exit204_crit_edge:          ; preds = %bb7.i197, %bb10.i196
+       br label %base2flt.exit204
+
+bb10.i196.bb7.i197_crit_edge:          ; No predecessors!
+       br label %bb7.i197
+
+bb7.i197:              ; preds = %bb10.i196.bb7.i197_crit_edge, %base2flt.exit.bb7.i197_crit_edge, %bb11.i.bb7.i197_crit_edge
+       %.reg2mem.0 = phi i32 [ 0, %base2flt.exit.bb7.i197_crit_edge ], [ %.reg2mem.0, %bb10.i196.bb7.i197_crit_edge ], [ 0, %bb11.i.bb7.i197_crit_edge ]               ; <i32> [#uses=1]
+       br i1 undef, label %bb10.i196.base2flt.exit204_crit_edge, label %bb10.i196
+
+base2flt.exit204:              ; preds = %bb10.i196.base2flt.exit204_crit_edge, %base2flt.exit.base2flt.exit204_crit_edge, %bb11.i.base2flt.exit204_crit_edge
+       br i1 false, label %base2flt.exit204.bb8_crit_edge, label %bb
+
+base2flt.exit204.bb8_crit_edge:                ; preds = %base2flt.exit204
+       br label %bb8
+
+bb:            ; preds = %base2flt.exit204
+       br i1 false, label %bb.bb18_crit_edge, label %bb1.i
+
+bb.bb18_crit_edge:             ; preds = %bb9, %bb
+       br label %bb18
+
+bb1.i:         ; preds = %bb
+       br i1 false, label %bb1.i.bb7_crit_edge, label %bb1.i158
+
+bb1.i.bb7_crit_edge.loopexit:          ; preds = %bb2.i164
+       br label %bb1.i.bb7_crit_edge
+
+bb1.i.bb7_crit_edge:           ; preds = %bb1.i.bb7_crit_edge.loopexit, %bb1.i
+       br label %bb7.preheader
+
+bb1.i158:              ; preds = %bb1.i
+       br i1 false, label %bb1.i158.bb10.i179_crit_edge, label %bb1.i158.bb2.i164_crit_edge
+
+bb1.i158.bb2.i164_crit_edge:           ; preds = %bb1.i158
+       br label %bb2.i164
+
+bb1.i158.bb10.i179_crit_edge:          ; preds = %bb1.i158
+       br label %bb10.i179
+
+bb2.i164:              ; preds = %bb4.i166.bb2.i164_crit_edge, %bb1.i158.bb2.i164_crit_edge
+       br i1 false, label %bb4.i166, label %bb1.i.bb7_crit_edge.loopexit
+
+bb4.i166:              ; preds = %bb2.i164
+       br i1 false, label %bb4.i166.bb11.i172_crit_edge, label %bb4.i166.bb2.i164_crit_edge
+
+bb4.i166.bb2.i164_crit_edge:           ; preds = %bb4.i166
+       br label %bb2.i164
+
+bb4.i166.bb11.i172_crit_edge:          ; preds = %bb4.i166
+       br label %bb11.i172
+
+bb11.i172:             ; preds = %bb10.i179.bb11.i172_crit_edge, %bb4.i166.bb11.i172_crit_edge
+       br label %bb7.preheader
+
+bb10.i179:             ; preds = %bb9.i182, %bb1.i158.bb10.i179_crit_edge
+       br i1 false, label %bb7.i180, label %bb10.i179.bb11.i172_crit_edge
+
+bb10.i179.bb11.i172_crit_edge:         ; preds = %bb10.i179
+       br label %bb11.i172
+
+bb7.i180:              ; preds = %bb10.i179
+       br i1 false, label %bb7.i180.bb7_crit_edge, label %bb9.i182
+
+bb7.i180.bb7_crit_edge:                ; preds = %bb7.i180
+       br label %bb7.preheader
+
+bb7.preheader:         ; preds = %bb7.i180.bb7_crit_edge, %bb11.i172, %bb1.i.bb7_crit_edge
+       br label %bb7
+
+bb9.i182:              ; preds = %bb7.i180
+       br label %bb10.i179
+
+bb7:           ; preds = %addflt.exit114, %bb7.preheader
+       switch i8 0, label %bb4 [
+               i8 0, label %bb7.bb8_crit_edge
+               i8 46, label %bb7.bb8_crit_edge
+       ]
+
+bb7.bb8_crit_edge:             ; preds = %bb7, %bb7
+       br label %bb8
+
+bb4:           ; preds = %bb7
+       br i1 false, label %bb18.loopexit1, label %bb1.i5
+
+bb1.i5:                ; preds = %bb4
+       br i1 false, label %bb1.i5.mulflt.exit157_crit_edge, label %bb3.i147
+
+bb1.i5.mulflt.exit157_crit_edge:               ; preds = %bb5.i148, %bb1.i5
+       br label %mulflt.exit157
+
+bb3.i147:              ; preds = %bb1.i5
+       br i1 false, label %bb3.i147.mulflt.exit157_crit_edge, label %bb5.i148
+
+bb3.i147.mulflt.exit157_crit_edge:             ; preds = %bb8.i150, %bb3.i147
+       br label %mulflt.exit157
+
+bb5.i148:              ; preds = %bb3.i147
+       br i1 false, label %bb1.i5.mulflt.exit157_crit_edge, label %bb7.i149
+
+bb7.i149:              ; preds = %bb5.i148
+       br i1 false, label %bb8.i150, label %bb7.i149.bb12.i154_crit_edge
+
+bb7.i149.bb12.i154_crit_edge:          ; preds = %bb7.i149
+       br label %bb12.i154
+
+bb8.i150:              ; preds = %bb7.i149
+       br i1 false, label %bb3.i147.mulflt.exit157_crit_edge, label %bb10.i151
+
+bb10.i151:             ; preds = %bb8.i150
+       br label %bb12.i154
+
+bb12.i154:             ; preds = %bb10.i151, %bb7.i149.bb12.i154_crit_edge
+       br label %mulflt.exit157
+
+mulflt.exit157:                ; preds = %bb12.i154, %bb3.i147.mulflt.exit157_crit_edge, %bb1.i5.mulflt.exit157_crit_edge
+       br i1 false, label %mulflt.exit157.base2flt.exit144_crit_edge, label %bb1.i115
+
+mulflt.exit157.base2flt.exit144_crit_edge.loopexit:            ; preds = %bb2.i121
+       br label %mulflt.exit157.base2flt.exit144_crit_edge
+
+mulflt.exit157.base2flt.exit144_crit_edge:             ; preds = %mulflt.exit157.base2flt.exit144_crit_edge.loopexit, %mulflt.exit157
+       br label %base2flt.exit144
+
+bb1.i115:              ; preds = %mulflt.exit157
+       br i1 false, label %bb1.i115.bb10.i136_crit_edge, label %bb1.i115.bb2.i121_crit_edge
+
+bb1.i115.bb2.i121_crit_edge:           ; preds = %bb1.i115
+       br label %bb2.i121
+
+bb1.i115.bb10.i136_crit_edge:          ; preds = %bb1.i115
+       br label %bb10.i136
+
+bb2.i121:              ; preds = %bb4.i123.bb2.i121_crit_edge, %bb1.i115.bb2.i121_crit_edge
+       br i1 false, label %bb4.i123, label %mulflt.exit157.base2flt.exit144_crit_edge.loopexit
+
+bb4.i123:              ; preds = %bb2.i121
+       br i1 false, label %bb4.i123.bb11.i129_crit_edge, label %bb4.i123.bb2.i121_crit_edge
+
+bb4.i123.bb2.i121_crit_edge:           ; preds = %bb4.i123
+       br label %bb2.i121
+
+bb4.i123.bb11.i129_crit_edge:          ; preds = %bb4.i123
+       br label %bb11.i129
+
+bb11.i129:             ; preds = %bb10.i136.bb11.i129_crit_edge, %bb4.i123.bb11.i129_crit_edge
+       br label %base2flt.exit144
+
+bb10.i136:             ; preds = %bb9.i139, %bb1.i115.bb10.i136_crit_edge
+       br i1 false, label %bb7.i137, label %bb10.i136.bb11.i129_crit_edge
+
+bb10.i136.bb11.i129_crit_edge:         ; preds = %bb10.i136
+       br label %bb11.i129
+
+bb7.i137:              ; preds = %bb10.i136
+       br i1 false, label %bb7.i137.base2flt.exit144_crit_edge, label %bb9.i139
+
+bb7.i137.base2flt.exit144_crit_edge:           ; preds = %bb7.i137
+       br label %base2flt.exit144
+
+bb9.i139:              ; preds = %bb7.i137
+       br label %bb10.i136
+
+base2flt.exit144:              ; preds = %bb7.i137.base2flt.exit144_crit_edge, %bb11.i129, %mulflt.exit157.base2flt.exit144_crit_edge
+       br i1 false, label %base2flt.exit144.addflt.exit114_crit_edge, label %bb3.i105
+
+base2flt.exit144.addflt.exit114_crit_edge:             ; preds = %bb3.i105, %base2flt.exit144
+       br label %addflt.exit114
+
+bb3.i105:              ; preds = %base2flt.exit144
+       br i1 false, label %base2flt.exit144.addflt.exit114_crit_edge, label %bb5.i106
+
+bb5.i106:              ; preds = %bb3.i105
+       br i1 false, label %bb5.i106.bb9.i111_crit_edge, label %bb6.i107
+
+bb5.i106.bb9.i111_crit_edge:           ; preds = %bb5.i106
+       br label %bb9.i111
+
+bb6.i107:              ; preds = %bb5.i106
+       br i1 false, label %bb6.i107.addflt.exit114_crit_edge, label %bb8.i108
+
+bb6.i107.addflt.exit114_crit_edge:             ; preds = %bb6.i107
+       br label %addflt.exit114
+
+bb8.i108:              ; preds = %bb6.i107
+       br label %bb9.i111
+
+bb9.i111:              ; preds = %bb8.i108, %bb5.i106.bb9.i111_crit_edge
+       br label %addflt.exit114
+
+addflt.exit114:                ; preds = %bb9.i111, %bb6.i107.addflt.exit114_crit_edge, %base2flt.exit144.addflt.exit114_crit_edge
+       br label %bb7
+
+bb18.loopexit1:                ; preds = %bb4
+       ret i32 -1
+
+bb18:          ; preds = %bb8.bb18_crit_edge, %bb.bb18_crit_edge
+       ret i32 0
+
+bb8:           ; preds = %bb7.bb8_crit_edge, %base2flt.exit204.bb8_crit_edge
+       br i1 false, label %bb9, label %bb8.bb18_crit_edge
+
+bb8.bb18_crit_edge:            ; preds = %bb8
+       br label %bb18
+
+bb9:           ; preds = %bb8
+       br i1 false, label %bb.bb18_crit_edge, label %bb1.i13
+
+bb1.i13:               ; preds = %bb9
+       br i1 false, label %bb1.i13.base2flt.exit102_crit_edge, label %bb1.i73
+
+bb1.i13.base2flt.exit102_crit_edge.loopexit:           ; preds = %bb2.i79
+       br label %bb1.i13.base2flt.exit102_crit_edge
+
+bb1.i13.base2flt.exit102_crit_edge:            ; preds = %bb1.i13.base2flt.exit102_crit_edge.loopexit, %bb1.i13
+       br label %base2flt.exit102
+
+bb1.i73:               ; preds = %bb1.i13
+       br i1 false, label %bb1.i73.bb10.i94_crit_edge, label %bb1.i73.bb2.i79_crit_edge
+
+bb1.i73.bb2.i79_crit_edge:             ; preds = %bb1.i73
+       br label %bb2.i79
+
+bb1.i73.bb10.i94_crit_edge:            ; preds = %bb1.i73
+       br label %bb10.i94
+
+bb2.i79:               ; preds = %bb4.i81.bb2.i79_crit_edge, %bb1.i73.bb2.i79_crit_edge
+       br i1 false, label %bb4.i81, label %bb1.i13.base2flt.exit102_crit_edge.loopexit
+
+bb4.i81:               ; preds = %bb2.i79
+       br i1 false, label %bb4.i81.bb11.i87_crit_edge, label %bb4.i81.bb2.i79_crit_edge
+
+bb4.i81.bb2.i79_crit_edge:             ; preds = %bb4.i81
+       br label %bb2.i79
+
+bb4.i81.bb11.i87_crit_edge:            ; preds = %bb4.i81
+       br label %bb11.i87
+
+bb11.i87:              ; preds = %bb10.i94.bb11.i87_crit_edge, %bb4.i81.bb11.i87_crit_edge
+       br label %base2flt.exit102
+
+bb10.i94:              ; preds = %bb9.i97, %bb1.i73.bb10.i94_crit_edge
+       br i1 false, label %bb7.i95, label %bb10.i94.bb11.i87_crit_edge
+
+bb10.i94.bb11.i87_crit_edge:           ; preds = %bb10.i94
+       br label %bb11.i87
+
+bb7.i95:               ; preds = %bb10.i94
+       br i1 false, label %bb7.i95.base2flt.exit102_crit_edge, label %bb9.i97
+
+bb7.i95.base2flt.exit102_crit_edge:            ; preds = %bb7.i95
+       br label %base2flt.exit102
+
+bb9.i97:               ; preds = %bb7.i95
+       br label %bb10.i94
+
+base2flt.exit102:              ; preds = %bb7.i95.base2flt.exit102_crit_edge, %bb11.i87, %bb1.i13.base2flt.exit102_crit_edge
+       br i1 false, label %base2flt.exit102.mulflt.exit72_crit_edge, label %bb3.i62
+
+base2flt.exit102.mulflt.exit72_crit_edge:              ; preds = %bb5.i63, %base2flt.exit102
+       br label %mulflt.exit72
+
+bb3.i62:               ; preds = %base2flt.exit102
+       br i1 false, label %bb3.i62.mulflt.exit72_crit_edge, label %bb5.i63
+
+bb3.i62.mulflt.exit72_crit_edge:               ; preds = %bb8.i65, %bb3.i62
+       br label %mulflt.exit72
+
+bb5.i63:               ; preds = %bb3.i62
+       br i1 false, label %base2flt.exit102.mulflt.exit72_crit_edge, label %bb7.i64
+
+bb7.i64:               ; preds = %bb5.i63
+       br i1 false, label %bb8.i65, label %bb7.i64.bb12.i69_crit_edge
+
+bb7.i64.bb12.i69_crit_edge:            ; preds = %bb7.i64
+       br label %bb12.i69
+
+bb8.i65:               ; preds = %bb7.i64
+       br i1 false, label %bb3.i62.mulflt.exit72_crit_edge, label %bb10.i66
+
+bb10.i66:              ; preds = %bb8.i65
+       br label %bb12.i69
+
+bb12.i69:              ; preds = %bb10.i66, %bb7.i64.bb12.i69_crit_edge
+       br label %mulflt.exit72
+
+mulflt.exit72:         ; preds = %bb12.i69, %bb3.i62.mulflt.exit72_crit_edge, %base2flt.exit102.mulflt.exit72_crit_edge
+       br i1 false, label %mulflt.exit72.bb10.i58_crit_edge, label %bb3.i50
+
+mulflt.exit72.bb10.i58_crit_edge:              ; preds = %bb3.i50, %mulflt.exit72
+       br label %bb10.i58
+
+bb3.i50:               ; preds = %mulflt.exit72
+       br i1 false, label %mulflt.exit72.bb10.i58_crit_edge, label %bb5.i51
+
+bb5.i51:               ; preds = %bb3.i50
+       br i1 false, label %bb5.i51.bb9.i56_crit_edge, label %bb6.i52
+
+bb5.i51.bb9.i56_crit_edge:             ; preds = %bb5.i51
+       br label %bb9.i56
+
+bb6.i52:               ; preds = %bb5.i51
+       br i1 false, label %bb6.i52.bb10.i58_crit_edge, label %bb8.i53
+
+bb6.i52.bb10.i58_crit_edge:            ; preds = %bb6.i52
+       br label %bb10.i58
+
+bb8.i53:               ; preds = %bb6.i52
+       br label %bb9.i56
+
+bb9.i56:               ; preds = %bb8.i53, %bb5.i51.bb9.i56_crit_edge
+       br label %bb15.preheader
+
+bb10.i58:              ; preds = %bb6.i52.bb10.i58_crit_edge, %mulflt.exit72.bb10.i58_crit_edge
+       br label %bb15.preheader
+
+bb15.preheader:                ; preds = %bb10.i58, %bb9.i56
+       br label %bb15
+
+bb15:          ; preds = %addflt.exit, %bb15.preheader
+       br i1 false, label %bb15.bb18.loopexit_crit_edge, label %bb12
+
+bb15.bb18.loopexit_crit_edge:          ; preds = %bb15
+       br label %bb18.loopexit
+
+bb12:          ; preds = %bb15
+       br i1 false, label %bb12.bb18.loopexit_crit_edge, label %bb1.i21
+
+bb12.bb18.loopexit_crit_edge:          ; preds = %bb12
+       br label %bb18.loopexit
+
+bb1.i21:               ; preds = %bb12
+       br i1 false, label %bb1.i21.mulflt.exit47_crit_edge, label %bb3.i37
+
+bb1.i21.mulflt.exit47_crit_edge:               ; preds = %bb5.i38, %bb1.i21
+       br label %mulflt.exit47
+
+bb3.i37:               ; preds = %bb1.i21
+       br i1 false, label %bb3.i37.mulflt.exit47_crit_edge, label %bb5.i38
+
+bb3.i37.mulflt.exit47_crit_edge:               ; preds = %bb8.i40, %bb3.i37
+       br label %mulflt.exit47
+
+bb5.i38:               ; preds = %bb3.i37
+       br i1 false, label %bb1.i21.mulflt.exit47_crit_edge, label %bb7.i39
+
+bb7.i39:               ; preds = %bb5.i38
+       br i1 false, label %bb8.i40, label %bb7.i39.bb12.i44_crit_edge
+
+bb7.i39.bb12.i44_crit_edge:            ; preds = %bb7.i39
+       br label %bb12.i44
+
+bb8.i40:               ; preds = %bb7.i39
+       br i1 false, label %bb3.i37.mulflt.exit47_crit_edge, label %bb10.i41
+
+bb10.i41:              ; preds = %bb8.i40
+       br label %bb12.i44
+
+bb12.i44:              ; preds = %bb10.i41, %bb7.i39.bb12.i44_crit_edge
+       br label %mulflt.exit47
+
+mulflt.exit47:         ; preds = %bb12.i44, %bb3.i37.mulflt.exit47_crit_edge, %bb1.i21.mulflt.exit47_crit_edge
+       br i1 false, label %mulflt.exit47.base2flt.exit34_crit_edge, label %bb1.i15
+
+mulflt.exit47.base2flt.exit34_crit_edge.loopexit:              ; preds = %bb2.i20
+       br label %mulflt.exit47.base2flt.exit34_crit_edge
+
+mulflt.exit47.base2flt.exit34_crit_edge:               ; preds = %mulflt.exit47.base2flt.exit34_crit_edge.loopexit, %mulflt.exit47
+       br label %base2flt.exit34
+
+bb1.i15:               ; preds = %mulflt.exit47
+       br i1 false, label %bb1.i15.bb10.i31_crit_edge, label %bb1.i15.bb2.i20_crit_edge
+
+bb1.i15.bb2.i20_crit_edge:             ; preds = %bb1.i15
+       br label %bb2.i20
+
+bb1.i15.bb10.i31_crit_edge:            ; preds = %bb1.i15
+       br label %bb10.i31
+
+bb2.i20:               ; preds = %bb4.i22.bb2.i20_crit_edge, %bb1.i15.bb2.i20_crit_edge
+       br i1 false, label %bb4.i22, label %mulflt.exit47.base2flt.exit34_crit_edge.loopexit
+
+bb4.i22:               ; preds = %bb2.i20
+       br i1 false, label %bb4.i22.bb11.i28_crit_edge, label %bb4.i22.bb2.i20_crit_edge
+
+bb4.i22.bb2.i20_crit_edge:             ; preds = %bb4.i22
+       br label %bb2.i20
+
+bb4.i22.bb11.i28_crit_edge:            ; preds = %bb4.i22
+       br label %bb11.i28
+
+bb11.i28:              ; preds = %bb10.i31.bb11.i28_crit_edge, %bb4.i22.bb11.i28_crit_edge
+       br label %base2flt.exit34
+
+bb10.i31:              ; preds = %bb9.i33, %bb1.i15.bb10.i31_crit_edge
+       br i1 false, label %bb7.i32, label %bb10.i31.bb11.i28_crit_edge
+
+bb10.i31.bb11.i28_crit_edge:           ; preds = %bb10.i31
+       br label %bb11.i28
+
+bb7.i32:               ; preds = %bb10.i31
+       br i1 false, label %bb7.i32.base2flt.exit34_crit_edge, label %bb9.i33
+
+bb7.i32.base2flt.exit34_crit_edge:             ; preds = %bb7.i32
+       br label %base2flt.exit34
+
+bb9.i33:               ; preds = %bb7.i32
+       br label %bb10.i31
+
+base2flt.exit34:               ; preds = %bb7.i32.base2flt.exit34_crit_edge, %bb11.i28, %mulflt.exit47.base2flt.exit34_crit_edge
+       br i1 false, label %base2flt.exit34.mulflt.exit_crit_edge, label %bb3.i9
+
+base2flt.exit34.mulflt.exit_crit_edge:         ; preds = %bb5.i10, %base2flt.exit34
+       br label %mulflt.exit
+
+bb3.i9:                ; preds = %base2flt.exit34
+       br i1 false, label %bb3.i9.mulflt.exit_crit_edge, label %bb5.i10
+
+bb3.i9.mulflt.exit_crit_edge:          ; preds = %bb8.i11, %bb3.i9
+       br label %mulflt.exit
+
+bb5.i10:               ; preds = %bb3.i9
+       br i1 false, label %base2flt.exit34.mulflt.exit_crit_edge, label %bb7.i
+
+bb7.i:         ; preds = %bb5.i10
+       br i1 false, label %bb8.i11, label %bb7.i.bb12.i_crit_edge
+
+bb7.i.bb12.i_crit_edge:                ; preds = %bb7.i
+       br label %bb12.i
+
+bb8.i11:               ; preds = %bb7.i
+       br i1 false, label %bb3.i9.mulflt.exit_crit_edge, label %bb10.i12
+
+bb10.i12:              ; preds = %bb8.i11
+       br label %bb12.i
+
+bb12.i:                ; preds = %bb10.i12, %bb7.i.bb12.i_crit_edge
+       br label %mulflt.exit
+
+mulflt.exit:           ; preds = %bb12.i, %bb3.i9.mulflt.exit_crit_edge, %base2flt.exit34.mulflt.exit_crit_edge
+       br i1 false, label %mulflt.exit.addflt.exit_crit_edge, label %bb3.i
+
+mulflt.exit.addflt.exit_crit_edge:             ; preds = %bb3.i, %mulflt.exit
+       br label %addflt.exit
+
+bb3.i:         ; preds = %mulflt.exit
+       br i1 false, label %mulflt.exit.addflt.exit_crit_edge, label %bb5.i
+
+bb5.i:         ; preds = %bb3.i
+       br i1 false, label %bb5.i.bb9.i_crit_edge, label %bb6.i
+
+bb5.i.bb9.i_crit_edge:         ; preds = %bb5.i
+       br label %bb9.i
+
+bb6.i:         ; preds = %bb5.i
+       br i1 false, label %bb6.i.addflt.exit_crit_edge, label %bb8.i
+
+bb6.i.addflt.exit_crit_edge:           ; preds = %bb6.i
+       br label %addflt.exit
+
+bb8.i:         ; preds = %bb6.i
+       br label %bb9.i
+
+bb9.i:         ; preds = %bb8.i, %bb5.i.bb9.i_crit_edge
+       br label %addflt.exit
+
+addflt.exit:           ; preds = %bb9.i, %bb6.i.addflt.exit_crit_edge, %mulflt.exit.addflt.exit_crit_edge
+       br label %bb15
+
+bb18.loopexit:         ; preds = %bb12.bb18.loopexit_crit_edge, %bb15.bb18.loopexit_crit_edge
+       ret i32 0
+}
diff --git a/test/Transforms/CodeGenPrepare/dg.exp b/test/Transforms/CodeGenPrepare/dg.exp
new file mode 100644 (file)
index 0000000..de42dad
--- /dev/null
@@ -0,0 +1,3 @@
+load_lib llvm.exp
+
+RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.ll]]