1*46e04f7fSNikita Popov; RUN: opt -disable-output -passes="loop-mssa(loop-rotate),print<memoryssa>" -verify-memoryssa < %s 2>&1 | FileCheck %s 2*46e04f7fSNikita Popov 3*46e04f7fSNikita Popov; CHECK: entry: 4*46e04f7fSNikita Popov; CHECK-NEXT: 3 = MemoryDef(liveOnEntry) 5*46e04f7fSNikita Popov; CHECK-NEXT: store ptr null, ptr %p, align 8 6*46e04f7fSNikita Popov; CHECK-NEXT: MemoryUse(3) 7*46e04f7fSNikita Popov; CHECK-NEXT: %val11 = load ptr, ptr %p, align 8 8*46e04f7fSNikita Popov 9*46e04f7fSNikita Popov; CHECK: loop.latch: 10*46e04f7fSNikita Popov; CHECK-NEXT: 5 = MemoryPhi({loop.latch,1},{loop.latch.lr.ph,3}) 11*46e04f7fSNikita Popov; CHECK-NEXT: MemoryUse(5) 12*46e04f7fSNikita Popov; CHECK-NEXT: %val2 = load ptr, ptr %p, align 8 13*46e04f7fSNikita Popov; CHECK-NEXT: 1 = MemoryDef(5) 14*46e04f7fSNikita Popov; CHECK-NEXT: store ptr null, ptr %p, align 8 15*46e04f7fSNikita Popov; CHECK-NEXT: MemoryUse(1) 16*46e04f7fSNikita Popov; CHECK-NEXT: %val1 = load ptr, ptr %p, align 8 17*46e04f7fSNikita Popov 18*46e04f7fSNikita Popov; CHECK: exit: 19*46e04f7fSNikita Popov; CHECK-NEXT: 4 = MemoryPhi({entry,3},{loop.exit_crit_edge,1}) 20*46e04f7fSNikita Popov 21*46e04f7fSNikita Popovdefine void @test(ptr %p) { 22*46e04f7fSNikita Popoventry: 23*46e04f7fSNikita Popov br label %loop 24*46e04f7fSNikita Popov 25*46e04f7fSNikita Popovloop: 26*46e04f7fSNikita Popov store ptr null, ptr %p 27*46e04f7fSNikita Popov %val1 = load ptr, ptr %p 28*46e04f7fSNikita Popov %cmp = icmp eq ptr %val1, null 29*46e04f7fSNikita Popov br i1 %cmp, label %exit, label %loop.latch 30*46e04f7fSNikita Popov 31*46e04f7fSNikita Popovloop.latch: 32*46e04f7fSNikita Popov %val2 = load ptr, ptr %p 33*46e04f7fSNikita Popov br label %loop 34*46e04f7fSNikita Popov 35*46e04f7fSNikita Popovexit: 36*46e04f7fSNikita Popov ret void 37*46e04f7fSNikita Popov} 38