193 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 22; RUN: opt -passes='print<scalar-evolution>' -disable-output %s 2>&1 | FileCheck %s3 4@glob.i32.align2 = global i32 zeroinitializer, align 25@glob.i32.align8 = global i32 zeroinitializer, align 86@glob.i32.align16 = global i32 zeroinitializer, align 167@array4xi32 = global [4 x i32] zeroinitializer, align 168 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_512; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 513; 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_515;16entry:17 %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 518 ret i64 %add19}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_624; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 625; 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_627;28entry:29 %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 630 ret i64 %add31}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_736; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 737; 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_739;40entry:41 %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 742 ret i64 %add43}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_848; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 849; 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_851;52entry:53 %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 854 ret i64 %add55}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_1560; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 1561; 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_1563;64entry:65 %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 1566 ret i64 %add67}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_1672; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 1673; 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_1675;76entry:77 %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 1678 ret i64 %add79}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_1684; CHECK-NEXT: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 1685; 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_1687;88entry:89 %add = add i64 ptrtoint (ptr @array4xi32 to i64), 1690 ret i64 %add91}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_3196; CHECK-NEXT: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 3197; 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_3199;100entry:101 %add = add i64 ptrtoint (ptr @array4xi32 to i64), 31102 ret i64 %add103}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_32108; CHECK-NEXT: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 32109; 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_32111;112entry:113 %add = add i64 ptrtoint (ptr @array4xi32 to i64), 32114 ret i64 %add115}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_33120; CHECK-NEXT: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 33121; 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_33123;124entry:125 %add = add i64 ptrtoint (ptr @array4xi32 to i64), 33126 ret i64 %add127}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_sub132; CHECK-NEXT: %add.16 = add i64 ptrtoint (ptr @array4xi32 to i64), 16133; 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, 16137; 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_sub141;142entry:143 %add.16 = add i64 ptrtoint (ptr @array4xi32 to i64), 16144 %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.16)145 %add = add i64 %umax, 16146 %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)147 ret i64 %sub148}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_sub153; CHECK-NEXT: %add.31 = add i64 ptrtoint (ptr @array4xi32 to i64), 31154; 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, 16158; 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_sub162;163entry:164 %add.31 = add i64 ptrtoint (ptr @array4xi32 to i64), 31165 %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.31)166 %add = add i64 %umax, 16167 %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)168 ret i64 %sub169}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_sub174; CHECK-NEXT: %add.32 = add i64 ptrtoint (ptr @array4xi32 to i64), 32175; 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, 16179; 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_sub183;184entry:185 %add.32 = add i64 ptrtoint (ptr @array4xi32 to i64), 32186 %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.32)187 %add = add i64 %umax, 16188 %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64)189 ret i64 %sub190}191 192declare i64 @llvm.umax.i64(i64, i64)193