89 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt < %s "-passes=print<scalar-evolution>" -disable-output 2>&1 | FileCheck %s3 4define i8 @foo(i8 %a) {5; CHECK-LABEL: 'foo'6; CHECK-NEXT: Classifying expressions for: @foo7; CHECK-NEXT: %t0 = urem i8 %a, 278; CHECK-NEXT: --> ((-27 * (%a /u 27)) + %a) U: full-set S: full-set9; CHECK-NEXT: Determining loop execution counts for: @foo10;11 %t0 = urem i8 %a, 2712 ret i8 %t013}14 15define i8 @bar(i8 %a) {16; CHECK-LABEL: 'bar'17; CHECK-NEXT: Classifying expressions for: @bar18; CHECK-NEXT: %t1 = urem i8 %a, 119; CHECK-NEXT: --> 0 U: [0,1) S: [0,1)20; CHECK-NEXT: Determining loop execution counts for: @bar21;22 %t1 = urem i8 %a, 123 ret i8 %t124}25 26define i8 @baz(i8 %a) {27; CHECK-LABEL: 'baz'28; CHECK-NEXT: Classifying expressions for: @baz29; CHECK-NEXT: %t2 = urem i8 %a, 3230; CHECK-NEXT: --> (zext i5 (trunc i8 %a to i5) to i8) U: [0,32) S: [0,32)31; CHECK-NEXT: Determining loop execution counts for: @baz32;33 %t2 = urem i8 %a, 3234 ret i8 %t235}36 37define i8 @qux(i8 %a) {38; CHECK-LABEL: 'qux'39; CHECK-NEXT: Classifying expressions for: @qux40; CHECK-NEXT: %t3 = urem i8 %a, 241; CHECK-NEXT: --> (zext i1 (trunc i8 %a to i1) to i8) U: [0,2) S: [0,2)42; CHECK-NEXT: Determining loop execution counts for: @qux43;44 %t3 = urem i8 %a, 245 ret i8 %t346}47 48define i32 @test_and_not(i32 %arg) {49; CHECK-LABEL: 'test_and_not'50; CHECK-NEXT: Classifying expressions for: @test_and_not51; CHECK-NEXT: %andn = and i32 %arg, -852; CHECK-NEXT: --> (8 * (%arg /u 8))<nuw> U: [0,-7) S: [-2147483648,2147483641)53; CHECK-NEXT: Determining loop execution counts for: @test_and_not54;55 %andn = and i32 %arg, -856 ret i32 %andn57}58 59define i32 @test_sub_urem(i32 %arg) {60; CHECK-LABEL: 'test_sub_urem'61; CHECK-NEXT: Classifying expressions for: @test_sub_urem62; CHECK-NEXT: %urem = urem i32 %arg, 863; CHECK-NEXT: --> (zext i3 (trunc i32 %arg to i3) to i32) U: [0,8) S: [0,8)64; CHECK-NEXT: %sub = sub i32 %arg, %urem65; CHECK-NEXT: --> (8 * (%arg /u 8))<nuw> U: [0,-7) S: [-2147483648,2147483641)66; CHECK-NEXT: Determining loop execution counts for: @test_sub_urem67;68 %urem = urem i32 %arg, 869 %sub = sub i32 %arg, %urem70 ret i32 %sub71}72 73define i32 @test_trunc_zext(i32 %arg) {74; CHECK-LABEL: 'test_trunc_zext'75; CHECK-NEXT: Classifying expressions for: @test_trunc_zext76; CHECK-NEXT: %trunc = trunc i32 %arg to i377; CHECK-NEXT: --> (trunc i32 %arg to i3) U: full-set S: full-set78; CHECK-NEXT: %zext = zext i3 %trunc to i3279; CHECK-NEXT: --> (zext i3 (trunc i32 %arg to i3) to i32) U: [0,8) S: [0,8)80; CHECK-NEXT: %sub = sub i32 %arg, %zext81; CHECK-NEXT: --> (8 * (%arg /u 8))<nuw> U: [0,-7) S: [-2147483648,2147483641)82; CHECK-NEXT: Determining loop execution counts for: @test_trunc_zext83;84 %trunc = trunc i32 %arg to i385 %zext = zext i3 %trunc to i3286 %sub = sub i32 %arg, %zext87 ret i32 %sub88}89