; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes
; RUN: opt < %s -passes=loop-deletion -verify-dom-info -S | FileCheck %s

;; Original C Code:
;;  void unknown_tripcount_mustprogress_attr_mustprogress_loopmd(int a, int b) {
;;    for (; a < b;) ;
;;    for (;;) ;
;;  }

define void @unknown_tripcount_mustprogress_attr_mustprogress_loopmd(i32 %a, i32 %b) #0 {
; CHECK: Function Attrs: mustprogress
; CHECK-LABEL: define {{[^@]+}}@unknown_tripcount_mustprogress_attr_mustprogress_loopmd
; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) [[ATTR0:#.*]] {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_END:%.*]]
; CHECK:       for.end:
; CHECK-NEXT:    unreachable
;
entry:
  br label %for.cond
for.cond:
  %cmp = icmp slt i32 %a, %b
  br i1 %cmp, label %for.body, label %for.end
for.body:
  br label %for.cond, !llvm.loop !2
for.end:
  br label %for.cond1
for.cond1:
  br label %for.cond1
}

;; Original C Code:
;;  void unknown_tripcount_mustprogress_attr_no_mustprogress_loopmd(int a, int b) {
;;    for (; a < b;) ;
;;    for (;;) ;
;;  }
;;  => Removed mustprogress loop attribute

define void @unknown_tripcount_mustprogress_attr_no_mustprogess_loopmd(i32 %a, i32 %b) #0 {
; CHECK: Function Attrs: mustprogress
; CHECK-LABEL: define {{[^@]+}}@unknown_tripcount_mustprogress_attr_no_mustprogess_loopmd
; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) [[ATTR0]] {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_END:%.*]]
; CHECK:       for.end:
; CHECK-NEXT:    unreachable
;
entry:
  br label %for.cond
for.cond:
  %cmp = icmp slt i32 %a, %b
  br i1 %cmp, label %for.body, label %for.end
for.body:
  br label %for.cond
for.end:
  br label %for.cond1
for.cond1:
  br label %for.cond1
}

;; Original C Code:
;;  void known_tripcount_no_mustprogress_attr_no_mustprogress_loopmd() {
;;    for (int i = 0; i < 5; i++) ;
;;  }

define void @known_tripcount_no_mustprogress_attr_no_mustprogress_loopmd() {
; CHECK-LABEL: define {{[^@]+}}@known_tripcount_no_mustprogress_attr_no_mustprogress_loopmd() {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_END:%.*]]
; CHECK:       for.end:
; CHECK-NEXT:    ret void
;
entry:
  br label %for.cond
for.cond:
  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
  %cmp = icmp slt i32 %i.0, 5
  br i1 %cmp, label %for.body, label %for.end
for.body:
  br label %for.inc
for.inc:
  %inc = add nsw i32 %i.0, 1
  br label %for.cond
for.end:
  ret void
}

;; Original C Code:
;;  void known_tripcount_no_mustprogress_attr_mustprogress_loopmd() {
;;    for (int i = 0; i < 5; i++) ;
;;  }
;;  => Added mustprogress loop attribute

define void @known_tripcount_no_mustprogress_attr_mustprogress_loopmd() {
; CHECK-LABEL: define {{[^@]+}}@known_tripcount_no_mustprogress_attr_mustprogress_loopmd() {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_END:%.*]]
; CHECK:       for.end:
; CHECK-NEXT:    ret void
;
entry:
  br label %for.cond
for.cond:
  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
  %cmp = icmp slt i32 %i.0, 5
  br i1 %cmp, label %for.body, label %for.end
for.body:
  br label %for.inc
for.inc:
  %inc = add nsw i32 %i.0, 1
  br label %for.cond, !llvm.loop !4
for.end:
  ret void
}

;; Original C Code:
;;  void known_tripcount_mustprogress_attr_no_mustprogress_loopmd() {
;;    for (int i = 0; i < 5; i++) ;
;;  }
;;  => Added mustprogress function attribute

define void @known_tripcount_mustprogress_attr_no_mustprogress_loopmd() #0 {
; CHECK: Function Attrs: mustprogress
; CHECK-LABEL: define {{[^@]+}}@known_tripcount_mustprogress_attr_no_mustprogress_loopmd
; CHECK-SAME: () [[ATTR0]] {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_END:%.*]]
; CHECK:       for.end:
; CHECK-NEXT:    ret void
;
entry:
  br label %for.cond
for.cond:
  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
  %cmp = icmp slt i32 %i.0, 5
  br i1 %cmp, label %for.body, label %for.end
for.body:
  br label %for.inc
for.inc:
  %inc = add nsw i32 %i.0, 1
  br label %for.cond
for.end:
  ret void
}

;; Original C Code:
;;  void known_tripcount_mustprogress_attr_mustprogress_loopmd() {
;;    for (int i = 0; i < 5; i++) ;
;;  }
;;  => Added mustprogress function and mustprogress loop attribute

define void @known_tripcount_mustprogress_attr_mustprogress_loopmd() #0 {
; CHECK: Function Attrs: mustprogress
; CHECK-LABEL: define {{[^@]+}}@known_tripcount_mustprogress_attr_mustprogress_loopmd
; CHECK-SAME: () [[ATTR0]] {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_END:%.*]]
; CHECK:       for.end:
; CHECK-NEXT:    ret void
;
entry:
  br label %for.cond
for.cond:
  %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
  %cmp = icmp slt i32 %i.0, 5
  br i1 %cmp, label %for.body, label %for.end
for.body:
  br label %for.inc
for.inc:
  %inc = add nsw i32 %i.0, 1
  br label %for.cond, !llvm.loop !5
for.end:
  ret void
}

;; Original C Code:
;;  void unknown_tripcount_no_mustprogress_attr_mustprogress_loopmd(int a, int b) {
;;    for (; a < b;) ;
;;  }
;;  => Added mustprogress loop attribute

define void @unknown_tripcount_no_mustprogress_attr_mustprogress_loopmd(i32 %a, i32 %b) {
; CHECK-LABEL: define {{[^@]+}}@unknown_tripcount_no_mustprogress_attr_mustprogress_loopmd
; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_END:%.*]]
; CHECK:       for.end:
; CHECK-NEXT:    ret void
;
entry:
  br label %for.cond
for.cond:
  %cmp = icmp slt i32 %a, %b
  br i1 %cmp, label %for.body, label %for.end
for.body:
  br label %for.cond, !llvm.loop !6
for.end:
  ret void
}

;; Original C Code:
;;  void unknown_tripcount_no_mustprogress_attr_no_mustprogress_loopmd(int a, int b) {
;;    for (; a < b;) ;
;;  }

define void @unknown_tripcount_no_mustprogress_attr_no_mustprogress_loopmd(i32 %a, i32 %b) {
; CHECK-LABEL: define {{[^@]+}}@unknown_tripcount_no_mustprogress_attr_no_mustprogress_loopmd
; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]]) {
; CHECK-NEXT:  entry:
; CHECK-NEXT:    br label [[FOR_COND:%.*]]
; CHECK:       for.cond:
; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[A]], [[B]]
; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]
; CHECK:       for.body:
; CHECK-NEXT:    br label [[FOR_COND]]
; CHECK:       for.end:
; CHECK-NEXT:    ret void
;
entry:
  br label %for.cond
for.cond:
  %cmp = icmp slt i32 %a, %b
  br i1 %cmp, label %for.body, label %for.end
for.body:
  br label %for.cond
for.end:
  ret void
}

; CHECK: attributes [[ATTR0]] = { mustprogress }

attributes #0 = { mustprogress }
!2 = distinct !{!2, !3}
!3 = !{!"llvm.loop.mustprogress"}
!4 = distinct !{!4, !3}
!5 = distinct !{!5, !3}
!6 = distinct !{!6, !3}
