xref: /llvm-project/llvm/test/Analysis/ScalarEvolution/ptrtoint-global.ll (revision 3cd4571405ba9de14072439c23257d9de3a0673b)
102c5eb56SFlorian Hahn; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 2
202c5eb56SFlorian Hahn; RUN: opt -passes='print<scalar-evolution>' -disable-output %s 2>&1 | FileCheck %s
302c5eb56SFlorian Hahn
402c5eb56SFlorian Hahn@glob.i32.align2 = global i32 zeroinitializer, align 2
502c5eb56SFlorian Hahn@glob.i32.align8 = global i32 zeroinitializer, align 8
602c5eb56SFlorian Hahn@glob.i32.align16 = global i32 zeroinitializer, align 16
702c5eb56SFlorian Hahn@array4xi32 = global [4 x i32] zeroinitializer, align 16
802c5eb56SFlorian Hahn
902c5eb56SFlorian Hahndefine i64 @ptrtoint_align_2_size_4_add_5() {
1002c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_2_size_4_add_5'
1102c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_2_size_4_add_5
1202c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 5
13*3cd45714SNikita Popov; CHECK-NEXT:    --> (5 + (ptrtoint ptr @glob.i32.align2 to i64))<nuw> U: [7,0) S: [5,0)
1402c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_2_size_4_add_5
1502c5eb56SFlorian Hahn;
1602c5eb56SFlorian Hahnentry:
1702c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 5
1802c5eb56SFlorian Hahn  ret i64 %add
1902c5eb56SFlorian Hahn}
2002c5eb56SFlorian Hahn
2102c5eb56SFlorian Hahndefine i64 @ptrtoint_align_2_size_4_add_6() {
2202c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_2_size_4_add_6'
2302c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_2_size_4_add_6
2402c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 6
2502c5eb56SFlorian Hahn; CHECK-NEXT:    --> (6 + (ptrtoint ptr @glob.i32.align2 to i64)) U: [0,-1) S: [-9223372036854775808,9223372036854775807)
2602c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_2_size_4_add_6
2702c5eb56SFlorian Hahn;
2802c5eb56SFlorian Hahnentry:
2902c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 6
3002c5eb56SFlorian Hahn  ret i64 %add
3102c5eb56SFlorian Hahn}
3202c5eb56SFlorian Hahn
3302c5eb56SFlorian Hahndefine i64 @ptrtoint_align_8_size_4_add_7() {
3402c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_8_size_4_add_7'
3502c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_8_size_4_add_7
3602c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 7
37*3cd45714SNikita Popov; CHECK-NEXT:    --> (7 + (ptrtoint ptr @glob.i32.align8 to i64))<nuw><nsw> U: [15,0) S: [-9223372036854775801,-9223372036854775808)
3802c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_8_size_4_add_7
3902c5eb56SFlorian Hahn;
4002c5eb56SFlorian Hahnentry:
4102c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 7
4202c5eb56SFlorian Hahn  ret i64 %add
4302c5eb56SFlorian Hahn}
4402c5eb56SFlorian Hahn
4502c5eb56SFlorian Hahndefine i64 @ptrtoint_align_8_size_4_add_8() {
4602c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_8_size_4_add_8'
4702c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_8_size_4_add_8
4802c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 8
4902c5eb56SFlorian Hahn; CHECK-NEXT:    --> (8 + (ptrtoint ptr @glob.i32.align8 to i64)) U: [0,-7) S: [-9223372036854775808,9223372036854775801)
5002c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_8_size_4_add_8
5102c5eb56SFlorian Hahn;
5202c5eb56SFlorian Hahnentry:
5302c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 8
5402c5eb56SFlorian Hahn  ret i64 %add
5502c5eb56SFlorian Hahn}
5602c5eb56SFlorian Hahn
5702c5eb56SFlorian Hahndefine i64 @ptrtoint_align_16_size_4_add_15() {
5802c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_16_size_4_add_15'
5902c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_4_add_15
6002c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 15
61*3cd45714SNikita Popov; CHECK-NEXT:    --> (15 + (ptrtoint ptr @glob.i32.align16 to i64))<nuw><nsw> U: [31,0) S: [-9223372036854775793,-9223372036854775808)
6202c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_4_add_15
6302c5eb56SFlorian Hahn;
6402c5eb56SFlorian Hahnentry:
6502c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 15
6602c5eb56SFlorian Hahn  ret i64 %add
6702c5eb56SFlorian Hahn}
6802c5eb56SFlorian Hahn
6902c5eb56SFlorian Hahndefine i64 @ptrtoint_align_16_size_4_add_16() {
7002c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_16_size_4_add_16'
7102c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_4_add_16
7202c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 16
7302c5eb56SFlorian Hahn; CHECK-NEXT:    --> (16 + (ptrtoint ptr @glob.i32.align16 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
7402c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_4_add_16
7502c5eb56SFlorian Hahn;
7602c5eb56SFlorian Hahnentry:
7702c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 16
7802c5eb56SFlorian Hahn  ret i64 %add
7902c5eb56SFlorian Hahn}
8002c5eb56SFlorian Hahn
8102c5eb56SFlorian Hahndefine i64 @ptrtoint_align_16_size_16_add_16() {
8202c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_16'
8302c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_16
8402c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @array4xi32 to i64), 16
85*3cd45714SNikita Popov; CHECK-NEXT:    --> (16 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [32,-15) S: [-9223372036854775808,9223372036854775793)
8602c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_16
8702c5eb56SFlorian Hahn;
8802c5eb56SFlorian Hahnentry:
8902c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @array4xi32 to i64), 16
9002c5eb56SFlorian Hahn  ret i64 %add
9102c5eb56SFlorian Hahn}
9202c5eb56SFlorian Hahn
9302c5eb56SFlorian Hahndefine i64 @ptrtoint_align_16_size_16_add_31() {
9402c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_31'
9502c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_31
9602c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @array4xi32 to i64), 31
97*3cd45714SNikita Popov; CHECK-NEXT:    --> (31 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [47,0) S: [31,0)
9802c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_31
9902c5eb56SFlorian Hahn;
10002c5eb56SFlorian Hahnentry:
10102c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @array4xi32 to i64), 31
10202c5eb56SFlorian Hahn  ret i64 %add
10302c5eb56SFlorian Hahn}
10402c5eb56SFlorian Hahn
10502c5eb56SFlorian Hahndefine i64 @ptrtoint_align_16_size_16_add_32() {
10602c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_32'
10702c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_32
10802c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @array4xi32 to i64), 32
10902c5eb56SFlorian Hahn; CHECK-NEXT:    --> (32 + (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
11002c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_32
11102c5eb56SFlorian Hahn;
11202c5eb56SFlorian Hahnentry:
11302c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @array4xi32 to i64), 32
11402c5eb56SFlorian Hahn  ret i64 %add
11502c5eb56SFlorian Hahn}
11602c5eb56SFlorian Hahn
11702c5eb56SFlorian Hahndefine i64 @ptrtoint_align_16_size_16_add_33() {
11802c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_33'
11902c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_33
12002c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 ptrtoint (ptr @array4xi32 to i64), 33
121*3cd45714SNikita Popov; CHECK-NEXT:    --> (33 + (ptrtoint ptr @array4xi32 to i64)) U: [49,2) S: [-9223372036854775775,-9223372036854775790)
12202c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_33
12302c5eb56SFlorian Hahn;
12402c5eb56SFlorian Hahnentry:
12502c5eb56SFlorian Hahn  %add = add i64 ptrtoint (ptr @array4xi32 to i64), 33
12602c5eb56SFlorian Hahn  ret i64 %add
12702c5eb56SFlorian Hahn}
12802c5eb56SFlorian Hahn
12902c5eb56SFlorian Hahndefine i64 @ptrtoint_align_16_size_16_add_16_umax_sub() {
13002c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_16_umax_sub'
13102c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_16_umax_sub
13202c5eb56SFlorian Hahn; CHECK-NEXT:    %add.16 = add i64 ptrtoint (ptr @array4xi32 to i64), 16
133*3cd45714SNikita Popov; CHECK-NEXT:    --> (16 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [32,-15) S: [-9223372036854775808,9223372036854775793)
13402c5eb56SFlorian Hahn; CHECK-NEXT:    %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.16)
135*3cd45714SNikita Popov; CHECK-NEXT:    --> (16 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [32,-15) S: [-9223372036854775808,9223372036854775793)
13602c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 %umax, 16
137b14be1e7SFlorian Hahn; CHECK-NEXT:    --> (32 + (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
13802c5eb56SFlorian Hahn; CHECK-NEXT:    %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
139b14be1e7SFlorian Hahn; CHECK-NEXT:    --> 32 U: [32,33) S: [32,33)
14002c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_16_umax_sub
14102c5eb56SFlorian Hahn;
14202c5eb56SFlorian Hahnentry:
14302c5eb56SFlorian Hahn  %add.16 = add i64 ptrtoint (ptr @array4xi32 to i64), 16
14402c5eb56SFlorian Hahn  %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.16)
14502c5eb56SFlorian Hahn  %add = add i64 %umax, 16
14602c5eb56SFlorian Hahn  %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
14702c5eb56SFlorian Hahn  ret i64 %sub
14802c5eb56SFlorian Hahn}
14902c5eb56SFlorian Hahn
15002c5eb56SFlorian Hahndefine i64 @ptrtoint_align_16_size_16_add_31_umax_sub() {
15102c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_31_umax_sub'
15202c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_31_umax_sub
15302c5eb56SFlorian Hahn; CHECK-NEXT:    %add.31 = add i64 ptrtoint (ptr @array4xi32 to i64), 31
154*3cd45714SNikita Popov; CHECK-NEXT:    --> (31 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [47,0) S: [31,0)
15502c5eb56SFlorian Hahn; CHECK-NEXT:    %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.31)
156*3cd45714SNikita Popov; CHECK-NEXT:    --> (31 + (ptrtoint ptr @array4xi32 to i64))<nuw> U: [47,0) S: [31,0)
15702c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 %umax, 16
158*3cd45714SNikita Popov; CHECK-NEXT:    --> (47 + (ptrtoint ptr @array4xi32 to i64)) U: [63,16) S: [-9223372036854775761,-9223372036854775776)
15902c5eb56SFlorian Hahn; CHECK-NEXT:    %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
160b14be1e7SFlorian Hahn; CHECK-NEXT:    --> 47 U: [47,48) S: [47,48)
16102c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_31_umax_sub
16202c5eb56SFlorian Hahn;
16302c5eb56SFlorian Hahnentry:
16402c5eb56SFlorian Hahn  %add.31 = add i64 ptrtoint (ptr @array4xi32 to i64), 31
16502c5eb56SFlorian Hahn  %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.31)
16602c5eb56SFlorian Hahn  %add = add i64 %umax, 16
16702c5eb56SFlorian Hahn  %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
16802c5eb56SFlorian Hahn  ret i64 %sub
16902c5eb56SFlorian Hahn}
17002c5eb56SFlorian Hahn
17102c5eb56SFlorian Hahndefine i64 @ptrtoint_align_16_size_16_add_32_umax_sub() {
17202c5eb56SFlorian Hahn; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_32_umax_sub'
17302c5eb56SFlorian Hahn; CHECK-NEXT:  Classifying expressions for: @ptrtoint_align_16_size_16_add_32_umax_sub
17402c5eb56SFlorian Hahn; CHECK-NEXT:    %add.32 = add i64 ptrtoint (ptr @array4xi32 to i64), 32
17502c5eb56SFlorian Hahn; CHECK-NEXT:    --> (32 + (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
17602c5eb56SFlorian Hahn; CHECK-NEXT:    %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.32)
177*3cd45714SNikita Popov; CHECK-NEXT:    --> ((32 + (ptrtoint ptr @array4xi32 to i64)) umax (ptrtoint ptr @array4xi32 to i64)) U: [16,-15) S: [-9223372036854775808,9223372036854775793)
17802c5eb56SFlorian Hahn; CHECK-NEXT:    %add = add i64 %umax, 16
17902c5eb56SFlorian Hahn; CHECK-NEXT:    --> (16 + ((32 + (ptrtoint ptr @array4xi32 to i64)) umax (ptrtoint ptr @array4xi32 to i64))) U: [0,-15) S: [-9223372036854775808,9223372036854775793)
18002c5eb56SFlorian Hahn; CHECK-NEXT:    %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
18102c5eb56SFlorian Hahn; 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)
18202c5eb56SFlorian Hahn; CHECK-NEXT:  Determining loop execution counts for: @ptrtoint_align_16_size_16_add_32_umax_sub
18302c5eb56SFlorian Hahn;
18402c5eb56SFlorian Hahnentry:
18502c5eb56SFlorian Hahn  %add.32 = add i64 ptrtoint (ptr @array4xi32 to i64), 32
18602c5eb56SFlorian Hahn  %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.32)
18702c5eb56SFlorian Hahn  %add = add i64 %umax, 16
18802c5eb56SFlorian Hahn  %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)
18902c5eb56SFlorian Hahn  ret i64 %sub
19002c5eb56SFlorian Hahn}
19102c5eb56SFlorian Hahn
19202c5eb56SFlorian Hahndeclare i64 @llvm.umax.i64(i64, i64)
193