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