#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*/ exit(int /*<<< orphan*/);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, char *, char *, char *);
int /*<<< orphan*/ stderr;
void usage(char *name) {
  fprintf(
      stderr,
      "	Usage: %s [OPTIONS]\n 	Simulates a population of immortals who all "
      "start in one city, and then travel around on an infinite 2D grid, "
      "occassionally encountering each other, chopping off one another's heads "
      "and absorbing each other's power. Alternatively, simulates the "
      "coalescence of asexually reproducing lineages, with migration. "
      "\n	\n	Transition Rates \n	-m   probability of migrating "
      "each turn \n	\n	Constants \n	-n   Number of individuals to "
      "tracking (default: 100)\n	-N   Number of individuals at each "
      "site (N <= n; default: 100) \n	-T   Number of events (turns) to "
      "simulate (default: 1000) \n	-M   Number of times to re-run the "
      "simulation (in mode 0) (default: 1000) \n	\n	Simulation "
      "variants \n	-S   Sim. mode:\n	         0: Print only final "
      "lineages after T turns\n	         1: Print lineages after each turn to "
      "stdout, and locations to stderr (for visualisation, implies M=1). "
      "\n	-Z   Migration mode:\n			 0: default, far "
      "migration (rand(MAXINT))\n			 2:  2  directions, "
      "1D\n			 4:  4  directions, 2D, rook-king\n	"
      "		 8:  8  directions, 2D, king\n			 24: 24 "
      "directions, 2D, 2-sq king\n	\n	Example: %s -S 1 -n 1000 -N "
      "1000 -T 1000000\n	Example: %s -S 0\n	",
      name, name, name);
  exit(0);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    0x2ead(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
mov    -0x8(%rbp),%rcx
mov    -0x8(%rbp),%r8
lea    0xeb8(%rip),%rsi
call   1030 <fprintf@plt>
xor    %edi,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    %rdi,%rcx
mov    0x2eb5(%rip),%rax
mov    (%rax),%edi
lea    0xecc(%rip),%rsi
mov    %rcx,%rdx
mov    %rcx,%r8
call   1030 <fprintf@plt>
xor    %edi,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [1139 x i8] c"\09Usage: %s [OPTIONS]\0A \09Simulates a population of immortals who all start in one city, and then travel around on an infinite 2D grid, occassionally encountering each other, chopping off one another's heads and absorbing each other's power. Alternatively, simulates the coalescence of asexually reproducing lineages, with migration. \0A\09\0A\09Transition Rates \0A\09-m probability of migrating each turn \0A\09\0A\09Constants \0A\09-n Number of individuals to tracking (default: 100)\0A\09-N Number of individuals at each site (N <= n; default: 100) \0A\09-T Number of events (turns) to simulate (default: 1000) \0A\09-M Number of times to re-run the simulation (in mode 0) (default: 1000) \0A\09\0A\09Simulation variants \0A\09-S Sim. mode:\0A\09 0: Print only final lineages after T turns\0A\09 1: Print lineages after each turn to stdout, and locations to stderr (for visualisation, implies M=1). \0A\09-Z Migration mode:\0A\09\09\09 0: default, far migration (rand(MAXINT))\0A\09\09\09 2: 2 directions, 1D\0A\09\09\09 4: 4 directions, 2D, rook-king\0A\09\09\09 8: 8 directions, 2D, king\0A\09\09\09 24: 24 directions, 2D, 2-sq king\0A\09\0A\09Example: %s -S 1 -n 1000 -N 1000 -T 1000000\0A\09Example: %s -S 0\0A\09\00"
define void @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i32, i32* @stderr
%4 = load i8*, i8** %2
%5 = load i8*, i8** %2
%6 = load i8*, i8** %2
%7 = call i32 @fprintf(i32 %3, i8* getelementptr inbounds ([1139 x i8], [1139 x i8]* @.str, i64 0, i64 0), i8* %4, i8* %5, i8* %6)
%8 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [1139 x i8] c"\09Usage: %s [OPTIONS]\0A \09Simulates a population of immortals who all start in one city, and then travel around on an infinite 2D grid, occassionally encountering each other, chopping off one another's heads and absorbing each other's power. Alternatively, simulates the coalescence of asexually reproducing lineages, with migration. \0A\09\0A\09Transition Rates \0A\09-m probability of migrating each turn \0A\09\0A\09Constants \0A\09-n Number of individuals to tracking (default: 100)\0A\09-N Number of individuals at each site (N <= n; default: 100) \0A\09-T Number of events (turns) to simulate (default: 1000) \0A\09-M Number of times to re-run the simulation (in mode 0) (default: 1000) \0A\09\0A\09Simulation variants \0A\09-S Sim. mode:\0A\09 0: Print only final lineages after T turns\0A\09 1: Print lineages after each turn to stdout, and locations to stderr (for visualisation, implies M=1). \0A\09-Z Migration mode:\0A\09\09\09 0: default, far migration (rand(MAXINT))\0A\09\09\09 2: 2 directions, 1D\0A\09\09\09 4: 4 directions, 2D, rook-king\0A\09\09\09 8: 8 directions, 2D, king\0A\09\09\09 24: 24 directions, 2D, 2-sq king\0A\09\0A\09Example: %s -S 1 -n 1000 -N 1000 -T 1000000\0A\09Example: %s -S 0\0A\09\00"
define void @usage(i8* %0) {
%2 = load i32, i32* @stderr
%3 = tail call i32 @fprintf(i32 %2, i8* getelementptr inbounds ([1139 x i8], [1139 x i8]* @.str, i64 0, i64 0), i8* %0, i8* %0, i8* %0)
%4 = tail call i32 @exit(i32 0)
unreachable
}