#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_luns    [--decode] [--help] [--hex] [--maxlen=LEN] [--quiet] "
          "[--raw]\n"
          "                  [--select=SR] [--verbose] [--version] DEVICE\n"
          "  where:\n"
          "    --decode|-d        decode all luns into component parts\n"
          "    --help|-h          print out usage message\n"
          "    --hex|-H           output in hexadecimal\n"
          "    --maxlen=LEN|-m LEN    max response length (allocation "
          "length in cdb)\n"
          "                           (def: 0 -> %d bytes)\n",
          (1024 * 8));
  fprintf(stderr, "    --quiet|-q         output only ASCII hex lun "
                  "values\n"
                  "    --raw|-r           output in binary\n"
                  "    --select=SR|-s SR    select report SR (def: 0)\n"
                  "                          0 -> luns apart from 'well "
                  "known' lus\n"
                  "                          1 -> only 'well known' "
                  "logical unit numbers\n"
                  "                          2 -> all luns\n"
                  "    --verbose|-v       increase verbosity\n"
                  "    --version|-V       print version string and exit\n\n"
                  "Performs a SCSI REPORT LUNS command\n");
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2ec5(%rip),%rax
mov    (%rax),%edi
lea    0xedc(%rip),%rsi
mov    $0x2000,%edx
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2ea9(%rip),%rax
mov    (%rax),%edi
lea    0x106a(%rip),%rsi
mov    $0x0,%al
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
mov    $0x2000,%edx
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0x1074(%rip),%rsi
xor    %eax,%eax
pop    %rbx
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [426 x i8] c"Usage: sg_luns [--decode] [--help] [--hex] [--maxlen=LEN] [--quiet] [--raw]\0A [--select=SR] [--verbose] [--version] DEVICE\0A where:\0A --decode|-d decode all luns into component parts\0A --help|-h print out usage message\0A --hex|-H output in hexadecimal\0A --maxlen=LEN|-m LEN max response length (allocation length in cdb)\0A (def: 0 -> %d bytes)\0A\00"
@.str.1 = [454 x i8] c" --quiet|-q output only ASCII hex lun values\0A --raw|-r output in binary\0A --select=SR|-s SR select report SR (def: 0)\0A 0 -> luns apart from 'well known' lus\0A 1 -> only 'well known' logical unit numbers\0A 2 -> all luns\0A --verbose|-v increase verbosity\0A --version|-V print version string and exit\0A\0APerforms a SCSI REPORT LUNS command\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 (i32, i8*, ...) @fprintf(i32 %1, i8* getelementptr inbounds ([426 x i8], [426 x i8]* @.str, i64 0, i64 0), i32 8192)
%3 = load i32, i32* @stderr
%4 = call i32 (i32, i8*, ...) @fprintf(i32 %3, i8* getelementptr inbounds ([454 x i8], [454 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [426 x i8] c"Usage: sg_luns [--decode] [--help] [--hex] [--maxlen=LEN] [--quiet] [--raw]\0A [--select=SR] [--verbose] [--version] DEVICE\0A where:\0A --decode|-d decode all luns into component parts\0A --help|-h print out usage message\0A --hex|-H output in hexadecimal\0A --maxlen=LEN|-m LEN max response length (allocation length in cdb)\0A (def: 0 -> %d bytes)\0A\00"
@.str.1 = [454 x i8] c" --quiet|-q output only ASCII hex lun values\0A --raw|-r output in binary\0A --select=SR|-s SR select report SR (def: 0)\0A 0 -> luns apart from 'well known' lus\0A 1 -> only 'well known' logical unit numbers\0A 2 -> all luns\0A --verbose|-v increase verbosity\0A --version|-V print version string and exit\0A\0APerforms a SCSI REPORT LUNS command\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 (i32, i8*, ...) @fprintf(i32 %1, i8* getelementptr inbounds ([426 x i8], [426 x i8]* @.str, i64 0, i64 0), i32 8192)
%3 = load i32, i32* @stderr
%4 = tail call i32 (i32, i8*, ...) @fprintf(i32 %3, i8* getelementptr inbounds ([454 x i8], [454 x i8]* @.str.1, i64 0, i64 0))
ret void
}