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

/* Variables and functions */
int /*<<< orphan*/ printf(char *, int, char *);
void PrintUserMenuChoices() {
  int i;
  char *options[] = {"Izlist liste",
                     "Unos elementa na pocetak liste",
                     "Unos elementa na kraj liste",
                     "Pronalazak elementa po prezimenu",
                     "Brisanje elementa po prezimenu",
                     "Dodavanje elementa ispred nekog elementa",
                     "Dodavanje elementa izad nekog elementa",
                     "Sortiranje liste",
                     "Upisivanje liste u datoteku",
                     "Ucitavanje liste iz datoteke",
                     "Izlaz"};
  for (i = 0; i < sizeof(options) / sizeof(char *); i++)
    printf("%d.\t%s\n", i + 1, options[i]);
}


x86 assembly (clang, -O0):
<PrintUserMenuChoices>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
lea    -0x60(%rbp),%rdi
lea    0x2c8d(%rip),%rsi
mov    $0x58,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x4(%rbp)
movslq -0x4(%rbp),%rax
cmp    $0xb,%rax
jae    117b <PrintUserMenuChoices+0x5b>
mov    -0x4(%rbp),%esi
add    $0x1,%esi
movslq -0x4(%rbp),%rax
mov    -0x60(%rbp,%rax,8),%rdx
lea    0xfc0(%rip),%rdi
call   1030 <printf@plt>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1144 <PrintUserMenuChoices+0x24>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<PrintUserMenuChoices>:
push   %rbx
lea    0x1010(%rip),%rbx
lea    0xee1(%rip),%rdx
mov    %rbx,%rdi
mov    $0x1,%esi
call   1030 <printf@plt>
lea    0xeda(%rip),%rdx
mov    %rbx,%rdi
mov    $0x2,%esi
call   1030 <printf@plt>
lea    0xee5(%rip),%rdx
mov    %rbx,%rdi
mov    $0x3,%esi
call   1030 <printf@plt>
lea    0xeed(%rip),%rdx
mov    %rbx,%rdi
mov    $0x4,%esi
call   1030 <printf@plt>
lea    0xefa(%rip),%rdx
mov    %rbx,%rdi
mov    $0x5,%esi
call   1030 <printf@plt>
lea    0xf05(%rip),%rdx
mov    %rbx,%rdi
mov    $0x6,%esi
call   1030 <printf@plt>
lea    0xf1a(%rip),%rdx
mov    %rbx,%rdi
mov    $0x7,%esi
call   1030 <printf@plt>
lea    0xf2d(%rip),%rdx
mov    %rbx,%rdi
mov    $0x8,%esi
call   1030 <printf@plt>
lea    0xf2a(%rip),%rdx
mov    %rbx,%rdi
mov    $0x9,%esi
call   1030 <printf@plt>
lea    0xf32(%rip),%rdx
mov    %rbx,%rdi
mov    $0xa,%esi
call   1030 <printf@plt>
lea    0xf3b(%rip),%rdx
mov    %rbx,%rdi
mov    $0xb,%esi
pop    %rbx
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [13 x i8] c"Izlist liste\00"
@.str.1 = [31 x i8] c"Unos elementa na pocetak liste\00"
@.str.2 = [28 x i8] c"Unos elementa na kraj liste\00"
@.str.3 = [33 x i8] c"Pronalazak elementa po prezimenu\00"
@.str.4 = [31 x i8] c"Brisanje elementa po prezimenu\00"
@.str.5 = [41 x i8] c"Dodavanje elementa ispred nekog elementa\00"
@.str.6 = [39 x i8] c"Dodavanje elementa izad nekog elementa\00"
@.str.7 = [17 x i8] c"Sortiranje liste\00"
@.str.8 = [28 x i8] c"Upisivanje liste u datoteku\00"
@.str.9 = [29 x i8] c"Ucitavanje liste iz datoteke\00"
@.str.10 = [6 x i8] c"Izlaz\00"
@__const.PrintUserMenuChoices.options = [11 x i8*] [i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i32 0, i32 0)]
@.str.11 = [8 x i8] c"%d.\09%s\0A\00"
define void @PrintUserMenuChoices() {
%1 = alloca i32
%2 = alloca [11 x i8*]
%3 = bitcast [11 x i8*]* %2 to i8*
store i32 0, i32* %1
br label %4
4: ; preds = %16, %0
%5 = load i32, i32* %1
%6 = sext i32 %5 to i64
%7 = icmp ult i64 %6, 11
br i1 %7, label %8, label %19
8: ; preds = %4
%9 = load i32, i32* %1
%10 = add nsw i32 %9, 1
%11 = load i32, i32* %1
%12 = sext i32 %11 to i64
%13 = getelementptr inbounds [11 x i8*], [11 x i8*]* %2, i64 0, i64 %12
%14 = load i8*, i8** %13
%15 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 %10, i8* %14)
br label %16
16: ; preds = %8
%17 = load i32, i32* %1
%18 = add nsw i32 %17, 1
store i32 %18, i32* %1
br label %4
19: ; preds = %4
ret void
}

LLVM IR (-O2):
@.str = [13 x i8] c"Izlist liste\00"
@.str.1 = [31 x i8] c"Unos elementa na pocetak liste\00"
@.str.2 = [28 x i8] c"Unos elementa na kraj liste\00"
@.str.3 = [33 x i8] c"Pronalazak elementa po prezimenu\00"
@.str.4 = [31 x i8] c"Brisanje elementa po prezimenu\00"
@.str.5 = [41 x i8] c"Dodavanje elementa ispred nekog elementa\00"
@.str.6 = [39 x i8] c"Dodavanje elementa izad nekog elementa\00"
@.str.7 = [17 x i8] c"Sortiranje liste\00"
@.str.8 = [28 x i8] c"Upisivanje liste u datoteku\00"
@.str.9 = [29 x i8] c"Ucitavanje liste iz datoteke\00"
@.str.10 = [6 x i8] c"Izlaz\00"
@.str.11 = [8 x i8] c"%d.\09%s\0A\00"
define void @PrintUserMenuChoices() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 2, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 3, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.2, i64 0, i64 0))
%4 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 4, i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.3, i64 0, i64 0))
%5 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 5, i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.4, i64 0, i64 0))
%6 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 6, i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.5, i64 0, i64 0))
%7 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 7, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.6, i64 0, i64 0))
%8 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 8, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.7, i64 0, i64 0))
%9 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 9, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.8, i64 0, i64 0))
%10 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 10, i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.9, i64 0, i64 0))
%11 = tail call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), i32 11, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0))
ret void
}