#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_opcodes [--alpha] [--help] [--hex] "
          "[--opcode=OP[,SA]] [--raw]\n"
          "                   [--rctd] [--sa=SA] [--tmf] [--unsorted] "
          "[--verbose]\n"
          "                   [--version] DEVICE\n"
          "  where:\n"
          "    --alpha|-a      output list of operation codes sorted "
          "alphabetically\n"
          "    --help|-h       print usage message then exit\n"
          "    --hex|-H        output response in hex\n"
          "    --opcode=OP|-o OP    first byte of command to query\n"
          "                         (decimal, prefix with '0x' for hex)\n"
          "    --opcode=OP,SA|-o OP,SA    opcode (OP) and service action "
          "(SA)\n"
          "                         (decimal, each prefix with '0x' for "
          "hex)\n"
          "    --raw|-r        output response in binary to stdout\n"
          "    --rctd|-R       set RCTD (return command timeout "
          "descriptor) bit\n"
          "    --sa=SA|-s SA    service action in addition to opcode\n"
          "                     (decimal, prefix with '0x' for hex)\n"
          "    --tmf|-t        output list of supported task management "
          "functions\n"
          "    --unsorted|-u    output list of operation codes as is\n"
          "                     (def: sort by opcode (then service "
          "action))\n"
          "    --verbose|-v    increase verbosity\n"
          "    --version|-V    print version string then exit\n\n"
          "Performs a SCSI REPORT SUPPORTED OPERATION CODES or REPORT "
          "SUPPORTED\nTASK MANAGEMENT FUNCTIONS command\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 = [1236 x i8] c"Usage: sg_opcodes [--alpha] [--help] [--hex] [--opcode=OP[,SA]] [--raw]\0A [--rctd] [--sa=SA] [--tmf] [--unsorted] [--verbose]\0A [--version] DEVICE\0A where:\0A --alpha|-a output list of operation codes sorted alphabetically\0A --help|-h print usage message then exit\0A --hex|-H output response in hex\0A --opcode=OP|-o OP first byte of command to query\0A (decimal, prefix with '0x' for hex)\0A --opcode=OP,SA|-o OP,SA opcode (OP) and service action (SA)\0A (decimal, each prefix with '0x' for hex)\0A --raw|-r output response in binary to stdout\0A --rctd|-R set RCTD (return command timeout descriptor) bit\0A --sa=SA|-s SA service action in addition to opcode\0A (decimal, prefix with '0x' for hex)\0A --tmf|-t output list of supported task management functions\0A --unsorted|-u output list of operation codes as is\0A (def: sort by opcode (then service action))\0A --verbose|-v increase verbosity\0A --version|-V print version string then exit\0A\0APerforms a SCSI REPORT SUPPORTED OPERATION CODES or REPORT SUPPORTED\0ATASK MANAGEMENT FUNCTIONS command\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([1236 x i8], [1236 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [1236 x i8] c"Usage: sg_opcodes [--alpha] [--help] [--hex] [--opcode=OP[,SA]] [--raw]\0A [--rctd] [--sa=SA] [--tmf] [--unsorted] [--verbose]\0A [--version] DEVICE\0A where:\0A --alpha|-a output list of operation codes sorted alphabetically\0A --help|-h print usage message then exit\0A --hex|-H output response in hex\0A --opcode=OP|-o OP first byte of command to query\0A (decimal, prefix with '0x' for hex)\0A --opcode=OP,SA|-o OP,SA opcode (OP) and service action (SA)\0A (decimal, each prefix with '0x' for hex)\0A --raw|-r output response in binary to stdout\0A --rctd|-R set RCTD (return command timeout descriptor) bit\0A --sa=SA|-s SA service action in addition to opcode\0A (decimal, prefix with '0x' for hex)\0A --tmf|-t output list of supported task management functions\0A --unsorted|-u output list of operation codes as is\0A (def: sort by opcode (then service action))\0A --verbose|-v increase verbosity\0A --version|-V print version string then exit\0A\0APerforms a SCSI REPORT SUPPORTED OPERATION CODES or REPORT SUPPORTED\0ATASK MANAGEMENT FUNCTIONS command\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([1236 x i8], [1236 x i8]* @.str, i64 0, i64 0))
ret void
}