Skip to content

Commit 8f00f3f

Browse files
committed
[GVN] Add MemorySSA checks in tests 1/N
1 parent 1a31bb3 commit 8f00f3f

File tree

4 files changed

+74
-13
lines changed

4 files changed

+74
-13
lines changed

llvm/test/Transforms/GVN/assume.ll

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -passes=gvn -verify-analysis-invalidation -S | FileCheck %s
3+
; RUN: opt < %s -passes='require<memoryssa>,gvn' -verify-analysis-invalidation -S | FileCheck --check-prefix=CHECK-MSSA %s
34

45
declare void @llvm.assume(i1)
56
declare void @use(i1)
67

78
define void @assume_true() {
89
; CHECK-LABEL: @assume_true(
910
; CHECK-NEXT: ret void
11+
;
12+
; CHECK-MSSA-LABEL: @assume_true(
13+
; CHECK-MSSA-NEXT: ret void
1014
;
1115
call void @llvm.assume(i1 true)
1216
ret void
@@ -16,6 +20,10 @@ define void @assume_false() {
1620
; CHECK-LABEL: @assume_false(
1721
; CHECK-NEXT: store i8 poison, ptr null, align 1
1822
; CHECK-NEXT: ret void
23+
;
24+
; CHECK-MSSA-LABEL: @assume_false(
25+
; CHECK-MSSA-NEXT: store i8 poison, ptr null, align 1
26+
; CHECK-MSSA-NEXT: ret void
1927
;
2028
call void @llvm.assume(i1 false)
2129
ret void
@@ -26,6 +34,11 @@ define void @assume_arg(i1 %x) {
2634
; CHECK-NEXT: call void @llvm.assume(i1 [[X:%.*]])
2735
; CHECK-NEXT: call void @use(i1 true)
2836
; CHECK-NEXT: ret void
37+
;
38+
; CHECK-MSSA-LABEL: @assume_arg(
39+
; CHECK-MSSA-NEXT: call void @llvm.assume(i1 [[X:%.*]])
40+
; CHECK-MSSA-NEXT: call void @use(i1 true)
41+
; CHECK-MSSA-NEXT: ret void
2942
;
3043
call void @llvm.assume(i1 %x)
3144
call void @use(i1 %x)
@@ -38,6 +51,12 @@ define void @assume_not_arg(i1 %x) {
3851
; CHECK-NEXT: call void @llvm.assume(i1 [[XOR]])
3952
; CHECK-NEXT: call void @use(i1 false)
4053
; CHECK-NEXT: ret void
54+
;
55+
; CHECK-MSSA-LABEL: @assume_not_arg(
56+
; CHECK-MSSA-NEXT: [[XOR:%.*]] = xor i1 [[X:%.*]], true
57+
; CHECK-MSSA-NEXT: call void @llvm.assume(i1 [[XOR]])
58+
; CHECK-MSSA-NEXT: call void @use(i1 false)
59+
; CHECK-MSSA-NEXT: ret void
4160
;
4261
%xor = xor i1 %x, true
4362
call void @llvm.assume(i1 %xor)
@@ -52,6 +71,13 @@ define void @pr47496(i8 %x) {
5271
; CHECK-NEXT: call void @llvm.assume(i1 [[XOR]])
5372
; CHECK-NEXT: call void @use(i1 false)
5473
; CHECK-NEXT: ret void
74+
;
75+
; CHECK-MSSA-LABEL: @pr47496(
76+
; CHECK-MSSA-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], 0
77+
; CHECK-MSSA-NEXT: [[XOR:%.*]] = xor i1 [[CMP]], true
78+
; CHECK-MSSA-NEXT: call void @llvm.assume(i1 [[XOR]])
79+
; CHECK-MSSA-NEXT: call void @use(i1 false)
80+
; CHECK-MSSA-NEXT: ret void
5581
;
5682
%cmp = icmp slt i8 %x, 0
5783
%xor = xor i1 %cmp, true

llvm/test/Transforms/GVN/basic.ll

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
12
; RUN: opt < %s -passes=gvn -S | FileCheck %s
3+
; RUN: opt < %s -passes='require<memoryssa>,gvn' -S | FileCheck --check-prefix=CHECK-MSSA %s
24

35
define i32 @main() {
6+
; CHECK-LABEL: define i32 @main() {
7+
; CHECK-NEXT: [[BLOCK1:.*:]]
8+
; CHECK-NEXT: ret i32 0
9+
;
10+
; CHECK-MSSA-LABEL: define i32 @main() {
11+
; CHECK-MSSA-NEXT: [[BLOCK1:.*:]]
12+
; CHECK-MSSA-NEXT: ret i32 0
13+
;
414
block1:
5-
%z1 = bitcast i32 0 to i32
6-
br label %block2
15+
%z1 = bitcast i32 0 to i32
16+
br label %block2
717
block2:
818
%z2 = bitcast i32 0 to i32
919
ret i32 %z2
1020
}
1121

12-
; CHECK: define i32 @main() {
13-
; CHECK-NEXT: block1:
14-
; CHECK-NEXT: ret i32 0
15-
; CHECK-NEXT: }

llvm/test/Transforms/GVN/nonescaping.ll

Lines changed: 16 additions & 0 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
22
; RUN: opt < %s -S -passes=gvn 2>&1 | FileCheck %s
3+
; RUN: opt < %s -S -passes='require<memoryssa>,gvn' 2>&1 | FileCheck --check-prefix=CHECK-MSSA %s
34

45
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"
56

@@ -13,6 +14,11 @@ define i8 @test_malloc(ptr %p) {
1314
; CHECK-NEXT: [[OBJ:%.*]] = call ptr @malloc(i64 16)
1415
; CHECK-NEXT: call void @escape(ptr [[OBJ]])
1516
; CHECK-NEXT: ret i8 0
17+
;
18+
; CHECK-MSSA-LABEL: @test_malloc(
19+
; CHECK-MSSA-NEXT: [[OBJ:%.*]] = call ptr @malloc(i64 16)
20+
; CHECK-MSSA-NEXT: call void @escape(ptr [[OBJ]])
21+
; CHECK-MSSA-NEXT: ret i8 0
1622
;
1723
%v1 = load i8, ptr %p
1824
%obj = call ptr @malloc(i64 16)
@@ -27,6 +33,11 @@ define i8 @test_calloc(ptr %p) {
2733
; CHECK-NEXT: [[OBJ:%.*]] = call ptr @calloc(i64 1, i64 16)
2834
; CHECK-NEXT: call void @escape(ptr [[OBJ]])
2935
; CHECK-NEXT: ret i8 0
36+
;
37+
; CHECK-MSSA-LABEL: @test_calloc(
38+
; CHECK-MSSA-NEXT: [[OBJ:%.*]] = call ptr @calloc(i64 1, i64 16)
39+
; CHECK-MSSA-NEXT: call void @escape(ptr [[OBJ]])
40+
; CHECK-MSSA-NEXT: ret i8 0
3041
;
3142
%v1 = load i8, ptr %p
3243
%obj = call ptr @calloc(i64 1, i64 16)
@@ -41,6 +52,11 @@ define i8 @test_opnew(ptr %p) {
4152
; CHECK-NEXT: [[OBJ:%.*]] = call ptr @_Znwm(i64 16)
4253
; CHECK-NEXT: call void @escape(ptr [[OBJ]])
4354
; CHECK-NEXT: ret i8 0
55+
;
56+
; CHECK-MSSA-LABEL: @test_opnew(
57+
; CHECK-MSSA-NEXT: [[OBJ:%.*]] = call ptr @_Znwm(i64 16)
58+
; CHECK-MSSA-NEXT: call void @escape(ptr [[OBJ]])
59+
; CHECK-MSSA-NEXT: ret i8 0
4460
;
4561
%v1 = load i8, ptr %p
4662
%obj = call ptr @_Znwm(i64 16)

llvm/test/Transforms/GVN/pr14166.ll

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,33 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
12
; RUN: opt -disable-basic-aa -passes=gvn -S < %s | FileCheck %s
3+
; RUN: opt -disable-basic-aa -passes='require<memoryssa>,gvn' -S < %s | FileCheck --check-prefix=CHECK-MSSA %s
24
target datalayout = "e-p:32:32:32"
35
define <2 x i32> @test1() {
6+
; CHECK-LABEL: define <2 x i32> @test1() {
7+
; CHECK-NEXT: [[V1:%.*]] = alloca <2 x i32>, align 8
8+
; CHECK-NEXT: call void @anything(ptr [[V1]])
9+
; CHECK-NEXT: [[V2:%.*]] = load <2 x i32>, ptr [[V1]], align 8
10+
; CHECK-NEXT: [[V3:%.*]] = inttoptr <2 x i32> [[V2]] to <2 x ptr>
11+
; CHECK-NEXT: store <2 x ptr> [[V3]], ptr [[V1]], align 8
12+
; CHECK-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[V2]] to i64
13+
; CHECK-NEXT: ret <2 x i32> [[V2]]
14+
;
15+
; CHECK-MSSA-LABEL: define <2 x i32> @test1() {
16+
; CHECK-MSSA-NEXT: [[V1:%.*]] = alloca <2 x i32>, align 8
17+
; CHECK-MSSA-NEXT: call void @anything(ptr [[V1]])
18+
; CHECK-MSSA-NEXT: [[V2:%.*]] = load <2 x i32>, ptr [[V1]], align 8
19+
; CHECK-MSSA-NEXT: [[V3:%.*]] = inttoptr <2 x i32> [[V2]] to <2 x ptr>
20+
; CHECK-MSSA-NEXT: store <2 x ptr> [[V3]], ptr [[V1]], align 8
21+
; CHECK-MSSA-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[V2]] to i64
22+
; CHECK-MSSA-NEXT: ret <2 x i32> [[V2]]
23+
;
424
%v1 = alloca <2 x i32>
525
call void @anything(ptr %v1)
626
%v2 = load <2 x i32>, ptr %v1
727
%v3 = inttoptr <2 x i32> %v2 to <2 x ptr>
828
store <2 x ptr> %v3, ptr %v1
929
%v5 = load <2 x i32>, ptr %v1
1030
ret <2 x i32> %v5
11-
; CHECK-LABEL: @test1(
12-
; CHECK: %v1 = alloca <2 x i32>
13-
; CHECK: call void @anything(ptr %v1)
14-
; CHECK: %v2 = load <2 x i32>, ptr %v1
15-
; CHECK: %v3 = inttoptr <2 x i32> %v2 to <2 x ptr>
16-
; CHECK: store <2 x ptr> %v3, ptr %v1
17-
; CHECK: ret <2 x i32> %v2
1831
}
1932

2033
declare void @anything(ptr)

0 commit comments

Comments
 (0)