Index: llvm/lib/Analysis/MemorySSA.cpp =================================================================== --- llvm/lib/Analysis/MemorySSA.cpp +++ llvm/lib/Analysis/MemorySSA.cpp @@ -276,11 +276,6 @@ // clobbers where they don't really exist at all. Please see D43269 for // context. switch (II->getIntrinsicID()) { - case Intrinsic::lifetime_start: - if (UseCall) - return {false, NoAlias}; - AR = AA.alias(MemoryLocation(II->getArgOperand(1)), UseLoc); - return {AR != NoAlias, AR}; case Intrinsic::lifetime_end: case Intrinsic::invariant_start: case Intrinsic::invariant_end: Index: llvm/unittests/Analysis/MemorySSATest.cpp =================================================================== --- llvm/unittests/Analysis/MemorySSATest.cpp +++ llvm/unittests/Analysis/MemorySSATest.cpp @@ -1205,8 +1205,8 @@ // %bar = getelementptr i8, i8* %foo, i64 1 // store i8 0, i8* %foo // store i8 0, i8* %bar - // call void @llvm.lifetime.end.p0i8(i64 8, i32* %p) - // call void @llvm.lifetime.start.p0i8(i64 8, i32* %p) + // call void @llvm.lifetime.end.p0i8(i64 8, i32* %foo) + // call void @llvm.lifetime.start.p0i8(i64 8, i32* %foo) // store i8 0, i8* %foo // store i8 0, i8* %bar // ret void @@ -1263,6 +1263,11 @@ MemoryAccess *BarClobber = MSSA.getWalker()->getClobberingMemoryAccess(BarAccess); EXPECT_EQ(BarClobber, LifetimeStartAccess); + + MemoryAccess *LifetimeStartClobber = + MSSA.getWalker()->getClobberingMemoryAccess( + LifetimeStartAccess, MemoryLocation(Foo)); + EXPECT_EQ(LifetimeStartClobber, LifetimeStartAccess); } TEST_F(MemorySSATest, DefOptimizationsAreInvalidatedOnMoving) {