#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 *, char const *);
void usage(const char *progname) {
  printf("Usage: %s [options] <command>\n"
         "\n"
         "Options are:\n"
         "    -u           Use Unicode (UTF-8) line-drawing characters.\n"
         "    -i filename  Read from the given file (default stdin).\n"
         "    -o filename  Write to the given file (default stdout).\n"
         "    -T           Restrict difference and ratio groups to two cells.\n"
         "    -s size      Specify generator grid size (default 6).\n"
         "    -w num       Maximum generator iterations (default 20).\n"
         "    -m diff      Maximum puzzle difficulty (default 0, no limit).\n"
         "    -t diff      Threshold difficulty for early stop (default 0, "
         "none).\n"
         "    --help       Show this text.\n"
         "    --version    Show version information.\n"
         "\n"
         "Available commands:\n"
         "    print        Parse a grid spec and print it.\n"
         "    solve        Parse a grid spec and solve the puzzle.\n"
         "    examine      Parse a grid spec and estimate difficulty.\n"
         "    gen-grid     Produce a valid solution grid.\n"
         "    harden       Read a solution grid or puzzle and produce a new "
         "puzzle.\n"
         "    generate     Produce a puzzle.\n",
         progname);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
mov    %rdi,%rsi
lea    0xee6(%rip),%rdi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [969 x i8] c"Usage: %s [options] <command>\0A\0AOptions are:\0A -u Use Unicode (UTF-8) line-drawing characters.\0A -i filename Read from the given file (default stdin).\0A -o filename Write to the given file (default stdout).\0A -T Restrict difference and ratio groups to two cells.\0A -s size Specify generator grid size (default 6).\0A -w num Maximum generator iterations (default 20).\0A -m diff Maximum puzzle difficulty (default 0, no limit).\0A -t diff Threshold difficulty for early stop (default 0, none).\0A --help Show this text.\0A --version Show version information.\0A\0AAvailable commands:\0A print Parse a grid spec and print it.\0A solve Parse a grid spec and solve the puzzle.\0A examine Parse a grid spec and estimate difficulty.\0A gen-grid Produce a valid solution grid.\0A harden Read a solution grid or puzzle and produce a new puzzle.\0A generate Produce a puzzle.\0A\00"
define void @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([969 x i8], [969 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [969 x i8] c"Usage: %s [options] <command>\0A\0AOptions are:\0A -u Use Unicode (UTF-8) line-drawing characters.\0A -i filename Read from the given file (default stdin).\0A -o filename Write to the given file (default stdout).\0A -T Restrict difference and ratio groups to two cells.\0A -s size Specify generator grid size (default 6).\0A -w num Maximum generator iterations (default 20).\0A -m diff Maximum puzzle difficulty (default 0, no limit).\0A -t diff Threshold difficulty for early stop (default 0, none).\0A --help Show this text.\0A --version Show version information.\0A\0AAvailable commands:\0A print Parse a grid spec and print it.\0A solve Parse a grid spec and solve the puzzle.\0A examine Parse a grid spec and estimate difficulty.\0A gen-grid Produce a valid solution grid.\0A harden Read a solution grid or puzzle and produce a new puzzle.\0A generate Produce a puzzle.\0A\00"
define void @usage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([969 x i8], [969 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}