#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);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, char const *);
int /*<<< orphan*/ stderr;
void usage(const char *zArgv0) {
  fprintf(
      stderr,
      "Usage: %s ?OPTIONS? TARGET-DB RBU-DB\n"
      "\n"
      "Where options are:\n"
      "\n"
      "    -step NSTEP\n"
      "    -statstep NSTATSTEP\n"
      "    -vacuum\n"
      "    -presql SQL\n"
      "\n"
      "  If the -vacuum switch is not present, argument RBU-DB must be an RBU\n"
      "  database containing an update suitable for target database "
      "TARGET-DB.\n"
      "  Or, if -vacuum is specified, then TARGET-DB is a database to vacuum "
      "using\n"
      "  RBU, and RBU-DB is used as the state database for the vacuum (refer "
      "to\n"
      "  API documentation for details).\n"
      "\n"
      "  If NSTEP is set to less than or equal to zero (the default value), "
      "this \n"
      "  program attempts to perform the entire update or vacuum operation "
      "before\n"
      "  exiting\n"
      "\n"
      "  If NSTEP is greater than zero, then a maximum of NSTEP calls are "
      "made\n"
      "  to sqlite3rbu_step(). If the RBU update has not been completely "
      "applied\n"
      "  after the NSTEP'th call is made, the state is saved in the database "
      "RBU-DB\n"
      "  and the program exits. Subsequent invocations of this (or any other "
      "RBU)\n"
      "  application will use this state to resume applying the RBU update to "
      "the\n"
      "  target db.\n"
      "\n",
      zArgv0);
  exit(1);
}


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
lea    0xec0(%rip),%rsi
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

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

LLVM IR (-O0):
@stderr = global i32 0
@.str = [1003 x i8] c"Usage: %s ?OPTIONS? TARGET-DB RBU-DB\0A\0AWhere options are:\0A\0A -step NSTEP\0A -statstep NSTATSTEP\0A -vacuum\0A -presql SQL\0A\0A If the -vacuum switch is not present, argument RBU-DB must be an RBU\0A database containing an update suitable for target database TARGET-DB.\0A Or, if -vacuum is specified, then TARGET-DB is a database to vacuum using\0A RBU, and RBU-DB is used as the state database for the vacuum (refer to\0A API documentation for details).\0A\0A If NSTEP is set to less than or equal to zero (the default value), this \0A program attempts to perform the entire update or vacuum operation before\0A exiting\0A\0A If NSTEP is greater than zero, then a maximum of NSTEP calls are made\0A to sqlite3rbu_step(). If the RBU update has not been completely applied\0A after the NSTEP'th call is made, the state is saved in the database RBU-DB\0A and the program exits. Subsequent invocations of this (or any other RBU)\0A application will use this state to resume applying the RBU update to the\0A target db.\0A\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 @fprintf(i32 %3, i8* getelementptr inbounds ([1003 x i8], [1003 x i8]* @.str, i64 0, i64 0), i8* %4)
%6 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [1003 x i8] c"Usage: %s ?OPTIONS? TARGET-DB RBU-DB\0A\0AWhere options are:\0A\0A -step NSTEP\0A -statstep NSTATSTEP\0A -vacuum\0A -presql SQL\0A\0A If the -vacuum switch is not present, argument RBU-DB must be an RBU\0A database containing an update suitable for target database TARGET-DB.\0A Or, if -vacuum is specified, then TARGET-DB is a database to vacuum using\0A RBU, and RBU-DB is used as the state database for the vacuum (refer to\0A API documentation for details).\0A\0A If NSTEP is set to less than or equal to zero (the default value), this \0A program attempts to perform the entire update or vacuum operation before\0A exiting\0A\0A If NSTEP is greater than zero, then a maximum of NSTEP calls are made\0A to sqlite3rbu_step(). If the RBU update has not been completely applied\0A after the NSTEP'th call is made, the state is saved in the database RBU-DB\0A and the program exits. Subsequent invocations of this (or any other RBU)\0A application will use this state to resume applying the RBU update to the\0A target db.\0A\0A\00"
define void @usage(i8* %0) {
%2 = load i32, i32* @stderr
%3 = tail call i32 @fprintf(i32 %2, i8* getelementptr inbounds ([1003 x i8], [1003 x i8]* @.str, i64 0, i64 0), i8* %0)
%4 = tail call i32 @exit(i32 1)
unreachable
}