Skip to content

Commit 536cbe6

Browse files
committed
[GloablOpt] Add tests comparing global with ptrtoint.
1 parent 33761df commit 536cbe6

File tree

1 file changed

+168
-0
lines changed

1 file changed

+168
-0
lines changed
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5
2+
; RUN: opt -p globalopt -S %s | FileCheck %s
3+
4+
@A = internal global i64 zeroinitializer
5+
@B = internal global i64 zeroinitializer
6+
7+
@C = internal global i64 zeroinitializer
8+
@D = internal global i64 zeroinitializer
9+
10+
@E = internal global i64 zeroinitializer
11+
@F = internal global i64 zeroinitializer
12+
13+
@G = internal global i64 zeroinitializer
14+
@H = internal global i64 zeroinitializer
15+
16+
@J = internal global [2 x ptr] zeroinitializer
17+
18+
;.
19+
; CHECK: @A = internal global i64 0
20+
; CHECK: @B = internal constant i64 0
21+
; CHECK: @C = internal global i64 0
22+
; CHECK: @D = internal constant i64 0
23+
; CHECK: @G = internal global i64 0
24+
; CHECK: @H = internal constant i64 0
25+
; CHECK: @J = internal constant [2 x ptr] zeroinitializer
26+
;.
27+
define i64 @A_and_B_cmp_ptrtoint_constant_expr() {
28+
; CHECK-LABEL: define i64 @A_and_B_cmp_ptrtoint_constant_expr() local_unnamed_addr {
29+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr inttoptr (i64 add (i64 ptrtoint (ptr @A to i64), i64 8) to ptr), @B
30+
; CHECK-NEXT: br i1 [[CMP]], label %[[THEN:.*]], label %[[ELSE:.*]]
31+
; CHECK: [[THEN]]:
32+
; CHECK-NEXT: store i64 10, ptr inttoptr (i64 add (i64 ptrtoint (ptr @A to i64), i64 8) to ptr), align 4
33+
; CHECK-NEXT: br label %[[EXIT:.*]]
34+
; CHECK: [[ELSE]]:
35+
; CHECK-NEXT: br label %[[EXIT]]
36+
; CHECK: [[EXIT]]:
37+
; CHECK-NEXT: ret i64 0
38+
;
39+
%cmp = icmp eq ptr inttoptr (i64 add (i64 ptrtoint (ptr @A to i64), i64 8) to ptr) , @B
40+
br i1 %cmp, label %then, label %else
41+
42+
then:
43+
store i64 10, ptr inttoptr (i64 add (i64 ptrtoint (ptr @A to i64), i64 8) to ptr)
44+
br label %exit
45+
46+
else:
47+
br label %exit
48+
49+
exit:
50+
%l = load i64, ptr @B
51+
ret i64 %l
52+
}
53+
54+
define i64 @G_and_H_cmp_ptrtoint_constant_expr_cmp_ops_swapped() {
55+
; CHECK-LABEL: define i64 @G_and_H_cmp_ptrtoint_constant_expr_cmp_ops_swapped() local_unnamed_addr {
56+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr inttoptr (i64 add (i64 ptrtoint (ptr @G to i64), i64 8) to ptr), @H
57+
; CHECK-NEXT: br i1 [[CMP]], label %[[THEN:.*]], label %[[ELSE:.*]]
58+
; CHECK: [[THEN]]:
59+
; CHECK-NEXT: store i64 10, ptr inttoptr (i64 add (i64 ptrtoint (ptr @G to i64), i64 8) to ptr), align 4
60+
; CHECK-NEXT: br label %[[EXIT:.*]]
61+
; CHECK: [[ELSE]]:
62+
; CHECK-NEXT: br label %[[EXIT]]
63+
; CHECK: [[EXIT]]:
64+
; CHECK-NEXT: ret i64 0
65+
;
66+
%cmp = icmp eq ptr inttoptr (i64 add (i64 ptrtoint (ptr @G to i64), i64 8) to ptr) , @H
67+
br i1 %cmp, label %then, label %else
68+
69+
then:
70+
store i64 10, ptr inttoptr (i64 add (i64 ptrtoint (ptr @G to i64), i64 8) to ptr)
71+
br label %exit
72+
73+
else:
74+
br label %exit
75+
76+
exit:
77+
%l = load i64, ptr @H
78+
ret i64 %l
79+
}
80+
81+
define i64 @C_and_D_cmp_ptr_load() {
82+
; CHECK-LABEL: define i64 @C_and_D_cmp_ptr_load() local_unnamed_addr {
83+
; CHECK-NEXT: [[P:%.*]] = alloca ptr, align 8
84+
; CHECK-NEXT: store ptr inttoptr (i64 add (i64 ptrtoint (ptr @C to i64), i64 8) to ptr), ptr [[P]], align 8
85+
; CHECK-NEXT: [[L_P:%.*]] = load ptr, ptr [[P]], align 8
86+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[L_P]], @D
87+
; CHECK-NEXT: br i1 [[CMP]], label %[[THEN:.*]], label %[[ELSE:.*]]
88+
; CHECK: [[THEN]]:
89+
; CHECK-NEXT: store i64 10, ptr inttoptr (i64 add (i64 ptrtoint (ptr @C to i64), i64 8) to ptr), align 4
90+
; CHECK-NEXT: br label %[[EXIT:.*]]
91+
; CHECK: [[ELSE]]:
92+
; CHECK-NEXT: br label %[[EXIT]]
93+
; CHECK: [[EXIT]]:
94+
; CHECK-NEXT: ret i64 0
95+
;
96+
%p = alloca ptr
97+
store ptr inttoptr (i64 add (i64 ptrtoint (ptr @C to i64), i64 8) to ptr), ptr %p
98+
%l.p = load ptr, ptr %p
99+
%cmp = icmp eq ptr %l.p, @D
100+
br i1 %cmp, label %then, label %else
101+
102+
then:
103+
store i64 10, ptr inttoptr (i64 add (i64 ptrtoint (ptr @C to i64), i64 8) to ptr)
104+
br label %exit
105+
106+
else:
107+
br label %exit
108+
109+
exit:
110+
%l = load i64, ptr @D
111+
ret i64 %l
112+
}
113+
114+
define i64 @D_and_E_cmp_ptrtoint_constant_expr() {
115+
; CHECK-LABEL: define i64 @D_and_E_cmp_ptrtoint_constant_expr() local_unnamed_addr {
116+
; CHECK-NEXT: [[PTR2INT:%.*]] = ptrtoint ptr @A to i64
117+
; CHECK-NEXT: [[ADD:%.*]] = add i64 [[PTR2INT]], 8
118+
; CHECK-NEXT: [[INT2PTR:%.*]] = inttoptr i64 [[ADD]] to ptr
119+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[INT2PTR]], @B
120+
; CHECK-NEXT: br i1 [[CMP]], label %[[THEN:.*]], label %[[ELSE:.*]]
121+
; CHECK: [[THEN]]:
122+
; CHECK-NEXT: store i64 10, ptr inttoptr (i64 add (i64 ptrtoint (ptr @A to i64), i64 8) to ptr), align 4
123+
; CHECK-NEXT: br label %[[EXIT:.*]]
124+
; CHECK: [[ELSE]]:
125+
; CHECK-NEXT: br label %[[EXIT]]
126+
; CHECK: [[EXIT]]:
127+
; CHECK-NEXT: ret i64 0
128+
;
129+
%ptr2int = ptrtoint ptr @A to i64
130+
%add = add i64 %ptr2int, 8
131+
%int2ptr = inttoptr i64 %add to ptr
132+
%cmp = icmp eq ptr %int2ptr , @B
133+
br i1 %cmp, label %then, label %else
134+
135+
then:
136+
store i64 10, ptr inttoptr (i64 add (i64 ptrtoint (ptr @A to i64), i64 8) to ptr)
137+
br label %exit
138+
139+
else:
140+
br label %exit
141+
142+
exit:
143+
%l = load i64, ptr @B
144+
ret i64 %l
145+
}
146+
147+
define ptr @compare_arg(ptr %a) {
148+
; CHECK-LABEL: define ptr @compare_arg(
149+
; CHECK-SAME: ptr [[A:%.*]]) local_unnamed_addr {
150+
; CHECK-NEXT: [[ENTRY:.*:]]
151+
; CHECK-NEXT: [[C:%.*]] = icmp eq ptr [[A]], @J
152+
; CHECK-NEXT: br i1 [[C]], label %[[THEN:.*]], label %[[ELSE:.*]]
153+
; CHECK: [[THEN]]:
154+
; CHECK-NEXT: ret ptr null
155+
; CHECK: [[ELSE]]:
156+
; CHECK-NEXT: ret ptr null
157+
;
158+
entry:
159+
%c = icmp eq ptr %a, @J
160+
br i1 %c, label %then, label %else
161+
162+
then:
163+
%l = load ptr, ptr @J, align 8
164+
ret ptr %l
165+
166+
else:
167+
ret ptr null
168+
}

0 commit comments

Comments
 (0)