xref: /llvm-project/llvm/test/Analysis/MemorySSA/loop-invariant.ll (revision e50a508b5c3d3d814340e8818c757295d27c48dd)
1; RUN: opt -passes='print<memoryssa>' -disable-output < %s 2>&1 | FileCheck %s
2
3; TODO: The load's MemoryUse can be defined by liveOnEntry. Since
4; %p2 is a loop invariant and the MemoryLoc of load instr and store inst in
5; loop block are NoAlias
6;
7; CHECK: MemoryUse(2)
8; CHECK: %val = load i32, ptr %p2
9define void @gep(ptr %ptr) {
10entry:
11  %p1 = getelementptr i32, ptr %ptr, i32 1
12  br label %tmp
13
14tmp:
15  %p2 = getelementptr i32, ptr %p1, i32 1
16  br label %loop
17
18loop:
19  %x = phi i32 [ 0, %tmp ], [ %x.inc, %loop ]
20  %val = load i32, ptr %p2
21  %p3 = getelementptr i32, ptr %p2, i32 1
22  store volatile i32 0, ptr %p3
23  %x.inc = add i32 %x, %val
24  br label %loop
25}
26
27; CHECK: MemoryUse(2)
28; CHECK-NEXT: %val = load i32, ptr %p2
29define void @load_entry_block(ptr %ptr, ptr %addr) {
30entry:
31  %p1 = load ptr, ptr %ptr
32  br label %tmp
33
34tmp:
35  %p2 = getelementptr i32, ptr %p1, i32 1
36  br label %loop
37
38loop:
39  %x = phi i32 [ 0, %tmp ], [ %x.inc, %loop ]
40  %val = load i32, ptr %p2
41  %p3 = getelementptr i32, ptr %p2, i32 1
42  store volatile i32 0, ptr %p3
43  %x.inc = add i32 %x, %val
44  br label %loop
45}
46