Skip to content

Commit 4077882

Browse files
authored
[GVN][NFC] Add MSSA checks in tests 2/N (#137814)
The previous patch in this series is #130261
1 parent 369c409 commit 4077882

File tree

6 files changed

+551
-222
lines changed

6 files changed

+551
-222
lines changed

llvm/test/Transforms/GVN/phi.ll

Lines changed: 4 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 -passes=gvn < %s | FileCheck %s
2+
; RUN: opt -S -passes=gvn < %s | FileCheck --check-prefixes=CHECK,MDEP %s
3+
; RUN: opt -S -passes='gvn<memoryssa;no-memdep>' < %s | FileCheck %s
34

45

56
define i64 @test1(i1 %c, i64 %a, i64 %b) {
@@ -198,3 +199,5 @@ next:
198199
%phi = phi i64 [%a, %merge]
199200
ret i64 %phi
200201
}
202+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
203+
; MDEP: {{.*}}

llvm/test/Transforms/GVN/pre-compare.ll

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

35
; C source:
46
;
@@ -37,6 +39,28 @@
3739
@.str3 = private unnamed_addr constant [12 x i8] c"step 2: %d\0A\00", align 1
3840

3941
define void @f(i32 %x) noreturn nounwind uwtable ssp {
42+
; CHECK-LABEL: define void @f(
43+
; CHECK-SAME: i32 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
44+
; CHECK-NEXT: [[ENTRY:.*:]]
45+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X]], 1
46+
; CHECK-NEXT: br i1 [[CMP]], label %[[FOR_COND_PREHEADER:.*]], label %[[IF_THEN:.*]]
47+
; CHECK: [[IF_THEN]]:
48+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[X]], 2
49+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP1]], ptr @.str, ptr @.str1
50+
; CHECK-NEXT: [[CALL:%.*]] = tail call i32 @puts(ptr [[COND]]) #[[ATTR1:[0-9]+]]
51+
; CHECK-NEXT: br label %[[FOR_COND_PREHEADER]]
52+
; CHECK: [[FOR_COND_PREHEADER]]:
53+
; CHECK-NEXT: [[CMP3:%.*]] = icmp eq i32 [[X]], 2
54+
; CHECK-NEXT: br label %[[FOR_COND:.*]]
55+
; CHECK: [[FOR_COND]]:
56+
; CHECK-NEXT: [[CALL2:%.*]] = tail call i32 @puts(ptr @.str2) #[[ATTR1]]
57+
; CHECK-NEXT: br i1 [[CMP3]], label %[[FOR_COND_BACKEDGE:.*]], label %[[IF_END5:.*]]
58+
; CHECK: [[IF_END5]]:
59+
; CHECK-NEXT: [[CALL6:%.*]] = tail call i32 (ptr, ...) @printf(ptr @.str3, i32 [[X]]) #[[ATTR1]]
60+
; CHECK-NEXT: br label %[[FOR_COND_BACKEDGE]]
61+
; CHECK: [[FOR_COND_BACKEDGE]]:
62+
; CHECK-NEXT: br label %[[FOR_COND]]
63+
;
4064
entry:
4165
%cmp = icmp eq i32 %x, 1
4266
br i1 %cmp, label %for.cond.preheader, label %if.then
@@ -66,3 +90,6 @@ for.cond.backedge: ; preds = %if.end5, %for.cond
6690
declare i32 @puts(ptr nocapture) nounwind
6791

6892
declare i32 @printf(ptr nocapture, ...) nounwind
93+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
94+
; MDEP: {{.*}}
95+
; MSSA: {{.*}}

llvm/test/Transforms/GVN/readattrs.ll

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,31 @@
1-
; RUN: opt -passes=gvn -S -o - < %s | FileCheck %s
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -passes=gvn -S -o - < %s | FileCheck --check-prefixes=CHECK,MDEP %s
3+
; RUN: opt -passes='gvn<memoryssa;no-memdep>' -S -o - < %s | FileCheck --check-prefixes=CHECK,MSSA %s
24

35
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
46
target triple = "x86_64-unknown-linux-gnu"
57

68
declare void @use(ptr readonly nocapture)
79

810
define i8 @test() {
11+
; MDEP-LABEL: define i8 @test() {
12+
; MDEP-NEXT: [[A:%.*]] = alloca i8, align 1
13+
; MDEP-NEXT: store i8 1, ptr [[A]], align 1
14+
; MDEP-NEXT: call void @use(ptr [[A]])
15+
; MDEP-NEXT: ret i8 1
16+
;
17+
; MSSA-LABEL: define i8 @test() {
18+
; MSSA-NEXT: [[A:%.*]] = alloca i8, align 1
19+
; MSSA-NEXT: store i8 1, ptr [[A]], align 1
20+
; MSSA-NEXT: call void @use(ptr [[A]])
21+
; MSSA-NEXT: [[B:%.*]] = load i8, ptr [[A]], align 1
22+
; MSSA-NEXT: ret i8 [[B]]
23+
;
924
%a = alloca i8
1025
store i8 1, ptr %a
1126
call void @use(ptr %a)
1227
%b = load i8, ptr %a
1328
ret i8 %b
14-
; CHECK-LABEL: define i8 @test(
15-
; CHECK: call void @use(ptr %a)
16-
; CHECK-NEXT: ret i8 1
1729
}
30+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
31+
; CHECK: {{.*}}

llvm/test/Transforms/GVN/setjmp.ll

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2-
; RUN: opt -S -passes=gvn < %s | FileCheck %s
3-
2+
; RUN: opt -S -passes=gvn < %s | FileCheck --check-prefixes=CHECK,MDEP %s
3+
; RUN: opt -S -passes='gvn<memoryssa;no-memdep>' -verify-analysis-invalidation < %s | FileCheck --check-prefixes=CHECK,MSSA %s
44
declare i32 @setjmp() returns_twice
55
declare void @longjmp()
66
declare ptr @malloc(i64)
@@ -38,18 +38,32 @@ if.end:
3838

3939
; We are still allowed to optimize non-volatile accesses to allocas.
4040
define i32 @test_alloca() {
41-
; CHECK-LABEL: define i32 @test_alloca() {
42-
; CHECK-NEXT: [[ALLOC:%.*]] = alloca i43, align 8
43-
; CHECK-NEXT: store i32 10, ptr [[ALLOC]], align 4
44-
; CHECK-NEXT: [[SJ:%.*]] = call i32 @setjmp()
45-
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[SJ]], 0
46-
; CHECK-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]
47-
; CHECK: [[IF_THEN]]:
48-
; CHECK-NEXT: store i32 20, ptr [[ALLOC]], align 4
49-
; CHECK-NEXT: call void @longjmp()
50-
; CHECK-NEXT: unreachable
51-
; CHECK: [[IF_END]]:
52-
; CHECK-NEXT: ret i32 10
41+
; MDEP-LABEL: define i32 @test_alloca() {
42+
; MDEP-NEXT: [[ALLOC:%.*]] = alloca i43, align 8
43+
; MDEP-NEXT: store i32 10, ptr [[ALLOC]], align 4
44+
; MDEP-NEXT: [[SJ:%.*]] = call i32 @setjmp()
45+
; MDEP-NEXT: [[CMP:%.*]] = icmp eq i32 [[SJ]], 0
46+
; MDEP-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]
47+
; MDEP: [[IF_THEN]]:
48+
; MDEP-NEXT: store i32 20, ptr [[ALLOC]], align 4
49+
; MDEP-NEXT: call void @longjmp()
50+
; MDEP-NEXT: unreachable
51+
; MDEP: [[IF_END]]:
52+
; MDEP-NEXT: ret i32 10
53+
;
54+
; MSSA-LABEL: define i32 @test_alloca() {
55+
; MSSA-NEXT: [[ALLOC:%.*]] = alloca i43, align 8
56+
; MSSA-NEXT: store i32 10, ptr [[ALLOC]], align 4
57+
; MSSA-NEXT: [[SJ:%.*]] = call i32 @setjmp()
58+
; MSSA-NEXT: [[CMP:%.*]] = icmp eq i32 [[SJ]], 0
59+
; MSSA-NEXT: br i1 [[CMP]], label %[[IF_THEN:.*]], label %[[IF_END:.*]]
60+
; MSSA: [[IF_THEN]]:
61+
; MSSA-NEXT: store i32 20, ptr [[ALLOC]], align 4
62+
; MSSA-NEXT: call void @longjmp()
63+
; MSSA-NEXT: unreachable
64+
; MSSA: [[IF_END]]:
65+
; MSSA-NEXT: [[RES:%.*]] = load i32, ptr [[ALLOC]], align 4
66+
; MSSA-NEXT: ret i32 [[RES]]
5367
;
5468
%alloc = alloca i43
5569
store i32 10, ptr %alloc, align 4

0 commit comments

Comments
 (0)