#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] <image file> [command [args]]\n"
      "\n"
      "Options may be any of the following:\n"
      "  -b block-size           Set the simulated block size\n"
      "  -S                      Show performance statistics\n"
      "  -R seed                 Randomize file IO request sizes\n"
      "  -i filename             Read input from the given file\n"
      "  -o filename             Write output to the given file\n"
      "  --mkfs <num blocks>     Initialize the filesystem (WARNING: all "
      "existing\n"
      "                          data will be lost)\n"
      "  --help                  Show this text\n"
      "  --version               Show version information\n"
      "\n"
      "With no command, basic information is printed. Available commands are:\n"
      "  dir [directory]         Show a directory listing\n"
      "  fstat [path]            Show directory entry details\n"
      "  read [file]             Dump the contents of the given file\n"
      "  write [file]            Write to a file\n"
      "  rm [path]               Remove a directory or file\n"
      "  mkdir [directory]       Create a new empty directory\n"
      "  chattr [path] [attributes]\n"
      "                          Alter file attributes/dates/times (see "
      "below)\n"
      "  move [src] [dst]        Move a file from one place to another\n"
      "  rename [src] [new-name] Rename a file without moving it\n"
      "\n"
      "Attributes are specified using arguments with a key=value syntax:\n"
      "  create_date=YYYY-MM-DD  Creation date\n"
      "  create_time=HH:MM:SS    Creation time\n"
      "  modify_date=YYYY-MM-DD  Modification date\n"
      "  modify_time=HH:MM:SS    Modification time\n"
      "  access_date=YYYY-MM-DD  Access date\n"
      "  [+/~/=]AHRS             Alter archive/hidden/read-only/system\n"
      "\n"
      "The special value \"now\" can be used for either dates or times.\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 = [1596 x i8] c"Usage: %s [options] <image file> [command [args]]\0A\0AOptions may be any of the following:\0A -b block-size Set the simulated block size\0A -S Show performance statistics\0A -R seed Randomize file IO request sizes\0A -i filename Read input from the given file\0A -o filename Write output to the given file\0A --mkfs <num blocks> Initialize the filesystem (WARNING: all existing\0A data will be lost)\0A --help Show this text\0A --version Show version information\0A\0AWith no command, basic information is printed. Available commands are:\0A dir [directory] Show a directory listing\0A fstat [path] Show directory entry details\0A read [file] Dump the contents of the given file\0A write [file] Write to a file\0A rm [path] Remove a directory or file\0A mkdir [directory] Create a new empty directory\0A chattr [path] [attributes]\0A Alter file attributes/dates/times (see below)\0A move [src] [dst] Move a file from one place to another\0A rename [src] [new-name] Rename a file without moving it\0A\0AAttributes are specified using arguments with a key=value syntax:\0A create_date=YYYY-MM-DD Creation date\0A create_time=HH:MM:SS Creation time\0A modify_date=YYYY-MM-DD Modification date\0A modify_time=HH:MM:SS Modification time\0A access_date=YYYY-MM-DD Access date\0A [+/~/=]AHRS Alter archive/hidden/read-only/system\0A\0AThe special value \22now\22 can be used for either dates or times.\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 ([1596 x i8], [1596 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [1596 x i8] c"Usage: %s [options] <image file> [command [args]]\0A\0AOptions may be any of the following:\0A -b block-size Set the simulated block size\0A -S Show performance statistics\0A -R seed Randomize file IO request sizes\0A -i filename Read input from the given file\0A -o filename Write output to the given file\0A --mkfs <num blocks> Initialize the filesystem (WARNING: all existing\0A data will be lost)\0A --help Show this text\0A --version Show version information\0A\0AWith no command, basic information is printed. Available commands are:\0A dir [directory] Show a directory listing\0A fstat [path] Show directory entry details\0A read [file] Dump the contents of the given file\0A write [file] Write to a file\0A rm [path] Remove a directory or file\0A mkdir [directory] Create a new empty directory\0A chattr [path] [attributes]\0A Alter file attributes/dates/times (see below)\0A move [src] [dst] Move a file from one place to another\0A rename [src] [new-name] Rename a file without moving it\0A\0AAttributes are specified using arguments with a key=value syntax:\0A create_date=YYYY-MM-DD Creation date\0A create_time=HH:MM:SS Creation time\0A modify_date=YYYY-MM-DD Modification date\0A modify_time=HH:MM:SS Modification time\0A access_date=YYYY-MM-DD Access date\0A [+/~/=]AHRS Alter archive/hidden/read-only/system\0A\0AThe special value \22now\22 can be used for either dates or times.\0A\00"
define void @usage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([1596 x i8], [1596 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}