#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 *);
void usage_old() {
  printf("Usage:  sg_modes [-a] [-A] [-c=PC] [-d] [-D] [-e] [-f] [-h] "
         "[-H] [-l] [-L]\n"
         "                 [-m=LEN] [-p=PG[,SPG]] [-r] [-subp=SPG] [-v] "
         "[-V] [-6]\n"
         "                 [DEVICE]\n"
         " where:\n"
         "   -a    get all mode pages supported by device\n"
         "   -A    get all mode pages and subpages supported by device\n"
         "   -c=PC    page control (def: 0 [current],"
         " 1 [changeable],\n"
         "                               2 [default], 3 [saved])\n"
         "   -d    disable block descriptors (DBD field in cdb)\n"
         "   -D    disable block descriptor output\n"
         "   -e    examine pages # 0 through to 0x3e, note if found\n"
         "   -f    be flexible, cope with MODE SENSE 6/10 response "
         "mixup\n");
  printf("   -h    output page number and header in hex\n"
         "   -H    output page number and header in hex (same as '-h')\n"
         "   -l    list common page codes for device peripheral type,\n"
         "         if no device given then assume disk type\n"
         "   -L    set Long LBA Accepted (LLBAA field in mode sense "
         "10 cdb)\n"
         "   -m=LEN    max response length (allocation length in cdb)\n"
         "             (def: 0 -> 4096 or 252 (for MODE SENSE 6) bytes)\n"
         "   -p=PG     page code in hex (def: 3f)\n"
         "   -p=PG,SPG    both in hex, (defs: 3f,0)\n"
         "   -r    mode page output to stdout, a byte per line in "
         "ASCII hex\n"
         "   -subp=SPG    sub page code in hex (def: 0)\n"
         "   -v    verbose\n"
         "   -V    output version string\n"
         "   -6    Use MODE SENSE(6), by default uses MODE SENSE(10)\n"
         "   -?    output this usage message\n\n"
         "Performs a SCSI MODE SENSE (10 or 6) command\n");
}


x86 assembly (clang, -O0):
<usage_old>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
lea    0x1147(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage_old>:
push   %rax
lea    0xee8(%rip),%rdi
call   1030 <puts@plt>
lea    0x1149(%rip),%rdi
pop    %rax
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [622 x i8] c"Usage: sg_modes [-a] [-A] [-c=PC] [-d] [-D] [-e] [-f] [-h] [-H] [-l] [-L]\0A [-m=LEN] [-p=PG[,SPG]] [-r] [-subp=SPG] [-v] [-V] [-6]\0A [DEVICE]\0A where:\0A -a get all mode pages supported by device\0A -A get all mode pages and subpages supported by device\0A -c=PC page control (def: 0 [current], 1 [changeable],\0A 2 [default], 3 [saved])\0A -d disable block descriptors (DBD field in cdb)\0A -D disable block descriptor output\0A -e examine pages # 0 through to 0x3e, note if found\0A -f be flexible, cope with MODE SENSE 6/10 response mixup\0A\00"
@.str.1 = [788 x i8] c" -h output page number and header in hex\0A -H output page number and header in hex (same as '-h')\0A -l list common page codes for device peripheral type,\0A if no device given then assume disk type\0A -L set Long LBA Accepted (LLBAA field in mode sense 10 cdb)\0A -m=LEN max response length (allocation length in cdb)\0A (def: 0 -> 4096 or 252 (for MODE SENSE 6) bytes)\0A -p=PG page code in hex (def: 3f)\0A -p=PG,SPG both in hex, (defs: 3f,0)\0A -r mode page output to stdout, a byte per line in ASCII hex\0A -subp=SPG sub page code in hex (def: 0)\0A -v verbose\0A -V output version string\0A -6 Use MODE SENSE(6), by default uses MODE SENSE(10)\0A -? output this usage message\0A\0APerforms a SCSI MODE SENSE (10 or 6) command\0A\00"
define void @usage_old() {
%1 = call i32 @printf(i8* getelementptr inbounds ([622 x i8], [622 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([788 x i8], [788 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [621 x i8] c"Usage: sg_modes [-a] [-A] [-c=PC] [-d] [-D] [-e] [-f] [-h] [-H] [-l] [-L]\0A [-m=LEN] [-p=PG[,SPG]] [-r] [-subp=SPG] [-v] [-V] [-6]\0A [DEVICE]\0A where:\0A -a get all mode pages supported by device\0A -A get all mode pages and subpages supported by device\0A -c=PC page control (def: 0 [current], 1 [changeable],\0A 2 [default], 3 [saved])\0A -d disable block descriptors (DBD field in cdb)\0A -D disable block descriptor output\0A -e examine pages # 0 through to 0x3e, note if found\0A -f be flexible, cope with MODE SENSE 6/10 response mixup\00"
@str.2 = [787 x i8] c" -h output page number and header in hex\0A -H output page number and header in hex (same as '-h')\0A -l list common page codes for device peripheral type,\0A if no device given then assume disk type\0A -L set Long LBA Accepted (LLBAA field in mode sense 10 cdb)\0A -m=LEN max response length (allocation length in cdb)\0A (def: 0 -> 4096 or 252 (for MODE SENSE 6) bytes)\0A -p=PG page code in hex (def: 3f)\0A -p=PG,SPG both in hex, (defs: 3f,0)\0A -r mode page output to stdout, a byte per line in ASCII hex\0A -subp=SPG sub page code in hex (def: 0)\0A -v verbose\0A -V output version string\0A -6 Use MODE SENSE(6), by default uses MODE SENSE(10)\0A -? output this usage message\0A\0APerforms a SCSI MODE SENSE (10 or 6) command\00"
define void @usage_old() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([621 x i8], [621 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([787 x i8], [787 x i8]* @str.2, i64 0, i64 0))
ret void
}