Skip to content

Commit 0ef7e00

Browse files
committed
[Test] Add a negative unit test
1 parent 3194761 commit 0ef7e00

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

llvm/test/Transforms/GVN/PRE/pre-loop-load.ll

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,56 @@ exit:
5454
ret i32 %x
5555
}
5656

57+
; Do not PRE here because a loop-variant pointer.
58+
define i32 @test_load_on_cold_path_gc_variant_neg(i32 addrspace(1)* addrspace(1)* %pp) gc "statepoint-example" personality i32 ()* @"personality_function" {
59+
; CHECK-LABEL: @test_load_on_cold_path_gc_variant_neg(
60+
; CHECK-NEXT: entry:
61+
; CHECK-NEXT: br label [[LOOP:%.*]]
62+
; CHECK: loop:
63+
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ]
64+
; CHECK-NEXT: [[P:%.*]] = load volatile i32 addrspace(1)*, i32 addrspace(1)* addrspace(1)* [[PP:%.*]], align 8
65+
; CHECK-NEXT: [[X:%.*]] = load i32, i32 addrspace(1)* [[P]], align 4
66+
; CHECK-NEXT: [[COND:%.*]] = icmp ne i32 [[X]], 0
67+
; CHECK-NEXT: br i1 [[COND]], label [[HOT_PATH:%.*]], label [[COLD_PATH:%.*]]
68+
; CHECK: hot_path:
69+
; CHECK-NEXT: br label [[BACKEDGE]]
70+
; CHECK: cold_path:
71+
; CHECK-NEXT: call void @may_free_memory()
72+
; CHECK-NEXT: br label [[BACKEDGE]]
73+
; CHECK: backedge:
74+
; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], [[X]]
75+
; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp ult i32 [[IV_NEXT]], 1000
76+
; CHECK-NEXT: br i1 [[LOOP_COND]], label [[LOOP]], label [[EXIT:%.*]]
77+
; CHECK: exit:
78+
; CHECK-NEXT: ret i32 [[X]]
79+
;
80+
entry:
81+
br label %loop
82+
83+
loop:
84+
%iv = phi i32 [ 0, %entry], [%iv.next, %backedge]
85+
%p = load volatile i32 addrspace(1)*, i32 addrspace(1)* addrspace(1)* %pp
86+
%x = load i32, i32 addrspace(1)* %p
87+
%cond = icmp ne i32 %x, 0
88+
br i1 %cond, label %hot_path, label %cold_path
89+
90+
hot_path:
91+
br label %backedge
92+
93+
cold_path:
94+
call void @may_free_memory()
95+
br label %backedge
96+
97+
backedge:
98+
%iv.next = add i32 %iv, %x
99+
%loop.cond = icmp ult i32 %iv.next, 1000
100+
br i1 %loop.cond, label %loop, label %exit
101+
102+
exit:
103+
ret i32 %x
104+
}
105+
106+
57107
; TODO: We can PRE the load away from the hot path.
58108
define i32 @test_load_on_cold_path(i32* %p) {
59109
; CHECK-LABEL: @test_load_on_cold_path(

0 commit comments

Comments
 (0)