diff options
Diffstat (limited to 'llvm/unittests/Transforms/Utils/MemorySSA.cpp')
-rw-r--r-- | llvm/unittests/Transforms/Utils/MemorySSA.cpp | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/llvm/unittests/Transforms/Utils/MemorySSA.cpp b/llvm/unittests/Transforms/Utils/MemorySSA.cpp index 0df476bc28c..95ec3ed55e6 100644 --- a/llvm/unittests/Transforms/Utils/MemorySSA.cpp +++ b/llvm/unittests/Transforms/Utils/MemorySSA.cpp @@ -365,62 +365,6 @@ TEST_F(MemorySSATest, MoveAStoreUpdaterMove) { MSSA.verifyMemorySSA(); } -TEST_F(MemorySSATest, MoveAStoreAllAround) { - // We create a diamond where there is a in the entry, a store on one side, and - // a load at the end. After building MemorySSA, we test updating by moving - // the store from the side block to the entry block, then to the other side - // block, then to before the load. This does not destroy the old access. - F = Function::Create( - FunctionType::get(B.getVoidTy(), {B.getInt8PtrTy()}, false), - GlobalValue::ExternalLinkage, "F", &M); - BasicBlock *Entry(BasicBlock::Create(C, "", F)); - BasicBlock *Left(BasicBlock::Create(C, "", F)); - BasicBlock *Right(BasicBlock::Create(C, "", F)); - BasicBlock *Merge(BasicBlock::Create(C, "", F)); - B.SetInsertPoint(Entry); - Argument *PointerArg = &*F->arg_begin(); - StoreInst *EntryStore = B.CreateStore(B.getInt8(16), PointerArg); - B.CreateCondBr(B.getTrue(), Left, Right); - B.SetInsertPoint(Left); - auto *SideStore = B.CreateStore(B.getInt8(16), PointerArg); - BranchInst::Create(Merge, Left); - BranchInst::Create(Merge, Right); - B.SetInsertPoint(Merge); - auto *MergeLoad = B.CreateLoad(PointerArg); - setupAnalyses(); - MemorySSA &MSSA = *Analyses->MSSA; - MemorySSAUpdater Updater(&MSSA); - - // Move the store - auto *EntryStoreAccess = MSSA.getMemoryAccess(EntryStore); - auto *SideStoreAccess = MSSA.getMemoryAccess(SideStore); - // Before, the load will point to a phi of the EntryStore and SideStore. - auto *LoadAccess = cast<MemoryUse>(MSSA.getMemoryAccess(MergeLoad)); - EXPECT_TRUE(isa<MemoryPhi>(LoadAccess->getDefiningAccess())); - MemoryPhi *MergePhi = cast<MemoryPhi>(LoadAccess->getDefiningAccess()); - EXPECT_EQ(MergePhi->getIncomingValue(1), EntryStoreAccess); - EXPECT_EQ(MergePhi->getIncomingValue(0), SideStoreAccess); - // Move the store before the entry store - SideStore->moveBefore(*EntryStore->getParent(), EntryStore->getIterator()); - Updater.moveBefore(SideStoreAccess, EntryStoreAccess); - // After, it's a phi of the entry store. - EXPECT_EQ(MergePhi->getIncomingValue(0), EntryStoreAccess); - EXPECT_EQ(MergePhi->getIncomingValue(1), EntryStoreAccess); - MSSA.verifyMemorySSA(); - // Now move the store to the right branch - SideStore->moveBefore(*Right, Right->begin()); - Updater.moveToPlace(SideStoreAccess, Right, MemorySSA::Beginning); - MSSA.verifyMemorySSA(); - EXPECT_EQ(MergePhi->getIncomingValue(0), EntryStoreAccess); - EXPECT_EQ(MergePhi->getIncomingValue(1), SideStoreAccess); - // Now move it before the load - SideStore->moveBefore(MergeLoad); - Updater.moveBefore(SideStoreAccess, LoadAccess); - EXPECT_EQ(MergePhi->getIncomingValue(0), EntryStoreAccess); - EXPECT_EQ(MergePhi->getIncomingValue(1), EntryStoreAccess); - MSSA.verifyMemorySSA(); -} - TEST_F(MemorySSATest, RemoveAPhi) { // We create a diamond where there is a store on one side, and then a load // after the merge point. This enables us to test a bunch of different |