; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 2 ; RUN: opt -passes='print' -disable-output %s 2>&1 | FileCheck %s @glob.i32.align2 = global i32 zeroinitializer, align 2 @glob.i32.align8 = global i32 zeroinitializer, align 8 @glob.i32.align16 = global i32 zeroinitializer, align 16 @array4xi32 = global [4 x i32] zeroinitializer, align 16 define i64 @ptrtoint_align_2_size_4_add_5() { ; CHECK-LABEL: 'ptrtoint_align_2_size_4_add_5' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_2_size_4_add_5 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 5 ; CHECK-NEXT: --> (5 + (ptrtoint ptr @glob.i32.align2 to i64)) U: [7,0) S: [5,0) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_2_size_4_add_5 ; entry: %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 5 ret i64 %add } define i64 @ptrtoint_align_2_size_4_add_6() { ; CHECK-LABEL: 'ptrtoint_align_2_size_4_add_6' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_2_size_4_add_6 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 6 ; CHECK-NEXT: --> (6 + (ptrtoint ptr @glob.i32.align2 to i64)) U: [0,-1) S: [-9223372036854775808,9223372036854775807) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_2_size_4_add_6 ; entry: %add = add i64 ptrtoint (ptr @glob.i32.align2 to i64), 6 ret i64 %add } define i64 @ptrtoint_align_8_size_4_add_7() { ; CHECK-LABEL: 'ptrtoint_align_8_size_4_add_7' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_8_size_4_add_7 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 7 ; CHECK-NEXT: --> (7 + (ptrtoint ptr @glob.i32.align8 to i64)) U: [15,0) S: [-9223372036854775801,-9223372036854775808) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_8_size_4_add_7 ; entry: %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 7 ret i64 %add } define i64 @ptrtoint_align_8_size_4_add_8() { ; CHECK-LABEL: 'ptrtoint_align_8_size_4_add_8' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_8_size_4_add_8 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 8 ; CHECK-NEXT: --> (8 + (ptrtoint ptr @glob.i32.align8 to i64)) U: [0,-7) S: [-9223372036854775808,9223372036854775801) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_8_size_4_add_8 ; entry: %add = add i64 ptrtoint (ptr @glob.i32.align8 to i64), 8 ret i64 %add } define i64 @ptrtoint_align_16_size_4_add_15() { ; CHECK-LABEL: 'ptrtoint_align_16_size_4_add_15' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_16_size_4_add_15 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 15 ; CHECK-NEXT: --> (15 + (ptrtoint ptr @glob.i32.align16 to i64)) U: [31,0) S: [-9223372036854775793,-9223372036854775808) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_16_size_4_add_15 ; entry: %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 15 ret i64 %add } define i64 @ptrtoint_align_16_size_4_add_16() { ; CHECK-LABEL: 'ptrtoint_align_16_size_4_add_16' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_16_size_4_add_16 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 16 ; CHECK-NEXT: --> (16 + (ptrtoint ptr @glob.i32.align16 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_16_size_4_add_16 ; entry: %add = add i64 ptrtoint (ptr @glob.i32.align16 to i64), 16 ret i64 %add } define i64 @ptrtoint_align_16_size_16_add_16() { ; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_16' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_16_size_16_add_16 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 16 ; CHECK-NEXT: --> (16 + (ptrtoint ptr @array4xi32 to i64)) U: [32,-15) S: [-9223372036854775808,9223372036854775793) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_16_size_16_add_16 ; entry: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 16 ret i64 %add } define i64 @ptrtoint_align_16_size_16_add_31() { ; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_31' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_16_size_16_add_31 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 31 ; CHECK-NEXT: --> (31 + (ptrtoint ptr @array4xi32 to i64)) U: [47,0) S: [31,0) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_16_size_16_add_31 ; entry: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 31 ret i64 %add } define i64 @ptrtoint_align_16_size_16_add_32() { ; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_32' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_16_size_16_add_32 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 32 ; CHECK-NEXT: --> (32 + (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_16_size_16_add_32 ; entry: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 32 ret i64 %add } define i64 @ptrtoint_align_16_size_16_add_33() { ; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_33' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_16_size_16_add_33 ; CHECK-NEXT: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 33 ; CHECK-NEXT: --> (33 + (ptrtoint ptr @array4xi32 to i64)) U: [49,2) S: [-9223372036854775775,-9223372036854775790) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_16_size_16_add_33 ; entry: %add = add i64 ptrtoint (ptr @array4xi32 to i64), 33 ret i64 %add } define i64 @ptrtoint_align_16_size_16_add_16_umax_sub() { ; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_16_umax_sub' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_16_size_16_add_16_umax_sub ; CHECK-NEXT: %add.16 = add i64 ptrtoint (ptr @array4xi32 to i64), 16 ; CHECK-NEXT: --> (16 + (ptrtoint ptr @array4xi32 to i64)) U: [32,-15) S: [-9223372036854775808,9223372036854775793) ; CHECK-NEXT: %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.16) ; CHECK-NEXT: --> (16 + (ptrtoint ptr @array4xi32 to i64)) U: [32,-15) S: [-9223372036854775808,9223372036854775793) ; CHECK-NEXT: %add = add i64 %umax, 16 ; CHECK-NEXT: --> (32 + (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793) ; CHECK-NEXT: %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64) ; CHECK-NEXT: --> 32 U: [32,33) S: [32,33) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_16_size_16_add_16_umax_sub ; entry: %add.16 = add i64 ptrtoint (ptr @array4xi32 to i64), 16 %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.16) %add = add i64 %umax, 16 %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64) ret i64 %sub } define i64 @ptrtoint_align_16_size_16_add_31_umax_sub() { ; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_31_umax_sub' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_16_size_16_add_31_umax_sub ; CHECK-NEXT: %add.31 = add i64 ptrtoint (ptr @array4xi32 to i64), 31 ; CHECK-NEXT: --> (31 + (ptrtoint ptr @array4xi32 to i64)) U: [47,0) S: [31,0) ; CHECK-NEXT: %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.31) ; CHECK-NEXT: --> (31 + (ptrtoint ptr @array4xi32 to i64)) U: [47,0) S: [31,0) ; CHECK-NEXT: %add = add i64 %umax, 16 ; CHECK-NEXT: --> (47 + (ptrtoint ptr @array4xi32 to i64)) U: [63,16) S: [-9223372036854775761,-9223372036854775776) ; CHECK-NEXT: %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64) ; CHECK-NEXT: --> 47 U: [47,48) S: [47,48) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_16_size_16_add_31_umax_sub ; entry: %add.31 = add i64 ptrtoint (ptr @array4xi32 to i64), 31 %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.31) %add = add i64 %umax, 16 %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64) ret i64 %sub } define i64 @ptrtoint_align_16_size_16_add_32_umax_sub() { ; CHECK-LABEL: 'ptrtoint_align_16_size_16_add_32_umax_sub' ; CHECK-NEXT: Classifying expressions for: @ptrtoint_align_16_size_16_add_32_umax_sub ; CHECK-NEXT: %add.32 = add i64 ptrtoint (ptr @array4xi32 to i64), 32 ; CHECK-NEXT: --> (32 + (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793) ; CHECK-NEXT: %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.32) ; CHECK-NEXT: --> ((32 + (ptrtoint ptr @array4xi32 to i64)) umax (ptrtoint ptr @array4xi32 to i64)) U: [16,-15) S: [-9223372036854775808,9223372036854775793) ; CHECK-NEXT: %add = add i64 %umax, 16 ; CHECK-NEXT: --> (16 + ((32 + (ptrtoint ptr @array4xi32 to i64)) umax (ptrtoint ptr @array4xi32 to i64))) U: [0,-15) S: [-9223372036854775808,9223372036854775793) ; CHECK-NEXT: %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64) ; 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) ; CHECK-NEXT: Determining loop execution counts for: @ptrtoint_align_16_size_16_add_32_umax_sub ; entry: %add.32 = add i64 ptrtoint (ptr @array4xi32 to i64), 32 %umax = call i64 @llvm.umax.i64(i64 ptrtoint (ptr @array4xi32 to i64), i64 %add.32) %add = add i64 %umax, 16 %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64) ret i64 %sub } declare i64 @llvm.umax.i64(i64, i64)