Index: llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp =================================================================== --- llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp +++ llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp @@ -402,9 +402,10 @@ LI.erase(LI.getLoopFor(BB)); } LI.removeBlock(BB); - DeleteDeadBlock(BB, &DTU); - ++NumLoopBlocksDeleted; } + + DeleteDeadBlocks(DeadLoopBlocks, &DTU); + NumLoopBlocksDeleted += DeadLoopBlocks.size(); } /// Constant-fold terminators of blocks acculumated in FoldCandidates into the Index: llvm/trunk/test/Transforms/LoopSimplifyCFG/constant-fold-branch.ll =================================================================== --- llvm/trunk/test/Transforms/LoopSimplifyCFG/constant-fold-branch.ll +++ llvm/trunk/test/Transforms/LoopSimplifyCFG/constant-fold-branch.ll @@ -1,7 +1,4 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; XFAIL: * -; Tests complex_dead_subloop_branch and complex_dead_subloop_switch fail an -; assertion, therefore the CFG simplification is temporarily disabled. ; REQUIRES: asserts ; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -loop-simplifycfg -debug-only=loop-simplifycfg -verify-loop-info -verify-dom-info -verify-loop-lcssa 2>&1 < %s | FileCheck %s ; RUN: opt -S -enable-loop-simplifycfg-term-folding=true -passes='require,loop(simplify-cfg)' -debug-only=loop-simplifycfg -verify-loop-info -verify-dom-info -verify-loop-lcssa 2>&1 < %s | FileCheck %s @@ -2512,6 +2509,15 @@ } define i32 @complex_dead_subloop_branch(i1 %cond1, i1 %cond2, i1 %cond3) { +; CHECK-LABEL: @complex_dead_subloop_branch( +; CHECK-NEXT: entry: +; CHECK-NEXT: br label [[LOOP:%.*]] +; CHECK: loop: +; CHECK-NEXT: br i1 [[COND3:%.*]], label [[LOOP]], label [[EXIT:%.*]] +; CHECK: exit: +; CHECK-NEXT: [[RESULT_LCSSA:%.*]] = phi i32 [ 0, [[LOOP]] ] +; CHECK-NEXT: ret i32 [[RESULT_LCSSA]] +; entry: br label %loop @@ -2540,6 +2546,15 @@ } define i32 @complex_dead_subloop_switch(i1 %cond1, i1 %cond2, i1 %cond3) { +; CHECK-LABEL: @complex_dead_subloop_switch( +; CHECK-NEXT: entry: +; CHECK-NEXT: br label [[LOOP:%.*]] +; CHECK: loop: +; CHECK-NEXT: br i1 [[COND3:%.*]], label [[LOOP]], label [[EXIT:%.*]] +; CHECK: exit: +; CHECK-NEXT: [[RESULT_LCSSA:%.*]] = phi i32 [ 0, [[LOOP]] ] +; CHECK-NEXT: ret i32 [[RESULT_LCSSA]] +; entry: br label %loop