#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 print_usage() {
  printf("\n"
         "plp - the horrific chess engine!\n\n"
         "plp takes the following arguments:\n"
         " -fen <fen>       - Sets up plp with an initial position.\n"
         "                    If omitted, the normal startingposition in chess "
         "is used.\n"
         " -depth <n>       - Sets the depth of perft, divide or perftsuite "
         "modes.\n"
         " -tsize <n>       - Sets the hash table size (in MB).\n\n"
         " -mode divide     - Runs through every move in a position and print "
         "their\n"
         "                    leaf-node counts.\n"
         " -mode perft      - Same as '-mode divide' but will only give one "
         "leaf-node\n"
         "                    count for the starting position, not for each "
         "move.\n"
         " -mode perftsuite - Runs through a set of 126 positions and compare "
         "the perft\n"
         "                    values by their correct values. Runs with "
         "arbitrary depth.\n"
         " -mode uci        - Starts the engine in uci mode. This is the "
         "default behaviour.\n\n"
         " -mode bench      - Starts a benchmark for our main search "
         "algorithm.\n\n"
         "\n");
}


x86 assembly (clang, -O0):
<print_usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_usage>:
lea    0xee9(%rip),%rdi
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [907 x i8] c"\0Aplp - the horrific chess engine!\0A\0Aplp takes the following arguments:\0A -fen <fen> - Sets up plp with an initial position.\0A If omitted, the normal startingposition in chess is used.\0A -depth <n> - Sets the depth of perft, divide or perftsuite modes.\0A -tsize <n> - Sets the hash table size (in MB).\0A\0A -mode divide - Runs through every move in a position and print their\0A leaf-node counts.\0A -mode perft - Same as '-mode divide' but will only give one leaf-node\0A count for the starting position, not for each move.\0A -mode perftsuite - Runs through a set of 126 positions and compare the perft\0A values by their correct values. Runs with arbitrary depth.\0A -mode uci - Starts the engine in uci mode. This is the default behaviour.\0A\0A -mode bench - Starts a benchmark for our main search algorithm.\0A\0A\0A\00"
define void @print_usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([907 x i8], [907 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [906 x i8] c"\0Aplp - the horrific chess engine!\0A\0Aplp takes the following arguments:\0A -fen <fen> - Sets up plp with an initial position.\0A If omitted, the normal startingposition in chess is used.\0A -depth <n> - Sets the depth of perft, divide or perftsuite modes.\0A -tsize <n> - Sets the hash table size (in MB).\0A\0A -mode divide - Runs through every move in a position and print their\0A leaf-node counts.\0A -mode perft - Same as '-mode divide' but will only give one leaf-node\0A count for the starting position, not for each move.\0A -mode perftsuite - Runs through a set of 126 positions and compare the perft\0A values by their correct values. Runs with arbitrary depth.\0A -mode uci - Starts the engine in uci mode. This is the default behaviour.\0A\0A -mode bench - Starts a benchmark for our main search algorithm.\0A\0A\00"
define void @print_usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([906 x i8], [906 x i8]* @str, i64 0, i64 0))
ret void
}