xref: /llvm-project/llvm/test/Analysis/ScalarEvolution/pr46786.ll (revision 92619956eb27ef08dd24045307593fc3d7f78db0)
1b96114c1SMax Kazantsev; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2b96114c1SMax Kazantsev; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s
3b96114c1SMax Kazantsev
4b96114c1SMax Kazantsevsource_filename = "input.cpp"
5b96114c1SMax Kazantsevtarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
6b96114c1SMax Kazantsev
7b96114c1SMax Kazantsev; Function Attrs: nofree
8*92619956SNikita Popovdefine ptr @FSE_decompress_usingDTable(ptr %arg, i32 %arg1, i32 %arg2, i32 %arg3) local_unnamed_addr #0 {
9b96114c1SMax Kazantsev; CHECK-LABEL: 'FSE_decompress_usingDTable'
10b96114c1SMax Kazantsev; CHECK-NEXT:  Classifying expressions for: @FSE_decompress_usingDTable
11*92619956SNikita Popov; CHECK-NEXT:    %i = getelementptr inbounds i8, ptr %arg, i32 %arg2
12f3124a46SNikita Popov; CHECK-NEXT:    --> (%arg2 + %arg) U: full-set S: full-set
13b96114c1SMax Kazantsev; CHECK-NEXT:    %i4 = sub nsw i32 0, %arg1
14b96114c1SMax Kazantsev; CHECK-NEXT:    --> (-1 * %arg1) U: full-set S: full-set
15*92619956SNikita Popov; CHECK-NEXT:    %i5 = getelementptr inbounds i8, ptr %i, i32 %i4
16b96114c1SMax Kazantsev; CHECK-NEXT:    --> ((-1 * %arg1) + %arg2 + %arg) U: full-set S: full-set
17b96114c1SMax Kazantsev; CHECK-NEXT:    %i7 = select i1 %i6, i32 %arg2, i32 %arg1
18*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * (ptrtoint ptr %arg to i32)) + (((-1 * %arg1) + (ptrtoint ptr %arg to i32) + %arg2) umin (ptrtoint ptr %arg to i32)) + %arg1) U: full-set S: full-set
19b96114c1SMax Kazantsev; CHECK-NEXT:    %i8 = sub i32 %arg3, %i7
20*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * (((-1 * %arg1) + (ptrtoint ptr %arg to i32) + %arg2) umin (ptrtoint ptr %arg to i32))) + (-1 * %arg1) + (ptrtoint ptr %arg to i32) + %arg3) U: full-set S: full-set
21*92619956SNikita Popov; CHECK-NEXT:    %i9 = getelementptr inbounds i8, ptr %arg, i32 %i8
22*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * (((-1 * %arg1) + (ptrtoint ptr %arg to i32) + %arg2) umin (ptrtoint ptr %arg to i32))) + (-1 * %arg1) + (ptrtoint ptr %arg to i32) + %arg3 + %arg) U: full-set S: full-set
23b96114c1SMax Kazantsev; CHECK-NEXT:  Determining loop execution counts for: @FSE_decompress_usingDTable
24b96114c1SMax Kazantsev;
25b96114c1SMax Kazantsevbb:
26*92619956SNikita Popov  %i = getelementptr inbounds i8, ptr %arg, i32 %arg2
27b96114c1SMax Kazantsev  %i4 = sub nsw i32 0, %arg1
28*92619956SNikita Popov  %i5 = getelementptr inbounds i8, ptr %i, i32 %i4
29*92619956SNikita Popov  %i6 = icmp ult ptr %i5, %arg
30b96114c1SMax Kazantsev  %i7 = select i1 %i6, i32 %arg2, i32 %arg1
31b96114c1SMax Kazantsev  %i8 = sub i32 %arg3, %i7
32*92619956SNikita Popov  %i9 = getelementptr inbounds i8, ptr %arg, i32 %i8
33*92619956SNikita Popov  ret ptr %i9
34b96114c1SMax Kazantsev}
35b96114c1SMax Kazantsev
36*92619956SNikita Popovdefine ptr @test_01(ptr %p) {
37c1d8e392SMax Kazantsev; CHECK-LABEL: 'test_01'
38c1d8e392SMax Kazantsev; CHECK-NEXT:  Classifying expressions for: @test_01
39*92619956SNikita Popov; CHECK-NEXT:    %p1 = getelementptr i8, ptr %p, i32 2
40c1d8e392SMax Kazantsev; CHECK-NEXT:    --> (2 + %p) U: full-set S: full-set
41*92619956SNikita Popov; CHECK-NEXT:    %p2 = getelementptr i8, ptr %p, i32 1
42c1d8e392SMax Kazantsev; CHECK-NEXT:    --> (1 + %p) U: full-set S: full-set
43c1d8e392SMax Kazantsev; CHECK-NEXT:    %index = select i1 %cmp, i32 2, i32 1
44*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * (ptrtoint ptr %p to i32)) + ((1 + (ptrtoint ptr %p to i32)) umax (2 + (ptrtoint ptr %p to i32)))) U: full-set S: full-set
45c1d8e392SMax Kazantsev; CHECK-NEXT:    %neg_index = sub i32 0, %index
46*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * ((1 + (ptrtoint ptr %p to i32)) umax (2 + (ptrtoint ptr %p to i32)))) + (ptrtoint ptr %p to i32)) U: full-set S: full-set
47*92619956SNikita Popov; CHECK-NEXT:    %gep = getelementptr i8, ptr %p, i32 %neg_index
48*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * ((1 + (ptrtoint ptr %p to i32)) umax (2 + (ptrtoint ptr %p to i32)))) + (ptrtoint ptr %p to i32) + %p) U: full-set S: full-set
49c1d8e392SMax Kazantsev; CHECK-NEXT:  Determining loop execution counts for: @test_01
50c1d8e392SMax Kazantsev;
51*92619956SNikita Popov  %p1 = getelementptr i8, ptr %p, i32 2
52*92619956SNikita Popov  %p2 = getelementptr i8, ptr %p, i32 1
53*92619956SNikita Popov  %cmp = icmp ugt ptr %p1, %p2
54c1d8e392SMax Kazantsev  %index = select i1 %cmp, i32 2, i32 1
55c1d8e392SMax Kazantsev  %neg_index = sub i32 0, %index
56*92619956SNikita Popov  %gep = getelementptr i8, ptr %p, i32 %neg_index
57*92619956SNikita Popov  ret ptr %gep
58c1d8e392SMax Kazantsev}
59c1d8e392SMax Kazantsev
60*92619956SNikita Popovdefine ptr @test_02(ptr %p) {
61c1d8e392SMax Kazantsev; CHECK-LABEL: 'test_02'
62c1d8e392SMax Kazantsev; CHECK-NEXT:  Classifying expressions for: @test_02
63*92619956SNikita Popov; CHECK-NEXT:    %p1 = getelementptr i8, ptr %p, i32 2
64c1d8e392SMax Kazantsev; CHECK-NEXT:    --> (2 + %p) U: full-set S: full-set
65*92619956SNikita Popov; CHECK-NEXT:    %p2 = getelementptr i8, ptr %p, i32 1
66c1d8e392SMax Kazantsev; CHECK-NEXT:    --> (1 + %p) U: full-set S: full-set
67c1d8e392SMax Kazantsev; CHECK-NEXT:    %index = select i1 %cmp, i32 2, i32 1
68*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * (ptrtoint ptr %p to i32)) + ((1 + (ptrtoint ptr %p to i32)) smax (2 + (ptrtoint ptr %p to i32)))) U: full-set S: full-set
69c1d8e392SMax Kazantsev; CHECK-NEXT:    %neg_index = sub i32 0, %index
70*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * ((1 + (ptrtoint ptr %p to i32)) smax (2 + (ptrtoint ptr %p to i32)))) + (ptrtoint ptr %p to i32)) U: full-set S: full-set
71*92619956SNikita Popov; CHECK-NEXT:    %gep = getelementptr i8, ptr %p, i32 %neg_index
72*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * ((1 + (ptrtoint ptr %p to i32)) smax (2 + (ptrtoint ptr %p to i32)))) + (ptrtoint ptr %p to i32) + %p) U: full-set S: full-set
73c1d8e392SMax Kazantsev; CHECK-NEXT:  Determining loop execution counts for: @test_02
74c1d8e392SMax Kazantsev;
75*92619956SNikita Popov  %p1 = getelementptr i8, ptr %p, i32 2
76*92619956SNikita Popov  %p2 = getelementptr i8, ptr %p, i32 1
77*92619956SNikita Popov  %cmp = icmp sgt ptr %p1, %p2
78c1d8e392SMax Kazantsev  %index = select i1 %cmp, i32 2, i32 1
79c1d8e392SMax Kazantsev  %neg_index = sub i32 0, %index
80*92619956SNikita Popov  %gep = getelementptr i8, ptr %p, i32 %neg_index
81*92619956SNikita Popov  ret ptr %gep
82c1d8e392SMax Kazantsev}
83c1d8e392SMax Kazantsev
84*92619956SNikita Popovdefine ptr @test_03(ptr %p) {
85c1d8e392SMax Kazantsev; CHECK-LABEL: 'test_03'
86c1d8e392SMax Kazantsev; CHECK-NEXT:  Classifying expressions for: @test_03
87*92619956SNikita Popov; CHECK-NEXT:    %p1 = getelementptr i8, ptr %p, i32 2
88c1d8e392SMax Kazantsev; CHECK-NEXT:    --> (2 + %p) U: full-set S: full-set
89*92619956SNikita Popov; CHECK-NEXT:    %p2 = getelementptr i8, ptr %p, i32 1
90c1d8e392SMax Kazantsev; CHECK-NEXT:    --> (1 + %p) U: full-set S: full-set
91c1d8e392SMax Kazantsev; CHECK-NEXT:    %index = select i1 %cmp, i32 2, i32 1
92*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * (ptrtoint ptr %p to i32)) + ((1 + (ptrtoint ptr %p to i32)) umin (2 + (ptrtoint ptr %p to i32)))) U: full-set S: full-set
93c1d8e392SMax Kazantsev; CHECK-NEXT:    %neg_index = sub i32 0, %index
94*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * ((1 + (ptrtoint ptr %p to i32)) umin (2 + (ptrtoint ptr %p to i32)))) + (ptrtoint ptr %p to i32)) U: full-set S: full-set
95*92619956SNikita Popov; CHECK-NEXT:    %gep = getelementptr i8, ptr %p, i32 %neg_index
96*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * ((1 + (ptrtoint ptr %p to i32)) umin (2 + (ptrtoint ptr %p to i32)))) + (ptrtoint ptr %p to i32) + %p) U: full-set S: full-set
97c1d8e392SMax Kazantsev; CHECK-NEXT:  Determining loop execution counts for: @test_03
98c1d8e392SMax Kazantsev;
99*92619956SNikita Popov  %p1 = getelementptr i8, ptr %p, i32 2
100*92619956SNikita Popov  %p2 = getelementptr i8, ptr %p, i32 1
101*92619956SNikita Popov  %cmp = icmp ult ptr %p1, %p2
102c1d8e392SMax Kazantsev  %index = select i1 %cmp, i32 2, i32 1
103c1d8e392SMax Kazantsev  %neg_index = sub i32 0, %index
104*92619956SNikita Popov  %gep = getelementptr i8, ptr %p, i32 %neg_index
105*92619956SNikita Popov  ret ptr %gep
106c1d8e392SMax Kazantsev}
107c1d8e392SMax Kazantsev
108*92619956SNikita Popovdefine ptr @test_04(ptr %p) {
109c1d8e392SMax Kazantsev; CHECK-LABEL: 'test_04'
110c1d8e392SMax Kazantsev; CHECK-NEXT:  Classifying expressions for: @test_04
111*92619956SNikita Popov; CHECK-NEXT:    %p1 = getelementptr i8, ptr %p, i32 2
112c1d8e392SMax Kazantsev; CHECK-NEXT:    --> (2 + %p) U: full-set S: full-set
113*92619956SNikita Popov; CHECK-NEXT:    %p2 = getelementptr i8, ptr %p, i32 1
114c1d8e392SMax Kazantsev; CHECK-NEXT:    --> (1 + %p) U: full-set S: full-set
115c1d8e392SMax Kazantsev; CHECK-NEXT:    %index = select i1 %cmp, i32 2, i32 1
116*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * (ptrtoint ptr %p to i32)) + ((1 + (ptrtoint ptr %p to i32)) smin (2 + (ptrtoint ptr %p to i32)))) U: full-set S: full-set
117c1d8e392SMax Kazantsev; CHECK-NEXT:    %neg_index = sub i32 0, %index
118*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * ((1 + (ptrtoint ptr %p to i32)) smin (2 + (ptrtoint ptr %p to i32)))) + (ptrtoint ptr %p to i32)) U: full-set S: full-set
119*92619956SNikita Popov; CHECK-NEXT:    %gep = getelementptr i8, ptr %p, i32 %neg_index
120*92619956SNikita Popov; CHECK-NEXT:    --> ((-1 * ((1 + (ptrtoint ptr %p to i32)) smin (2 + (ptrtoint ptr %p to i32)))) + (ptrtoint ptr %p to i32) + %p) U: full-set S: full-set
121c1d8e392SMax Kazantsev; CHECK-NEXT:  Determining loop execution counts for: @test_04
122c1d8e392SMax Kazantsev;
123*92619956SNikita Popov  %p1 = getelementptr i8, ptr %p, i32 2
124*92619956SNikita Popov  %p2 = getelementptr i8, ptr %p, i32 1
125*92619956SNikita Popov  %cmp = icmp slt ptr %p1, %p2
126c1d8e392SMax Kazantsev  %index = select i1 %cmp, i32 2, i32 1
127c1d8e392SMax Kazantsev  %neg_index = sub i32 0, %index
128*92619956SNikita Popov  %gep = getelementptr i8, ptr %p, i32 %neg_index
129*92619956SNikita Popov  ret ptr %gep
130c1d8e392SMax Kazantsev}
131c1d8e392SMax Kazantsev
132b96114c1SMax Kazantsevattributes #0 = { nofree }
133