Skip to content

Commit 11eb8d8

Browse files
committed
[NewGVN] Convert tests to opaque pointers (NFC)
1 parent 1de6866 commit 11eb8d8

File tree

3 files changed

+67
-79
lines changed

3 files changed

+67
-79
lines changed

llvm/test/Transforms/NewGVN/2007-07-26-InterlockingLoops.ll

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2-
; RUN: opt -opaque-pointers=0 < %s -passes=newgvn -S | FileCheck %s
2+
; RUN: opt < %s -passes=newgvn -S | FileCheck %s
33

4-
@last = external global [65 x i32*]
4+
@last = external global [65 x ptr]
55

66
define i32 @NextRootMove(i32 %wtm, i32 %x, i32 %y, i32 %z) {
77
; CHECK-LABEL: define i32 @NextRootMove
88
; CHECK-SAME: (i32 [[WTM:%.*]], i32 [[X:%.*]], i32 [[Y:%.*]], i32 [[Z:%.*]]) {
99
; CHECK-NEXT: entry:
10-
; CHECK-NEXT: [[A:%.*]] = alloca i32*, align 8
11-
; CHECK-NEXT: [[TMP17618:%.*]] = load i32*, i32** getelementptr inbounds ([65 x i32*], [65 x i32*]* @last, i32 0, i32 1), align 4
12-
; CHECK-NEXT: store i32* [[TMP17618]], i32** [[A]], align 8
10+
; CHECK-NEXT: [[A:%.*]] = alloca ptr, align 8
11+
; CHECK-NEXT: [[TMP17618:%.*]] = load ptr, ptr getelementptr inbounds ([65 x ptr], ptr @last, i32 0, i32 1), align 4
12+
; CHECK-NEXT: store ptr [[TMP17618]], ptr [[A]], align 8
1313
; CHECK-NEXT: br label [[COND_TRUE116:%.*]]
1414
; CHECK: cond_true116:
1515
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X]], [[Y]]
@@ -27,27 +27,27 @@ define i32 @NextRootMove(i32 %wtm, i32 %x, i32 %y, i32 %z) {
2727
; CHECK-NEXT: ret i32 0
2828
;
2929
entry:
30-
%A = alloca i32*
31-
%tmp17618 = load i32*, i32** getelementptr ([65 x i32*], [65 x i32*]* @last, i32 0, i32 1), align 4
32-
store i32* %tmp17618, i32** %A
30+
%A = alloca ptr
31+
%tmp17618 = load ptr, ptr getelementptr ([65 x ptr], ptr @last, i32 0, i32 1), align 4
32+
store ptr %tmp17618, ptr %A
3333
br label %cond_true116
3434

3535
cond_true116:
3636
%cmp = icmp eq i32 %x, %y
3737
br i1 %cmp, label %cond_true128, label %cond_true145
3838

3939
cond_true128:
40-
%tmp17625 = load i32*, i32** getelementptr ([65 x i32*], [65 x i32*]* @last, i32 0, i32 1), align 4
41-
store i32* %tmp17625, i32** %A
40+
%tmp17625 = load ptr, ptr getelementptr ([65 x ptr], ptr @last, i32 0, i32 1), align 4
41+
store ptr %tmp17625, ptr %A
4242
%cmp1 = icmp eq i32 %x, %z
4343
br i1 %cmp1 , label %bb98.backedge, label %return.loopexit
4444

4545
bb98.backedge:
4646
br label %cond_true116
4747

4848
cond_true145:
49-
%tmp17631 = load i32*, i32** getelementptr ([65 x i32*], [65 x i32*]* @last, i32 0, i32 1), align 4
50-
store i32* %tmp17631, i32** %A
49+
%tmp17631 = load ptr, ptr getelementptr ([65 x ptr], ptr @last, i32 0, i32 1), align 4
50+
store ptr %tmp17631, ptr %A
5151
br i1 false, label %bb98.backedge, label %return.loopexit
5252

5353
return.loopexit:
Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2-
; RUN: opt -opaque-pointers=0 -passes=newgvn -S < %s | FileCheck %s
2+
; RUN: opt -passes=newgvn -S < %s | FileCheck %s
33

44
target datalayout = "e-p:64:64:64"
55

66
; GVN should ignore the store to p[1] to see that the load from p[0] is
77
; fully redundant.
88

9-
define void @yes(i1 %c, i32* %p, i32* %q) nounwind {
9+
define void @yes(i1 %c, ptr %p, ptr %q) nounwind {
1010
; CHECK-LABEL: define void @yes
11-
; CHECK-SAME: (i1 [[C:%.*]], i32* [[P:%.*]], i32* [[Q:%.*]]) #[[ATTR0:[0-9]+]] {
11+
; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]]) #[[ATTR0:[0-9]+]] {
1212
; CHECK-NEXT: entry:
13-
; CHECK-NEXT: store i32 0, i32* [[P]], align 4
14-
; CHECK-NEXT: [[P1:%.*]] = getelementptr inbounds i32, i32* [[P]], i64 1
15-
; CHECK-NEXT: store i32 1, i32* [[P1]], align 4
13+
; CHECK-NEXT: store i32 0, ptr [[P]], align 4
14+
; CHECK-NEXT: [[P1:%.*]] = getelementptr inbounds i32, ptr [[P]], i64 1
15+
; CHECK-NEXT: store i32 1, ptr [[P1]], align 4
1616
; CHECK-NEXT: br i1 [[C]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
1717
; CHECK: if.then:
18-
; CHECK-NEXT: store i32 0, i32* [[Q]], align 4
18+
; CHECK-NEXT: store i32 0, ptr [[Q]], align 4
1919
; CHECK-NEXT: ret void
2020
; CHECK: if.else:
2121
; CHECK-NEXT: ret void
2222
;
2323
entry:
24-
store i32 0, i32* %p
25-
%p1 = getelementptr inbounds i32, i32* %p, i64 1
26-
store i32 1, i32* %p1
24+
store i32 0, ptr %p
25+
%p1 = getelementptr inbounds i32, ptr %p, i64 1
26+
store i32 1, ptr %p1
2727
br i1 %c, label %if.else, label %if.then
2828

2929
if.then:
30-
%t = load i32, i32* %p
31-
store i32 %t, i32* %q
30+
%t = load i32, ptr %p
31+
store i32 %t, ptr %q
3232
ret void
3333

3434
if.else:
@@ -39,39 +39,35 @@ if.else:
3939
; fully redundant. However, the second load is larger, so it's not a simple
4040
; redundancy.
4141

42-
define void @watch_out_for_size_change(i1 %c, i32* %p, i32* %q) nounwind {
42+
define void @watch_out_for_size_change(i1 %c, ptr %p, ptr %q) nounwind {
4343
; CHECK-LABEL: define void @watch_out_for_size_change
44-
; CHECK-SAME: (i1 [[C:%.*]], i32* [[P:%.*]], i32* [[Q:%.*]]) #[[ATTR0]] {
44+
; CHECK-SAME: (i1 [[C:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]]) #[[ATTR0]] {
4545
; CHECK-NEXT: entry:
46-
; CHECK-NEXT: store i32 0, i32* [[P]], align 4
47-
; CHECK-NEXT: [[P1:%.*]] = getelementptr inbounds i32, i32* [[P]], i64 1
48-
; CHECK-NEXT: store i32 1, i32* [[P1]], align 4
46+
; CHECK-NEXT: store i32 0, ptr [[P]], align 4
47+
; CHECK-NEXT: [[P1:%.*]] = getelementptr inbounds i32, ptr [[P]], i64 1
48+
; CHECK-NEXT: store i32 1, ptr [[P1]], align 4
4949
; CHECK-NEXT: br i1 [[C]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
5050
; CHECK: if.then:
51-
; CHECK-NEXT: store i32 0, i32* [[Q]], align 4
51+
; CHECK-NEXT: store i32 0, ptr [[Q]], align 4
5252
; CHECK-NEXT: ret void
5353
; CHECK: if.else:
54-
; CHECK-NEXT: [[PC:%.*]] = bitcast i32* [[P]] to i64*
55-
; CHECK-NEXT: [[QC:%.*]] = bitcast i32* [[Q]] to i64*
56-
; CHECK-NEXT: [[T64:%.*]] = load i64, i64* [[PC]], align 4
57-
; CHECK-NEXT: store i64 [[T64]], i64* [[QC]], align 4
54+
; CHECK-NEXT: [[T64:%.*]] = load i64, ptr [[P]], align 4
55+
; CHECK-NEXT: store i64 [[T64]], ptr [[Q]], align 4
5856
; CHECK-NEXT: ret void
5957
;
6058
entry:
61-
store i32 0, i32* %p
62-
%p1 = getelementptr inbounds i32, i32* %p, i64 1
63-
store i32 1, i32* %p1
59+
store i32 0, ptr %p
60+
%p1 = getelementptr inbounds i32, ptr %p, i64 1
61+
store i32 1, ptr %p1
6462
br i1 %c, label %if.else, label %if.then
6563

6664
if.then:
67-
%t = load i32, i32* %p
68-
store i32 %t, i32* %q
65+
%t = load i32, ptr %p
66+
store i32 %t, ptr %q
6967
ret void
7068

7169
if.else:
72-
%pc = bitcast i32* %p to i64*
73-
%qc = bitcast i32* %q to i64*
74-
%t64 = load i64, i64* %pc
75-
store i64 %t64, i64* %qc
70+
%t64 = load i64, ptr %p
71+
store i64 %t64, ptr %q
7672
ret void
7773
}

llvm/test/Transforms/NewGVN/refine-stores.ll

Lines changed: 28 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2-
; RUN: opt -opaque-pointers=0 < %s -passes=newgvn -S | FileCheck %s
2+
; RUN: opt < %s -passes=newgvn -S | FileCheck %s
33
;; Now that we do store refinement, we have to verify that we add fake uses
44
;; when we skip existing stores.
55
;; We also are testing that various variations that cause stores to move classes
@@ -11,25 +11,23 @@ target triple = "x86_64-apple-darwin16.5.0"
1111

1212
%struct.eggs = type {}
1313

14-
define void @spam(i32 *%a) {
14+
define void @spam(ptr %a) {
1515
; CHECK-LABEL: @spam(
1616
; CHECK-NEXT: bb:
17-
; CHECK-NEXT: [[FOO:%.*]] = bitcast i32* [[A:%.*]] to %struct.eggs**
18-
; CHECK-NEXT: store %struct.eggs* null, %struct.eggs** [[FOO]], align 8
17+
; CHECK-NEXT: store ptr null, ptr [[A:%.*]], align 8
1918
; CHECK-NEXT: br label [[BB1:%.*]]
2019
; CHECK: bb1:
2120
; CHECK-NEXT: br i1 undef, label [[BB3:%.*]], label [[BB2:%.*]]
2221
; CHECK: bb2:
2322
; CHECK-NEXT: call void @baz()
2423
; CHECK-NEXT: br label [[BB1]]
2524
; CHECK: bb3:
26-
; CHECK-NEXT: store i32 0, i32* undef, align 4
27-
; CHECK-NEXT: store %struct.eggs* null, %struct.eggs** [[FOO]], align 8
25+
; CHECK-NEXT: store i32 0, ptr undef, align 4
26+
; CHECK-NEXT: store ptr null, ptr [[A]], align 8
2827
; CHECK-NEXT: unreachable
2928
;
3029
bb:
31-
%foo = bitcast i32 *%a to %struct.eggs**
32-
store %struct.eggs* null, %struct.eggs** %foo
30+
store ptr null, ptr %a
3331
br label %bb1
3432

3533
bb1: ; preds = %bb2, %bb
@@ -40,13 +38,13 @@ bb2: ; preds = %bb1
4038
br label %bb1
4139

4240
bb3: ; preds = %bb1
43-
store i32 0, i32* undef
41+
store i32 0, ptr undef
4442
;; This store is defined by a memoryphi of the call and the first store
4543
;; At first, we will prove it equivalent to the first store above.
4644
;; Then the call will become reachable, and the equivalence will be removed
4745
;; Without it being a use of the first store, we will not update the store
4846
;; to reflect this.
49-
store %struct.eggs* null, %struct.eggs** %foo
47+
store ptr null, ptr %a
5048
unreachable
5149
}
5250

@@ -58,48 +56,46 @@ define void @a() {
5856
; CHECK-NEXT: b:
5957
; CHECK-NEXT: br label [[C:%.*]]
6058
; CHECK: c:
61-
; CHECK-NEXT: store i64 undef, i64* null, align 4
59+
; CHECK-NEXT: store i64 undef, ptr null, align 4
6260
; CHECK-NEXT: br label [[E:%.*]]
6361
; CHECK: e:
64-
; CHECK-NEXT: [[G:%.*]] = load i64*, i64** null, align 8
65-
; CHECK-NEXT: store i64* undef, i64** null, align 8
62+
; CHECK-NEXT: store ptr undef, ptr null, align 8
6663
; CHECK-NEXT: br i1 undef, label [[C]], label [[E]]
6764
;
6865
b:
6966
br label %c
7067

7168
c: ; preds = %e, %b
72-
%d = phi i64* [ undef, %b ], [ null, %e ]
73-
store i64 undef, i64* %d
69+
%d = phi ptr [ undef, %b ], [ null, %e ]
70+
store i64 undef, ptr %d
7471
br label %e
7572

7673
e: ; preds = %e, %c
7774
;; The memory for this load starts out equivalent to just the store in c, we later discover the store after us, and
7875
;; need to make sure the right set of values get marked as changed after memory leaders change
79-
%g = load i64*, i64** null
80-
%0 = bitcast i64* %g to i64*
81-
store i64* undef, i64** null
76+
%g = load ptr, ptr null
77+
store ptr undef, ptr null
8278
br i1 undef, label %c, label %e
8379
}
8480

8581
%struct.hoge = type {}
8682

87-
define void @widget(%struct.hoge* %arg) {
83+
define void @widget(ptr %arg) {
8884
; CHECK-LABEL: @widget(
8985
; CHECK-NEXT: bb:
9086
; CHECK-NEXT: br label [[BB1:%.*]]
9187
; CHECK: bb1:
92-
; CHECK-NEXT: [[TMP:%.*]] = phi %struct.hoge* [ [[ARG:%.*]], [[BB:%.*]] ], [ null, [[BB1]] ]
93-
; CHECK-NEXT: store %struct.hoge* [[TMP]], %struct.hoge** undef, align 8
88+
; CHECK-NEXT: [[TMP:%.*]] = phi ptr [ [[ARG:%.*]], [[BB:%.*]] ], [ null, [[BB1]] ]
89+
; CHECK-NEXT: store ptr [[TMP]], ptr undef, align 8
9490
; CHECK-NEXT: br i1 undef, label [[BB1]], label [[BB2:%.*]]
9591
; CHECK: bb2:
9692
; CHECK-NEXT: [[TMP3:%.*]] = phi i64 [ [[TMP8:%.*]], [[BB7:%.*]] ], [ 0, [[BB1]] ]
9793
; CHECK-NEXT: [[TMP4:%.*]] = icmp eq i64 [[TMP3]], 0
9894
; CHECK-NEXT: br i1 [[TMP4]], label [[BB7]], label [[BB5:%.*]]
9995
; CHECK: bb5:
100-
; CHECK-NEXT: [[TMP6:%.*]] = load i64, i64* null, align 4
96+
; CHECK-NEXT: [[TMP6:%.*]] = load i64, ptr null, align 4
10197
; CHECK-NEXT: call void @quux()
102-
; CHECK-NEXT: store i64 [[TMP6]], i64* undef, align 4
98+
; CHECK-NEXT: store i64 [[TMP6]], ptr undef, align 4
10399
; CHECK-NEXT: br label [[BB7]]
104100
; CHECK: bb7:
105101
; CHECK-NEXT: [[TMP8]] = add i64 [[TMP3]], 1
@@ -109,8 +105,8 @@ bb:
109105
br label %bb1
110106

111107
bb1: ; preds = %bb1, %bb
112-
%tmp = phi %struct.hoge* [ %arg, %bb ], [ null, %bb1 ]
113-
store %struct.hoge* %tmp, %struct.hoge** undef
108+
%tmp = phi ptr [ %arg, %bb ], [ null, %bb1 ]
109+
store ptr %tmp, ptr undef
114110
br i1 undef, label %bb1, label %bb2
115111

116112
bb2: ; preds = %bb7, %bb1
@@ -121,9 +117,9 @@ bb2: ; preds = %bb7, %bb1
121117
bb5: ; preds = %bb2
122118
;; Originally thought equal to the store that comes after it until the phi edges
123119
;; are completely traversed
124-
%tmp6 = load i64, i64* null
120+
%tmp6 = load i64, ptr null
125121
call void @quux()
126-
store i64 %tmp6, i64* undef
122+
store i64 %tmp6, ptr undef
127123
br label %bb7
128124

129125
bb7: ; preds = %bb5, %bb2
@@ -142,9 +138,7 @@ define void @b() {
142138
; CHECK: m:
143139
; CHECK-NEXT: unreachable
144140
; CHECK: d:
145-
; CHECK-NEXT: [[G:%.*]] = bitcast %struct.a* [[C]] to i8*
146-
; CHECK-NEXT: [[F:%.*]] = bitcast i8* [[G]] to i32*
147-
; CHECK-NEXT: [[E:%.*]] = load i32, i32* [[F]], align 4
141+
; CHECK-NEXT: [[E:%.*]] = load i32, ptr [[C]], align 4
148142
; CHECK-NEXT: br i1 undef, label [[I:%.*]], label [[J:%.*]]
149143
; CHECK: i:
150144
; CHECK-NEXT: br i1 undef, label [[K:%.*]], label [[M:%.*]]
@@ -159,14 +153,12 @@ define void @b() {
159153
br label %d
160154

161155
m: ; preds = %j, %i
162-
store i32 %e, i32* %f
156+
store i32 %e, ptr %h
163157
unreachable
164158

165159
d: ; preds = %0
166-
%g = bitcast %struct.a* %c to i8*
167-
%h = getelementptr i8, i8* %g
168-
%f = bitcast i8* %h to i32*
169-
%e = load i32, i32* %f
160+
%h = getelementptr i8, ptr %c
161+
%e = load i32, ptr %h
170162
br i1 undef, label %i, label %j
171163

172164
i: ; preds = %d
@@ -179,7 +171,7 @@ l: ; preds = %k
179171
%n = phi i32 [ %e, %k ]
180172
;; Becomes equal and then not equal to the other store, and
181173
;; along the way, the load.
182-
store i32 %n, i32* %f
174+
store i32 %n, ptr %h
183175
unreachable
184176

185177
j: ; preds = %d

0 commit comments

Comments
 (0)