#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 *, char *);
int /*<<< orphan*/ stdout;
void usage(void) {
  fprintf(
      stdout, "usage: %s",
      "fsx [-dnqLOW] [-b opnum] [-c Prob] [-l flen] [-m "
      "start:end] [-o oplen] [-p progressinterval] [-r readbdy] [-s style] [-t "
      "truncbdy] [-w writebdy] [-D startingop] [-N numops] [-P dirpath] [-S "
      "seed] "
      "[ -I random|rotate ] fname [additional paths to fname..]\n"
      "	-b opnum: beginning operation number (default 1)\n"
      "	-c P: 1 in P chance of file close+open at each op (default infinity)\n"
      "	-d: debug output for all operations [-d -d = more debugging]\n"
      "	-l flen: the upper bound on file size (default 262144)\n"
      "	-m startop:endop: monitor (print debug output) specified byte rang"
      "(default 0:infinity)\n"
      "	-n: no verifications of file size\n"
      "	-o oplen: the upper bound on operation size (default 65536)\n"
      "	-p progressinterval: debug output at specified operation interval\n"
      "	-q: quieter operation\n"
      "	-r readbdy: 4096 would make reads page aligned (default 1)\n"
      "	-s style: 1 gives smaller truncates (default 0)\n"
      "	-t truncbdy: 4096 would make truncates page aligned (default 1)\n"
      "	-w writebdy: 4096 would make writes page aligned (default 1)\n"
      "	-D startingop: debug output starting at specified operation\n"
      "	-L: fsxLite - no file creations & no file size changes\n"
      "	-N numops: total # operations to do (default infinity)\n"
      "	-O: use oplen (see -o flag) for every op (default random)\n"
      "	-P: save .fsxlog and .fsxgood files in dirpath (default ./)\n"
      "	-S seed: for random # generator (default 1) 0 gets timestamp\n"
      "	-W: mapped write operations DISabled\n"
      "        -R: read() system calls only (mapped reads disabled)\n"
      "	-I: When multiple paths to the file are given each operation uses"
      "           a different path.  Iterate through them in order with "
      "'rotate'"
      "           or chose then at 'random'.  (defaults to random)\n"
      "	fname: this filename is REQUIRED (no default)\n");
  exit(90);
}


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

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

LLVM IR (-O0):
@stdout = global i32 0
@.str = [10 x i8] c"usage: %s\00"
@.str.1 = [1702 x i8] c"fsx [-dnqLOW] [-b opnum] [-c Prob] [-l flen] [-m start:end] [-o oplen] [-p progressinterval] [-r readbdy] [-s style] [-t truncbdy] [-w writebdy] [-D startingop] [-N numops] [-P dirpath] [-S seed] [ -I random|rotate ] fname [additional paths to fname..]\0A\09-b opnum: beginning operation number (default 1)\0A\09-c P: 1 in P chance of file close+open at each op (default infinity)\0A\09-d: debug output for all operations [-d -d = more debugging]\0A\09-l flen: the upper bound on file size (default 262144)\0A\09-m startop:endop: monitor (print debug output) specified byte rang(default 0:infinity)\0A\09-n: no verifications of file size\0A\09-o oplen: the upper bound on operation size (default 65536)\0A\09-p progressinterval: debug output at specified operation interval\0A\09-q: quieter operation\0A\09-r readbdy: 4096 would make reads page aligned (default 1)\0A\09-s style: 1 gives smaller truncates (default 0)\0A\09-t truncbdy: 4096 would make truncates page aligned (default 1)\0A\09-w writebdy: 4096 would make writes page aligned (default 1)\0A\09-D startingop: debug output starting at specified operation\0A\09-L: fsxLite - no file creations & no file size changes\0A\09-N numops: total # operations to do (default infinity)\0A\09-O: use oplen (see -o flag) for every op (default random)\0A\09-P: save .fsxlog and .fsxgood files in dirpath (default ./)\0A\09-S seed: for random # generator (default 1) 0 gets timestamp\0A\09-W: mapped write operations DISabled\0A -R: read() system calls only (mapped reads disabled)\0A\09-I: When multiple paths to the file are given each operation uses a different path. Iterate through them in order with 'rotate' or chose then at 'random'. (defaults to random)\0A\09fname: this filename is REQUIRED (no default)\0A\00"
define void @usage() {
%1 = load i32, i32* @stdout
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([1702 x i8], [1702 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @exit(i32 90)
unreachable
}

LLVM IR (-O2):
@stdout = global i32 0
@.str = [10 x i8] c"usage: %s\00"
@.str.1 = [1702 x i8] c"fsx [-dnqLOW] [-b opnum] [-c Prob] [-l flen] [-m start:end] [-o oplen] [-p progressinterval] [-r readbdy] [-s style] [-t truncbdy] [-w writebdy] [-D startingop] [-N numops] [-P dirpath] [-S seed] [ -I random|rotate ] fname [additional paths to fname..]\0A\09-b opnum: beginning operation number (default 1)\0A\09-c P: 1 in P chance of file close+open at each op (default infinity)\0A\09-d: debug output for all operations [-d -d = more debugging]\0A\09-l flen: the upper bound on file size (default 262144)\0A\09-m startop:endop: monitor (print debug output) specified byte rang(default 0:infinity)\0A\09-n: no verifications of file size\0A\09-o oplen: the upper bound on operation size (default 65536)\0A\09-p progressinterval: debug output at specified operation interval\0A\09-q: quieter operation\0A\09-r readbdy: 4096 would make reads page aligned (default 1)\0A\09-s style: 1 gives smaller truncates (default 0)\0A\09-t truncbdy: 4096 would make truncates page aligned (default 1)\0A\09-w writebdy: 4096 would make writes page aligned (default 1)\0A\09-D startingop: debug output starting at specified operation\0A\09-L: fsxLite - no file creations & no file size changes\0A\09-N numops: total # operations to do (default infinity)\0A\09-O: use oplen (see -o flag) for every op (default random)\0A\09-P: save .fsxlog and .fsxgood files in dirpath (default ./)\0A\09-S seed: for random # generator (default 1) 0 gets timestamp\0A\09-W: mapped write operations DISabled\0A -R: read() system calls only (mapped reads disabled)\0A\09-I: When multiple paths to the file are given each operation uses a different path. Iterate through them in order with 'rotate' or chose then at 'random'. (defaults to random)\0A\09fname: this filename is REQUIRED (no default)\0A\00"
define void @usage() {
%1 = load i32, i32* @stdout
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([1702 x i8], [1702 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @exit(i32 90)
unreachable
}