#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() {
  fprintf(stderr,
          "Usage: "
          "sdparm [--all] [--clear=STR] [--command=CMD] [--dbd] "
          "[--defaults]\n"
          "              [--dummy] [--flexible] [--get=STR] [--help] "
          "[--hex] [--inquiry]\n"
          "              [--long] [--num-desc] [--page=PG[,SPG]] [--quiet] "
          "[--readonly]\n"
          "              [--save] [--set=STR] [--six] [--transport=TN] "
          "[--vendor=VN]\n"
          "              [--verbose] [--version] DEVICE [DEVICE...]\n\n"
          "       sdparm --enumerate [--all] [--inquiry] [--long] "
          "[--page=PG[,SPG]]\n"
          "              [--transport=TN] [--vendor=VN]\n"
          "  where:\n"
          "    --all | -a            list all known fields for given "
          "device\n"
          "    --clear=STR | -c STR    clear (zero) field value(s)\n"
          "    --command=CMD | -C CMD    perform CMD (e.g. 'eject')\n"
          "    --dbd | -B            set DBD bit in mode sense cdb\n"
          "    --defaults | -D       set a mode page to its default "
          "values\n"
          "    --dummy | -d          don't write back modified mode page\n"
          "    --enumerate | -e      list known pages and fields "
          "(ignore device)\n"
          "    --flexible | -f       compensate for common errors, "
          "relax some checks\n"
          "    --get=STR | -g STR    get (fetch) field value(s)\n"
          "    --help | -h           print out usage message\n"
          "    --hex | -H            output in hex rather than name/value "
          "pairs\n"
          "    --inquiry | -i        output INQUIRY VPD page(s) (def: mode "
          "page(s))\n"
          "                          use --page=PG for VPD number (-1 "
          "for std inq)\n"
          "    --long | -l           add description to field output\n"
          "    --num-desc | -n       report number of mode page "
          "descriptors\n"
          "    --page=PG[,SPG] | -p PG[,SPG]    page (and optionally "
          "subpage) number\n"
          "                          [or abbrev] to output, change or "
          "enumerate\n"
          "    --quiet | -q          suppress device vendor/product/"
          "revision string line\n"
          "    --readonly | -r       force read-only open of DEVICE (def: "
          "depends\n"
          "                          on operation). Mainly for ATA disks\n"
          "    --save | -S           place mode changes in saved page as "
          "well\n"
          "    --set=STR | -s STR    set field value(s)\n"
          "    --six | -6            use 6 byte SCSI mode cdbs (def: 10 "
          "byte)\n"
          "    --transport=TN | -t TN    transport protocol number "
          "[or abbrev]\n"
          "    --vendor=VN | -M VN    vendor (manufacturer) number "
          "[or abbrev]\n"
          "    --verbose | -v        increase verbosity\n"
          "    --version | -V        print version string and exit\n"
          "\nView or change SCSI mode page fields (e.g. of a disk or CD/DVD "
          "drive).\nSTR can be <acronym>[=val] or <start_byte>:<start_bit>:"
          "<num_bits>[=val].\n");
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2ec5(%rip),%rax
mov    (%rax),%edi
lea    0xedc(%rip),%rsi
call   1030 <fprintf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
mov    0x2ec9(%rip),%rax
mov    (%rax),%edi
lea    0xee0(%rip),%rsi
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [2347 x i8] c"Usage: sdparm [--all] [--clear=STR] [--command=CMD] [--dbd] [--defaults]\0A [--dummy] [--flexible] [--get=STR] [--help] [--hex] [--inquiry]\0A [--long] [--num-desc] [--page=PG[,SPG]] [--quiet] [--readonly]\0A [--save] [--set=STR] [--six] [--transport=TN] [--vendor=VN]\0A [--verbose] [--version] DEVICE [DEVICE...]\0A\0A sdparm --enumerate [--all] [--inquiry] [--long] [--page=PG[,SPG]]\0A [--transport=TN] [--vendor=VN]\0A where:\0A --all | -a list all known fields for given device\0A --clear=STR | -c STR clear (zero) field value(s)\0A --command=CMD | -C CMD perform CMD (e.g. 'eject')\0A --dbd | -B set DBD bit in mode sense cdb\0A --defaults | -D set a mode page to its default values\0A --dummy | -d don't write back modified mode page\0A --enumerate | -e list known pages and fields (ignore device)\0A --flexible | -f compensate for common errors, relax some checks\0A --get=STR | -g STR get (fetch) field value(s)\0A --help | -h print out usage message\0A --hex | -H output in hex rather than name/value pairs\0A --inquiry | -i output INQUIRY VPD page(s) (def: mode page(s))\0A use --page=PG for VPD number (-1 for std inq)\0A --long | -l add description to field output\0A --num-desc | -n report number of mode page descriptors\0A --page=PG[,SPG] | -p PG[,SPG] page (and optionally subpage) number\0A [or abbrev] to output, change or enumerate\0A --quiet | -q suppress device vendor/product/revision string line\0A --readonly | -r force read-only open of DEVICE (def: depends\0A on operation). Mainly for ATA disks\0A --save | -S place mode changes in saved page as well\0A --set=STR | -s STR set field value(s)\0A --six | -6 use 6 byte SCSI mode cdbs (def: 10 byte)\0A --transport=TN | -t TN transport protocol number [or abbrev]\0A --vendor=VN | -M VN vendor (manufacturer) number [or abbrev]\0A --verbose | -v increase verbosity\0A --version | -V print version string and exit\0A\0AView or change SCSI mode page fields (e.g. of a disk or CD/DVD drive).\0ASTR can be <acronym>[=val] or <start_byte>:<start_bit>:<num_bits>[=val].\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([2347 x i8], [2347 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [2347 x i8] c"Usage: sdparm [--all] [--clear=STR] [--command=CMD] [--dbd] [--defaults]\0A [--dummy] [--flexible] [--get=STR] [--help] [--hex] [--inquiry]\0A [--long] [--num-desc] [--page=PG[,SPG]] [--quiet] [--readonly]\0A [--save] [--set=STR] [--six] [--transport=TN] [--vendor=VN]\0A [--verbose] [--version] DEVICE [DEVICE...]\0A\0A sdparm --enumerate [--all] [--inquiry] [--long] [--page=PG[,SPG]]\0A [--transport=TN] [--vendor=VN]\0A where:\0A --all | -a list all known fields for given device\0A --clear=STR | -c STR clear (zero) field value(s)\0A --command=CMD | -C CMD perform CMD (e.g. 'eject')\0A --dbd | -B set DBD bit in mode sense cdb\0A --defaults | -D set a mode page to its default values\0A --dummy | -d don't write back modified mode page\0A --enumerate | -e list known pages and fields (ignore device)\0A --flexible | -f compensate for common errors, relax some checks\0A --get=STR | -g STR get (fetch) field value(s)\0A --help | -h print out usage message\0A --hex | -H output in hex rather than name/value pairs\0A --inquiry | -i output INQUIRY VPD page(s) (def: mode page(s))\0A use --page=PG for VPD number (-1 for std inq)\0A --long | -l add description to field output\0A --num-desc | -n report number of mode page descriptors\0A --page=PG[,SPG] | -p PG[,SPG] page (and optionally subpage) number\0A [or abbrev] to output, change or enumerate\0A --quiet | -q suppress device vendor/product/revision string line\0A --readonly | -r force read-only open of DEVICE (def: depends\0A on operation). Mainly for ATA disks\0A --save | -S place mode changes in saved page as well\0A --set=STR | -s STR set field value(s)\0A --six | -6 use 6 byte SCSI mode cdbs (def: 10 byte)\0A --transport=TN | -t TN transport protocol number [or abbrev]\0A --vendor=VN | -M VN vendor (manufacturer) number [or abbrev]\0A --verbose | -v increase verbosity\0A --version | -V print version string and exit\0A\0AView or change SCSI mode page fields (e.g. of a disk or CD/DVD drive).\0ASTR can be <acronym>[=val] or <start_byte>:<start_bit>:<num_bits>[=val].\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([2347 x i8], [2347 x i8]* @.str, i64 0, i64 0))
ret void
}