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