309 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py2; RUN: opt -disable-output "-passes=print<scalar-evolution>" < %s 2>&1 | FileCheck %s3 4define void @umin_sext_x_zext_x(i32 %len) {5; CHECK-LABEL: 'umin_sext_x_zext_x'6; CHECK-NEXT: Classifying expressions for: @umin_sext_x_zext_x7; CHECK-NEXT: %len.zext = zext i32 %len to i648; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296)9; CHECK-NEXT: %len.sext = sext i32 %len to i6410; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)11; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]12; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Computable }13; CHECK-NEXT: %iv.next = add i64 %iv, 114; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,4294967297) S: [1,4294967297) Exits: (1 + (zext i32 %len to i64))<nuw><nsw> LoopDispositions: { %loop: Computable }15; CHECK-NEXT: %and = and i1 %cmp1, %cmp216; CHECK-NEXT: --> (%cmp1 umin %cmp2) U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %loop: Variant }17; CHECK-NEXT: Determining loop execution counts for: @umin_sext_x_zext_x18; CHECK-NEXT: Loop %loop: backedge-taken count is (zext i32 %len to i64)19; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 429496729520; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (zext i32 %len to i64)21; CHECK-NEXT: Loop %loop: Trip multiple is 122;23entry:24 %len.zext = zext i32 %len to i6425 %len.sext = sext i32 %len to i6426 br label %loop27loop:28 %iv = phi i64 [0, %entry], [%iv.next, %loop]29 %iv.next = add i64 %iv, 130 %cmp1 = icmp ult i64 %iv, %len.zext31 %cmp2 = icmp ult i64 %iv, %len.sext32 %and = and i1 %cmp1, %cmp233 br i1 %and, label %loop, label %exit34exit:35 ret void36}37 38define void @ule_sext_x_zext_x(i32 %len) {39; CHECK-LABEL: 'ule_sext_x_zext_x'40; CHECK-NEXT: Classifying expressions for: @ule_sext_x_zext_x41; CHECK-NEXT: %len.zext = zext i32 %len to i6442; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296)43; CHECK-NEXT: %len.sext = sext i32 %len to i6444; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)45; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]46; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Computable }47; CHECK-NEXT: %iv.next = add i64 %iv, 148; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,4294967297) S: [1,4294967297) Exits: (1 + (zext i32 %len to i64))<nuw><nsw> LoopDispositions: { %loop: Computable }49; CHECK-NEXT: %sel = select i1 %cmp1, i64 %len.zext, i64 %len.sext50; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Invariant }51; CHECK-NEXT: Determining loop execution counts for: @ule_sext_x_zext_x52; CHECK-NEXT: Loop %loop: backedge-taken count is (zext i32 %len to i64)53; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 429496729554; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (zext i32 %len to i64)55; CHECK-NEXT: Loop %loop: Trip multiple is 156;57entry:58 %len.zext = zext i32 %len to i6459 %len.sext = sext i32 %len to i6460 br label %loop61loop:62 %iv = phi i64 [0, %entry], [%iv.next, %loop]63 %iv.next = add i64 %iv, 164 %cmp1 = icmp ule i64 %len.zext, %len.sext65 %sel = select i1 %cmp1, i64 %len.zext, i64 %len.sext66 %cmp2 = icmp ult i64 %iv, %sel67 br i1 %cmp2, label %loop, label %exit68exit:69 ret void70}71 72define void @uge_sext_x_zext_x(i32 %len) {73; CHECK-LABEL: 'uge_sext_x_zext_x'74; CHECK-NEXT: Classifying expressions for: @uge_sext_x_zext_x75; CHECK-NEXT: %len.zext = zext i32 %len to i6476; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296)77; CHECK-NEXT: %len.sext = sext i32 %len to i6478; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)79; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]80; CHECK-NEXT: --> {0,+,1}<%loop> U: full-set S: full-set Exits: (sext i32 %len to i64) LoopDispositions: { %loop: Computable }81; CHECK-NEXT: %iv.next = add i64 %iv, 182; CHECK-NEXT: --> {1,+,1}<%loop> U: full-set S: full-set Exits: (1 + (sext i32 %len to i64))<nsw> LoopDispositions: { %loop: Computable }83; CHECK-NEXT: %sel = select i1 %cmp1, i64 %len.zext, i64 %len.sext84; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) Exits: (sext i32 %len to i64) LoopDispositions: { %loop: Invariant }85; CHECK-NEXT: Determining loop execution counts for: @uge_sext_x_zext_x86; CHECK-NEXT: Loop %loop: backedge-taken count is (sext i32 %len to i64)87; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 -188; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (sext i32 %len to i64)89; CHECK-NEXT: Loop %loop: Trip multiple is 190;91entry:92 %len.zext = zext i32 %len to i6493 %len.sext = sext i32 %len to i6494 br label %loop95loop:96 %iv = phi i64 [0, %entry], [%iv.next, %loop]97 %iv.next = add i64 %iv, 198 %cmp1 = icmp uge i64 %len.zext, %len.sext99 %sel = select i1 %cmp1, i64 %len.zext, i64 %len.sext100 %cmp2 = icmp ult i64 %iv, %sel101 br i1 %cmp2, label %loop, label %exit102exit:103 ret void104}105 106define void @ult_sext_x_zext_x(i32 %len) {107; CHECK-LABEL: 'ult_sext_x_zext_x'108; CHECK-NEXT: Classifying expressions for: @ult_sext_x_zext_x109; CHECK-NEXT: %len.zext = zext i32 %len to i64110; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296)111; CHECK-NEXT: %len.sext = sext i32 %len to i64112; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)113; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]114; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Computable }115; CHECK-NEXT: %iv.next = add i64 %iv, 1116; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,4294967297) S: [1,4294967297) Exits: (1 + (zext i32 %len to i64))<nuw><nsw> LoopDispositions: { %loop: Computable }117; CHECK-NEXT: %umin = select i1 %cmp1, i64 %len.zext, i64 %len.sext118; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Invariant }119; CHECK-NEXT: Determining loop execution counts for: @ult_sext_x_zext_x120; CHECK-NEXT: Loop %loop: backedge-taken count is (zext i32 %len to i64)121; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4294967295122; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (zext i32 %len to i64)123; CHECK-NEXT: Loop %loop: Trip multiple is 1124;125entry:126 %len.zext = zext i32 %len to i64127 %len.sext = sext i32 %len to i64128 br label %loop129loop:130 %iv = phi i64 [0, %entry], [%iv.next, %loop]131 %iv.next = add i64 %iv, 1132 %cmp1 = icmp ult i64 %len.zext, %len.sext133 %umin = select i1 %cmp1, i64 %len.zext, i64 %len.sext134 %cmp2 = icmp ult i64 %iv, %umin135 br i1 %cmp2, label %loop, label %exit136exit:137 ret void138}139 140define void @ugt_sext_x_zext_x(i32 %len) {141; CHECK-LABEL: 'ugt_sext_x_zext_x'142; CHECK-NEXT: Classifying expressions for: @ugt_sext_x_zext_x143; CHECK-NEXT: %len.zext = zext i32 %len to i64144; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296)145; CHECK-NEXT: %len.sext = sext i32 %len to i64146; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)147; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]148; CHECK-NEXT: --> {0,+,1}<%loop> U: full-set S: full-set Exits: (sext i32 %len to i64) LoopDispositions: { %loop: Computable }149; CHECK-NEXT: %iv.next = add i64 %iv, 1150; CHECK-NEXT: --> {1,+,1}<%loop> U: full-set S: full-set Exits: (1 + (sext i32 %len to i64))<nsw> LoopDispositions: { %loop: Computable }151; CHECK-NEXT: %umax = select i1 %cmp1, i64 %len.zext, i64 %len.sext152; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) Exits: (sext i32 %len to i64) LoopDispositions: { %loop: Invariant }153; CHECK-NEXT: Determining loop execution counts for: @ugt_sext_x_zext_x154; CHECK-NEXT: Loop %loop: backedge-taken count is (sext i32 %len to i64)155; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 -1156; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (sext i32 %len to i64)157; CHECK-NEXT: Loop %loop: Trip multiple is 1158;159entry:160 %len.zext = zext i32 %len to i64161 %len.sext = sext i32 %len to i64162 br label %loop163loop:164 %iv = phi i64 [0, %entry], [%iv.next, %loop]165 %iv.next = add i64 %iv, 1166 %cmp1 = icmp ugt i64 %len.zext, %len.sext167 %umax = select i1 %cmp1, i64 %len.zext, i64 %len.sext168 %cmp2 = icmp ult i64 %iv, %umax169 br i1 %cmp2, label %loop, label %exit170exit:171 ret void172}173 174define void @sle_sext_x_zext_x(i32 %len) {175; CHECK-LABEL: 'sle_sext_x_zext_x'176; CHECK-NEXT: Classifying expressions for: @sle_sext_x_zext_x177; CHECK-NEXT: %len.zext = zext i32 %len to i64178; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296)179; CHECK-NEXT: %len.sext = sext i32 %len to i64180; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)181; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]182; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Computable }183; CHECK-NEXT: %iv.next = add i64 %iv, 1184; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,4294967297) S: [1,4294967297) Exits: (1 + (zext i32 %len to i64))<nuw><nsw> LoopDispositions: { %loop: Computable }185; CHECK-NEXT: %sel = select i1 %cmp1, i64 %len.zext, i64 %len.sext186; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Invariant }187; CHECK-NEXT: Determining loop execution counts for: @sle_sext_x_zext_x188; CHECK-NEXT: Loop %loop: backedge-taken count is (zext i32 %len to i64)189; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4294967295190; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (zext i32 %len to i64)191; CHECK-NEXT: Loop %loop: Trip multiple is 1192;193entry:194 %len.zext = zext i32 %len to i64195 %len.sext = sext i32 %len to i64196 br label %loop197loop:198 %iv = phi i64 [0, %entry], [%iv.next, %loop]199 %iv.next = add i64 %iv, 1200 %cmp1 = icmp ule i64 %len.zext, %len.sext201 %sel = select i1 %cmp1, i64 %len.zext, i64 %len.sext202 %cmp2 = icmp ult i64 %iv, %sel203 br i1 %cmp2, label %loop, label %exit204exit:205 ret void206}207 208define void @sge_sext_x_zext_x(i32 %len) {209; CHECK-LABEL: 'sge_sext_x_zext_x'210; CHECK-NEXT: Classifying expressions for: @sge_sext_x_zext_x211; CHECK-NEXT: %len.zext = zext i32 %len to i64212; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296)213; CHECK-NEXT: %len.sext = sext i32 %len to i64214; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)215; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]216; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Computable }217; CHECK-NEXT: %iv.next = add i64 %iv, 1218; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,4294967297) S: [1,4294967297) Exits: (1 + (zext i32 %len to i64))<nuw><nsw> LoopDispositions: { %loop: Computable }219; CHECK-NEXT: %sel = select i1 %cmp1, i64 %len.zext, i64 %len.sext220; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Invariant }221; CHECK-NEXT: Determining loop execution counts for: @sge_sext_x_zext_x222; CHECK-NEXT: Loop %loop: backedge-taken count is (zext i32 %len to i64)223; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4294967295224; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (zext i32 %len to i64)225; CHECK-NEXT: Loop %loop: Trip multiple is 1226;227entry:228 %len.zext = zext i32 %len to i64229 %len.sext = sext i32 %len to i64230 br label %loop231loop:232 %iv = phi i64 [0, %entry], [%iv.next, %loop]233 %iv.next = add i64 %iv, 1234 %cmp1 = icmp sge i64 %len.zext, %len.sext235 %sel = select i1 %cmp1, i64 %len.zext, i64 %len.sext236 %cmp2 = icmp ult i64 %iv, %sel237 br i1 %cmp2, label %loop, label %exit238exit:239 ret void240}241 242define void @slt_sext_x_zext_x(i32 %len) {243; CHECK-LABEL: 'slt_sext_x_zext_x'244; CHECK-NEXT: Classifying expressions for: @slt_sext_x_zext_x245; CHECK-NEXT: %len.zext = zext i32 %len to i64246; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296)247; CHECK-NEXT: %len.sext = sext i32 %len to i64248; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)249; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]250; CHECK-NEXT: --> {0,+,1}<%loop> U: full-set S: full-set Exits: (sext i32 %len to i64) LoopDispositions: { %loop: Computable }251; CHECK-NEXT: %iv.next = add i64 %iv, 1252; CHECK-NEXT: --> {1,+,1}<%loop> U: full-set S: full-set Exits: (1 + (sext i32 %len to i64))<nsw> LoopDispositions: { %loop: Computable }253; CHECK-NEXT: %umin = select i1 %cmp1, i64 %len.zext, i64 %len.sext254; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) Exits: (sext i32 %len to i64) LoopDispositions: { %loop: Invariant }255; CHECK-NEXT: Determining loop execution counts for: @slt_sext_x_zext_x256; CHECK-NEXT: Loop %loop: backedge-taken count is (sext i32 %len to i64)257; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 -1258; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (sext i32 %len to i64)259; CHECK-NEXT: Loop %loop: Trip multiple is 1260;261entry:262 %len.zext = zext i32 %len to i64263 %len.sext = sext i32 %len to i64264 br label %loop265loop:266 %iv = phi i64 [0, %entry], [%iv.next, %loop]267 %iv.next = add i64 %iv, 1268 %cmp1 = icmp slt i64 %len.zext, %len.sext269 %umin = select i1 %cmp1, i64 %len.zext, i64 %len.sext270 %cmp2 = icmp ult i64 %iv, %umin271 br i1 %cmp2, label %loop, label %exit272exit:273 ret void274}275 276define void @sgt_sext_x_zext_x(i32 %len) {277; CHECK-LABEL: 'sgt_sext_x_zext_x'278; CHECK-NEXT: Classifying expressions for: @sgt_sext_x_zext_x279; CHECK-NEXT: %len.zext = zext i32 %len to i64280; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296)281; CHECK-NEXT: %len.sext = sext i32 %len to i64282; CHECK-NEXT: --> (sext i32 %len to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648)283; CHECK-NEXT: %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]284; CHECK-NEXT: --> {0,+,1}<nuw><nsw><%loop> U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Computable }285; CHECK-NEXT: %iv.next = add i64 %iv, 1286; CHECK-NEXT: --> {1,+,1}<nuw><nsw><%loop> U: [1,4294967297) S: [1,4294967297) Exits: (1 + (zext i32 %len to i64))<nuw><nsw> LoopDispositions: { %loop: Computable }287; CHECK-NEXT: %umax = select i1 %cmp1, i64 %len.zext, i64 %len.sext288; CHECK-NEXT: --> (zext i32 %len to i64) U: [0,4294967296) S: [0,4294967296) Exits: (zext i32 %len to i64) LoopDispositions: { %loop: Invariant }289; CHECK-NEXT: Determining loop execution counts for: @sgt_sext_x_zext_x290; CHECK-NEXT: Loop %loop: backedge-taken count is (zext i32 %len to i64)291; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i64 4294967295292; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (zext i32 %len to i64)293; CHECK-NEXT: Loop %loop: Trip multiple is 1294;295entry:296 %len.zext = zext i32 %len to i64297 %len.sext = sext i32 %len to i64298 br label %loop299loop:300 %iv = phi i64 [0, %entry], [%iv.next, %loop]301 %iv.next = add i64 %iv, 1302 %cmp1 = icmp sgt i64 %len.zext, %len.sext303 %umax = select i1 %cmp1, i64 %len.zext, i64 %len.sext304 %cmp2 = icmp ult i64 %iv, %umax305 br i1 %cmp2, label %loop, label %exit306exit:307 ret void308}309