#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 paired_usage(int status, char *msg) {
  fprintf(stderr,
          "\nIf you have separate files for forward and reverse reads:\n");
  fprintf(stderr,
          "Usage: %s pe [options] -f <paired-end forward fastq file> -r "
          "<paired-end reverse fastq file> -t <quality type> -o <trimmed PE "
          "forward file> -p <trimmed PE reverse file> -s <trimmed singles "
          "file>\n\n",
          "sickle");
  fprintf(stderr,
          "If you have one file with interleaved forward and reverse reads:\n");
  fprintf(
      stderr,
      "Usage: %s pe [options] -c <interleaved input file> -t <quality type> -m "
      "<interleaved trimmed paired-end output> -s <trimmed singles file>\n\nIf "
      "you have one file with interleaved reads as input and you want ONLY one "
      "interleaved file as output:\nUsage: %s pe [options] -c <interleaved "
      "input file> -t <quality type> -M <interleaved trimmed output>\n\n",
      "sickle", "sickle");
  fprintf(
      stderr,
      "Options:\nPaired-end separated reads\n--------------------------\n-f, "
      "--pe-file1, Input paired-end forward fastq file (Input files must have "
      "same number of records)\n-r, --pe-file2, Input paired-end reverse fastq "
      "file\n-o, --output-pe1, Output trimmed forward fastq file\n-p, "
      "--output-pe2, Output trimmed reverse fastq file. Must use -s "
      "option.\n\nPaired-end interleaved "
      "reads\n----------------------------\n");
  fprintf(stderr,
          "-c, --pe-combo, Combined (interleaved) input paired-end fastq\n-m, "
          "--output-combo, Output combined (interleaved) paired-end fastq "
          "file. Must use -s option.\n-M, --output-combo-all, Output combined "
          "(interleaved) paired-end fastq file with any discarded read written "
          "to output file as a single N. Cannot be used with the -s "
          "option.\n\nGlobal options\n--------------\n-t, --qual-type, Type of "
          "quality values (solexa (CASAVA < 1.3), illumina (CASAVA 1.3 to "
          "1.7), sanger (which is CASAVA >= 1.8)) (required)\n");
  fprintf(stderr,
          "-s, --output-single, Output trimmed singles fastq file\n-q, "
          "--qual-threshold, Threshold for trimming based on average quality "
          "in a window. Default 20.\n-l, --length-threshold, Threshold to keep "
          "a read based on length after trimming. Default 20.\n-x, "
          "--no-fiveprime, Don't do five prime trimming.\n-n, --truncate-n, "
          "Truncate sequences at position of first N.\n");
  fprintf(stderr, "-g, --gzip-output, Output gzipped files.\n--quiet, do not "
                  "output trimming info\n--help, display this help and "
                  "exit\n--version, output version information and exit\n\n");
  if (msg)
    fprintf(stderr, "%s\n\n", msg);
  exit(status);
}


x86 assembly (clang, -O0):
<paired_usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    0x2eaa(%rip),%rax
mov    (%rax),%edi
lea    0xec1(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2e93(%rip),%rax
mov    (%rax),%edi
lea    0xee6(%rip),%rsi
lea    0xfa4(%rip),%rdx
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2e75(%rip),%rax
mov    (%rax),%edi
lea    0xf94(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2e5e(%rip),%rax
mov    (%rax),%edi
lea    0xfbf(%rip),%rsi
lea    0xf6f(%rip),%rcx
mov    %rcx,%rdx
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2e3d(%rip),%rax
mov    (%rax),%edi
lea    0x10f7(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2e26(%rip),%rax
mov    (%rax),%edi
lea    0x126f(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2e0f(%rip),%rax
mov    (%rax),%edi
lea    0x144a(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2df8(%rip),%rax
mov    (%rax),%edi
lea    0x1596(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
cmpq   $0x0,-0x10(%rbp)
je     121e <paired_usage+0xfe>
mov    0x2dd6(%rip),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rdx
lea    0x1612(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    -0x4(%rbp),%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<paired_usage>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %rsi,%r15
mov    %edi,%r14d
mov    0x2eac(%rip),%rbx
mov    (%rbx),%edi
lea    0xec3(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0xeef(%rip),%rsi
lea    0xfad(%rip),%rbp
mov    %rbp,%rdx
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0xfa1(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0xfd3(%rip),%rsi
mov    %rbp,%rdx
mov    %rbp,%rcx
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0x1116(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0x1295(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0x1477(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0x15ca(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
test   %r15,%r15
je     11dc <paired_usage+0xbc>
mov    (%rbx),%edi
lea    0x1657(%rip),%rsi
mov    %r15,%rdx
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    %r14d,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [60 x i8] c"\0AIf you have separate files for forward and reverse reads:\0A\00"
@.str.1 = [197 x i8] c"Usage: %s pe [options] -f <paired-end forward fastq file> -r <paired-end reverse fastq file> -t <quality type> -o <trimmed PE forward file> -p <trimmed PE reverse file> -s <trimmed singles file>\0A\0A\00"
@.str.2 = [7 x i8] c"sickle\00"
@.str.3 = [66 x i8] c"If you have one file with interleaved forward and reverse reads:\0A\00"
@.str.4 = [345 x i8] c"Usage: %s pe [options] -c <interleaved input file> -t <quality type> -m <interleaved trimmed paired-end output> -s <trimmed singles file>\0A\0AIf you have one file with interleaved reads as input and you want ONLY one interleaved file as output:\0AUsage: %s pe [options] -c <interleaved input file> -t <quality type> -M <interleaved trimmed output>\0A\0A\00"
@.str.5 = [399 x i8] c"Options:\0APaired-end separated reads\0A--------------------------\0A-f, --pe-file1, Input paired-end forward fastq file (Input files must have same number of records)\0A-r, --pe-file2, Input paired-end reverse fastq file\0A-o, --output-pe1, Output trimmed forward fastq file\0A-p, --output-pe2, Output trimmed reverse fastq file. Must use -s option.\0A\0APaired-end interleaved reads\0A----------------------------\0A\00"
@.str.6 = [498 x i8] c"-c, --pe-combo, Combined (interleaved) input paired-end fastq\0A-m, --output-combo, Output combined (interleaved) paired-end fastq file. Must use -s option.\0A-M, --output-combo-all, Output combined (interleaved) paired-end fastq file with any discarded read written to output file as a single N. Cannot be used with the -s option.\0A\0AGlobal options\0A--------------\0A-t, --qual-type, Type of quality values (solexa (CASAVA < 1.3), illumina (CASAVA 1.3 to 1.7), sanger (which is CASAVA >= 1.8)) (required)\0A\00"
@.str.7 = [355 x i8] c"-s, --output-single, Output trimmed singles fastq file\0A-q, --qual-threshold, Threshold for trimming based on average quality in a window. Default 20.\0A-l, --length-threshold, Threshold to keep a read based on length after trimming. Default 20.\0A-x, --no-fiveprime, Don't do five prime trimming.\0A-n, --truncate-n, Truncate sequences at position of first N.\0A\00"
@.str.8 = [162 x i8] c"-g, --gzip-output, Output gzipped files.\0A--quiet, do not output trimming info\0A--help, display this help and exit\0A--version, output version information and exit\0A\0A\00"
@.str.9 = [5 x i8] c"%s\0A\0A\00"
define void @paired_usage(i32 %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
store i32 %0, i32* %3
store i8* %1, i8** %4
%5 = load i32, i32* @stderr
%6 = call i32 (i32, i8*, ...) @fprintf(i32 %5, i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str, i64 0, i64 0))
%7 = load i32, i32* @stderr
%8 = call i32 (i32, i8*, ...) @fprintf(i32 %7, i8* getelementptr inbounds ([197 x i8], [197 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%9 = load i32, i32* @stderr
%10 = call i32 (i32, i8*, ...) @fprintf(i32 %9, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.3, i64 0, i64 0))
%11 = load i32, i32* @stderr
%12 = call i32 (i32, i8*, ...) @fprintf(i32 %11, i8* getelementptr inbounds ([345 x i8], [345 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%13 = load i32, i32* @stderr
%14 = call i32 (i32, i8*, ...) @fprintf(i32 %13, i8* getelementptr inbounds ([399 x i8], [399 x i8]* @.str.5, i64 0, i64 0))
%15 = load i32, i32* @stderr
%16 = call i32 (i32, i8*, ...) @fprintf(i32 %15, i8* getelementptr inbounds ([498 x i8], [498 x i8]* @.str.6, i64 0, i64 0))
%17 = load i32, i32* @stderr
%18 = call i32 (i32, i8*, ...) @fprintf(i32 %17, i8* getelementptr inbounds ([355 x i8], [355 x i8]* @.str.7, i64 0, i64 0))
%19 = load i32, i32* @stderr
%20 = call i32 (i32, i8*, ...) @fprintf(i32 %19, i8* getelementptr inbounds ([162 x i8], [162 x i8]* @.str.8, i64 0, i64 0))
%21 = load i8*, i8** %4
%22 = icmp ne i8* %21, null
br i1 %22, label %23, label %27
23: ; preds = %2
%24 = load i32, i32* @stderr
%25 = load i8*, i8** %4
%26 = call i32 (i32, i8*, ...) @fprintf(i32 %24, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i8* %25)
br label %27
27: ; preds = %23, %2
%28 = load i32, i32* %3
%29 = call i32 @exit(i32 %28)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [60 x i8] c"\0AIf you have separate files for forward and reverse reads:\0A\00"
@.str.1 = [197 x i8] c"Usage: %s pe [options] -f <paired-end forward fastq file> -r <paired-end reverse fastq file> -t <quality type> -o <trimmed PE forward file> -p <trimmed PE reverse file> -s <trimmed singles file>\0A\0A\00"
@.str.2 = [7 x i8] c"sickle\00"
@.str.3 = [66 x i8] c"If you have one file with interleaved forward and reverse reads:\0A\00"
@.str.4 = [345 x i8] c"Usage: %s pe [options] -c <interleaved input file> -t <quality type> -m <interleaved trimmed paired-end output> -s <trimmed singles file>\0A\0AIf you have one file with interleaved reads as input and you want ONLY one interleaved file as output:\0AUsage: %s pe [options] -c <interleaved input file> -t <quality type> -M <interleaved trimmed output>\0A\0A\00"
@.str.5 = [399 x i8] c"Options:\0APaired-end separated reads\0A--------------------------\0A-f, --pe-file1, Input paired-end forward fastq file (Input files must have same number of records)\0A-r, --pe-file2, Input paired-end reverse fastq file\0A-o, --output-pe1, Output trimmed forward fastq file\0A-p, --output-pe2, Output trimmed reverse fastq file. Must use -s option.\0A\0APaired-end interleaved reads\0A----------------------------\0A\00"
@.str.6 = [498 x i8] c"-c, --pe-combo, Combined (interleaved) input paired-end fastq\0A-m, --output-combo, Output combined (interleaved) paired-end fastq file. Must use -s option.\0A-M, --output-combo-all, Output combined (interleaved) paired-end fastq file with any discarded read written to output file as a single N. Cannot be used with the -s option.\0A\0AGlobal options\0A--------------\0A-t, --qual-type, Type of quality values (solexa (CASAVA < 1.3), illumina (CASAVA 1.3 to 1.7), sanger (which is CASAVA >= 1.8)) (required)\0A\00"
@.str.7 = [355 x i8] c"-s, --output-single, Output trimmed singles fastq file\0A-q, --qual-threshold, Threshold for trimming based on average quality in a window. Default 20.\0A-l, --length-threshold, Threshold to keep a read based on length after trimming. Default 20.\0A-x, --no-fiveprime, Don't do five prime trimming.\0A-n, --truncate-n, Truncate sequences at position of first N.\0A\00"
@.str.8 = [162 x i8] c"-g, --gzip-output, Output gzipped files.\0A--quiet, do not output trimming info\0A--help, display this help and exit\0A--version, output version information and exit\0A\0A\00"
@.str.9 = [5 x i8] c"%s\0A\0A\00"
define void @paired_usage(i32 %0, i8* %1) {
%3 = load i32, i32* @stderr
%4 = tail call i32 (i32, i8*, ...) @fprintf(i32 %3, i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str, i64 0, i64 0))
%5 = load i32, i32* @stderr
%6 = tail call i32 (i32, i8*, ...) @fprintf(i32 %5, i8* getelementptr inbounds ([197 x i8], [197 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%7 = load i32, i32* @stderr
%8 = tail call i32 (i32, i8*, ...) @fprintf(i32 %7, i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str.3, i64 0, i64 0))
%9 = load i32, i32* @stderr
%10 = tail call i32 (i32, i8*, ...) @fprintf(i32 %9, i8* getelementptr inbounds ([345 x i8], [345 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%11 = load i32, i32* @stderr
%12 = tail call i32 (i32, i8*, ...) @fprintf(i32 %11, i8* getelementptr inbounds ([399 x i8], [399 x i8]* @.str.5, i64 0, i64 0))
%13 = load i32, i32* @stderr
%14 = tail call i32 (i32, i8*, ...) @fprintf(i32 %13, i8* getelementptr inbounds ([498 x i8], [498 x i8]* @.str.6, i64 0, i64 0))
%15 = load i32, i32* @stderr
%16 = tail call i32 (i32, i8*, ...) @fprintf(i32 %15, i8* getelementptr inbounds ([355 x i8], [355 x i8]* @.str.7, i64 0, i64 0))
%17 = load i32, i32* @stderr
%18 = tail call i32 (i32, i8*, ...) @fprintf(i32 %17, i8* getelementptr inbounds ([162 x i8], [162 x i8]* @.str.8, i64 0, i64 0))
%19 = icmp eq i8* %1, null
br i1 %19, label %23, label %20
20: ; preds = %2
%21 = load i32, i32* @stderr
%22 = tail call i32 (i32, i8*, ...) @fprintf(i32 %21, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i8* %1)
br label %23
23: ; preds = %20, %2
%24 = tail call i32 @exit(i32 %0)
unreachable
}