#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*/ marks;

/* Variables and functions */
int getchar();
int /*<<< orphan*/ getpid();
int /*<<< orphan*/ printf(char *, ...);
int rand();
int /*<<< orphan*/ scanf(char *, char *);
int /*<<< orphan*/ srand(int /*<<< orphan*/);
main() {
  int marks[20], index, n;
  int tempmax = -1, templow = 101, tempindex;
  char ch;
  while (1) {
    printf(
        "\nMENU:\ni:Input\np:Print\nh:Find highest\nl:Find lowest\nq:quit\n");
    scanf("%c", &ch);
    n = sizeof(marks) / sizeof marks[0];
    srand(getpid());
    switch (ch) {
    case 'i':
      for (index = 0; index < n; index++)
        marks[index] = rand() % 100;
      printf("You have supplied: ");
      for (index = 0; index < n; index++)
        printf("%d ", marks[index]);
      break;
    case 'p':
      printf("Supplied marks:");
      for (index = 0; index < n; index++)
        printf("%d ", marks[index]);
      break;
    case 'h':
      for (index = 0; index < n; index++) {
        if (marks[index] > tempmax) {
          tempmax = marks[index];
          tempindex = index;
        }
      }
      printf("The highest is: %d : marks[%d]", tempmax, tempindex);
      break;
    case 'l':
      for (index = 0; index < n; index++) {
        if (marks[index] < templow) {
          templow = marks[index];
          tempindex = index;
        }
      }
      printf("The lowest is: %d: marks[%d]", templow, tempindex);
      break;
    case 'q':
      return 0;
    }
    while (getchar() != 10)
      ;
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0xffffffff,-0x6c(%rbp)
movl   $0x65,-0x70(%rbp)
lea    0xea1(%rip),%rdi
xor    %eax,%eax
mov    %al,-0x81(%rbp)
call   1040 <printf@plt>
lea    0xec9(%rip),%rdi
lea    -0x75(%rbp),%rsi
call   1070 <scanf@plt>
mov    -0x81(%rbp),%al
movl   $0x14,-0x68(%rbp)
call   1030 <getpid@plt>
mov    %eax,%edi
call   1050 <srand@plt>
movsbl -0x75(%rbp),%eax
add    $0xffffff98,%eax
mov    %eax,%ecx
mov    %rcx,-0x80(%rbp)
sub    $0x9,%eax
ja     1380 <main+0x220>
mov    -0x80(%rbp),%rax
lea    0xe22(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x68(%rbp),%eax
jge    121f <main+0xbf>
mov    $0x0,%al
call   1080 <rand@plt>
mov    $0x64,%ecx
cltd
idiv   %ecx
movslq -0x64(%rbp),%rax
mov    %edx,-0x60(%rbp,%rax,4)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    11ee <main+0x8e>
lea    0xe41(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x68(%rbp),%eax
jge    1264 <main+0x104>
movslq -0x64(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%esi
lea    0xe2c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1234 <main+0xd4>
jmp    1380 <main+0x220>
lea    0xe0f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x68(%rbp),%eax
jge    12ae <main+0x14e>
movslq -0x64(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%esi
lea    0xde2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    127e <main+0x11e>
jmp    1380 <main+0x220>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x68(%rbp),%eax
jge    12fb <main+0x19b>
movslq -0x64(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%eax
cmp    -0x6c(%rbp),%eax
jle    12e8 <main+0x188>
movslq -0x64(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x74(%rbp)
jmp    12ed <main+0x18d>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    12ba <main+0x15a>
mov    -0x6c(%rbp),%esi
mov    -0x74(%rbp),%edx
lea    0xd87(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1380 <main+0x220>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x68(%rbp),%eax
jge    135c <main+0x1fc>
movslq -0x64(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%eax
cmp    -0x70(%rbp),%eax
jge    1349 <main+0x1e9>
movslq -0x64(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%eax
mov    %eax,-0x70(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x74(%rbp)
jmp    134e <main+0x1ee>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    131b <main+0x1bb>
mov    -0x70(%rbp),%esi
mov    -0x74(%rbp),%edx
lea    0xd45(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1380 <main+0x220>
xor    %eax,%eax
add    $0x90,%rsp
pop    %rbp
ret
jmp    1385 <main+0x225>
mov    $0x0,%al
call   1060 <getchar@plt>
cmp    $0xa,%eax
je     139a <main+0x23a>
jmp    1385 <main+0x225>
jmp    1180 <main+0x20>

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    $0x65,%ebx
mov    $0xffffffff,%ebp
lea    0xf00(%rip),%r12
lea    0xe92(%rip),%r15
lea    0xea2(%rip),%r13
nopl   (%rax)
mov    %r12,%rdi
call   1030 <puts@plt>
mov    %r15,%rdi
lea    0xf(%rsp),%rsi
call   1080 <scanf@plt>
xor    %eax,%eax
call   1040 <getpid@plt>
mov    %eax,%edi
call   1060 <srand@plt>
movsbl 0xf(%rsp),%eax
add    $0xffffff98,%eax
cmp    $0x9,%eax
ja     1770 <main+0x600>
lea    0xe25(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    0x10(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    0x14(%rsp),%eax
mov    $0x0,%ecx
cmovg  %ecx,%r14d
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x1,%eax
cmovg  %eax,%r14d
mov    0x18(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x2,%eax
cmovg  %eax,%r14d
mov    0x1c(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x3,%eax
cmovg  %eax,%r14d
mov    0x20(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x4,%eax
cmovg  %eax,%r14d
mov    0x24(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x5,%eax
cmovg  %eax,%r14d
mov    0x28(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x6,%eax
cmovg  %eax,%r14d
mov    0x2c(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x7,%eax
cmovg  %eax,%r14d
mov    0x30(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x8,%eax
cmovg  %eax,%r14d
mov    0x34(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x9,%eax
cmovg  %eax,%r14d
mov    0x38(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0xa,%eax
cmovg  %eax,%r14d
mov    0x3c(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0xb,%eax
cmovg  %eax,%r14d
mov    0x40(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0xc,%eax
cmovg  %eax,%r14d
mov    0x44(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0xd,%eax
cmovg  %eax,%r14d
mov    0x48(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0xe,%eax
cmovg  %eax,%r14d
mov    0x4c(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0xf,%eax
cmovg  %eax,%r14d
mov    0x50(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x10,%eax
cmovg  %eax,%r14d
mov    0x54(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x11,%eax
cmovg  %eax,%r14d
mov    0x58(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x12,%eax
cmovg  %eax,%r14d
mov    0x5c(%rsp),%eax
cmp    %ebp,%eax
cmovg  %eax,%ebp
mov    $0x13,%eax
cmovg  %eax,%r14d
lea    0xd00(%rip),%rdi
mov    %ebp,%esi
jmp    1637 <main+0x4c7>
mov    %r12,%r15
xor    %r12d,%r12d
xor    %eax,%eax
call   1090 <rand@plt>
cltq
imul   $0x51eb851f,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x25,%rcx
add    %edx,%ecx
imul   $0x64,%ecx,%ecx
sub    %ecx,%eax
mov    %eax,0x10(%rsp,%r12,4)
add    $0x1,%r12
cmp    $0x14,%r12
jne    1360 <main+0x1f0>
lea    0xc93(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x10(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x14(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x18(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x1c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x20(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x24(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x28(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x2c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x30(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x34(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x38(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x3c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x40(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x44(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x48(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x4c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x50(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x54(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x58(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x5c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    %r15,%r12
lea    0xb67(%rip),%r15
jmp    1770 <main+0x600>
mov    0x10(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    0x14(%rsp),%eax
mov    $0x0,%ecx
cmovl  %ecx,%r14d
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x1,%eax
cmovl  %eax,%r14d
mov    0x18(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x2,%eax
cmovl  %eax,%r14d
mov    0x1c(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x3,%eax
cmovl  %eax,%r14d
mov    0x20(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x4,%eax
cmovl  %eax,%r14d
mov    0x24(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x5,%eax
cmovl  %eax,%r14d
mov    0x28(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x6,%eax
cmovl  %eax,%r14d
mov    0x2c(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x7,%eax
cmovl  %eax,%r14d
mov    0x30(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x8,%eax
cmovl  %eax,%r14d
mov    0x34(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x9,%eax
cmovl  %eax,%r14d
mov    0x38(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0xa,%eax
cmovl  %eax,%r14d
mov    0x3c(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0xb,%eax
cmovl  %eax,%r14d
mov    0x40(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0xc,%eax
cmovl  %eax,%r14d
mov    0x44(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0xd,%eax
cmovl  %eax,%r14d
mov    0x48(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0xe,%eax
cmovl  %eax,%r14d
mov    0x4c(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0xf,%eax
cmovl  %eax,%r14d
mov    0x50(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x10,%eax
cmovl  %eax,%r14d
mov    0x54(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x11,%eax
cmovl  %eax,%r14d
mov    0x58(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x12,%eax
cmovl  %eax,%r14d
mov    0x5c(%rsp),%eax
cmp    %ebx,%eax
cmovl  %eax,%ebx
mov    $0x13,%eax
cmovl  %eax,%r14d
lea    0xa3d(%rip),%rdi
mov    %ebx,%esi
mov    %r14d,%edx
xor    %eax,%eax
call   1050 <printf@plt>
jmp    1770 <main+0x600>
lea    0x9f6(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x10(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x14(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x18(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x1c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x20(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x24(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x28(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x2c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x30(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x34(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x38(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x3c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x40(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x44(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x48(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x4c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x50(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x54(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x58(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x5c(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
nopl   0x0(%rax)
xor    %eax,%eax
call   1070 <getchar@plt>
cmp    $0xa,%eax
jne    1770 <main+0x600>
jmp    11a0 <main+0x30>
xor    %eax,%eax
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [60 x i8] c"\0AMENU:\0Ai:Input\0Ap:Print\0Ah:Find highest\0Al:Find lowest\0Aq:quit\0A\00"
@.str.1 = [3 x i8] c"%c\00"
@.str.2 = [20 x i8] c"You have supplied: \00"
@.str.3 = [4 x i8] c"%d \00"
@.str.4 = [16 x i8] c"Supplied marks:\00"
@.str.5 = [31 x i8] c"The highest is: %d : marks[%d]\00"
@.str.6 = [29 x i8] c"The lowest is: %d: marks[%d]\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [20 x i32]
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i8
store i32 0, i32* %1
store i32 -1, i32* %5
store i32 101, i32* %6
br label %9
9: ; preds = %0, %120
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str, i64 0, i64 0))
%11 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %8)
store i32 20, i32* %4
%12 = call i32 (...) @getpid()
%13 = call i32 @srand(i32 %12)
%14 = load i8, i8* %8
%15 = sext i8 %14 to i32
switch i32 %15, label %115 [
i32 105, label %16
i32 112, label %46
i32 104, label %62
i32 108, label %88
i32 113, label %114
]
16: ; preds = %9
store i32 0, i32* %3
br label %17
17: ; preds = %27, %16
%18 = load i32, i32* %3
%19 = load i32, i32* %4
%20 = icmp slt i32 %18, %19
br i1 %20, label %21, label %30
21: ; preds = %17
%22 = call i32 (...) @rand()
%23 = srem i32 %22, 100
%24 = load i32, i32* %3
%25 = sext i32 %24 to i64
%26 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 %25
store i32 %23, i32* %26
br label %27
27: ; preds = %21
%28 = load i32, i32* %3
%29 = add nsw i32 %28, 1
store i32 %29, i32* %3
br label %17
30: ; preds = %17
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.2, i64 0, i64 0))
store i32 0, i32* %3
br label %32
32: ; preds = %42, %30
%33 = load i32, i32* %3
%34 = load i32, i32* %4
%35 = icmp slt i32 %33, %34
br i1 %35, label %36, label %45
36: ; preds = %32
%37 = load i32, i32* %3
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 %38
%40 = load i32, i32* %39
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %40)
br label %42
42: ; preds = %36
%43 = load i32, i32* %3
%44 = add nsw i32 %43, 1
store i32 %44, i32* %3
br label %32
45: ; preds = %32
br label %115
46: ; preds = %9
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.4, i64 0, i64 0))
store i32 0, i32* %3
br label %48
48: ; preds = %58, %46
%49 = load i32, i32* %3
%50 = load i32, i32* %4
%51 = icmp slt i32 %49, %50
br i1 %51, label %52, label %61
52: ; preds = %48
%53 = load i32, i32* %3
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 %54
%56 = load i32, i32* %55
%57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %56)
br label %58
58: ; preds = %52
%59 = load i32, i32* %3
%60 = add nsw i32 %59, 1
store i32 %60, i32* %3
br label %48
61: ; preds = %48
br label %115
62: ; preds = %9
store i32 0, i32* %3
br label %63
63: ; preds = %81, %62
%64 = load i32, i32* %3
%65 = load i32, i32* %4
%66 = icmp slt i32 %64, %65
br i1 %66, label %67, label %84
67: ; preds = %63
%68 = load i32, i32* %3
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 %69
%71 = load i32, i32* %70
%72 = load i32, i32* %5
%73 = icmp sgt i32 %71, %72
br i1 %73, label %74, label %80
74: ; preds = %67
%75 = load i32, i32* %3
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 %76
%78 = load i32, i32* %77
store i32 %78, i32* %5
%79 = load i32, i32* %3
store i32 %79, i32* %7
br label %80
80: ; preds = %74, %67
br label %81
81: ; preds = %80
%82 = load i32, i32* %3
%83 = add nsw i32 %82, 1
store i32 %83, i32* %3
br label %63
84: ; preds = %63
%85 = load i32, i32* %5
%86 = load i32, i32* %7
%87 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.5, i64 0, i64 0), i32 %85, i32 %86)
br label %115
88: ; preds = %9
store i32 0, i32* %3
br label %89
89: ; preds = %107, %88
%90 = load i32, i32* %3
%91 = load i32, i32* %4
%92 = icmp slt i32 %90, %91
br i1 %92, label %93, label %110
93: ; preds = %89
%94 = load i32, i32* %3
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 %95
%97 = load i32, i32* %96
%98 = load i32, i32* %6
%99 = icmp slt i32 %97, %98
br i1 %99, label %100, label %106
100: ; preds = %93
%101 = load i32, i32* %3
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 %102
%104 = load i32, i32* %103
store i32 %104, i32* %6
%105 = load i32, i32* %3
store i32 %105, i32* %7
br label %106
106: ; preds = %100, %93
br label %107
107: ; preds = %106
%108 = load i32, i32* %3
%109 = add nsw i32 %108, 1
store i32 %109, i32* %3
br label %89
110: ; preds = %89
%111 = load i32, i32* %6
%112 = load i32, i32* %7
%113 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.6, i64 0, i64 0), i32 %111, i32 %112)
br label %115
114: ; preds = %9
ret i32 0
115: ; preds = %9, %110, %84, %61, %45
br label %116
116: ; preds = %119, %115
%117 = call i32 (...) @getchar()
%118 = icmp ne i32 %117, 10
br i1 %118, label %119, label %120
119: ; preds = %116
br label %116
120: ; preds = %116
br label %9
}

LLVM IR (-O2):
@.str.1 = [3 x i8] c"%c\00"
@.str.2 = [20 x i8] c"You have supplied: \00"
@.str.3 = [4 x i8] c"%d \00"
@.str.4 = [16 x i8] c"Supplied marks:\00"
@.str.5 = [31 x i8] c"The highest is: %d : marks[%d]\00"
@.str.6 = [29 x i8] c"The lowest is: %d: marks[%d]\00"
@str = [59 x i8] c"\0AMENU:\0Ai:Input\0Ap:Print\0Ah:Find highest\0Al:Find lowest\0Aq:quit\00"
define i32 @main() {
%1 = alloca [20 x i32]
%2 = alloca i8
%3 = bitcast [20 x i32]* %1 to i8*
%4 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 0
%5 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 1
%6 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 2
%7 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 3
%8 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 4
%9 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 5
%10 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 6
%11 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 7
%12 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 8
%13 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 9
%14 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 10
%15 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 11
%16 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 12
%17 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 13
%18 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 14
%19 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 15
%20 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 16
%21 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 17
%22 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 18
%23 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 19
%24 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 0
%25 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 1
%26 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 2
%27 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 3
%28 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 4
%29 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 5
%30 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 6
%31 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 7
%32 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 8
%33 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 9
%34 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 10
%35 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 11
%36 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 12
%37 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 13
%38 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 14
%39 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 15
%40 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 16
%41 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 17
%42 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 18
%43 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 19
%44 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 0
%45 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 1
%46 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 2
%47 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 3
%48 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 4
%49 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 5
%50 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 6
%51 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 7
%52 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 8
%53 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 9
%54 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 10
%55 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 11
%56 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 12
%57 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 13
%58 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 14
%59 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 15
%60 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 16
%61 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 17
%62 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 18
%63 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 19
%64 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 0
%65 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 1
%66 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 2
%67 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 3
%68 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 4
%69 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 5
%70 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 6
%71 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 7
%72 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 8
%73 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 9
%74 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 10
%75 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 11
%76 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 12
%77 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 13
%78 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 14
%79 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 15
%80 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 16
%81 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 17
%82 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 18
%83 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 19
br label %84
84: ; preds = %354, %0
%85 = phi i32 [ -1, %0 ], [ %351, %354 ]
%86 = phi i32 [ 101, %0 ], [ %352, %354 ]
%87 = phi i32 [ undef, %0 ], [ %353, %354 ]
%88 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str, i64 0, i64 0))
%89 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %2)
%90 = call i32 (...) @getpid()
%91 = call i32 @srand(i32 %90)
%92 = load i8, i8* %2
%93 = sext i8 %92 to i32
switch i32 %93, label %350 [
i32 105, label %258
i32 112, label %307
i32 104, label %176
i32 108, label %94
i32 113, label %349
]
94: ; preds = %84
%95 = load i32, i32* %4
%96 = icmp slt i32 %95, %86
%97 = select i1 %96, i32 %95, i32 %86
%98 = select i1 %96, i32 0, i32 %87
%99 = load i32, i32* %5
%100 = icmp slt i32 %99, %97
%101 = select i1 %100, i32 %99, i32 %97
%102 = select i1 %100, i32 1, i32 %98
%103 = load i32, i32* %6
%104 = icmp slt i32 %103, %101
%105 = select i1 %104, i32 %103, i32 %101
%106 = select i1 %104, i32 2, i32 %102
%107 = load i32, i32* %7
%108 = icmp slt i32 %107, %105
%109 = select i1 %108, i32 %107, i32 %105
%110 = select i1 %108, i32 3, i32 %106
%111 = load i32, i32* %8
%112 = icmp slt i32 %111, %109
%113 = select i1 %112, i32 %111, i32 %109
%114 = select i1 %112, i32 4, i32 %110
%115 = load i32, i32* %9
%116 = icmp slt i32 %115, %113
%117 = select i1 %116, i32 %115, i32 %113
%118 = select i1 %116, i32 5, i32 %114
%119 = load i32, i32* %10
%120 = icmp slt i32 %119, %117
%121 = select i1 %120, i32 %119, i32 %117
%122 = select i1 %120, i32 6, i32 %118
%123 = load i32, i32* %11
%124 = icmp slt i32 %123, %121
%125 = select i1 %124, i32 %123, i32 %121
%126 = select i1 %124, i32 7, i32 %122
%127 = load i32, i32* %12
%128 = icmp slt i32 %127, %125
%129 = select i1 %128, i32 %127, i32 %125
%130 = select i1 %128, i32 8, i32 %126
%131 = load i32, i32* %13
%132 = icmp slt i32 %131, %129
%133 = select i1 %132, i32 %131, i32 %129
%134 = select i1 %132, i32 9, i32 %130
%135 = load i32, i32* %14
%136 = icmp slt i32 %135, %133
%137 = select i1 %136, i32 %135, i32 %133
%138 = select i1 %136, i32 10, i32 %134
%139 = load i32, i32* %15
%140 = icmp slt i32 %139, %137
%141 = select i1 %140, i32 %139, i32 %137
%142 = select i1 %140, i32 11, i32 %138
%143 = load i32, i32* %16
%144 = icmp slt i32 %143, %141
%145 = select i1 %144, i32 %143, i32 %141
%146 = select i1 %144, i32 12, i32 %142
%147 = load i32, i32* %17
%148 = icmp slt i32 %147, %145
%149 = select i1 %148, i32 %147, i32 %145
%150 = select i1 %148, i32 13, i32 %146
%151 = load i32, i32* %18
%152 = icmp slt i32 %151, %149
%153 = select i1 %152, i32 %151, i32 %149
%154 = select i1 %152, i32 14, i32 %150
%155 = load i32, i32* %19
%156 = icmp slt i32 %155, %153
%157 = select i1 %156, i32 %155, i32 %153
%158 = select i1 %156, i32 15, i32 %154
%159 = load i32, i32* %20
%160 = icmp slt i32 %159, %157
%161 = select i1 %160, i32 %159, i32 %157
%162 = select i1 %160, i32 16, i32 %158
%163 = load i32, i32* %21
%164 = icmp slt i32 %163, %161
%165 = select i1 %164, i32 %163, i32 %161
%166 = select i1 %164, i32 17, i32 %162
%167 = load i32, i32* %22
%168 = icmp slt i32 %167, %165
%169 = select i1 %168, i32 %167, i32 %165
%170 = select i1 %168, i32 18, i32 %166
%171 = load i32, i32* %23
%172 = icmp slt i32 %171, %169
%173 = select i1 %172, i32 %171, i32 %169
%174 = select i1 %172, i32 19, i32 %170
%175 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.6, i64 0, i64 0), i32 %173, i32 %174)
br label %350
176: ; preds = %84
%177 = load i32, i32* %24
%178 = icmp sgt i32 %177, %85
%179 = select i1 %178, i32 %177, i32 %85
%180 = select i1 %178, i32 0, i32 %87
%181 = load i32, i32* %25
%182 = icmp sgt i32 %181, %179
%183 = select i1 %182, i32 %181, i32 %179
%184 = select i1 %182, i32 1, i32 %180
%185 = load i32, i32* %26
%186 = icmp sgt i32 %185, %183
%187 = select i1 %186, i32 %185, i32 %183
%188 = select i1 %186, i32 2, i32 %184
%189 = load i32, i32* %27
%190 = icmp sgt i32 %189, %187
%191 = select i1 %190, i32 %189, i32 %187
%192 = select i1 %190, i32 3, i32 %188
%193 = load i32, i32* %28
%194 = icmp sgt i32 %193, %191
%195 = select i1 %194, i32 %193, i32 %191
%196 = select i1 %194, i32 4, i32 %192
%197 = load i32, i32* %29
%198 = icmp sgt i32 %197, %195
%199 = select i1 %198, i32 %197, i32 %195
%200 = select i1 %198, i32 5, i32 %196
%201 = load i32, i32* %30
%202 = icmp sgt i32 %201, %199
%203 = select i1 %202, i32 %201, i32 %199
%204 = select i1 %202, i32 6, i32 %200
%205 = load i32, i32* %31
%206 = icmp sgt i32 %205, %203
%207 = select i1 %206, i32 %205, i32 %203
%208 = select i1 %206, i32 7, i32 %204
%209 = load i32, i32* %32
%210 = icmp sgt i32 %209, %207
%211 = select i1 %210, i32 %209, i32 %207
%212 = select i1 %210, i32 8, i32 %208
%213 = load i32, i32* %33
%214 = icmp sgt i32 %213, %211
%215 = select i1 %214, i32 %213, i32 %211
%216 = select i1 %214, i32 9, i32 %212
%217 = load i32, i32* %34
%218 = icmp sgt i32 %217, %215
%219 = select i1 %218, i32 %217, i32 %215
%220 = select i1 %218, i32 10, i32 %216
%221 = load i32, i32* %35
%222 = icmp sgt i32 %221, %219
%223 = select i1 %222, i32 %221, i32 %219
%224 = select i1 %222, i32 11, i32 %220
%225 = load i32, i32* %36
%226 = icmp sgt i32 %225, %223
%227 = select i1 %226, i32 %225, i32 %223
%228 = select i1 %226, i32 12, i32 %224
%229 = load i32, i32* %37
%230 = icmp sgt i32 %229, %227
%231 = select i1 %230, i32 %229, i32 %227
%232 = select i1 %230, i32 13, i32 %228
%233 = load i32, i32* %38
%234 = icmp sgt i32 %233, %231
%235 = select i1 %234, i32 %233, i32 %231
%236 = select i1 %234, i32 14, i32 %232
%237 = load i32, i32* %39
%238 = icmp sgt i32 %237, %235
%239 = select i1 %238, i32 %237, i32 %235
%240 = select i1 %238, i32 15, i32 %236
%241 = load i32, i32* %40
%242 = icmp sgt i32 %241, %239
%243 = select i1 %242, i32 %241, i32 %239
%244 = select i1 %242, i32 16, i32 %240
%245 = load i32, i32* %41
%246 = icmp sgt i32 %245, %243
%247 = select i1 %246, i32 %245, i32 %243
%248 = select i1 %246, i32 17, i32 %244
%249 = load i32, i32* %42
%250 = icmp sgt i32 %249, %247
%251 = select i1 %250, i32 %249, i32 %247
%252 = select i1 %250, i32 18, i32 %248
%253 = load i32, i32* %43
%254 = icmp sgt i32 %253, %251
%255 = select i1 %254, i32 %253, i32 %251
%256 = select i1 %254, i32 19, i32 %252
%257 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str.5, i64 0, i64 0), i32 %255, i32 %256)
br label %350
258: ; preds = %84, %258
%259 = phi i64 [ %263, %258 ], [ 0, %84 ]
%260 = call i32 (...) @rand()
%261 = srem i32 %260, 100
%262 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 %259
store i32 %261, i32* %262
%263 = add nuw nsw i64 %259, 1
%264 = icmp eq i64 %263, 20
br i1 %264, label %265, label %258
265: ; preds = %258
%266 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.2, i64 0, i64 0))
%267 = load i32, i32* %64
%268 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %267)
%269 = load i32, i32* %65
%270 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %269)
%271 = load i32, i32* %66
%272 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %271)
%273 = load i32, i32* %67
%274 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %273)
%275 = load i32, i32* %68
%276 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %275)
%277 = load i32, i32* %69
%278 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %277)
%279 = load i32, i32* %70
%280 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %279)
%281 = load i32, i32* %71
%282 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %281)
%283 = load i32, i32* %72
%284 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %283)
%285 = load i32, i32* %73
%286 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %285)
%287 = load i32, i32* %74
%288 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %287)
%289 = load i32, i32* %75
%290 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %289)
%291 = load i32, i32* %76
%292 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %291)
%293 = load i32, i32* %77
%294 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %293)
%295 = load i32, i32* %78
%296 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %295)
%297 = load i32, i32* %79
%298 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %297)
%299 = load i32, i32* %80
%300 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %299)
%301 = load i32, i32* %81
%302 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %301)
%303 = load i32, i32* %82
%304 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %303)
%305 = load i32, i32* %83
%306 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %305)
br label %350
307: ; preds = %84
%308 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.4, i64 0, i64 0))
%309 = load i32, i32* %44
%310 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %309)
%311 = load i32, i32* %45
%312 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %311)
%313 = load i32, i32* %46
%314 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %313)
%315 = load i32, i32* %47
%316 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %315)
%317 = load i32, i32* %48
%318 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %317)
%319 = load i32, i32* %49
%320 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %319)
%321 = load i32, i32* %50
%322 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %321)
%323 = load i32, i32* %51
%324 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %323)
%325 = load i32, i32* %52
%326 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %325)
%327 = load i32, i32* %53
%328 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %327)
%329 = load i32, i32* %54
%330 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %329)
%331 = load i32, i32* %55
%332 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %331)
%333 = load i32, i32* %56
%334 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %333)
%335 = load i32, i32* %57
%336 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %335)
%337 = load i32, i32* %58
%338 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %337)
%339 = load i32, i32* %59
%340 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %339)
%341 = load i32, i32* %60
%342 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %341)
%343 = load i32, i32* %61
%344 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %343)
%345 = load i32, i32* %62
%346 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %345)
%347 = load i32, i32* %63
%348 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 %347)
br label %350
349: ; preds = %84
ret i32 0
350: ; preds = %307, %265, %84, %94, %176
%351 = phi i32 [ %85, %84 ], [ %85, %94 ], [ %255, %176 ], [ %85, %265 ], [ %85, %307 ]
%352 = phi i32 [ %86, %84 ], [ %173, %94 ], [ %86, %176 ], [ %86, %265 ], [ %86, %307 ]
%353 = phi i32 [ %87, %84 ], [ %174, %94 ], [ %256, %176 ], [ %87, %265 ], [ %87, %307 ]
br label %354
354: ; preds = %354, %350
%355 = call i32 (...) @getchar()
%356 = icmp eq i32 %355, 10
br i1 %356, label %84, label %354
}