

define i16 @test10() {
entry:
  br label %loop1

loop1:                                           ; preds = %entry, %loop1
  %k1 = phi i16 [ 180, %entry ], [ %k1.add, %loop1 ]
  %l1 = phi i16 [ 0, %entry ], [ %l1.add, %loop1 ]
  %k1.add = add nuw nsw i16 %k1, 1
  %l1.add = add nuw nsw i16 %l1, 1
  %cmp1 = icmp ult i16 %l1.add, 2
  br i1 %cmp1, label %loop1, label %loop2.preheader

loop2.preheader:                                 ; preds = %loop1
  %k1.add.lcssa = phi i16 [ %k1.add, %loop1 ]
  br label %loop2

loop2:                                           ; preds = %loop2.preheader, %loop2
  %k2 = phi i16 [ %k2.add, %loop2 ], [ %k1.add.lcssa, %loop2.preheader ]
  %l2 = phi i16 [ %l2.add, %loop2 ], [ 0, %loop2.preheader ]
  %l2.add = add nuw i16 %l2, 1
  tail call void @foo(i16 %k2)
  %k2.add = add nuw nsw i16 %k2, 1
  %cmp2 = icmp ult i16 %l2.add, 2
  br i1 %cmp2, label %loop2, label %loop2.end

loop2.end:                                       ; preds = %loop2
  %k2.add.lcssa = phi i16 [ %k2.add, %loop2 ]
  ret i16 %k2.add.lcssa
}

declare void @foo(i16)

