#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*/ printf(char *);
void printGreeting() {
  printf("*****************************************************************\n");
  printf("\n\nWelcome! Wilkommen! Bonjure!\n\n");
  printf("\tHome of Pocker\n\n");
  printf("*****************************************************************\n");
  printf("Here are some funny rules:\n");
  printf("You have 100 baks in your pocket and you start by making a bet from "
         "1 to 5 baks.");
  printf("\nYou are dealt 5 cards, and you then choose wich cards to keep or "
         "discard.\n");
  printf("You want to make the best possible hand.\n");
  printf("\nHere is the table for winnings (assuming a bet of 1 baks):");
  printf("\nPair\t\t\t\t1 baks");
  printf("\nTwo Pairs\t\t\t2 baks");
  printf("\nThree of a kind\t\t\t3 baks");
  printf("\nStraight\t\t\t4 baks");
  printf("\nFlush\t\t\t\t5 baks");
  printf("\nFull House\t\t\t8 baks");
  printf("\nFour of a Kind\t\t\t10 baks");
  printf("\nStraight Flush\t\t\t20 baks");
  printf("\n\nHave fun!\n\n");
}


x86 assembly (clang, -O0):
<printGreeting>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
lea    0xf1c(%rip),%rdi
call   1030 <printf@plt>
lea    0xf31(%rip),%rdi
call   1030 <printf@plt>
lea    0xec1(%rip),%rdi
call   1030 <printf@plt>
lea    0xf2b(%rip),%rdi
call   1030 <printf@plt>
lea    0xf3b(%rip),%rdi
call   1030 <printf@plt>
lea    0xf80(%rip),%rdi
call   1030 <printf@plt>
lea    0xfc0(%rip),%rdi
call   1030 <printf@plt>
lea    0xfde(%rip),%rdi
call   1030 <printf@plt>
lea    0x100e(%rip),%rdi
call   1030 <printf@plt>
lea    0x1012(%rip),%rdi
call   1030 <printf@plt>
lea    0x101a(%rip),%rdi
call   1030 <printf@plt>
lea    0x1028(%rip),%rdi
call   1030 <printf@plt>
lea    0x102f(%rip),%rdi
call   1030 <printf@plt>
lea    0x1034(%rip),%rdi
call   1030 <printf@plt>
lea    0x103d(%rip),%rdi
call   1030 <printf@plt>
lea    0x104b(%rip),%rdi
call   1030 <printf@plt>
lea    0x1059(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<printGreeting>:
push   %rbx
lea    0x1041(%rip),%rbx
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x1001(%rip),%rdi
call   1030 <puts@plt>
lea    0x1015(%rip),%rdi
call   1030 <puts@plt>
mov    %rbx,%rdi
call   1030 <puts@plt>
lea    0x1054(%rip),%rdi
call   1030 <puts@plt>
lea    0xe9d(%rip),%rdi
call   1040 <printf@plt>
lea    0x1057(%rip),%rdi
call   1030 <puts@plt>
lea    0x1096(%rip),%rdi
call   1030 <puts@plt>
lea    0xeca(%rip),%rdi
call   1040 <printf@plt>
lea    0xefa(%rip),%rdi
call   1040 <printf@plt>
lea    0xefe(%rip),%rdi
call   1040 <printf@plt>
lea    0xf06(%rip),%rdi
call   1040 <printf@plt>
lea    0xf14(%rip),%rdi
call   1040 <printf@plt>
lea    0xf1b(%rip),%rdi
call   1040 <printf@plt>
lea    0xf20(%rip),%rdi
call   1040 <printf@plt>
lea    0xf29(%rip),%rdi
call   1040 <printf@plt>
lea    0xf37(%rip),%rdi
call   1040 <printf@plt>
lea    0x1047(%rip),%rdi
pop    %rbx
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [67 x i8] c"*****************************************************************\0A\00"
@.str.1 = [33 x i8] c"\0A\0AWelcome! Wilkommen! Bonjure!\0A\0A\00"
@.str.2 = [18 x i8] c"\09Home of Pocker\0A\0A\00"
@.str.3 = [28 x i8] c"Here are some funny rules:\0A\00"
@.str.4 = [81 x i8] c"You have 100 baks in your pocket and you start by making a bet from 1 to 5 baks.\00"
@.str.5 = [76 x i8] c"\0AYou are dealt 5 cards, and you then choose wich cards to keep or discard.\0A\00"
@.str.6 = [42 x i8] c"You want to make the best possible hand.\0A\00"
@.str.7 = [60 x i8] c"\0AHere is the table for winnings (assuming a bet of 1 baks):\00"
@.str.8 = [16 x i8] c"\0APair\09\09\09\091 baks\00"
@.str.9 = [20 x i8] c"\0ATwo Pairs\09\09\092 baks\00"
@.str.10 = [26 x i8] c"\0AThree of a kind\09\09\093 baks\00"
@.str.11 = [19 x i8] c"\0AStraight\09\09\094 baks\00"
@.str.12 = [17 x i8] c"\0AFlush\09\09\09\095 baks\00"
@.str.13 = [21 x i8] c"\0AFull House\09\09\098 baks\00"
@.str.14 = [26 x i8] c"\0AFour of a Kind\09\09\0910 baks\00"
@.str.15 = [26 x i8] c"\0AStraight Flush\09\09\0920 baks\00"
@.str.16 = [14 x i8] c"\0A\0AHave fun!\0A\0A\00"
define void @printGreeting() {
%1 = call i32 @printf(i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 @printf(i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str, i64 0, i64 0))
%5 = call i32 @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0))
%6 = call i32 @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.4, i64 0, i64 0))
%7 = call i32 @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.5, i64 0, i64 0))
%8 = call i32 @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.6, i64 0, i64 0))
%9 = call i32 @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.7, i64 0, i64 0))
%10 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.8, i64 0, i64 0))
%11 = call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.9, i64 0, i64 0))
%12 = call i32 @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0))
%13 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0))
%14 = call i32 @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.12, i64 0, i64 0))
%15 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.13, i64 0, i64 0))
%16 = call i32 @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.14, i64 0, i64 0))
%17 = call i32 @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.15, i64 0, i64 0))
%18 = call i32 @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.16, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str.4 = [81 x i8] c"You have 100 baks in your pocket and you start by making a bet from 1 to 5 baks.\00"
@.str.7 = [60 x i8] c"\0AHere is the table for winnings (assuming a bet of 1 baks):\00"
@.str.8 = [16 x i8] c"\0APair\09\09\09\091 baks\00"
@.str.9 = [20 x i8] c"\0ATwo Pairs\09\09\092 baks\00"
@.str.10 = [26 x i8] c"\0AThree of a kind\09\09\093 baks\00"
@.str.11 = [19 x i8] c"\0AStraight\09\09\094 baks\00"
@.str.12 = [17 x i8] c"\0AFlush\09\09\09\095 baks\00"
@.str.13 = [21 x i8] c"\0AFull House\09\09\098 baks\00"
@.str.14 = [26 x i8] c"\0AFour of a Kind\09\09\0910 baks\00"
@.str.15 = [26 x i8] c"\0AStraight Flush\09\09\0920 baks\00"
@str.17 = [32 x i8] c"\0A\0AWelcome! Wilkommen! Bonjure!\0A\00"
@str.18 = [17 x i8] c"\09Home of Pocker\0A\00"
@str.19 = [66 x i8] c"*****************************************************************\00"
@str.20 = [27 x i8] c"Here are some funny rules:\00"
@str.21 = [75 x i8] c"\0AYou are dealt 5 cards, and you then choose wich cards to keep or discard.\00"
@str.22 = [41 x i8] c"You want to make the best possible hand.\00"
@str.23 = [13 x i8] c"\0A\0AHave fun!\0A\00"
define void @printGreeting() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @str.19, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str.17, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.18, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @str.19, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str.20, i64 0, i64 0))
%6 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @.str.4, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([75 x i8], [75 x i8]* @str.21, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.22, i64 0, i64 0))
%9 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([60 x i8], [60 x i8]* @.str.7, i64 0, i64 0))
%10 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.8, i64 0, i64 0))
%11 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.9, i64 0, i64 0))
%12 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.10, i64 0, i64 0))
%13 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.11, i64 0, i64 0))
%14 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.12, i64 0, i64 0))
%15 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.13, i64 0, i64 0))
%16 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.14, i64 0, i64 0))
%17 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @.str.15, i64 0, i64 0))
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @str.23, i64 0, i64 0))
ret void
}