[llvm] 02c5eb5 - [SCEV] Add tests for ptrtoint with different globals.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 28 07:29:23 PDT 2023


Author: Florian Hahn
Date: 2023-04-28T15:29:07+01:00
New Revision: 02c5eb565f2e0396053b25cb39659a52517b2f32

URL: https://github.com/llvm/llvm-project/commit/02c5eb565f2e0396053b25cb39659a52517b2f32
DIFF: https://github.com/llvm/llvm-project/commit/02c5eb565f2e0396053b25cb39659a52517b2f32.diff

LOG: [SCEV] Add tests for ptrtoint with different globals.

Added: 
    llvm/test/Analysis/ScalarEvolution/ptrtoint-global.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Analysis/ScalarEvolution/ptrtoint-global.ll b/llvm/test/Analysis/ScalarEvolution/ptrtoint-global.ll
new file mode 100644
index 0000000000000..a76acbb77ac7b
--- /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<scalar-evolution>' -disable-output %s 2>&1 | FileCheck %s
+
+ at glob.i32.align2 = global i32 zeroinitializer, align 2
+ at glob.i32.align8 = global i32 zeroinitializer, align 8
+ at glob.i32.align16 = global i32 zeroinitializer, align 16
+ at 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))<nuw><nsw> 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))<nuw><nsw> 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)


        


More information about the llvm-commits mailing list