diff --git a/llvm/unittests/Transforms/Utils/BasicBlockUtilsTest.cpp b/llvm/unittests/Transforms/Utils/BasicBlockUtilsTest.cpp index d5b4f6b6d6593..0856ac698e5a0 100644 --- a/llvm/unittests/Transforms/Utils/BasicBlockUtilsTest.cpp +++ b/llvm/unittests/Transforms/Utils/BasicBlockUtilsTest.cpp @@ -354,6 +354,37 @@ define void @foo() { } #endif +TEST(BasicBlockUtils, splitBlockBefore2) { + LLVMContext C; + std::unique_ptr M = parseIR(C, R"IR( +define void @split-block-before-test(i1 %flag) { +entry: + br label %loop + +loop: + br i1 %flag, label %loop, label %exit + +exit: + ret void +} +)IR"); + Function *F = M->getFunction("split-block-before-test"); + DominatorTree DT(*F); + LoopInfo LI(DT); + + EXPECT_TRUE(DT.verify()); + LI.verify(DT); + auto *LoopBB = getBasicBlockByName(*F, "loop"); + DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Eager); + auto *New = splitBlockBefore(LoopBB, LoopBB->getFirstInsertionPt(), &DTU, &LI, + /* MemorySSAUpdater */ nullptr, + LoopBB->getName() + ".split"); + + EXPECT_TRUE(DT.verify()); + LI.verify(DT); + EXPECT_EQ(LI.getLoopFor(New)->getHeader(), New); +} + TEST(BasicBlockUtils, NoUnreachableBlocksToEliminate) { LLVMContext C; std::unique_ptr M = parseIR(C, R"IR(