xref: /llvm-project/llvm/test/Analysis/ScalarEvolution/pr44605.ll (revision a11faeed446882a81e79d780125d93e7199df645)
106c58f11SDenis Antrushin; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
206c58f11SDenis Antrushin; NOTE: Only %local_3_4 is important here.
306c58f11SDenis Antrushin;       All other instructions are needed to lure LLVM into executing
406c58f11SDenis Antrushin;       specific code to trigger a bug.
5*a11faeedSBjorn Pettersson; RUN: opt < %s -passes=indvars -S | FileCheck %s
606c58f11SDenis Antrushindefine i32 @test() {
706c58f11SDenis Antrushin; CHECK-LABEL: @test(
806c58f11SDenis Antrushin; CHECK-NEXT:  entry:
906c58f11SDenis Antrushin; CHECK-NEXT:    br label [[OUTER:%.*]]
1006c58f11SDenis Antrushin; CHECK:       outer:
1106c58f11SDenis Antrushin; CHECK-NEXT:    [[LOCAL_6_6:%.*]] = phi i32 [ 10, [[ENTRY:%.*]] ], [ [[TMP5:%.*]], [[LATCH:%.*]] ]
1206c58f11SDenis Antrushin; CHECK-NEXT:    [[LOCAL_4_5:%.*]] = phi i32 [ 56587, [[ENTRY]] ], [ 0, [[LATCH]] ]
1306c58f11SDenis Antrushin; CHECK-NEXT:    [[LOCAL_3_4:%.*]] = phi i32 [ 2, [[ENTRY]] ], [ [[TMP5]], [[LATCH]] ]
1406c58f11SDenis Antrushin; CHECK-NEXT:    [[DOTUDIV:%.*]] = udiv i32 [[LOCAL_6_6]], 8361
1506c58f11SDenis Antrushin; CHECK-NEXT:    br label [[INNER:%.*]]
1606c58f11SDenis Antrushin; CHECK:       inner:
1706c58f11SDenis Antrushin; CHECK-NEXT:    [[LOCAL_7_3:%.*]] = phi i32 [ 2, [[OUTER]] ], [ [[TMP3:%.*]], [[INNER]] ]
1806c58f11SDenis Antrushin; CHECK-NEXT:    [[LOCAL_4_5_PN:%.*]] = phi i32 [ [[LOCAL_4_5]], [[OUTER]] ], [ [[TMP2:%.*]], [[INNER]] ]
1906c58f11SDenis Antrushin; CHECK-NEXT:    [[LOCAL_3_31:%.*]] = mul i32 [[LOCAL_4_5_PN]], [[DOTUDIV]]
2006c58f11SDenis Antrushin; CHECK-NEXT:    [[TMP0:%.*]] = mul nuw nsw i32 [[LOCAL_7_3]], [[DOTUDIV]]
2106c58f11SDenis Antrushin; CHECK-NEXT:    [[TMP1:%.*]] = sub i32 [[TMP0]], [[LOCAL_3_4]]
2206c58f11SDenis Antrushin; CHECK-NEXT:    [[TMP2]] = add i32 [[TMP1]], [[LOCAL_3_31]]
2306c58f11SDenis Antrushin; CHECK-NEXT:    [[TMP3]] = add nuw nsw i32 [[LOCAL_7_3]], 1
2406c58f11SDenis Antrushin; CHECK-NEXT:    [[TMP4:%.*]] = icmp ugt i32 [[LOCAL_7_3]], 4
2506c58f11SDenis Antrushin; CHECK-NEXT:    br i1 [[TMP4]], label [[LATCH]], label [[INNER]]
2606c58f11SDenis Antrushin; CHECK:       latch:
2706c58f11SDenis Antrushin; CHECK-NEXT:    [[DOTLCSSA:%.*]] = phi i32 [ [[TMP2]], [[INNER]] ]
2806c58f11SDenis Antrushin; CHECK-NEXT:    [[TMP5]] = add nuw nsw i32 [[LOCAL_6_6]], 1
2906c58f11SDenis Antrushin; CHECK-NEXT:    [[TMP6:%.*]] = icmp ugt i32 [[LOCAL_6_6]], 276
3006c58f11SDenis Antrushin; CHECK-NEXT:    br i1 [[TMP6]], label [[RETURN:%.*]], label [[OUTER]]
3106c58f11SDenis Antrushin; CHECK:       return:
3206c58f11SDenis Antrushin; CHECK-NEXT:    [[DOTLCSSA_LCSSA:%.*]] = phi i32 [ [[DOTLCSSA]], [[LATCH]] ]
3306c58f11SDenis Antrushin; CHECK-NEXT:    ret i32 [[DOTLCSSA_LCSSA]]
3406c58f11SDenis Antrushin;
3506c58f11SDenis Antrushinentry:
3606c58f11SDenis Antrushin  br label %outer
3706c58f11SDenis Antrushin
3806c58f11SDenis Antrushinouter:
3906c58f11SDenis Antrushin  %local_6_6 = phi i32 [ 10, %entry ], [ %5, %latch ]
4006c58f11SDenis Antrushin  %local_4_5 = phi i32 [ 56587, %entry ], [ 0, %latch ]
4106c58f11SDenis Antrushin  %local_3_4 = phi i32 [ 2, %entry ], [ %5, %latch ]
4206c58f11SDenis Antrushin  %.udiv = udiv i32 %local_6_6, 8361
4306c58f11SDenis Antrushin  br label %inner
4406c58f11SDenis Antrushin
4506c58f11SDenis Antrushininner:
4606c58f11SDenis Antrushin  %local_7_3 = phi i32 [ 2, %outer ], [ %3, %inner ]
4706c58f11SDenis Antrushin  %local_4_5.pn = phi i32 [ %local_4_5, %outer ], [ %2, %inner ]
4806c58f11SDenis Antrushin  %local_3_31 = mul i32 %local_4_5.pn, %.udiv
4906c58f11SDenis Antrushin  %0 = mul i32 %local_7_3, %.udiv
5006c58f11SDenis Antrushin  %1 = sub i32 %0, %local_3_4
5106c58f11SDenis Antrushin  %2 = add i32 %1, %local_3_31
5206c58f11SDenis Antrushin  %3 = add nuw nsw i32 %local_7_3, 1
5306c58f11SDenis Antrushin  %4 = icmp ugt i32 %local_7_3, 4
5406c58f11SDenis Antrushin  br i1 %4, label %latch, label %inner
5506c58f11SDenis Antrushin
5606c58f11SDenis Antrushinlatch:
5706c58f11SDenis Antrushin  %.lcssa = phi i32 [ %2, %inner ]
5806c58f11SDenis Antrushin  %5 = add nuw nsw i32 %local_6_6, 1
5906c58f11SDenis Antrushin  %6 = icmp ugt i32 %local_6_6, 276
6006c58f11SDenis Antrushin  br i1 %6, label %return, label %outer
6106c58f11SDenis Antrushin
6206c58f11SDenis Antrushinreturn:
6306c58f11SDenis Antrushin  %.lcssa.lcssa = phi i32 [ %.lcssa, %latch ]
6406c58f11SDenis Antrushin  ret i32 %.lcssa.lcssa
6506c58f11SDenis Antrushin
6606c58f11SDenis Antrushin}
6706c58f11SDenis Antrushin
68