xref: /llvm-project/llvm/test/Analysis/ScalarEvolution/ptrtoint-global.ll (revision 3cd4571405ba9de14072439c23257d9de3a0673b)
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 2
2; RUN: opt -passes='print<scalar-evolution>' -disable-output %s 2>&1 | FileCheck %s
3
4@glob.i32.align2 = global i32 zeroinitializer, align 2
5@glob.i32.align8 = global i32 zeroinitializer, align 8
6@glob.i32.align16 = global i32 zeroinitializer, align 16
7@array4xi32 = global [4 x i32] zeroinitializer, align 16
8
9define i64 @ptrtoint_align_2_size_4_add_5() {
10; CHECK-LABEL: 'ptrtoint_align_2_size_4_add_5'
11; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_2_size_4_add_5
12; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 5
13; CHECK-NEXT:    --> (5 + (ptrtoint ptr @glob.i32.align2 to i64))<nuw> U: [7,0) S: [5,0)
14; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_2_size_4_add_5
15;
16entry:
17  %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 5
18  ret i64 %add
19}
20
21define i64 @ptrtoint_align_2_size_4_add_6() {
22; CHECK-LABEL: 'ptrtoint_align_2_size_4_add_6'
23; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_2_size_4_add_6
24; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 6
25; CHECK-NEXT:    --> (6 + (ptrtoint ptr @glob.i32.align2 to i64)) U: [0,-1) S: [-9223372036854775808,9223372036854775807)
26; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_2_size_4_add_6
27;
28entry:
29  %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 6
30  ret i64 %add
31}
32
33define i64 @ptrtoint_align_8_size_4_add_7() {
34; CHECK-LABEL: 'ptrtoint_align_8_size_4_add_7'
35; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_8_size_4_add_7
36; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 7
37; CHECK-NEXT:    --> (7 + (ptrtoint ptr @glob.i32.align8 to i64))<nuw><nsw> U: [15,0) S: [-9223372036854775801,-9223372036854775808)
38; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_8_size_4_add_7
39;
40entry:
41  %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 7
42  ret i64 %add
43}
44
45define i64 @ptrtoint_align_8_size_4_add_8() {
46; CHECK-LABEL: 'ptrtoint_align_8_size_4_add_8'
47; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_8_size_4_add_8
48; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 8
49; CHECK-NEXT:    --> (8 + (ptrtoint ptr @glob.i32.align8 to i64)) U: [0,-7) S: [-9223372036854775808,9223372036854775801)
50; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_8_size_4_add_8
51;
52entry:
53  %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 8
54  ret i64 %add
55}
56
57define i64 @ptrtoint_align_16_size_4_add_15() {
58; CHECK-LABEL: 'ptrtoint_align_16_size_4_add_15'
59; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_4_add_15
60; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 15
61; CHECK-NEXT:    --> (15 + (ptrtoint ptr @glob.i32.align16 to i64))<nuw><nsw> U: [31,0) S: [-9223372036854775793,-9223372036854775808)
62; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_4_add_15
63;
64entry:
65  %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 15
66  ret i64 %add
67}
68
69define i64 @ptrtoint_align_16_size_4_add_16() {
70; CHECK-LABEL: 'ptrtoint_align_16_size_4_add_16'
71; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_4_add_16
72; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 16
73; CHECK-NEXT:    --> (16 + (ptrtoint ptr @glob.i32.align16 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
74; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_4_add_16
75;
76entry:
77  %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 16
78  ret i64 %add
79}
80
81define i64 @ptrtoint_align_16_size_16_add_16() {
82; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_16'
83; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_16
84; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @array4xi32 to i64), 16
85; CHECK-NEXT:    --> (16 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [32,-15) S: [-9223372036854775808,9223372036854775793)
86; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_16
87;
88entry:
89  %add = add i64 ptrtoint (ptr @array4xi32 to i64), 16
90  ret i64 %add
91}
92
93define i64 @ptrtoint_align_16_size_16_add_31() {
94; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_31'
95; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_31
96; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @array4xi32 to i64), 31
97; CHECK-NEXT:    --> (31 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [47,0) S: [31,0)
98; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_31
99;
100entry:
101  %add = add i64 ptrtoint (ptr @array4xi32 to i64), 31
102  ret i64 %add
103}
104
105define i64 @ptrtoint_align_16_size_16_add_32() {
106; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_32'
107; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_32
108; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @array4xi32 to i64), 32
109; CHECK-NEXT:    --> (32 + (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
110; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_32
111;
112entry:
113  %add = add i64 ptrtoint (ptr @array4xi32 to i64), 32
114  ret i64 %add
115}
116
117define i64 @ptrtoint_align_16_size_16_add_33() {
118; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_33'
119; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_33
120; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @array4xi32 to i64), 33
121; CHECK-NEXT:    --> (33 + (ptrtoint ptr @array4xi32 to i64)) U: [49,2) S: [-9223372036854775775,-9223372036854775790)
122; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_33
123;
124entry:
125  %add = add i64 ptrtoint (ptr @array4xi32 to i64), 33
126  ret i64 %add
127}
128
129define i64 @ptrtoint_align_16_size_16_add_16_umax_sub() {
130; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_16_umax_sub'
131; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_16_umax_sub
132; CHECK-NEXT:    %add.16 = add i64 ptrtoint (ptr @array4xi32 to i64), 16
133; CHECK-NEXT:    --> (16 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [32,-15) S: [-9223372036854775808,9223372036854775793)
134; CHECK-NEXT:    %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.16)
135; CHECK-NEXT:    --> (16 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [32,-15) S: [-9223372036854775808,9223372036854775793)
136; CHECK-NEXT:    %add = add i64 %umax, 16
137; CHECK-NEXT:    --> (32 + (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
138; CHECK-NEXT:    %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
139; CHECK-NEXT:    --> 32 U: [32,33) S: [32,33)
140; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_16_umax_sub
141;
142entry:
143  %add.16 = add i64 ptrtoint (ptr @array4xi32 to i64), 16
144  %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.16)
145  %add = add i64 %umax, 16
146  %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
147  ret i64 %sub
148}
149
150define i64 @ptrtoint_align_16_size_16_add_31_umax_sub() {
151; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_31_umax_sub'
152; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_31_umax_sub
153; CHECK-NEXT:    %add.31 = add i64 ptrtoint (ptr @array4xi32 to i64), 31
154; CHECK-NEXT:    --> (31 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [47,0) S: [31,0)
155; CHECK-NEXT:    %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.31)
156; CHECK-NEXT:    --> (31 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [47,0) S: [31,0)
157; CHECK-NEXT:    %add = add i64 %umax, 16
158; CHECK-NEXT:    --> (47 + (ptrtoint ptr @array4xi32 to i64)) U: [63,16) S: [-9223372036854775761,-9223372036854775776)
159; CHECK-NEXT:    %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
160; CHECK-NEXT:    --> 47 U: [47,48) S: [47,48)
161; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_31_umax_sub
162;
163entry:
164  %add.31 = add i64 ptrtoint (ptr @array4xi32 to i64), 31
165  %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.31)
166  %add = add i64 %umax, 16
167  %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
168  ret i64 %sub
169}
170
171define i64 @ptrtoint_align_16_size_16_add_32_umax_sub() {
172; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_32_umax_sub'
173; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_32_umax_sub
174; CHECK-NEXT:    %add.32 = add i64 ptrtoint (ptr @array4xi32 to i64), 32
175; CHECK-NEXT:    --> (32 + (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
176; CHECK-NEXT:    %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.32)
177; CHECK-NEXT:    --> ((32 + (ptrtoint ptr @array4xi32 to i64)) umax (ptrtoint ptr @array4xi32 to i64)) U: [16,-15) S: [-9223372036854775808,9223372036854775793)
178; CHECK-NEXT:    %add = add i64 %umax, 16
179; CHECK-NEXT:    --> (16 + ((32 + (ptrtoint ptr @array4xi32 to i64)) umax (ptrtoint ptr @array4xi32 to i64))) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
180; CHECK-NEXT:    %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
181; CHECK-NEXT:    --> (16 + (-1 * (ptrtoint ptr @array4xi32 to i64)) + ((32 + (ptrtoint ptr @array4xi32 to i64)) umax (ptrtoint ptr @array4xi32 to i64))) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
182; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_32_umax_sub
183;
184entry:
185  %add.32 = add i64 ptrtoint (ptr @array4xi32 to i64), 32
186  %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.32)
187  %add = add i64 %umax, 16
188  %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
189  ret i64 %sub
190}
191
192declare i64 @llvm.umax.i64(i64, i64)
193