#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 *, char const *);
void print_usage(const char *name) {
  printf("Usage: %s [-h] [-V] [-s [-c][-l]] [-v] [-f <path.pg2>]"
         " [<scsi_enclosure>]\n"
         "\n\t-h: print this help message\n"
         "\t-s: generate serviceable events for any failures and\n"
         "\t      write events to the servicelog\n"
         "\t-c: compare with previous status; report only new failures\n"
         "\t-d: collect disk health information\n"
         "\t-l: turn on fault LEDs for serviceable events\n"
         "\t-v: verbose output\n"
         "\t-V: print the version of the command and exit\n"
         "\t-f: for testing, read SES data from path.pg2 and VPD\n"
         "\t      from path.vpd\n"
         "\t<scsi_enclosure>: the sg device on which to operate, such\n"
         "\t                    as sg7; if not specified, all such\n"
         "\t                    devices will be diagnosed\n",
         name);
}


x86 assembly (clang, -O0):
<print_usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_usage>:
mov    %rdi,%rsi
lea    0xee6(%rip),%rdi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [645 x i8] c"Usage: %s [-h] [-V] [-s [-c][-l]] [-v] [-f <path.pg2>] [<scsi_enclosure>]\0A\0A\09-h: print this help message\0A\09-s: generate serviceable events for any failures and\0A\09 write events to the servicelog\0A\09-c: compare with previous status; report only new failures\0A\09-d: collect disk health information\0A\09-l: turn on fault LEDs for serviceable events\0A\09-v: verbose output\0A\09-V: print the version of the command and exit\0A\09-f: for testing, read SES data from path.pg2 and VPD\0A\09 from path.vpd\0A\09<scsi_enclosure>: the sg device on which to operate, such\0A\09 as sg7; if not specified, all such\0A\09 devices will be diagnosed\0A\00"
define void @print_usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([645 x i8], [645 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [645 x i8] c"Usage: %s [-h] [-V] [-s [-c][-l]] [-v] [-f <path.pg2>] [<scsi_enclosure>]\0A\0A\09-h: print this help message\0A\09-s: generate serviceable events for any failures and\0A\09 write events to the servicelog\0A\09-c: compare with previous status; report only new failures\0A\09-d: collect disk health information\0A\09-l: turn on fault LEDs for serviceable events\0A\09-v: verbose output\0A\09-V: print the version of the command and exit\0A\09-f: for testing, read SES data from path.pg2 and VPD\0A\09 from path.vpd\0A\09<scsi_enclosure>: the sg device on which to operate, such\0A\09 as sg7; if not specified, all such\0A\09 devices will be diagnosed\0A\00"
define void @print_usage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([645 x i8], [645 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}