#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ printf(char *, int, int);
int /*<<< orphan*/ stderr;
scalar_t__ studentsCount(int *, int, int, int *, int *);
int main() {
  int Arr[] = {10, 20, 20, 30, 30, 35, 36, 40, 50, 50, 50, 50, 60, 61, 61, 70};
  int len = 16;
  int score = 40;
  int lessCount = 0, moreCount = 0;
  if (studentsCount(Arr, len, score, &lessCount, &moreCount))
    printf("lesscount  =  %d ;   moreCount = %d\n", lessCount, moreCount);
  else
    fprintf(stderr, "Ha");
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x50(%rbp),%rdi
lea    0xea6(%rip),%rsi
mov    $0x40,%edx
call   1050 <memcpy@plt>
movl   $0x10,-0x54(%rbp)
movl   $0x28,-0x58(%rbp)
movl   $0x0,-0x5c(%rbp)
movl   $0x0,-0x60(%rbp)
lea    -0x50(%rbp),%rdi
mov    -0x54(%rbp),%esi
mov    -0x58(%rbp),%edx
lea    -0x5c(%rbp),%rcx
lea    -0x60(%rbp),%r8
call   1060 <studentsCount@plt>
cmp    $0x0,%rax
je     11b8 <main+0x78>
mov    -0x5c(%rbp),%esi
mov    -0x60(%rbp),%edx
lea    0xe92(%rip),%rdi
call   1030 <printf@plt>
jmp    11cd <main+0x8d>
mov    0x2e21(%rip),%rax
mov    (%rax),%edi
lea    0xe9d(%rip),%rsi
call   1040 <fprintf@plt>
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x58,%rsp
movaps 0xef5(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0xed9(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0xebd(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xea1(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movl   $0x0,0xc(%rsp)
movl   $0x0,0x8(%rsp)
lea    0x10(%rsp),%rdi
lea    0xc(%rsp),%rcx
lea    0x8(%rsp),%r8
mov    $0x10,%esi
mov    $0x28,%edx
call   1050 <studentsCount@plt>
test   %rax,%rax
je     11ad <main+0x7d>
mov    0xc(%rsp),%esi
mov    0x8(%rsp),%edx
lea    0xe9a(%rip),%rdi
call   1030 <printf@plt>
jmp    11c2 <main+0x92>
mov    0x2e2c(%rip),%rax
mov    (%rax),%edi
lea    0xea8(%rip),%rsi
call   1040 <fprintf@plt>
xor    %eax,%eax
add    $0x58,%rsp
ret

LLVM IR (-O0):
@__const.main.Arr = [16 x i32] [i32 10, i32 20, i32 20, i32 30, i32 30, i32 35, i32 36, i32 40, i32 50, i32 50, i32 50, i32 50, i32 60, i32 61, i32 61, i32 70]
@.str = [37 x i8] c"lesscount = %d ; moreCount = %d\0A\00"
@stderr = global i32 0
@.str.1 = [3 x i8] c"Ha\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [16 x i32]
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i32 0, i32* %1
%7 = bitcast [16 x i32]* %2 to i8*
store i32 16, i32* %3
store i32 40, i32* %4
store i32 0, i32* %5
store i32 0, i32* %6
%8 = getelementptr inbounds [16 x i32], [16 x i32]* %2, i64 0, i64 0
%9 = load i32, i32* %3
%10 = load i32, i32* %4
%11 = call i64 @studentsCount(i32* %8, i32 %9, i32 %10, i32* %5, i32* %6)
%12 = icmp ne i64 %11, 0
br i1 %12, label %13, label %17
13: ; preds = %0
%14 = load i32, i32* %5
%15 = load i32, i32* %6
%16 = call i32 @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i32 %14, i32 %15)
br label %20
17: ; preds = %0
%18 = load i32, i32* @stderr
%19 = call i32 @fprintf(i32 %18, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
br label %20
20: ; preds = %17, %13
%21 = load i32, i32* %1
ret i32 %21
}

LLVM IR (-O2):
@__const.main.Arr = [16 x i32] [i32 10, i32 20, i32 20, i32 30, i32 30, i32 35, i32 36, i32 40, i32 50, i32 50, i32 50, i32 50, i32 60, i32 61, i32 61, i32 70]
@.str = [37 x i8] c"lesscount = %d ; moreCount = %d\0A\00"
@stderr = global i32 0
@.str.1 = [3 x i8] c"Ha\00"
define i32 @main() {
%1 = alloca [16 x i32]
%2 = alloca i32
%3 = alloca i32
%4 = bitcast [16 x i32]* %1 to i8*
%5 = bitcast i32* %2 to i8*
store i32 0, i32* %2
%6 = bitcast i32* %3 to i8*
store i32 0, i32* %3
%7 = getelementptr inbounds [16 x i32], [16 x i32]* %1, i64 0, i64 0
%8 = call i64 @studentsCount(i32* %7, i32 16, i32 40, i32* %2, i32* %3)
%9 = icmp eq i64 %8, 0
br i1 %9, label %14, label %10
10: ; preds = %0
%11 = load i32, i32* %2
%12 = load i32, i32* %3
%13 = call i32 @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i32 %11, i32 %12)
br label %17
14: ; preds = %0
%15 = load i32, i32* @stderr
%16 = call i32 @fprintf(i32 %15, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
br label %17
17: ; preds = %14, %10
ret i32 0
}