#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: sg_vpd  [--enumerate] [--help] [--hex] [--ident] "
                  "[--long]\n"
                  "               [--maxlen=LEN] [--page=PG] [--quiet] [--raw] "
                  "[--verbose]\n"
                  "               [--version] DEVICE\n");
  fprintf(stderr, "  where:\n"
                  "    --enumerate|-e    enumerate known VPD pages names then "
                  "exit\n"
                  "    --help|-h       output this usage message then exit\n"
                  "    --hex|-H        output page in ASCII hexadecimal\n"
                  "    --ident|-i      output device identification VPD page, "
                  "twice for\n"
                  "                    short logical unit designator (equiv: "
                  "'-qp di_lu')\n"
                  "    --long|-l       perform extra decoding\n"
                  "    --maxlen=LEN|-m LEN    max response length (allocation "
                  "length in cdb)\n"
                  "                           (def: 0 -> 252 bytes)\n"
                  "    --page=PG|-p PG    fetch VPD page where PG is an "
                  "acronym, or a decimal\n"
                  "                       number unless hex indicator "
                  "is given (e.g. '0x83')\n"
                  "    --quiet|-q      suppress some output when decoding\n"
                  "    --raw|-r        output page in binary\n"
                  "    --verbose|-v    increase verbosity\n"
                  "    --version|-V    print version string and exit\n\n"
                  "Fetch Vital Product Data (VPD) page using SCSI INQUIRY\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>
mov    0x2eb0(%rip),%rax
mov    (%rax),%edi
lea    0xf73(%rip),%rsi
call   1030 <fprintf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rbx
mov    0x2ec8(%rip),%rbx
mov    (%rbx),%edi
lea    0xedf(%rip),%rsi
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0xf7d(%rip),%rsi
pop    %rbx
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [172 x i8] c"Usage: sg_vpd [--enumerate] [--help] [--hex] [--ident] [--long]\0A [--maxlen=LEN] [--page=PG] [--quiet] [--raw] [--verbose]\0A [--version] DEVICE\0A\00"
@.str.1 = [880 x i8] c" where:\0A --enumerate|-e enumerate known VPD pages names then exit\0A --help|-h output this usage message then exit\0A --hex|-H output page in ASCII hexadecimal\0A --ident|-i output device identification VPD page, twice for\0A short logical unit designator (equiv: '-qp di_lu')\0A --long|-l perform extra decoding\0A --maxlen=LEN|-m LEN max response length (allocation length in cdb)\0A (def: 0 -> 252 bytes)\0A --page=PG|-p PG fetch VPD page where PG is an acronym, or a decimal\0A number unless hex indicator is given (e.g. '0x83')\0A --quiet|-q suppress some output when decoding\0A --raw|-r output page in binary\0A --verbose|-v increase verbosity\0A --version|-V print version string and exit\0A\0AFetch Vital Product Data (VPD) page using SCSI INQUIRY\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([172 x i8], [172 x i8]* @.str, i64 0, i64 0))
%3 = load i32, i32* @stderr
%4 = call i32 @fprintf(i32 %3, i8* getelementptr inbounds ([880 x i8], [880 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [172 x i8] c"Usage: sg_vpd [--enumerate] [--help] [--hex] [--ident] [--long]\0A [--maxlen=LEN] [--page=PG] [--quiet] [--raw] [--verbose]\0A [--version] DEVICE\0A\00"
@.str.1 = [880 x i8] c" where:\0A --enumerate|-e enumerate known VPD pages names then exit\0A --help|-h output this usage message then exit\0A --hex|-H output page in ASCII hexadecimal\0A --ident|-i output device identification VPD page, twice for\0A short logical unit designator (equiv: '-qp di_lu')\0A --long|-l perform extra decoding\0A --maxlen=LEN|-m LEN max response length (allocation length in cdb)\0A (def: 0 -> 252 bytes)\0A --page=PG|-p PG fetch VPD page where PG is an acronym, or a decimal\0A number unless hex indicator is given (e.g. '0x83')\0A --quiet|-q suppress some output when decoding\0A --raw|-r output page in binary\0A --verbose|-v increase verbosity\0A --version|-V print version string and exit\0A\0AFetch Vital Product Data (VPD) page using SCSI INQUIRY\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([172 x i8], [172 x i8]* @.str, i64 0, i64 0))
%3 = load i32, i32* @stderr
%4 = tail call i32 @fprintf(i32 %3, i8* getelementptr inbounds ([880 x i8], [880 x i8]* @.str.1, i64 0, i64 0))
ret void
}