#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*/ Prt(char *, int, int);
int /*<<< orphan*/ clear_screen();
int /*<<< orphan*/ draw_cave();
int /*<<< orphan*/ pause_game(int);
void wizard_help() {
  clear_screen();
  Prt(("^A -  Remove Curse and Cure all maladies."), (1) - 1, (1) - 1);
  Prt(("^B -  Print random objects sample."), (2) - 1, (1) - 1);
  Prt(("^D -  Down/Up n levels."), (3) - 1, (1) - 1);
  Prt(("^E - *Change character."), (4) - 1, (1) - 1);
  Prt(("^F - *Delete monsters."), (5) - 1, (1) - 1);
  Prt(("^G - *Allocate treasures."), (6) - 1, (1) - 1);
  Prt(("^H -  Wizard Help."), (7) - 1, (1) - 1);
  Prt(("^I -  Identify."), (8) - 1, (1) - 1);
  Prt(("^J - *Gain experience."), (9) - 1, (1) - 1);
  Prt(("^K - *Summon monster."), (10) - 1, (1) - 1);
  Prt(("^L -  Wizard light."), (11) - 1, (1) - 1);
  Prt(("^N -  Print monster dictionary."), (12) - 1, (1) - 1);
  Prt(("^O - *Summon monster by its name."), (13) - 1, (1) - 1);
  Prt(("^P -  Wizard password on/off."), (14) - 1, (1) - 1);
  Prt((" s - *Statistics on item (in inventory screen)."), (15) - 1, (1) - 1);
  Prt(("^T -  Teleport player."), (16) - 1, (1) - 1);
  Prt(("^U - *Roll up an item."), (17) - 1, (1) - 1);
  Prt(("^V -  Restore lost character."), (18) - 1, (1) - 1);
  Prt(("^W - *Create any object *CAN CAUSE FATAL ERROR*"), (19) - 1, (1) - 1);
  Prt(("^X - *Edit high score file"), (20) - 1, (1) - 1);
  pause_game(24);
  draw_cave();
}


x86 assembly (clang, -O0):
<wizard_help>:
push   %rbp
mov    %rsp,%rbp
mov    $0x0,%al
call   1060 <clear_screen@plt>
lea    0xeae(%rip),%rdi
xor    %edx,%edx
mov    %edx,%esi
call   1030 <Prt@plt>
lea    0xec8(%rip),%rdi
mov    $0x1,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xed8(%rip),%rdi
mov    $0x2,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xedd(%rip),%rdi
mov    $0x3,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xee2(%rip),%rdi
mov    $0x4,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xee6(%rip),%rdi
mov    $0x5,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xeed(%rip),%rdi
mov    $0x6,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xeed(%rip),%rdi
mov    $0x7,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xeea(%rip),%rdi
mov    $0x8,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xeee(%rip),%rdi
mov    $0x9,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xef1(%rip),%rdi
mov    $0xa,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xef2(%rip),%rdi
mov    $0xb,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xeff(%rip),%rdi
mov    $0xc,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf0e(%rip),%rdi
mov    $0xd,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf19(%rip),%rdi
mov    $0xe,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf36(%rip),%rdi
mov    $0xf,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf3a(%rip),%rdi
mov    $0x10,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf3e(%rip),%rdi
mov    $0x11,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf49(%rip),%rdi
mov    $0x12,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf66(%rip),%rdi
mov    $0x13,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
mov    $0x18,%edi
call   1050 <pause_game@plt>
mov    $0x0,%al
call   1040 <draw_cave@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<wizard_help>:
push   %rax
xor    %eax,%eax
call   1060 <clear_screen@plt>
lea    0xeb1(%rip),%rdi
xor    %esi,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xecb(%rip),%rdi
mov    $0x1,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xedb(%rip),%rdi
mov    $0x2,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xee0(%rip),%rdi
mov    $0x3,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xee5(%rip),%rdi
mov    $0x4,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xee9(%rip),%rdi
mov    $0x5,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xef0(%rip),%rdi
mov    $0x6,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xef0(%rip),%rdi
mov    $0x7,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xeed(%rip),%rdi
mov    $0x8,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xef1(%rip),%rdi
mov    $0x9,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xef4(%rip),%rdi
mov    $0xa,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xef5(%rip),%rdi
mov    $0xb,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf02(%rip),%rdi
mov    $0xc,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf11(%rip),%rdi
mov    $0xd,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf1c(%rip),%rdi
mov    $0xe,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf39(%rip),%rdi
mov    $0xf,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf3d(%rip),%rdi
mov    $0x10,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf41(%rip),%rdi
mov    $0x11,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf4c(%rip),%rdi
mov    $0x12,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
lea    0xf69(%rip),%rdi
mov    $0x13,%esi
xor    %edx,%edx
call   1030 <Prt@plt>
mov    $0x18,%edi
call   1050 <pause_game@plt>
xor    %eax,%eax
pop    %rcx
jmp    1040 <draw_cave@plt>

LLVM IR (-O0):
@.str = [42 x i8] c"^A - Remove Curse and Cure all maladies.\00"
@.str.1 = [35 x i8] c"^B - Print random objects sample.\00"
@.str.2 = [24 x i8] c"^D - Down/Up n levels.\00"
@.str.3 = [24 x i8] c"^E - *Change character.\00"
@.str.4 = [23 x i8] c"^F - *Delete monsters.\00"
@.str.5 = [26 x i8] c"^G - *Allocate treasures.\00"
@.str.6 = [19 x i8] c"^H - Wizard Help.\00"
@.str.7 = [16 x i8] c"^I - Identify.\00"
@.str.8 = [23 x i8] c"^J - *Gain experience.\00"
@.str.9 = [22 x i8] c"^K - *Summon monster.\00"
@.str.10 = [20 x i8] c"^L - Wizard light.\00"
@.str.11 = [32 x i8] c"^N - Print monster dictionary.\00"
@.str.12 = [34 x i8] c"^O - *Summon monster by its name.\00"
@.str.13 = [30 x i8] c"^P - Wizard password on/off.\00"
@.str.14 = [48 x i8] c" s - *Statistics on item (in inventory screen).\00"
@.str.15 = [23 x i8] c"^T - Teleport player.\00"
@.str.16 = [23 x i8] c"^U - *Roll up an item.\00"
@.str.17 = [30 x i8] c"^V - Restore lost character.\00"
@.str.18 = [48 x i8] c"^W - *Create any object *CAN CAUSE FATAL ERROR*\00"
@.str.19 = [27 x i8] c"^X - *Edit high score file\00"
define void @wizard_help() {
%1 = call i32 (...) @clear_screen()
%2 = call i32 @Prt(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str, i64 0, i64 0), i32 0, i32 0)
%3 = call i32 @Prt(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0), i32 1, i32 0)
%4 = call i32 @Prt(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.2, i64 0, i64 0), i32 2, i32 0)
%5 = call i32 @Prt(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.3, i64 0, i64 0), i32 3, i32 0)
%6 = call i32 @Prt(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.4, i64 0, i64 0), i32 4, i32 0)
%7 = call i32 @Prt(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.5, i64 0, i64 0), i32 5, i32 0)
%8 = call i32 @Prt(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.6, i64 0, i64 0), i32 6, i32 0)
%9 = call i32 @Prt(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 7, i32 0)
%10 = call i32 @Prt(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.8, i64 0, i64 0), i32 8, i32 0)
%11 = call i32 @Prt(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.9, i64 0, i64 0), i32 9, i32 0)
%12 = call i32 @Prt(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.10, i64 0, i64 0), i32 10, i32 0)
%13 = call i32 @Prt(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.11, i64 0, i64 0), i32 11, i32 0)
%14 = call i32 @Prt(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.12, i64 0, i64 0), i32 12, i32 0)
%15 = call i32 @Prt(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.13, i64 0, i64 0), i32 13, i32 0)
%16 = call i32 @Prt(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.14, i64 0, i64 0), i32 14, i32 0)
%17 = call i32 @Prt(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.15, i64 0, i64 0), i32 15, i32 0)
%18 = call i32 @Prt(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.16, i64 0, i64 0), i32 16, i32 0)
%19 = call i32 @Prt(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.17, i64 0, i64 0), i32 17, i32 0)
%20 = call i32 @Prt(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.18, i64 0, i64 0), i32 18, i32 0)
%21 = call i32 @Prt(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.19, i64 0, i64 0), i32 19, i32 0)
%22 = call i32 @pause_game(i32 24)
%23 = call i32 (...) @draw_cave()
ret void
}

LLVM IR (-O2):
@.str = [42 x i8] c"^A - Remove Curse and Cure all maladies.\00"
@.str.1 = [35 x i8] c"^B - Print random objects sample.\00"
@.str.2 = [24 x i8] c"^D - Down/Up n levels.\00"
@.str.3 = [24 x i8] c"^E - *Change character.\00"
@.str.4 = [23 x i8] c"^F - *Delete monsters.\00"
@.str.5 = [26 x i8] c"^G - *Allocate treasures.\00"
@.str.6 = [19 x i8] c"^H - Wizard Help.\00"
@.str.7 = [16 x i8] c"^I - Identify.\00"
@.str.8 = [23 x i8] c"^J - *Gain experience.\00"
@.str.9 = [22 x i8] c"^K - *Summon monster.\00"
@.str.10 = [20 x i8] c"^L - Wizard light.\00"
@.str.11 = [32 x i8] c"^N - Print monster dictionary.\00"
@.str.12 = [34 x i8] c"^O - *Summon monster by its name.\00"
@.str.13 = [30 x i8] c"^P - Wizard password on/off.\00"
@.str.14 = [48 x i8] c" s - *Statistics on item (in inventory screen).\00"
@.str.15 = [23 x i8] c"^T - Teleport player.\00"
@.str.16 = [23 x i8] c"^U - *Roll up an item.\00"
@.str.17 = [30 x i8] c"^V - Restore lost character.\00"
@.str.18 = [48 x i8] c"^W - *Create any object *CAN CAUSE FATAL ERROR*\00"
@.str.19 = [27 x i8] c"^X - *Edit high score file\00"
define void @wizard_help() {
%1 = tail call i32 (...) @clear_screen()
%2 = tail call i32 @Prt(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str, i64 0, i64 0), i32 0, i32 0)
%3 = tail call i32 @Prt(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0), i32 1, i32 0)
%4 = tail call i32 @Prt(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.2, i64 0, i64 0), i32 2, i32 0)
%5 = tail call i32 @Prt(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.3, i64 0, i64 0), i32 3, i32 0)
%6 = tail call i32 @Prt(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.4, i64 0, i64 0), i32 4, i32 0)
%7 = tail call i32 @Prt(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.5, i64 0, i64 0), i32 5, i32 0)
%8 = tail call i32 @Prt(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.6, i64 0, i64 0), i32 6, i32 0)
%9 = tail call i32 @Prt(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0), i32 7, i32 0)
%10 = tail call i32 @Prt(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.8, i64 0, i64 0), i32 8, i32 0)
%11 = tail call i32 @Prt(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.9, i64 0, i64 0), i32 9, i32 0)
%12 = tail call i32 @Prt(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.10, i64 0, i64 0), i32 10, i32 0)
%13 = tail call i32 @Prt(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.11, i64 0, i64 0), i32 11, i32 0)
%14 = tail call i32 @Prt(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.12, i64 0, i64 0), i32 12, i32 0)
%15 = tail call i32 @Prt(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.13, i64 0, i64 0), i32 13, i32 0)
%16 = tail call i32 @Prt(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.14, i64 0, i64 0), i32 14, i32 0)
%17 = tail call i32 @Prt(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.15, i64 0, i64 0), i32 15, i32 0)
%18 = tail call i32 @Prt(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.16, i64 0, i64 0), i32 16, i32 0)
%19 = tail call i32 @Prt(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.17, i64 0, i64 0), i32 17, i32 0)
%20 = tail call i32 @Prt(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.18, i64 0, i64 0), i32 18, i32 0)
%21 = tail call i32 @Prt(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.19, i64 0, i64 0), i32 19, i32 0)
%22 = tail call i32 @pause_game(i32 24)
%23 = tail call i32 (...) @draw_cave()
ret void
}