; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes
; RUN: opt < %s -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}
