#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*/ exit(int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ stderr;
void print_usage(void) {
  fprintf(
      stderr,
      "iowatcher usage:\n"
      "\t-d (--device): device for blktrace to trace\n"
      "\t-D (--blktrace-destination): destination for blktrace\n"
      "\t-t (--trace): trace file name (more than one allowed)\n"
      "\t-F (--fio-trace): fio bandwidth trace (more than one allowed)\n"
      "\t-l (--label): trace label in the graph\n"
      "\t-o (--output): output file name for the SVG image or video\n"
      "\t-p (--prog): run a program while blktrace is run\n"
      "\t-K (--keep-movie-svgs keep svgs generated for movie mode\n"
      "\t-m (--movie [=spindle|rect]): create IO animations\n"
      "\t-C (--codec): ffmpeg codec. Use ffmpeg -codecs to list\n"
      "\t-r (--rolling): number of seconds in the rolling averge\n"
      "\t-T (--title): graph title\n"
      "\t-N (--no-graph): skip a single graph (io, tput, latency, queue_depth, "
      "\n"
      "\t\t\tiops, cpu-sys, cpu-io, cpu-irq cpu-soft cpu-user)\n"
      "\t-O (--only-graph): add a single graph to the output\n"
      "\t-h (--height): set the height of each graph\n"
      "\t-w (--width): set the width of each graph\n"
      "\t-c (--columns): numbers of columns in graph output\n"
      "\t-x (--xzoom): limit processed time to min:max\n"
      "\t-y (--yzoom): limit processed sectors to min:max\n"
      "\t-a (--io-plot-action): plot given action (one of Q,D,C) in IO graph\n"
      "\t-P (--per-process-io): distinguish between processes in IO graph\n");
  exit(1);
}


x86 assembly (clang, -O0):
<print_usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2eb5(%rip),%rax
mov    (%rax),%edi
lea    0xecc(%rip),%rsi
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<print_usage>:
push   %rax
mov    0x2eb8(%rip),%rax
mov    (%rax),%edi
lea    0xecf(%rip),%rsi
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [1186 x i8] c"iowatcher usage:\0A\09-d (--device): device for blktrace to trace\0A\09-D (--blktrace-destination): destination for blktrace\0A\09-t (--trace): trace file name (more than one allowed)\0A\09-F (--fio-trace): fio bandwidth trace (more than one allowed)\0A\09-l (--label): trace label in the graph\0A\09-o (--output): output file name for the SVG image or video\0A\09-p (--prog): run a program while blktrace is run\0A\09-K (--keep-movie-svgs keep svgs generated for movie mode\0A\09-m (--movie [=spindle|rect]): create IO animations\0A\09-C (--codec): ffmpeg codec. Use ffmpeg -codecs to list\0A\09-r (--rolling): number of seconds in the rolling averge\0A\09-T (--title): graph title\0A\09-N (--no-graph): skip a single graph (io, tput, latency, queue_depth, \0A\09\09\09iops, cpu-sys, cpu-io, cpu-irq cpu-soft cpu-user)\0A\09-O (--only-graph): add a single graph to the output\0A\09-h (--height): set the height of each graph\0A\09-w (--width): set the width of each graph\0A\09-c (--columns): numbers of columns in graph output\0A\09-x (--xzoom): limit processed time to min:max\0A\09-y (--yzoom): limit processed sectors to min:max\0A\09-a (--io-plot-action): plot given action (one of Q,D,C) in IO graph\0A\09-P (--per-process-io): distinguish between processes in IO graph\0A\00"
define void @print_usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([1186 x i8], [1186 x i8]* @.str, i64 0, i64 0))
%3 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [1186 x i8] c"iowatcher usage:\0A\09-d (--device): device for blktrace to trace\0A\09-D (--blktrace-destination): destination for blktrace\0A\09-t (--trace): trace file name (more than one allowed)\0A\09-F (--fio-trace): fio bandwidth trace (more than one allowed)\0A\09-l (--label): trace label in the graph\0A\09-o (--output): output file name for the SVG image or video\0A\09-p (--prog): run a program while blktrace is run\0A\09-K (--keep-movie-svgs keep svgs generated for movie mode\0A\09-m (--movie [=spindle|rect]): create IO animations\0A\09-C (--codec): ffmpeg codec. Use ffmpeg -codecs to list\0A\09-r (--rolling): number of seconds in the rolling averge\0A\09-T (--title): graph title\0A\09-N (--no-graph): skip a single graph (io, tput, latency, queue_depth, \0A\09\09\09iops, cpu-sys, cpu-io, cpu-irq cpu-soft cpu-user)\0A\09-O (--only-graph): add a single graph to the output\0A\09-h (--height): set the height of each graph\0A\09-w (--width): set the width of each graph\0A\09-c (--columns): numbers of columns in graph output\0A\09-x (--xzoom): limit processed time to min:max\0A\09-y (--yzoom): limit processed sectors to min:max\0A\09-a (--io-plot-action): plot given action (one of Q,D,C) in IO graph\0A\09-P (--per-process-io): distinguish between processes in IO graph\0A\00"
define void @print_usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([1186 x i8], [1186 x i8]* @.str, i64 0, i64 0))
%3 = tail call i32 @exit(i32 1)
unreachable
}