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