Skip to content

Commit 53575e7

Browse files
committed
[SCEV] Add initial tests for ptrtoaddr.
Add tests with ptrtoaddr instructions for llvm#158032. Based on llvm/test/Analysis/ScalarEvolution/ptrtoint.ll.
1 parent 43f9017 commit 53575e7

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2+
; RUN: opt < %s --data-layout="e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -S -disable-output -disable-verify "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=ALL,X64 %s
3+
; RUN: opt < %s --data-layout="e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128" -S -disable-output -disable-verify "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=ALL,X32 %s
4+
5+
declare void @useptr(ptr)
6+
7+
define void @ptrtoaddr(ptr %in, ptr %out0, ptr %out1, ptr %out2, ptr %out3) {
8+
; X64-LABEL: 'ptrtoaddr'
9+
; X64-NEXT: Classifying expressions for: @ptrtoaddr
10+
; X64-NEXT: %p0 = ptrtoaddr ptr %in to i64
11+
; X64-NEXT: --> %p0 U: full-set S: full-set
12+
; X64-NEXT: %p1 = ptrtoaddr ptr %in to i32
13+
; X64-NEXT: --> %p1 U: full-set S: full-set
14+
; X64-NEXT: %p2 = ptrtoaddr ptr %in to i16
15+
; X64-NEXT: --> %p2 U: full-set S: full-set
16+
; X64-NEXT: %p3 = ptrtoaddr ptr %in to i128
17+
; X64-NEXT: --> %p3 U: full-set S: full-set
18+
; X64-NEXT: Determining loop execution counts for: @ptrtoaddr
19+
;
20+
; X32-LABEL: 'ptrtoaddr'
21+
; X32-NEXT: Classifying expressions for: @ptrtoaddr
22+
; X32-NEXT: %p0 = ptrtoaddr ptr %in to i64
23+
; X32-NEXT: --> %p0 U: full-set S: full-set
24+
; X32-NEXT: %p1 = ptrtoaddr ptr %in to i32
25+
; X32-NEXT: --> %p1 U: full-set S: full-set
26+
; X32-NEXT: %p2 = ptrtoaddr ptr %in to i16
27+
; X32-NEXT: --> %p2 U: full-set S: full-set
28+
; X32-NEXT: %p3 = ptrtoaddr ptr %in to i128
29+
; X32-NEXT: --> %p3 U: full-set S: full-set
30+
; X32-NEXT: Determining loop execution counts for: @ptrtoaddr
31+
;
32+
%p0 = ptrtoaddr ptr %in to i64
33+
%p1 = ptrtoaddr ptr %in to i32
34+
%p2 = ptrtoaddr ptr %in to i16
35+
%p3 = ptrtoaddr ptr %in to i128
36+
store i64 %p0, ptr %out0
37+
store i32 %p1, ptr %out1
38+
store i16 %p2, ptr %out2
39+
store i128 %p3, ptr %out3
40+
ret void
41+
}
42+
43+
define void @ptrtoaddr_as1(ptr addrspace(1) %in, ptr %out0, ptr %out1, ptr %out2, ptr %out3) {
44+
; X64-LABEL: 'ptrtoaddr_as1'
45+
; X64-NEXT: Classifying expressions for: @ptrtoaddr_as1
46+
; X64-NEXT: %p0 = ptrtoaddr ptr addrspace(1) %in to i64
47+
; X64-NEXT: --> %p0 U: full-set S: full-set
48+
; X64-NEXT: %p1 = ptrtoaddr ptr addrspace(1) %in to i32
49+
; X64-NEXT: --> %p1 U: full-set S: full-set
50+
; X64-NEXT: %p2 = ptrtoaddr ptr addrspace(1) %in to i16
51+
; X64-NEXT: --> %p2 U: full-set S: full-set
52+
; X64-NEXT: %p3 = ptrtoaddr ptr addrspace(1) %in to i128
53+
; X64-NEXT: --> %p3 U: full-set S: full-set
54+
; X64-NEXT: Determining loop execution counts for: @ptrtoaddr_as1
55+
;
56+
; X32-LABEL: 'ptrtoaddr_as1'
57+
; X32-NEXT: Classifying expressions for: @ptrtoaddr_as1
58+
; X32-NEXT: %p0 = ptrtoaddr ptr addrspace(1) %in to i64
59+
; X32-NEXT: --> %p0 U: full-set S: full-set
60+
; X32-NEXT: %p1 = ptrtoaddr ptr addrspace(1) %in to i32
61+
; X32-NEXT: --> %p1 U: full-set S: full-set
62+
; X32-NEXT: %p2 = ptrtoaddr ptr addrspace(1) %in to i16
63+
; X32-NEXT: --> %p2 U: full-set S: full-set
64+
; X32-NEXT: %p3 = ptrtoaddr ptr addrspace(1) %in to i128
65+
; X32-NEXT: --> %p3 U: full-set S: full-set
66+
; X32-NEXT: Determining loop execution counts for: @ptrtoaddr_as1
67+
;
68+
%p0 = ptrtoaddr ptr addrspace(1) %in to i64
69+
%p1 = ptrtoaddr ptr addrspace(1) %in to i32
70+
%p2 = ptrtoaddr ptr addrspace(1) %in to i16
71+
%p3 = ptrtoaddr ptr addrspace(1) %in to i128
72+
store i64 %p0, ptr %out0
73+
store i32 %p1, ptr %out1
74+
store i16 %p2, ptr %out2
75+
store i128 %p3, ptr %out3
76+
ret void
77+
}
78+
79+
define void @ptrtoaddr_of_bitcast(ptr %in, ptr %out0) {
80+
; X64-LABEL: 'ptrtoaddr_of_bitcast'
81+
; X64-NEXT: Classifying expressions for: @ptrtoaddr_of_bitcast
82+
; X64-NEXT: %in_casted = bitcast ptr %in to ptr
83+
; X64-NEXT: --> %in U: full-set S: full-set
84+
; X64-NEXT: %p0 = ptrtoaddr ptr %in_casted to i64
85+
; X64-NEXT: --> %p0 U: full-set S: full-set
86+
; X64-NEXT: Determining loop execution counts for: @ptrtoaddr_of_bitcast
87+
;
88+
; X32-LABEL: 'ptrtoaddr_of_bitcast'
89+
; X32-NEXT: Classifying expressions for: @ptrtoaddr_of_bitcast
90+
; X32-NEXT: %in_casted = bitcast ptr %in to ptr
91+
; X32-NEXT: --> %in U: full-set S: full-set
92+
; X32-NEXT: %p0 = ptrtoaddr ptr %in_casted to i64
93+
; X32-NEXT: --> %p0 U: full-set S: full-set
94+
; X32-NEXT: Determining loop execution counts for: @ptrtoaddr_of_bitcast
95+
;
96+
%in_casted = bitcast ptr %in to ptr
97+
%p0 = ptrtoaddr ptr %in_casted to i64
98+
store i64 %p0, ptr %out0
99+
ret void
100+
}
101+
102+
define void @ptrtoaddr_of_nullptr(ptr %out0) {
103+
; ALL-LABEL: 'ptrtoaddr_of_nullptr'
104+
; ALL-NEXT: Classifying expressions for: @ptrtoaddr_of_nullptr
105+
; ALL-NEXT: %p0 = ptrtoaddr ptr null to i64
106+
; ALL-NEXT: --> %p0 U: full-set S: full-set
107+
; ALL-NEXT: Determining loop execution counts for: @ptrtoaddr_of_nullptr
108+
;
109+
%p0 = ptrtoaddr ptr null to i64
110+
store i64 %p0, ptr %out0
111+
ret void
112+
}
113+
114+
define void @ptrtoaddr_of_gep(ptr %in, ptr %out0) {
115+
; X64-LABEL: 'ptrtoaddr_of_gep'
116+
; X64-NEXT: Classifying expressions for: @ptrtoaddr_of_gep
117+
; X64-NEXT: %in_adj = getelementptr inbounds i8, ptr %in, i64 42
118+
; X64-NEXT: --> (42 + %in) U: full-set S: full-set
119+
; X64-NEXT: %p0 = ptrtoaddr ptr %in_adj to i64
120+
; X64-NEXT: --> %p0 U: full-set S: full-set
121+
; X64-NEXT: Determining loop execution counts for: @ptrtoaddr_of_gep
122+
;
123+
; X32-LABEL: 'ptrtoaddr_of_gep'
124+
; X32-NEXT: Classifying expressions for: @ptrtoaddr_of_gep
125+
; X32-NEXT: %in_adj = getelementptr inbounds i8, ptr %in, i64 42
126+
; X32-NEXT: --> (42 + %in) U: full-set S: full-set
127+
; X32-NEXT: %p0 = ptrtoaddr ptr %in_adj to i64
128+
; X32-NEXT: --> %p0 U: full-set S: full-set
129+
; X32-NEXT: Determining loop execution counts for: @ptrtoaddr_of_gep
130+
;
131+
%in_adj = getelementptr inbounds i8, ptr %in, i64 42
132+
%p0 = ptrtoaddr ptr %in_adj to i64
133+
store i64 %p0, ptr %out0
134+
ret void
135+
}

0 commit comments

Comments
 (0)