193 lines
9.5 KiB
LLVM
193 lines
9.5 KiB
LLVM
|
; 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
|
||
|
|
||
|
@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))<nuw> 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))<nuw><nsw> 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))<nuw><nsw> 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))<nuw> 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))<nuw> 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))<nuw> 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))<nuw> 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))<nuw> 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))<nuw> 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)
|