// RUN: fir-opt --cfg-conversion="always-execute-loop-body=true" %s | FileCheck %s
// RUN: fir-opt --cfg-conversion %s | FileCheck %s --check-prefix=NOOPT

func @x(%addr : !fir.ref<index>) {
  %bound = arith.constant 452 : index
  %step = arith.constant 1 : index
  fir.do_loop %iv = %bound to %bound step %step {
    fir.call @y(%addr) : (!fir.ref<index>) -> ()
  }
  return
}

func private @y(%addr : !fir.ref<index>)


// CHECK-LABEL:   func @x(
// CHECK-SAME:            %[[VAL_0:.*]]: !fir.ref<index>) {
// CHECK:           %[[VAL_1:.*]] = arith.constant 452 : index
// CHECK:           %[[VAL_2:.*]] = arith.constant 1 : index
// CHECK:           %[[VAL_3:.*]] = arith.subi %[[VAL_1]], %[[VAL_1]] : index
// CHECK:           %[[VAL_4:.*]] = arith.addi %[[VAL_3]], %[[VAL_2]] : index
// CHECK:           %[[VAL_5:.*]] = arith.divsi %[[VAL_4]], %[[VAL_2]] : index
// CHECK:           %[[VAL_6:.*]] = arith.constant 0 : index
// CHECK:           %[[VAL_7:.*]] = arith.cmpi sle, %[[VAL_5]], %[[VAL_6]] : index
// CHECK:           %[[VAL_8:.*]] = arith.constant 1 : index
// CHECK:           %[[VAL_9:.*]] = select %[[VAL_7]], %[[VAL_8]], %[[VAL_5]] : index
// CHECK:           br ^bb1(%[[VAL_1]], %[[VAL_9]] : index, index)
// CHECK:         ^bb1(%[[VAL_10:.*]]: index, %[[VAL_11:.*]]: index):
// CHECK:           %[[VAL_12:.*]] = arith.constant 0 : index
// CHECK:           %[[VAL_13:.*]] = arith.cmpi sgt, %[[VAL_11]], %[[VAL_12]] : index
// CHECK:           cond_br %[[VAL_13]], ^bb2, ^bb3
// CHECK:         ^bb2:
// CHECK:           fir.call @y(%[[VAL_0]]) : (!fir.ref<index>) -> ()
// CHECK:           %[[VAL_14:.*]] = arith.addi %[[VAL_10]], %[[VAL_2]] : index
// CHECK:           %[[VAL_15:.*]] = arith.constant 1 : index
// CHECK:           %[[VAL_16:.*]] = arith.subi %[[VAL_11]], %[[VAL_15]] : index
// CHECK:           br ^bb1(%[[VAL_14]], %[[VAL_16]] : index, index)
// CHECK:         ^bb3:
// CHECK:           return
// CHECK:         }
// CHECK:         func private @y(!fir.ref<index>)

// NOOPT-LABEL:   func @x(
// NOOPT-SAME:            %[[VAL_0:.*]]: !fir.ref<index>) {
// NOOPT:           %[[VAL_1:.*]] = arith.constant 452 : index
// NOOPT:           %[[VAL_2:.*]] = arith.constant 1 : index
// NOOPT:           %[[VAL_3:.*]] = arith.subi %[[VAL_1]], %[[VAL_1]] : index
// NOOPT:           %[[VAL_4:.*]] = arith.addi %[[VAL_3]], %[[VAL_2]] : index
// NOOPT:           %[[VAL_5:.*]] = arith.divsi %[[VAL_4]], %[[VAL_2]] : index
// NOOPT:           br ^bb1(%[[VAL_1]], %[[VAL_5]] : index, index)
// NOOPT:         ^bb1(%[[VAL_6:.*]]: index, %[[VAL_7:.*]]: index):
// NOOPT:           %[[VAL_8:.*]] = arith.constant 0 : index
// NOOPT:           %[[VAL_9:.*]] = arith.cmpi sgt, %[[VAL_7]], %[[VAL_8]] : index
// NOOPT:           cond_br %[[VAL_9]], ^bb2, ^bb3
// NOOPT:         ^bb2:
// NOOPT:           fir.call @y(%[[VAL_0]]) : (!fir.ref<index>) -> ()
// NOOPT:           %[[VAL_10:.*]] = arith.addi %[[VAL_6]], %[[VAL_2]] : index
// NOOPT:           %[[VAL_11:.*]] = arith.constant 1 : index
// NOOPT:           %[[VAL_12:.*]] = arith.subi %[[VAL_7]], %[[VAL_11]] : index
// NOOPT:           br ^bb1(%[[VAL_10]], %[[VAL_12]] : index, index)
// NOOPT:         ^bb3:
// NOOPT:           return
// NOOPT:         }
// NOOPT:         func private @y(!fir.ref<index>)
