From 02c5eb565f2e0396053b25cb39659a52517b2f32 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Fri, 28 Apr 2023 15:29:07 +0100 Subject: [PATCH] [SCEV] Add tests for ptrtoint with different globals. --- .../Analysis/ScalarEvolution/ptrtoint-global.ll | 192 +++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 llvm/test/Analysis/ScalarEvolution/ptrtoint-global.ll diff --git a/llvm/test/Analysis/ScalarEvolution/ptrtoint-global.ll b/llvm/test/Analysis/ScalarEvolution/ptrtoint-global.ll new file mode 100644 index 0000000..a76acbb --- /dev/null +++ b/llvm/test/Analysis/ScalarEvolution/ptrtoint-global.ll @@ -0,0 +1,192 @@ +; 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: [5,4) S: [-9223372036854775803,-9223372036854775804) +; 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: [7,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: [15,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: [0,-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: [31,16) S: [-9223372036854775777,-9223372036854775792) +; 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: [33,18) 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: [0,-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)) umax (ptrtoint ptr @array4xi32 to i64)) U: [0,-15) S: [-9223372036854775808,9223372036854775793) +; CHECK-NEXT: %add = add i64 %umax, 16 +; CHECK-NEXT: --> (16 + ((16 + (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)) + ((16 + (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_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: [31,16) S: [-9223372036854775777,-9223372036854775792) +; 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)) umax (ptrtoint ptr @array4xi32 to i64)) U: full-set S: full-set +; CHECK-NEXT: %add = add i64 %umax, 16 +; CHECK-NEXT: --> (16 + ((31 + (ptrtoint ptr @array4xi32 to i64)) umax (ptrtoint ptr @array4xi32 to i64))) U: full-set S: full-set +; CHECK-NEXT: %sub = sub i64 %add, ptrtoint (ptr @array4xi32 to i64) +; CHECK-NEXT: --> (16 + (-1 * (ptrtoint ptr @array4xi32 to i64)) + ((31 + (ptrtoint ptr @array4xi32 to i64)) umax (ptrtoint ptr @array4xi32 to i64))) U: full-set S: full-set +; 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: [0,-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) -- 2.7.4