xref: /llvm-project/llvm/test/Transforms/GVN/PRE/rle-semidominated.ll (revision 23abf931386002fb9d2c11d026846475c224c641)
1; RUN: opt < %s -passes=gvn -S | FileCheck %s
2
3define i32 @main(ptr %p, i32 %x, i32 %y) {
4block1:
5  %z = load i32, ptr %p
6  %cmp = icmp eq i32 %x, %y
7	br i1 %cmp, label %block2, label %block3
8
9block2:
10 br label %block4
11
12block3:
13  %b = bitcast i32 0 to i32
14  store i32 %b, ptr %p
15  br label %block4
16
17block4:
18  %DEAD = load i32, ptr %p
19  ret i32 %DEAD
20}
21
22; CHECK: define i32 @main(ptr %p, i32 %x, i32 %y) {
23; CHECK-NEXT: block1:
24; CHECK-NOT:    %z = load i32, ptr %p
25; CHECK-NEXT:   %cmp = icmp eq i32 %x, %y
26; CHECK-NEXT:   br i1 %cmp, label %block2, label %block3
27; CHECK: block2:
28; CHECK-NEXT:   %DEAD.pre = load i32, ptr %p
29; CHECK-NEXT:   br label %block4
30; CHECK: block3:
31; CHECK-NEXT:   store i32 0, ptr %p
32; CHECK-NEXT:   br label %block4
33; CHECK: block4:
34; CHECK-NEXT:   %DEAD = phi i32 [ 0, %block3 ], [ %DEAD.pre, %block2 ]
35; CHECK-NEXT:   ret i32 %DEAD
36; CHECK-NEXT: }
37