#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*/ fprintf(int /*<<< orphan*/, char *, ...);
int /*<<< orphan*/ stderr;
void usage(const char *argv0) {
  fprintf(stderr, "Usage %s FILENAME ?args...?\n\n", argv0);
  fprintf(stderr,
          "args:\n"
          "    dbheader        Show database header\n"
          "    pgidx           Index of how each page is used\n"
          "    ptrmap          Show all PTRMAP page content\n"
          "    NNN..MMM        Show hex of pages NNN through MMM\n"
          "    NNN..end        Show hex of pages NNN through end of file\n"
          "    NNNb            Decode btree page NNN\n"
          "    NNNbc           Decode btree page NNN and show content\n"
          "    NNNbm           Decode btree page NNN and show a layout map\n"
          "    NNNt            Decode freelist trunk page NNN\n"
          "    NNNtd           Show leaf freelist pages on the decode\n"
          "    NNNtr           Recurisvely decode freelist starting at NNN\n");
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    0x2ebd(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xed0(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2ea2(%rip),%rax
mov    (%rax),%edi
lea    0xed7(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rbx
mov    %rdi,%rdx
mov    0x2ec5(%rip),%rbx
mov    (%rbx),%edi
lea    0xedc(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0xeea(%rip),%rsi
xor    %eax,%eax
pop    %rbx
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [30 x i8] c"Usage %s FILENAME ?args...?\0A\0A\00"
@.str.1 = [603 x i8] c"args:\0A dbheader Show database header\0A pgidx Index of how each page is used\0A ptrmap Show all PTRMAP page content\0A NNN..MMM Show hex of pages NNN through MMM\0A NNN..end Show hex of pages NNN through end of file\0A NNNb Decode btree page NNN\0A NNNbc Decode btree page NNN and show content\0A NNNbm Decode btree page NNN and show a layout map\0A NNNt Decode freelist trunk page NNN\0A NNNtd Show leaf freelist pages on the decode\0A NNNtr Recurisvely decode freelist starting at NNN\0A\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 = call i32 (i32, i8*, ...) @fprintf(i32 %3, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str, i64 0, i64 0), i8* %4)
%6 = load i32, i32* @stderr
%7 = call i32 (i32, i8*, ...) @fprintf(i32 %6, i8* getelementptr inbounds ([603 x i8], [603 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [30 x i8] c"Usage %s FILENAME ?args...?\0A\0A\00"
@.str.1 = [603 x i8] c"args:\0A dbheader Show database header\0A pgidx Index of how each page is used\0A ptrmap Show all PTRMAP page content\0A NNN..MMM Show hex of pages NNN through MMM\0A NNN..end Show hex of pages NNN through end of file\0A NNNb Decode btree page NNN\0A NNNbc Decode btree page NNN and show content\0A NNNbm Decode btree page NNN and show a layout map\0A NNNt Decode freelist trunk page NNN\0A NNNtd Show leaf freelist pages on the decode\0A NNNtr Recurisvely decode freelist starting at NNN\0A\00"
define void @usage(i8* %0) {
%2 = load i32, i32* @stderr
%3 = tail call i32 (i32, i8*, ...) @fprintf(i32 %2, i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str, i64 0, i64 0), i8* %0)
%4 = load i32, i32* @stderr
%5 = tail call i32 (i32, i8*, ...) @fprintf(i32 %4, i8* getelementptr inbounds ([603 x i8], [603 x i8]* @.str.1, i64 0, i64 0))
ret void
}