#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 */
typedef int /*<<< orphan*/ array5;
typedef int /*<<< orphan*/ array4;
typedef int /*<<< orphan*/ array3;
typedef int /*<<< orphan*/ array2;
typedef int /*<<< orphan*/ array;

/* Variables and functions */
int /*<<< orphan*/ find_max_n(int *, int, int *, int);
int find_second_max(int *, int);
int find_second_max2(int *, int);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ show_array(int *, int);
int main() {
  int array[] = {10, 4, 5, 20, 10, 30, 4, 2, 1};
  int size = sizeof(array) / sizeof(int);
  int array2[] = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10};
  int size2 = sizeof(array2) / sizeof(int);
  int array3[] = {10, 10, 4, 10, 10, 10};
  int size3 = sizeof(array3) / sizeof(int);
  int array4[] = {10, 10, 20, 10, 10, 10};
  int size4 = sizeof(array4) / sizeof(int);
  int array5[] = {10, 10, 20, 10, 10, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  int size5 = sizeof(array5) / sizeof(int);
  printf("---------------------------\n");
  ;
  int second_max1 = find_second_max(array, size);
  printf("---------------------------\n");
  int second_max2 = find_second_max(array2, size2);
  printf("---------------------------\n");
  int second_max3 = find_second_max(array3, size3);
  printf("---------------------------\n");
  int second_max4 = find_second_max(array4, size4);
  printf("---------------------------\n");
  int second_max5 = find_second_max(array5, size5);
  printf("---------------------------\n");
  printf("---------------------------\n");
  printf("---------------------------\n");
  show_array(array, size);
  printf("second max %d\n", second_max1);
  printf("find_second_max2: %d\n", find_second_max2(array, size));
  printf("---------------------------\n");
  show_array(array2, size2);
  printf("second max %d\n", second_max2);
  printf("find_second_max2: %d\n", find_second_max2(array2, size2));
  printf("---------------------------\n");
  show_array(array3, size3);
  printf("second max %d\n", second_max3);
  printf("find_second_max2: %d\n", find_second_max2(array3, size3));
  printf("---------------------------\n");
  show_array(array4, size4);
  printf("second max %d\n", second_max4);
  printf("find_second_max2: %d\n", find_second_max2(array4, size4));
  printf("---------------------------\n");
  show_array(array5, size5);
  printf("second max %d\n", second_max5);
  printf("find_second_max2: %d\n", find_second_max2(array5, size5));
  printf("---------------------------\n");
  printf("---------------------------\n");
  printf("---------------------------\n");
  int max_2[2];
  int n = 2;
  find_max_n(array, size, max_2, n);
  printf("first %d max number: ");
  for (int i = 0; i < n; i++) {
    printf("%d ", max_2[i]);
  }
  printf("---------------------------\n");
  find_max_n(array2, size2, max_2, n);
  printf("first %d max number: ");
  for (int i = 0; i < n; i++) {
    printf("%d ", max_2[i]);
  }
  printf("---------------------------\n");
  find_max_n(array3, size3, max_2, n);
  printf("first %d max number: ");
  for (int i = 0; i < n; i++) {
    printf("%d ", max_2[i]);
  }
  printf("---------------------------\n");
  find_max_n(array4, size4, max_2, n);
  printf("first %d max number: ");
  for (int i = 0; i < n; i++) {
    printf("%d ", max_2[i]);
  }
  printf("---------------------------\n");
  find_max_n(array5, size5, max_2, n);
  printf("first %d max number: ");
  for (int i = 0; i < n; i++) {
    printf("%d ", max_2[i]);
  }
  printf("---------------------------\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x140,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x30(%rbp),%rdi
lea    0xe83(%rip),%rsi
mov    $0x24,%edx
call   1050 <memcpy@plt>
movl   $0x9,-0x34(%rbp)
lea    -0x70(%rbp),%rdi
lea    0xe97(%rip),%rsi
mov    $0x30,%edx
call   1050 <memcpy@plt>
movl   $0xc,-0x74(%rbp)
mov    0xeaf(%rip),%rax
mov    %rax,-0x90(%rbp)
mov    0xea9(%rip),%rax
mov    %rax,-0x88(%rbp)
mov    0xea3(%rip),%rax
mov    %rax,-0x80(%rbp)
movl   $0x6,-0x94(%rbp)
mov    0xe9e(%rip),%rax
mov    %rax,-0xb0(%rbp)
mov    0xe98(%rip),%rax
mov    %rax,-0xa8(%rbp)
mov    0xe92(%rip),%rax
mov    %rax,-0xa0(%rbp)
movl   $0x6,-0xb4(%rbp)
lea    -0x100(%rbp),%rdi
lea    0xe83(%rip),%rsi
mov    $0x40,%edx
call   1050 <memcpy@plt>
movl   $0x10,-0x104(%rbp)
lea    0xea8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x30(%rbp),%rdi
mov    -0x34(%rbp),%esi
call   1040 <find_second_max@plt>
mov    %eax,-0x108(%rbp)
lea    0xe88(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x70(%rbp),%rdi
mov    -0x74(%rbp),%esi
call   1040 <find_second_max@plt>
mov    %eax,-0x10c(%rbp)
lea    0xe68(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x90(%rbp),%rdi
mov    -0x94(%rbp),%esi
call   1040 <find_second_max@plt>
mov    %eax,-0x110(%rbp)
lea    0xe42(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0xb0(%rbp),%rdi
mov    -0xb4(%rbp),%esi
call   1040 <find_second_max@plt>
mov    %eax,-0x114(%rbp)
lea    0xe1c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x100(%rbp),%rdi
mov    -0x104(%rbp),%esi
call   1040 <find_second_max@plt>
mov    %eax,-0x118(%rbp)
lea    0xdf6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xde8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xdda(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x30(%rbp),%rdi
mov    -0x34(%rbp),%esi
call   1080 <show_array@plt>
mov    -0x108(%rbp),%esi
lea    0xdd7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x30(%rbp),%rdi
mov    -0x34(%rbp),%esi
call   1070 <find_second_max2@plt>
mov    %eax,%esi
lea    0xdca(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd90(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x70(%rbp),%rdi
mov    -0x74(%rbp),%esi
call   1080 <show_array@plt>
mov    -0x10c(%rbp),%esi
lea    0xd8d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x70(%rbp),%rdi
mov    -0x74(%rbp),%esi
call   1070 <find_second_max2@plt>
mov    %eax,%esi
lea    0xd80(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd46(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x90(%rbp),%rdi
mov    -0x94(%rbp),%esi
call   1080 <show_array@plt>
mov    -0x110(%rbp),%esi
lea    0xd3d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x90(%rbp),%rdi
mov    -0x94(%rbp),%esi
call   1070 <find_second_max2@plt>
mov    %eax,%esi
lea    0xd2a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xcf0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0xb0(%rbp),%rdi
mov    -0xb4(%rbp),%esi
call   1080 <show_array@plt>
mov    -0x114(%rbp),%esi
lea    0xce7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0xb0(%rbp),%rdi
mov    -0xb4(%rbp),%esi
call   1070 <find_second_max2@plt>
mov    %eax,%esi
lea    0xcd4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xc9a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x100(%rbp),%rdi
mov    -0x104(%rbp),%esi
call   1080 <show_array@plt>
mov    -0x118(%rbp),%esi
lea    0xc91(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x100(%rbp),%rdi
mov    -0x104(%rbp),%esi
call   1070 <find_second_max2@plt>
mov    %eax,%esi
lea    0xc7e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xc44(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xc36(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xc28(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x2,-0x124(%rbp)
lea    -0x30(%rbp),%rdi
mov    -0x34(%rbp),%esi
lea    -0x120(%rbp),%rdx
mov    -0x124(%rbp),%ecx
call   1060 <find_max_n@plt>
lea    0xc39(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x128(%rbp)
mov    -0x128(%rbp),%eax
cmp    -0x124(%rbp),%eax
jge    153c <main+0x3dc>
movslq -0x128(%rbp),%rax
mov    -0x120(%rbp,%rax,4),%esi
lea    0xc17(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x128(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x128(%rbp)
jmp    14fa <main+0x39a>
lea    0xb9d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x70(%rbp),%rdi
mov    -0x74(%rbp),%esi
lea    -0x120(%rbp),%rdx
mov    -0x124(%rbp),%ecx
call   1060 <find_max_n@plt>
lea    0xbb8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x12c(%rbp)
mov    -0x12c(%rbp),%eax
cmp    -0x124(%rbp),%eax
jge    15bd <main+0x45d>
movslq -0x12c(%rbp),%rax
mov    -0x120(%rbp,%rax,4),%esi
lea    0xb96(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x12c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x12c(%rbp)
jmp    157b <main+0x41b>
lea    0xb1c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x90(%rbp),%rdi
mov    -0x94(%rbp),%esi
lea    -0x120(%rbp),%rdx
mov    -0x124(%rbp),%ecx
call   1060 <find_max_n@plt>
lea    0xb31(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x130(%rbp)
mov    -0x130(%rbp),%eax
cmp    -0x124(%rbp),%eax
jge    1644 <main+0x4e4>
movslq -0x130(%rbp),%rax
mov    -0x120(%rbp,%rax,4),%esi
lea    0xb0f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x130(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x130(%rbp)
jmp    1602 <main+0x4a2>
lea    0xa95(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0xb0(%rbp),%rdi
mov    -0xb4(%rbp),%esi
lea    -0x120(%rbp),%rdx
mov    -0x124(%rbp),%ecx
call   1060 <find_max_n@plt>
lea    0xaaa(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x134(%rbp)
mov    -0x134(%rbp),%eax
cmp    -0x124(%rbp),%eax
jge    16cb <main+0x56b>
movslq -0x134(%rbp),%rax
mov    -0x120(%rbp,%rax,4),%esi
lea    0xa88(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x134(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x134(%rbp)
jmp    1689 <main+0x529>
lea    0xa0e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x100(%rbp),%rdi
mov    -0x104(%rbp),%esi
lea    -0x120(%rbp),%rdx
mov    -0x124(%rbp),%ecx
call   1060 <find_max_n@plt>
lea    0xa23(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x138(%rbp)
mov    -0x138(%rbp),%eax
cmp    -0x124(%rbp),%eax
jge    1752 <main+0x5f2>
movslq -0x138(%rbp),%rax
mov    -0x120(%rbp,%rax,4),%esi
lea    0xa01(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x138(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x138(%rbp)
jmp    1710 <main+0x5b0>
lea    0x987(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x140,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xf8,%rsp
mov    0xea9(%rip),%eax
mov    %eax,0x70(%rsp)
movaps 0xe8e(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movaps 0xe72(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps 0xeb6(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
movaps 0xe97(%rip),%xmm0
movaps %xmm0,0x90(%rsp)
movaps 0xe78(%rip),%xmm0
movaps %xmm0,0x80(%rsp)
mov    0xea9(%rip),%rax
mov    %rax,0x40(%rsp)
movaps 0xe8d(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
mov    0xeb1(%rip),%rax
mov    %rax,0x20(%rsp)
movaps 0xe95(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xed9(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xeba(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps 0xe9b(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
movaps 0xe7c(%rip),%xmm0
movaps %xmm0,0xb0(%rsp)
lea    0xeec(%rip),%rbx
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x50(%rsp),%r13
mov    %r13,%rdi
mov    $0x9,%esi
call   1050 <find_second_max@plt>
mov    %eax,%ebp
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x80(%rsp),%rdi
mov    $0xc,%esi
call   1050 <find_second_max@plt>
mov    %eax,%r14d
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x30(%rsp),%rdi
mov    $0x6,%esi
call   1050 <find_second_max@plt>
mov    %eax,%r15d
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x10(%rsp),%rdi
mov    $0x6,%esi
call   1050 <find_second_max@plt>
mov    %eax,0x8(%rsp)
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0xb0(%rsp),%rdi
mov    $0x10,%esi
call   1050 <find_second_max@plt>
mov    %eax,0xc(%rsp)
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %r13,%rdi
mov    $0x9,%esi
call   1080 <show_array@plt>
lea    0xdf5(%rip),%r12
mov    %r12,%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %r13,%rdi
mov    $0x9,%esi
call   1070 <find_second_max2@plt>
lea    0xde4(%rip),%r13
mov    %r13,%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x80(%rsp),%rbp
mov    %rbp,%rdi
mov    $0xc,%esi
call   1080 <show_array@plt>
mov    %r12,%rdi
mov    %r14d,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbp,%rdi
mov    $0xc,%esi
call   1070 <find_second_max2@plt>
mov    %r13,%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x30(%rsp),%rbp
mov    %rbp,%rdi
mov    $0x6,%esi
call   1080 <show_array@plt>
mov    %r12,%rdi
mov    %r15d,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbp,%rdi
mov    $0x6,%esi
call   1070 <find_second_max2@plt>
mov    %r13,%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x10(%rsp),%rbp
mov    %rbp,%rdi
mov    $0x6,%esi
call   1080 <show_array@plt>
mov    %r12,%rdi
mov    0x8(%rsp),%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbp,%rdi
mov    $0x6,%esi
call   1070 <find_second_max2@plt>
mov    %r13,%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0xb0(%rsp),%rbp
mov    %rbp,%rdi
mov    $0x10,%esi
call   1080 <show_array@plt>
mov    %r12,%rdi
mov    0xc(%rsp),%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbp,%rdi
mov    %rbp,%r12
mov    $0x10,%esi
call   1070 <find_second_max2@plt>
mov    %r13,%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %rsp,%r14
lea    0x50(%rsp),%rdi
mov    $0x9,%esi
mov    %r14,%rdx
mov    $0x2,%ecx
call   1060 <find_max_n@plt>
lea    0xcaa(%rip),%r15
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    (%rsp),%esi
lea    0xcac(%rip),%rbp
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x80(%rsp),%rdi
mov    $0xc,%esi
mov    %r14,%rdx
mov    $0x2,%ecx
call   1060 <find_max_n@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    (%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x30(%rsp),%rdi
mov    $0x6,%esi
mov    %r14,%rdx
mov    $0x2,%ecx
call   1060 <find_max_n@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    (%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x10(%rsp),%rdi
mov    $0x6,%esi
mov    %r14,%rdx
mov    $0x2,%ecx
call   1060 <find_max_n@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    (%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %r12,%rdi
mov    $0x10,%esi
mov    %r14,%rdx
mov    $0x2,%ecx
call   1060 <find_max_n@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    (%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
xor    %eax,%eax
add    $0xf8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.main.array = [9 x i32] [i32 10, i32 4, i32 5, i32 20, i32 10, i32 30, i32 4, i32 2, i32 1]
@__const.main.array2 = [12 x i32] [i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10]
@__const.main.array3 = [6 x i32] [i32 10, i32 10, i32 4, i32 10, i32 10, i32 10]
@__const.main.array4 = [6 x i32] [i32 10, i32 10, i32 20, i32 10, i32 10, i32 10]
@__const.main.array5 = [16 x i32] [i32 10, i32 10, i32 20, i32 10, i32 10, i32 10, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10]
@.str = [29 x i8] c"---------------------------\0A\00"
@.str.1 = [15 x i8] c"second max %d\0A\00"
@.str.2 = [22 x i8] c"find_second_max2: %d\0A\00"
@.str.3 = [22 x i8] c"first %d max number: \00"
@.str.4 = [4 x i8] c"%d \00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [9 x i32]
%3 = alloca i32
%4 = alloca [12 x i32]
%5 = alloca i32
%6 = alloca [6 x i32]
%7 = alloca i32
%8 = alloca [6 x i32]
%9 = alloca i32
%10 = alloca [16 x i32]
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca [2 x i32]
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
store i32 0, i32* %1
%24 = bitcast [9 x i32]* %2 to i8*
store i32 9, i32* %3
%25 = bitcast [12 x i32]* %4 to i8*
store i32 12, i32* %5
%26 = bitcast [6 x i32]* %6 to i8*
store i32 6, i32* %7
%27 = bitcast [6 x i32]* %8 to i8*
store i32 6, i32* %9
%28 = bitcast [16 x i32]* %10 to i8*
store i32 16, i32* %11
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%30 = getelementptr inbounds [9 x i32], [9 x i32]* %2, i64 0, i64 0
%31 = load i32, i32* %3
%32 = call i32 @find_second_max(i32* %30, i32 %31)
store i32 %32, i32* %12
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%34 = getelementptr inbounds [12 x i32], [12 x i32]* %4, i64 0, i64 0
%35 = load i32, i32* %5
%36 = call i32 @find_second_max(i32* %34, i32 %35)
store i32 %36, i32* %13
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%38 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 0
%39 = load i32, i32* %7
%40 = call i32 @find_second_max(i32* %38, i32 %39)
store i32 %40, i32* %14
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%42 = getelementptr inbounds [6 x i32], [6 x i32]* %8, i64 0, i64 0
%43 = load i32, i32* %9
%44 = call i32 @find_second_max(i32* %42, i32 %43)
store i32 %44, i32* %15
%45 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%46 = getelementptr inbounds [16 x i32], [16 x i32]* %10, i64 0, i64 0
%47 = load i32, i32* %11
%48 = call i32 @find_second_max(i32* %46, i32 %47)
store i32 %48, i32* %16
%49 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%50 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%51 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%52 = getelementptr inbounds [9 x i32], [9 x i32]* %2, i64 0, i64 0
%53 = load i32, i32* %3
%54 = call i32 @show_array(i32* %52, i32 %53)
%55 = load i32, i32* %12
%56 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %55)
%57 = getelementptr inbounds [9 x i32], [9 x i32]* %2, i64 0, i64 0
%58 = load i32, i32* %3
%59 = call i32 @find_second_max2(i32* %57, i32 %58)
%60 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %59)
%61 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%62 = getelementptr inbounds [12 x i32], [12 x i32]* %4, i64 0, i64 0
%63 = load i32, i32* %5
%64 = call i32 @show_array(i32* %62, i32 %63)
%65 = load i32, i32* %13
%66 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %65)
%67 = getelementptr inbounds [12 x i32], [12 x i32]* %4, i64 0, i64 0
%68 = load i32, i32* %5
%69 = call i32 @find_second_max2(i32* %67, i32 %68)
%70 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %69)
%71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%72 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 0
%73 = load i32, i32* %7
%74 = call i32 @show_array(i32* %72, i32 %73)
%75 = load i32, i32* %14
%76 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %75)
%77 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 0
%78 = load i32, i32* %7
%79 = call i32 @find_second_max2(i32* %77, i32 %78)
%80 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %79)
%81 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%82 = getelementptr inbounds [6 x i32], [6 x i32]* %8, i64 0, i64 0
%83 = load i32, i32* %9
%84 = call i32 @show_array(i32* %82, i32 %83)
%85 = load i32, i32* %15
%86 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %85)
%87 = getelementptr inbounds [6 x i32], [6 x i32]* %8, i64 0, i64 0
%88 = load i32, i32* %9
%89 = call i32 @find_second_max2(i32* %87, i32 %88)
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %89)
%91 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%92 = getelementptr inbounds [16 x i32], [16 x i32]* %10, i64 0, i64 0
%93 = load i32, i32* %11
%94 = call i32 @show_array(i32* %92, i32 %93)
%95 = load i32, i32* %16
%96 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %95)
%97 = getelementptr inbounds [16 x i32], [16 x i32]* %10, i64 0, i64 0
%98 = load i32, i32* %11
%99 = call i32 @find_second_max2(i32* %97, i32 %98)
%100 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %99)
%101 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%102 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%103 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
store i32 2, i32* %18
%104 = getelementptr inbounds [9 x i32], [9 x i32]* %2, i64 0, i64 0
%105 = load i32, i32* %3
%106 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%107 = load i32, i32* %18
%108 = call i32 @find_max_n(i32* %104, i32 %105, i32* %106, i32 %107)
%109 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %19
br label %110
110: ; preds = %120, %0
%111 = load i32, i32* %19
%112 = load i32, i32* %18
%113 = icmp slt i32 %111, %112
br i1 %113, label %114, label %123
114: ; preds = %110
%115 = load i32, i32* %19
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %116
%118 = load i32, i32* %117
%119 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %118)
br label %120
120: ; preds = %114
%121 = load i32, i32* %19
%122 = add nsw i32 %121, 1
store i32 %122, i32* %19
br label %110
123: ; preds = %110
%124 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%125 = getelementptr inbounds [12 x i32], [12 x i32]* %4, i64 0, i64 0
%126 = load i32, i32* %5
%127 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%128 = load i32, i32* %18
%129 = call i32 @find_max_n(i32* %125, i32 %126, i32* %127, i32 %128)
%130 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %20
br label %131
131: ; preds = %141, %123
%132 = load i32, i32* %20
%133 = load i32, i32* %18
%134 = icmp slt i32 %132, %133
br i1 %134, label %135, label %144
135: ; preds = %131
%136 = load i32, i32* %20
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %137
%139 = load i32, i32* %138
%140 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %139)
br label %141
141: ; preds = %135
%142 = load i32, i32* %20
%143 = add nsw i32 %142, 1
store i32 %143, i32* %20
br label %131
144: ; preds = %131
%145 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%146 = getelementptr inbounds [6 x i32], [6 x i32]* %6, i64 0, i64 0
%147 = load i32, i32* %7
%148 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%149 = load i32, i32* %18
%150 = call i32 @find_max_n(i32* %146, i32 %147, i32* %148, i32 %149)
%151 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %21
br label %152
152: ; preds = %162, %144
%153 = load i32, i32* %21
%154 = load i32, i32* %18
%155 = icmp slt i32 %153, %154
br i1 %155, label %156, label %165
156: ; preds = %152
%157 = load i32, i32* %21
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %158
%160 = load i32, i32* %159
%161 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %160)
br label %162
162: ; preds = %156
%163 = load i32, i32* %21
%164 = add nsw i32 %163, 1
store i32 %164, i32* %21
br label %152
165: ; preds = %152
%166 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%167 = getelementptr inbounds [6 x i32], [6 x i32]* %8, i64 0, i64 0
%168 = load i32, i32* %9
%169 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%170 = load i32, i32* %18
%171 = call i32 @find_max_n(i32* %167, i32 %168, i32* %169, i32 %170)
%172 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %22
br label %173
173: ; preds = %183, %165
%174 = load i32, i32* %22
%175 = load i32, i32* %18
%176 = icmp slt i32 %174, %175
br i1 %176, label %177, label %186
177: ; preds = %173
%178 = load i32, i32* %22
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %179
%181 = load i32, i32* %180
%182 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %181)
br label %183
183: ; preds = %177
%184 = load i32, i32* %22
%185 = add nsw i32 %184, 1
store i32 %185, i32* %22
br label %173
186: ; preds = %173
%187 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
%188 = getelementptr inbounds [16 x i32], [16 x i32]* %10, i64 0, i64 0
%189 = load i32, i32* %11
%190 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%191 = load i32, i32* %18
%192 = call i32 @find_max_n(i32* %188, i32 %189, i32* %190, i32 %191)
%193 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %23
br label %194
194: ; preds = %204, %186
%195 = load i32, i32* %23
%196 = load i32, i32* %18
%197 = icmp slt i32 %195, %196
br i1 %197, label %198, label %207
198: ; preds = %194
%199 = load i32, i32* %23
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 %200
%202 = load i32, i32* %201
%203 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %202)
br label %204
204: ; preds = %198
%205 = load i32, i32* %23
%206 = add nsw i32 %205, 1
store i32 %206, i32* %23
br label %194
207: ; preds = %194
%208 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@__const.main.array = [9 x i32] [i32 10, i32 4, i32 5, i32 20, i32 10, i32 30, i32 4, i32 2, i32 1]
@__const.main.array2 = [12 x i32] [i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10]
@__const.main.array3 = [6 x i32] [i32 10, i32 10, i32 4, i32 10, i32 10, i32 10]
@__const.main.array4 = [6 x i32] [i32 10, i32 10, i32 20, i32 10, i32 10, i32 10]
@__const.main.array5 = [16 x i32] [i32 10, i32 10, i32 20, i32 10, i32 10, i32 10, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10]
@.str.1 = [15 x i8] c"second max %d\0A\00"
@.str.2 = [22 x i8] c"find_second_max2: %d\0A\00"
@.str.3 = [22 x i8] c"first %d max number: \00"
@.str.4 = [4 x i8] c"%d \00"
@str.23 = [28 x i8] c"---------------------------\00"
define i32 @main() {
%1 = alloca [9 x i32]
%2 = alloca [12 x i32]
%3 = alloca [6 x i32]
%4 = alloca [6 x i32]
%5 = alloca [16 x i32]
%6 = alloca [2 x i32]
%7 = bitcast [9 x i32]* %1 to i8*
%8 = bitcast [12 x i32]* %2 to i8*
%9 = bitcast [6 x i32]* %3 to i8*
%10 = bitcast [6 x i32]* %4 to i8*
%11 = bitcast [16 x i32]* %5 to i8*
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%13 = getelementptr inbounds [9 x i32], [9 x i32]* %1, i64 0, i64 0
%14 = call i32 @find_second_max(i32* %13, i32 9)
%15 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%16 = getelementptr inbounds [12 x i32], [12 x i32]* %2, i64 0, i64 0
%17 = call i32 @find_second_max(i32* %16, i32 12)
%18 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%19 = getelementptr inbounds [6 x i32], [6 x i32]* %3, i64 0, i64 0
%20 = call i32 @find_second_max(i32* %19, i32 6)
%21 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%22 = getelementptr inbounds [6 x i32], [6 x i32]* %4, i64 0, i64 0
%23 = call i32 @find_second_max(i32* %22, i32 6)
%24 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%25 = getelementptr inbounds [16 x i32], [16 x i32]* %5, i64 0, i64 0
%26 = call i32 @find_second_max(i32* %25, i32 16)
%27 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%28 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%29 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%30 = call i32 @show_array(i32* %13, i32 9)
%31 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %14)
%32 = call i32 @find_second_max2(i32* %13, i32 9)
%33 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %32)
%34 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%35 = call i32 @show_array(i32* %16, i32 12)
%36 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %17)
%37 = call i32 @find_second_max2(i32* %16, i32 12)
%38 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %37)
%39 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%40 = call i32 @show_array(i32* %19, i32 6)
%41 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %20)
%42 = call i32 @find_second_max2(i32* %19, i32 6)
%43 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %42)
%44 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%45 = call i32 @show_array(i32* %22, i32 6)
%46 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %23)
%47 = call i32 @find_second_max2(i32* %22, i32 6)
%48 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %47)
%49 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%50 = call i32 @show_array(i32* %25, i32 16)
%51 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), i32 %26)
%52 = call i32 @find_second_max2(i32* %25, i32 16)
%53 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.2, i64 0, i64 0), i32 %52)
%54 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%55 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%56 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%57 = bitcast [2 x i32]* %6 to i8*
%58 = getelementptr inbounds [2 x i32], [2 x i32]* %6, i64 0, i64 0
%59 = call i32 @find_max_n(i32* %13, i32 9, i32* %58, i32 2)
%60 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
%61 = load i32, i32* %58
%62 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %61)
%63 = getelementptr inbounds [2 x i32], [2 x i32]* %6, i64 0, i64 1
%64 = load i32, i32* %63
%65 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %64)
%66 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%67 = call i32 @find_max_n(i32* %16, i32 12, i32* %58, i32 2)
%68 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
%69 = load i32, i32* %58
%70 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %69)
%71 = load i32, i32* %63
%72 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %71)
%73 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%74 = call i32 @find_max_n(i32* %19, i32 6, i32* %58, i32 2)
%75 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
%76 = load i32, i32* %58
%77 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %76)
%78 = load i32, i32* %63
%79 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %78)
%80 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%81 = call i32 @find_max_n(i32* %22, i32 6, i32* %58, i32 2)
%82 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
%83 = load i32, i32* %58
%84 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %83)
%85 = load i32, i32* %63
%86 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %85)
%87 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
%88 = call i32 @find_max_n(i32* %25, i32 16, i32* %58, i32 2)
%89 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0))
%90 = load i32, i32* %58
%91 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %90)
%92 = load i32, i32* %63
%93 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 %92)
%94 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.23, i64 0, i64 0))
ret i32 0
}