46 lines · plain
1; RUN: opt -passes='print<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s2 3; TODO: The load's MemoryUse can be defined by liveOnEntry. Since4; %p2 is a loop invariant and the MemoryLoc of load instr and store inst in5; loop block are NoAlias6;7; CHECK: MemoryUse(2)8; CHECK: %val = load i32, ptr %p29define void @gep(ptr %ptr) {10entry:11 %p1 = getelementptr i32, ptr %ptr, i32 112 br label %tmp13 14tmp:15 %p2 = getelementptr i32, ptr %p1, i32 116 br label %loop17 18loop:19 %x = phi i32 [ 0, %tmp ], [ %x.inc, %loop ]20 %val = load i32, ptr %p221 %p3 = getelementptr i32, ptr %p2, i32 122 store volatile i32 0, ptr %p323 %x.inc = add i32 %x, %val24 br label %loop25}26 27; CHECK: MemoryUse(2)28; CHECK-NEXT: %val = load i32, ptr %p229define void @load_entry_block(ptr %ptr, ptr %addr) {30entry:31 %p1 = load ptr, ptr %ptr32 br label %tmp33 34tmp:35 %p2 = getelementptr i32, ptr %p1, i32 136 br label %loop37 38loop:39 %x = phi i32 [ 0, %tmp ], [ %x.inc, %loop ]40 %val = load i32, ptr %p241 %p3 = getelementptr i32, ptr %p2, i32 142 store volatile i32 0, ptr %p343 %x.inc = add i32 %x, %val44 br label %loop45}46