# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
# RUN: llvm-mca -mtriple=colossus -mcpu=ipu2 < %s | FileCheck %s

# C code: 

#  unsigned KnownWithBound(unsigned *arr) {
#    unsigned i = 0, z = 0;
#    unsigned j = 0;
#    do {
#      z += arr[i];
#      ++i;
#      j = j + 1.1;
#    } while (i < 0x1000);
#  
#    return z;
#  }

#  
#  unsigned KnownUnbounded(unsigned *arr, unsigned N) {
#    unsigned i = 0, z = 0;
#    do {
#      z += arr[i];
#      ++i;
#    } while (i < N);
#  
#    return z;
#  }


	.text
	.allow_optimizations
	.file	"basic-do-while.c"
	.section	.text.KnownWithBound,"ax",@progbits
	.globl	KnownWithBound                  # -- Begin function KnownWithBound
	.p2align	2
	.type	KnownWithBound,@function
KnownWithBound:                         # @KnownWithBound
# %bb.0:                                # %entry
	mov	$m1, $m0
	mov	$m2, $m15
	mov	$m0, $m15
	setzi $m3, 4095
.LBB0_1:                                # %do.body
                                        # =>This Inner Loop Header: Depth=1
	# LLVM-MCA-BEGIN LBB0_1
	ld32step $m4, $m1, $m2+=, 1
	add $m0, $m4, $m0
	brnzdec $m3, .LBB0_1
	# LLVM-MCA-END LBB0_1
# %bb.2:                                # %do.end
	br $m10
.Lfunc_end0:
	.size	KnownWithBound, .Lfunc_end0-KnownWithBound
                                        # -- End function
	.section	.text.KnownUnbounded,"ax",@progbits
	.globl	KnownUnbounded                  # -- Begin function KnownUnbounded
	.p2align	2
	.type	KnownUnbounded,@function
KnownUnbounded:                         # @KnownUnbounded
# %bb.0:                                # %entry
	mov	$m2, $m0
	mov	$m0, $m15
	setzi $m3, 1
	cmpult $m4, $m3, $m1
	movnz	$m3, $m4, $m1
	add $m3, $m3, -1
.LBB1_1:                                # %do.body
                                        # =>This Inner Loop Header: Depth=1
	# LLVM-MCA-BEGIN LBB1_1
	ld32step $m1, $m15, $m2+=, 1
	add $m0, $m1, $m0
	brnzdec $m3, .LBB1_1
	# LLVM-MCA-END LBB1_1
# %bb.2:                                # %do.end
	br $m10
.Lfunc_end1:
	.size	KnownUnbounded, .Lfunc_end1-KnownUnbounded
                                        # -- End function
	.ident	"clang version 15.0.0 (ssh://git@phabricator.sourcevertex.net/diffusion/LLVMPROJECT/llvm-project.git 1c2e4f927eff2aecb0db82e6000f5d657caf092a)"
	.section	".note.GNU-stack","",@progbits
	.addrsig



# CHECK:  		[0] Code Region - LBB0_1

# CHECK: 		Iterations:        100
# CHECK-NEXT:   Instructions:      300
# CHECK-NEXT:   Total Cycles:      301
# CHECK-NEXT:   Total uOps:        300

# CHECK: 	    Dispatch Width:    2
# CHECK-NEXT:   uOps Per Cycle:    1.00
# CHECK-NEXT:   IPC:               1.00
# CHECK-NEXT:   Block RThroughput: 3.0
  
# CHECK: 	    Instruction Info:
# CHECK-NEXT:   [1]: #uOps
# CHECK-NEXT:   [2]: Latency
# CHECK-NEXT:   [3]: RThroughput
# CHECK-NEXT:   [4]: MayLoad
# CHECK-NEXT:   [5]: MayStore
# CHECK-NEXT:   [6]: HasSideEffects (U)

# CHECK:	    [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
# CHECK-NEXT:    1      1     1.00    *                   ld32step $m4, $m1, $m2+=, 1
# CHECK-NEXT:    1      1     1.00                        add $m0, $m4, $m0
# CHECK-NEXT:    1      1     1.00                  U     brnzdec $m3, .LBB0_1
   
# CHECK:	    Resources:
# CHECK-NEXT:   [0]   - ColossusUnitAux
# CHECK-NEXT:   [1]   - ColossusUnitMain

# CHECK:	    Resource pressure per iteration:
# CHECK-NEXT:   [0]    [1]    
# CHECK-NEXT:    -     3.00   

# CHECK:	    Resource pressure by instruction:
# CHECK-NEXT:   [0]    [1]    Instructions:
# CHECK-NEXT:    -     1.00   ld32step $m4, $m1, $m2+=, 1
# CHECK-NEXT:    -     1.00   add $m0, $m4, $m0
# CHECK-NEXT:    -     1.00   brnzdec $m3, .LBB0_1

# CHECK:	    [1] Code Region - LBB1_1
  
# CHECK:	    Iterations:        100
# CHECK-NEXT:   Instructions:      300
# CHECK-NEXT:   Total Cycles:      301
# CHECK-NEXT:   Total uOps:        300

# CHECK:	    Dispatch Width:    2
# CHECK-NEXT:   uOps Per Cycle:    1.00
# CHECK-NEXT:   IPC:               1.00
# CHECK-NEXT:   Block RThroughput: 3.0

# CHECK:	    Instruction Info:
# CHECK-NEXT:   [1]: #uOps
# CHECK-NEXT:   [2]: Latency
# CHECK-NEXT:   [3]: RThroughput
# CHECK-NEXT:   [4]: MayLoad
# CHECK-NEXT:   [5]: MayStore
# CHECK-NEXT:   [6]: HasSideEffects (U)

# CHECK:	    [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
# CHECK-NEXT:    1      1     1.00    *                   ld32step $m1, $m15, $m2+=, 1
# CHECK-NEXT:    1      1     1.00                        add $m0, $m1, $m0
# CHECK-NEXT:    1      1     1.00                  U     brnzdec $m3, .LBB1_1

# CHECK:	    Resources:
# CHECK-NEXT:   [0]   - ColossusUnitAux
# CHECK-NEXT:   [1]   - ColossusUnitMain

# CHECK:	    Resource pressure per iteration:
# CHECK-NEXT:   [0]    [1]    
# CHECK-NEXT:    -     3.00   

# CHECK:	    Resource pressure by instruction:
# CHECK-NEXT:   [0]    [1]    Instructions:
# CHECK-NEXT:    -     1.00   ld32step $m1, $m15, $m2+=, 1
# CHECK-NEXT:    -     1.00   add $m0, $m1, $m0
# CHECK-NEXT:    -     1.00   brnzdec $m3, .LBB1_1