Skip to content

Commit 4ee6943

Browse files
authored
[GVN][Tests] Add MSSA coverage to some PRE tests 3/N (#150603)
Previous patch in this series #137814
1 parent 7476360 commit 4ee6943

File tree

6 files changed

+162
-56
lines changed

6 files changed

+162
-56
lines changed
Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,40 @@
1-
; RUN: opt -S -passes=gvn < %s | FileCheck %s
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S -passes=gvn < %s | FileCheck %s --check-prefixes=CHECK,MDEP
3+
; RUN: opt -S -passes='gvn<memoryssa>' < %s | FileCheck %s --check-prefixes=CHECK,MSSA
24

35
define i32 @test1(ptr %p, i1 %C) {
4-
; CHECK-LABEL: @test1(
6+
; MDEP-LABEL: define i32 @test1(
7+
; MDEP-SAME: ptr [[P:%.*]], i1 [[C:%.*]]) {
8+
; MDEP-NEXT: [[BLOCK1:.*:]]
9+
; MDEP-NEXT: br i1 [[C]], label %[[BLOCK2:.*]], label %[[BLOCK3:.*]]
10+
; MDEP: [[BLOCK2]]:
11+
; MDEP-NEXT: [[PRE_PRE:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG0:![0-9]+]], !invariant.group [[META1:![0-9]+]]
12+
; MDEP-NEXT: br label %[[BLOCK4:.*]]
13+
; MDEP: [[BLOCK3]]:
14+
; MDEP-NEXT: store i32 0, ptr [[P]], align 4
15+
; MDEP-NEXT: br label %[[BLOCK4]]
16+
; MDEP: [[BLOCK4]]:
17+
; MDEP-NEXT: [[PRE:%.*]] = phi i32 [ 0, %[[BLOCK3]] ], [ [[PRE_PRE]], %[[BLOCK2]] ]
18+
; MDEP-NEXT: ret i32 [[PRE]]
19+
;
20+
; MSSA-LABEL: define i32 @test1(
21+
; MSSA-SAME: ptr [[P:%.*]], i1 [[C:%.*]]) {
22+
; MSSA-NEXT: [[BLOCK1:.*:]]
23+
; MSSA-NEXT: br i1 [[C]], label %[[BLOCK2:.*]], label %[[BLOCK3:.*]]
24+
; MSSA: [[BLOCK2]]:
25+
; MSSA-NEXT: br label %[[BLOCK4:.*]]
26+
; MSSA: [[BLOCK3]]:
27+
; MSSA-NEXT: store i32 0, ptr [[P]], align 4
28+
; MSSA-NEXT: br label %[[BLOCK4]]
29+
; MSSA: [[BLOCK4]]:
30+
; MSSA-NEXT: [[PRE:%.*]] = load i32, ptr [[P]], align 4, !range [[RNG0:![0-9]+]], !invariant.group [[META1:![0-9]+]]
31+
; MSSA-NEXT: ret i32 [[PRE]]
32+
;
533
block1:
6-
br i1 %C, label %block2, label %block3
34+
br i1 %C, label %block2, label %block3
735

836
block2:
9-
br label %block4
10-
; CHECK: block2:
11-
; CHECK-NEXT: load i32, ptr %p, align 4, !range !0, !invariant.group !1
37+
br label %block4
1238

1339
block3:
1440
store i32 0, ptr %p
@@ -22,3 +48,12 @@ block4:
2248

2349
!0 = !{i32 40, i32 100}
2450
!1 = !{!"magic ptr"}
51+
;.
52+
; MDEP: [[RNG0]] = !{i32 40, i32 100}
53+
; MDEP: [[META1]] = !{!"magic ptr"}
54+
;.
55+
; MSSA: [[RNG0]] = !{i32 40, i32 100}
56+
; MSSA: [[META1]] = !{!"magic ptr"}
57+
;.
58+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
59+
; CHECK: {{.*}}

llvm/test/Transforms/GVN/PRE/load-pre-across-backedge.ll

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -passes=gvn -S < %s | FileCheck %s
2+
; RUN: opt -passes=gvn -S < %s | FileCheck %s --check-prefixes=CHECK,MDEP
3+
; RUN: opt -passes='gvn<memoryssa>' -S < %s | FileCheck %s --check-prefixes=CHECK,MSSA
34

45
; Check that PRE-LOAD across backedge does not
56
; result in invalid dominator tree.
@@ -43,3 +44,6 @@ bb3:
4344
call void @use(i32 %v)
4445
br label %bb2
4546
}
47+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
48+
; MDEP: {{.*}}
49+
; MSSA: {{.*}}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -S -o - -passes=gvn %s | FileCheck %s
2+
; RUN: opt -S -o - -passes=gvn %s | FileCheck %s --check-prefixes=CHECK,MDEP
3+
; RUN: opt -S -o - -passes='gvn<memoryssa>' %s | FileCheck %s --check-prefixes=CHECK,MSSA
34

45
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
56

@@ -143,3 +144,6 @@ if.end:
143144
file: !12,
144145
isOptimized: true, flags: "-O2",
145146
splitDebugFilename: "abc.debug", emissionKind: 2)
147+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
148+
; MDEP: {{.*}}
149+
; MSSA: {{.*}}

llvm/test/Transforms/GVN/PRE/lpre-call-wrap.ll

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -S -passes=gvn -enable-load-pre < %s | FileCheck %s
2+
; RUN: opt -S -passes=gvn -enable-load-pre < %s | FileCheck %s --check-prefixes=CHECK,MDEP
3+
; RUN: opt -S -passes='gvn<memoryssa>' -enable-load-pre < %s | FileCheck %s --check-prefixes=CHECK,MSSA
34
;
45
; Make sure the load in bb3.backedge is removed and moved into bb1 after the
56
; call. This makes the non-call case faster.
@@ -18,31 +19,56 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
1819
%struct.A = type { i32, i32 }
1920

2021
define void @_Z12testfunctionR1A(ptr %iter) {
21-
; CHECK-LABEL: @_Z12testfunctionR1A(
22-
; CHECK-NEXT: entry:
23-
; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr [[ITER:%.*]], align 4
24-
; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP0]], 0
25-
; CHECK-NEXT: br i1 [[TMP1]], label [[RETURN:%.*]], label [[BB_NPH:%.*]]
26-
; CHECK: bb.nph:
27-
; CHECK-NEXT: [[TMP2:%.*]] = getelementptr [[STRUCT_A:%.*]], ptr [[ITER]], i32 0, i32 1
28-
; CHECK-NEXT: br label [[BB:%.*]]
29-
; CHECK: bb:
30-
; CHECK-NEXT: [[DOTRLE:%.*]] = phi i32 [ [[TMP0]], [[BB_NPH]] ], [ [[TMP6:%.*]], [[BB3_BACKEDGE:%.*]] ]
31-
; CHECK-NEXT: [[TMP3:%.*]] = add i32 [[DOTRLE]], 1
32-
; CHECK-NEXT: store i32 [[TMP3]], ptr [[ITER]], align 4
33-
; CHECK-NEXT: [[TMP4:%.*]] = load i32, ptr [[TMP2]], align 4
34-
; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP3]], [[TMP4]]
35-
; CHECK-NEXT: br i1 [[TMP5]], label [[BB1:%.*]], label [[BB3_BACKEDGE]]
36-
; CHECK: bb1:
37-
; CHECK-NEXT: tail call void @_Z1gv()
38-
; CHECK-NEXT: [[DOTPRE:%.*]] = load i32, ptr [[ITER]], align 4
39-
; CHECK-NEXT: br label [[BB3_BACKEDGE]]
40-
; CHECK: bb3.backedge:
41-
; CHECK-NEXT: [[TMP6]] = phi i32 [ [[DOTPRE]], [[BB1]] ], [ [[TMP3]], [[BB]] ]
42-
; CHECK-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0
43-
; CHECK-NEXT: br i1 [[TMP7]], label [[RETURN]], label [[BB]]
44-
; CHECK: return:
45-
; CHECK-NEXT: ret void
22+
; MDEP-LABEL: @_Z12testfunctionR1A(
23+
; MDEP-NEXT: entry:
24+
; MDEP-NEXT: [[TMP0:%.*]] = load i32, ptr [[ITER:%.*]], align 4
25+
; MDEP-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP0]], 0
26+
; MDEP-NEXT: br i1 [[TMP1]], label [[RETURN:%.*]], label [[BB_NPH:%.*]]
27+
; MDEP: bb.nph:
28+
; MDEP-NEXT: [[TMP2:%.*]] = getelementptr [[STRUCT_A:%.*]], ptr [[ITER]], i32 0, i32 1
29+
; MDEP-NEXT: br label [[BB:%.*]]
30+
; MDEP: bb:
31+
; MDEP-NEXT: [[DOTRLE:%.*]] = phi i32 [ [[TMP0]], [[BB_NPH]] ], [ [[TMP6:%.*]], [[BB3_BACKEDGE:%.*]] ]
32+
; MDEP-NEXT: [[TMP3:%.*]] = add i32 [[DOTRLE]], 1
33+
; MDEP-NEXT: store i32 [[TMP3]], ptr [[ITER]], align 4
34+
; MDEP-NEXT: [[TMP4:%.*]] = load i32, ptr [[TMP2]], align 4
35+
; MDEP-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP3]], [[TMP4]]
36+
; MDEP-NEXT: br i1 [[TMP5]], label [[BB1:%.*]], label [[BB3_BACKEDGE]]
37+
; MDEP: bb1:
38+
; MDEP-NEXT: tail call void @_Z1gv()
39+
; MDEP-NEXT: [[DOTPRE:%.*]] = load i32, ptr [[ITER]], align 4
40+
; MDEP-NEXT: br label [[BB3_BACKEDGE]]
41+
; MDEP: bb3.backedge:
42+
; MDEP-NEXT: [[TMP6]] = phi i32 [ [[DOTPRE]], [[BB1]] ], [ [[TMP3]], [[BB]] ]
43+
; MDEP-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0
44+
; MDEP-NEXT: br i1 [[TMP7]], label [[RETURN]], label [[BB]]
45+
; MDEP: return:
46+
; MDEP-NEXT: ret void
47+
;
48+
; MSSA-LABEL: @_Z12testfunctionR1A(
49+
; MSSA-NEXT: entry:
50+
; MSSA-NEXT: [[TMP0:%.*]] = load i32, ptr [[ITER:%.*]], align 4
51+
; MSSA-NEXT: [[TMP1:%.*]] = icmp eq i32 [[TMP0]], 0
52+
; MSSA-NEXT: br i1 [[TMP1]], label [[RETURN:%.*]], label [[BB_NPH:%.*]]
53+
; MSSA: bb.nph:
54+
; MSSA-NEXT: [[TMP2:%.*]] = getelementptr [[STRUCT_A:%.*]], ptr [[ITER]], i32 0, i32 1
55+
; MSSA-NEXT: br label [[BB:%.*]]
56+
; MSSA: bb:
57+
; MSSA-NEXT: [[DOTRLE:%.*]] = phi i32 [ [[TMP0]], [[BB_NPH]] ], [ [[TMP6:%.*]], [[BB3_BACKEDGE:%.*]] ]
58+
; MSSA-NEXT: [[TMP3:%.*]] = add i32 [[DOTRLE]], 1
59+
; MSSA-NEXT: store i32 [[TMP3]], ptr [[ITER]], align 4
60+
; MSSA-NEXT: [[TMP4:%.*]] = load i32, ptr [[TMP2]], align 4
61+
; MSSA-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP3]], [[TMP4]]
62+
; MSSA-NEXT: br i1 [[TMP5]], label [[BB1:%.*]], label [[BB3_BACKEDGE]]
63+
; MSSA: bb1:
64+
; MSSA-NEXT: tail call void @_Z1gv()
65+
; MSSA-NEXT: br label [[BB3_BACKEDGE]]
66+
; MSSA: bb3.backedge:
67+
; MSSA-NEXT: [[TMP6]] = load i32, ptr [[ITER]], align 4
68+
; MSSA-NEXT: [[TMP7:%.*]] = icmp eq i32 [[TMP6]], 0
69+
; MSSA-NEXT: br i1 [[TMP7]], label [[RETURN]], label [[BB]]
70+
; MSSA: return:
71+
; MSSA-NEXT: ret void
4672
;
4773
entry:
4874
%0 = getelementptr %struct.A, ptr %iter, i32 0, i32 0 ; <ptr> [#uses=3]
@@ -76,3 +102,5 @@ return: ; preds = %bb3.backedge, %entry
76102
}
77103

78104
declare void @_Z1gv()
105+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
106+
; CHECK: {{.*}}
Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,30 @@
1-
; RUN: opt < %s -data-layout="e-p:32:32:32-p1:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-n8:16:32" -passes=gvn,dce -S | FileCheck %s
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt < %s -data-layout="e-p:32:32:32-p1:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-n8:16:32" -passes=gvn,dce -S | FileCheck %s --check-prefixes=CHECK,MDEP
3+
; RUN: opt < %s -data-layout="e-p:32:32:32-p1:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-n8:16:32" -passes='gvn<memoryssa>',dce -S | FileCheck %s --check-prefixes=CHECK,MSSA
24

35
define i8 @coerce_offset0_addrspacecast(i32 %V, ptr %P) {
6+
; MDEP-LABEL: define i8 @coerce_offset0_addrspacecast(
7+
; MDEP-SAME: i32 [[V:%.*]], ptr [[P:%.*]]) {
8+
; MDEP-NEXT: store i32 [[V]], ptr [[P]], align 4
9+
; MDEP-NEXT: [[TMP1:%.*]] = lshr i32 [[V]], 16
10+
; MDEP-NEXT: [[TMP2:%.*]] = trunc i32 [[TMP1]] to i8
11+
; MDEP-NEXT: ret i8 [[TMP2]]
12+
;
13+
; MSSA-LABEL: define i8 @coerce_offset0_addrspacecast(
14+
; MSSA-SAME: i32 [[V:%.*]], ptr [[P:%.*]]) {
15+
; MSSA-NEXT: store i32 [[V]], ptr [[P]], align 4
16+
; MSSA-NEXT: [[P2:%.*]] = addrspacecast ptr [[P]] to ptr addrspace(1)
17+
; MSSA-NEXT: [[P3:%.*]] = getelementptr i8, ptr addrspace(1) [[P2]], i32 2
18+
; MSSA-NEXT: [[A:%.*]] = load i8, ptr addrspace(1) [[P3]], align 1
19+
; MSSA-NEXT: ret i8 [[A]]
20+
;
421
store i32 %V, ptr %P
522

623
%P2 = addrspacecast ptr %P to ptr addrspace(1)
724
%P3 = getelementptr i8, ptr addrspace(1) %P2, i32 2
825

926
%A = load i8, ptr addrspace(1) %P3
1027
ret i8 %A
11-
; CHECK-LABEL: @coerce_offset0_addrspacecast(
12-
; CHECK-NOT: load
13-
; CHECK: ret i8
1428
}
29+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
30+
; CHECK: {{.*}}
Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,45 @@
1-
; RUN: opt < %s -passes=gvn -S | FileCheck %s
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt < %s -passes=gvn -S | FileCheck %s --check-prefixes=CHECK,MDEP
3+
; RUN: opt < %s -passes='gvn<memoryssa>' -S | FileCheck %s --check-prefixes=CHECK,MSSA
24

35
define i32 @main(ptr %p, i32 %x, i32 %y) {
6+
; MDEP-LABEL: define i32 @main(
7+
; MDEP-SAME: ptr [[P:%.*]], i32 [[X:%.*]], i32 [[Y:%.*]]) {
8+
; MDEP-NEXT: [[BLOCK1:.*:]]
9+
; MDEP-NEXT: [[CMP:%.*]] = icmp eq i32 [[X]], [[Y]]
10+
; MDEP-NEXT: br i1 [[CMP]], label %[[BLOCK2:.*]], label %[[BLOCK3:.*]]
11+
; MDEP: [[BLOCK2]]:
12+
; MDEP-NEXT: [[DEAD_PRE:%.*]] = load i32, ptr [[P]], align 4
13+
; MDEP-NEXT: br label %[[BLOCK4:.*]]
14+
; MDEP: [[BLOCK3]]:
15+
; MDEP-NEXT: store i32 0, ptr [[P]], align 4
16+
; MDEP-NEXT: br label %[[BLOCK4]]
17+
; MDEP: [[BLOCK4]]:
18+
; MDEP-NEXT: [[DEAD:%.*]] = phi i32 [ 0, %[[BLOCK3]] ], [ [[DEAD_PRE]], %[[BLOCK2]] ]
19+
; MDEP-NEXT: ret i32 [[DEAD]]
20+
;
21+
; MSSA-LABEL: define i32 @main(
22+
; MSSA-SAME: ptr [[P:%.*]], i32 [[X:%.*]], i32 [[Y:%.*]]) {
23+
; MSSA-NEXT: [[BLOCK1:.*:]]
24+
; MSSA-NEXT: [[Z:%.*]] = load i32, ptr [[P]], align 4
25+
; MSSA-NEXT: [[CMP:%.*]] = icmp eq i32 [[X]], [[Y]]
26+
; MSSA-NEXT: br i1 [[CMP]], label %[[BLOCK2:.*]], label %[[BLOCK3:.*]]
27+
; MSSA: [[BLOCK2]]:
28+
; MSSA-NEXT: br label %[[BLOCK4:.*]]
29+
; MSSA: [[BLOCK3]]:
30+
; MSSA-NEXT: store i32 0, ptr [[P]], align 4
31+
; MSSA-NEXT: br label %[[BLOCK4]]
32+
; MSSA: [[BLOCK4]]:
33+
; MSSA-NEXT: [[DEAD:%.*]] = load i32, ptr [[P]], align 4
34+
; MSSA-NEXT: ret i32 [[DEAD]]
35+
;
436
block1:
537
%z = load i32, ptr %p
638
%cmp = icmp eq i32 %x, %y
7-
br i1 %cmp, label %block2, label %block3
39+
br i1 %cmp, label %block2, label %block3
840

941
block2:
10-
br label %block4
42+
br label %block4
1143

1244
block3:
1345
%b = bitcast i32 0 to i32
@@ -19,18 +51,5 @@ block4:
1951
ret i32 %DEAD
2052
}
2153

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: }
54+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
55+
; CHECK: {{.*}}

0 commit comments

Comments
 (0)