#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 printusage(char *program) {
  printf("Usage : %s <options> -x fastafile outdir outprefix "
         "alignmentfile|alignmentfilelist\n",
         program);
  printf("Usage2 : %s <options> -I rshfile outdir outprefix "
         "alignmentfile|alignmentfilelist\n",
         program);
  printf("Usage3 : bowtie command | %s <options> [-x fastafile][-I rshfile] "
         "outdir outprefix\n\n",
         program);
  printf("\tex : %s -p 4 -h R -x human.rna.fna RNAseq sample22 "
         "sample22.bowtieout\n",
         program);
  printf("\tex2 : %s -p 4 -B --PE -R -x human.rna.fna RNAseq sample22 "
         "sample22.BAM\n",
         program);
  printf("\tex3: %s -M -p 16 -B -I human.rna.rsh RNAseq samples "
         "samples.BAMlist   ## BAM list file with -M and -B options\n",
         program);
  printf("\tex4 : bowtie -v 2 -a -m 100 -p 4 human.rna sample22.fastq | %s "
         "human.rna.fna RNAseq sample22\n\n",
         program);
  printf("\tInput files\n\n");
  printf(
      "\t  *Either a fasta file (-x) or an rsh file (-I) must be provided.\n");
  printf(
      "\t   fasta file : A transcriptome sequence library file in fasta "
      "format. The header can either be in Refseq format('>xx|xx|xx|name|xx') "
      "in which name or xx does not contain '|' letter, or in Ensembl format "
      "'>name' or '>name xx' in which name does not contain whitespace(space "
      "or tab) and xx is separated by whitespace from the name. Name must be a "
      "unique identifier of a sequence.\n");
  printf("\t   rsh file : This file can be constructed by using -R option "
         "combined with -x fasta file. Once it is constructed, it can be used "
         "for other RNA-seq samples with the same read length for speedy "
         "calculation.\n\n");
  printf("\t  *Either an alignment file or a file listing alignment files must "
         "be provided.\n");
  printf("\t   alignmentfile : either a default bowtie output format "
         "(bowtieoutfile) or SAM/BAM format. SAM and BAM files must be used "
         "with -S and -B options, respectively. The SAM/BAM file should be "
         "either produced with the default sorting by bowtie or sorted by "
         "qname. We strongly recommend that bowtie is run with options -a -v 2 "
         "-m 100, without --best or --strata, without allowing any indels, for "
         "best results with EMSAR. The bowtie/SAM/BAM files can be streamed "
         "directly to EMSAR through a pipe. If mismatches were allowed, it is "
         "highly recommended that the SAM/BAM files contain the auxiliary MD "
         "flags that contains the match/mismatch information. Bowtie by "
         "default produces SAM/BAM files with the MD field.\n");
  printf("\t   alignmentfilelist : a text file containing one alignment file "
         "name per line. The alignment files can be one of the formats "
         "specified above. When a list file is used, -M (--multisample) option "
         "must be used along with the -B, -S options. All the files must be of "
         "the same read length and library type. Paired and single-end samples "
         "cannot be combined.\n\n");
  printf("\tOptions\n");
  printf("\t  -M, --multisample : multisample (default : single sample). When "
         "this option is used, a file containing a list of alignment files "
         "must be specified as input instead of an alignment file. The "
         "resulting expression values may be slightly different between "
         "multi-sample and single-sample runs, because a pooled fragment "
         "length distribution is used for a multi-sample run.\n");
  printf("\t  -P, --PE : paired-end data (default : single-end)\n");
  printf("\t  -s, --strand_type <strand_type> : set strand type "
         "('ns','ssf','ssr' for single-end, 'ns','ssfr','ssrf' for "
         "paired-end). (default: ns(unstranded))\n");
  printf("\t  -S, --SAM : input file format is SAM (by default, default bowtie "
         "output)\n");
  printf("\t  -B, --BAM : input file format is BAM (by default, default bowtie "
         "output)\n");
  printf("\t  -R, --print_rsh : create an rsh file from the current fasta file "
         "(must be combined with -x not -I) and the bam file (that determines "
         "read length). This rsh file can be reused for later samples for fast "
         "calculation.\n");
  printf("\t  -p, --maxthread <num_thread>: number of threads to use "
         "simultaneously. Using multiple threads comes with a slight increase "
         "in memory usage. We recommend -p 4 for an optimal performance. "
         "(default : 1)\n");
  printf("\t  -F, --maxfraglen <Max_fraglen> : Maximum fragment length. Use a "
         "number that is safely large, unless you want to apply fragment "
         "length filtering. Default 400. Not applicable for SE.\n");
  printf("\t  -f, --minfraglen <Min_fraglen> : Minimum fragment length. Use a "
         "number that is safely small, unless you want to apply fragment "
         "length filtering. Default 1. Not applicable for SE\n");
  printf("\t  -h, --header <E|R> : fasta header option. E : Ensembl "
         "header(default), R : RefSeq header.\n");
  printf("\t  -k, --max_repeat <max_repeat> : the maximum number of alignments "
         "per read allowed. Reads exceeding this number are discarded.\n");
  printf("\t  -g, --print_segments : print out segment information.\n");
  printf("\t  -T, --print_sfa : print out (mate1) suffix array.\n");
  printf("\t  -v --verbose : make a (very) verbose output log.\n");
  printf("\t  -q --no_verbose : turn-off verbosity.\n\n");
  printf("\tAdvanced Options\n");
  printf("\t  -b, --binsize <binsize> : binsize for indexing transcriptome "
         "(default : 5000). This bin size can be made smaller to improve speed "
         "at the cost of more memory, or vise versa.\n");
  printf("\t  -t, --taglen <taglen> : length of short sequence tags to use for "
         "constructing suffix array on a subset of substrings only. This "
         "affects only speed and memory usage. Currently, three values are "
         "supported (1,2,3). (default 2)\n");
  printf("\t  -n, --nround <num_rounds> : number of MLE runs for computing "
         "mean and sd of FPKM. Default 4.\n");
  printf("\t  -e, --epsilon <epsilon> : epsilon value to check convergence of "
         "MLE (default : 1E-9)\n");
  printf("\t  -r, --precision <precision> : estimate precision (epsilon for "
         "step size) (default : 1E-15)\n");
  printf("\t  -i, --max_niter_mle <max_niter_mle> : maximum number of "
         "iteration before determining not converging and reinitializing for "
         "MLE (default : 10000)\n");
  printf("\t  -l, --max_nloop_mle <max_nloop_mle> : maximum number of loops of "
         "iterations before giving up for MLE (default: 100)\n");
  printf("\t  -d, --delta <delta> : delta offset for MLE (default : 0)\n");
}


x86 assembly (clang, -O0):
<printusage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rsi
lea    0xf1b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rsi
lea    0xf5c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rsi
lea    0xf9f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rsi
lea    0xfd5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rsi
lea    0x100c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%rsi
lea    0x106a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10bc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10bd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10f3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1262(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1325(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1369(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x161c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1772(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x176e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x18d3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x18fb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1983(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x19c2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1a01(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1ace(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1b8c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1c37(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1cdf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1d2f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1da3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1dcf(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1df7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1e1e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1e3b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1e40(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1ee3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1fb9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x200c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x2057(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x20a8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x212f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x2199(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<printusage>:
push   %rbx
mov    %rdi,%rbx
lea    0xed5(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf18(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf5a(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf9e(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xfd5(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x100d(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x106c(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x10bb(%rip),%rdi
call   1030 <puts@plt>
lea    0x10bd(%rip),%rdi
call   1030 <puts@plt>
lea    0x10f4(%rip),%rdi
call   1030 <puts@plt>
lea    0x1264(%rip),%rdi
call   1030 <puts@plt>
lea    0x1328(%rip),%rdi
call   1030 <puts@plt>
lea    0x136d(%rip),%rdi
call   1030 <puts@plt>
lea    0x1621(%rip),%rdi
call   1030 <puts@plt>
lea    0x1778(%rip),%rdi
call   1030 <puts@plt>
lea    0x1775(%rip),%rdi
call   1030 <puts@plt>
lea    0x18db(%rip),%rdi
call   1030 <puts@plt>
lea    0x1904(%rip),%rdi
call   1030 <puts@plt>
lea    0x198d(%rip),%rdi
call   1030 <puts@plt>
lea    0x19cd(%rip),%rdi
call   1030 <puts@plt>
lea    0x1a0d(%rip),%rdi
call   1030 <puts@plt>
lea    0x1adb(%rip),%rdi
call   1030 <puts@plt>
lea    0x1b9a(%rip),%rdi
call   1030 <puts@plt>
lea    0x1c46(%rip),%rdi
call   1030 <puts@plt>
lea    0x1cef(%rip),%rdi
call   1030 <puts@plt>
lea    0x1d40(%rip),%rdi
call   1030 <puts@plt>
lea    0x1db5(%rip),%rdi
call   1030 <puts@plt>
lea    0x1de2(%rip),%rdi
call   1030 <puts@plt>
lea    0x1e0b(%rip),%rdi
call   1030 <puts@plt>
lea    0x1e33(%rip),%rdi
call   1030 <puts@plt>
lea    0x1e51(%rip),%rdi
call   1030 <puts@plt>
lea    0x1e57(%rip),%rdi
call   1030 <puts@plt>
lea    0x1efb(%rip),%rdi
call   1030 <puts@plt>
lea    0x1fd2(%rip),%rdi
call   1030 <puts@plt>
lea    0x2026(%rip),%rdi
call   1030 <puts@plt>
lea    0x2072(%rip),%rdi
call   1030 <puts@plt>
lea    0x20c4(%rip),%rdi
call   1030 <puts@plt>
lea    0x214c(%rip),%rdi
call   1030 <puts@plt>
lea    0x21b7(%rip),%rdi
pop    %rbx
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [84 x i8] c"Usage : %s <options> -x fastafile outdir outprefix alignmentfile|alignmentfilelist\0A\00"
@.str.1 = [83 x i8] c"Usage2 : %s <options> -I rshfile outdir outprefix alignmentfile|alignmentfilelist\0A\00"
@.str.2 = [85 x i8] c"Usage3 : bowtie command | %s <options> [-x fastafile][-I rshfile] outdir outprefix\0A\0A\00"
@.str.3 = [72 x i8] c"\09ex : %s -p 4 -h R -x human.rna.fna RNAseq sample22 sample22.bowtieout\0A\00"
@.str.4 = [73 x i8] c"\09ex2 : %s -p 4 -B --PE -R -x human.rna.fna RNAseq sample22 sample22.BAM\0A\00"
@.str.5 = [112 x i8] c"\09ex3: %s -M -p 16 -B -I human.rna.rsh RNAseq samples samples.BAMlist ## BAM list file with -M and -B options\0A\00"
@.str.6 = [96 x i8] c"\09ex4 : bowtie -v 2 -a -m 100 -p 4 human.rna sample22.fastq | %s human.rna.fna RNAseq sample22\0A\0A\00"
@.str.7 = [15 x i8] c"\09Input files\0A\0A\00"
@.str.8 = [68 x i8] c"\09 *Either a fasta file (-x) or an rsh file (-I) must be provided.\0A\00"
@.str.9 = [381 x i8] c"\09 fasta file : A transcriptome sequence library file in fasta format. The header can either be in Refseq format('>xx|xx|xx|name|xx') in which name or xx does not contain '|' letter, or in Ensembl format '>name' or '>name xx' in which name does not contain whitespace(space or tab) and xx is separated by whitespace from the name. Name must be a unique identifier of a sequence.\0A\00"
@.str.10 = [209 x i8] c"\09 rsh file : This file can be constructed by using -R option combined with -x fasta file. Once it is constructed, it can be used for other RNA-seq samples with the same read length for speedy calculation.\0A\0A\00"
@.str.11 = [82 x i8] c"\09 *Either an alignment file or a file listing alignment files must be provided.\0A\00"
@.str.12 = [705 x i8] c"\09 alignmentfile : either a default bowtie output format (bowtieoutfile) or SAM/BAM format. SAM and BAM files must be used with -S and -B options, respectively. The SAM/BAM file should be either produced with the default sorting by bowtie or sorted by qname. We strongly recommend that bowtie is run with options -a -v 2 -m 100, without --best or --strata, without allowing any indels, for best results with EMSAR. The bowtie/SAM/BAM files can be streamed directly to EMSAR through a pipe. If mismatches were allowed, it is highly recommended that the SAM/BAM files contain the auxiliary MD flags that contains the match/mismatch information. Bowtie by default produces SAM/BAM files with the MD field.\0A\00"
@.str.13 = [356 x i8] c"\09 alignmentfilelist : a text file containing one alignment file name per line. The alignment files can be one of the formats specified above. When a list file is used, -M (--multisample) option must be used along with the -B, -S options. All the files must be of the same read length and library type. Paired and single-end samples cannot be combined.\0A\0A\00"
@.str.14 = [10 x i8] c"\09Options\0A\00"
@.str.15 = [371 x i8] c"\09 -M, --multisample : multisample (default : single sample). When this option is used, a file containing a list of alignment files must be specified as input instead of an alignment file. The resulting expression values may be slightly different between multi-sample and single-sample runs, because a pooled fragment length distribution is used for a multi-sample run.\0A\00"
@.str.16 = [54 x i8] c"\09 -P, --PE : paired-end data (default : single-end)\0A\00"
@.str.17 = [150 x i8] c"\09 -s, --strand_type <strand_type> : set strand type ('ns','ssf','ssr' for single-end, 'ns','ssfr','ssrf' for paired-end). (default: ns(unstranded))\0A\00"
@.str.18 = [77 x i8] c"\09 -S, --SAM : input file format is SAM (by default, default bowtie output)\0A\00"
@.str.19 = [77 x i8] c"\09 -B, --BAM : input file format is BAM (by default, default bowtie output)\0A\00"
@.str.20 = [219 x i8] c"\09 -R, --print_rsh : create an rsh file from the current fasta file (must be combined with -x not -I) and the bam file (that determines read length). This rsh file can be reused for later samples for fast calculation.\0A\00"
@.str.21 = [204 x i8] c"\09 -p, --maxthread <num_thread>: number of threads to use simultaneously. Using multiple threads comes with a slight increase in memory usage. We recommend -p 4 for an optimal performance. (default : 1)\0A\00"
@.str.22 = [185 x i8] c"\09 -F, --maxfraglen <Max_fraglen> : Maximum fragment length. Use a number that is safely large, unless you want to apply fragment length filtering. Default 400. Not applicable for SE.\0A\00"
@.str.23 = [182 x i8] c"\09 -f, --minfraglen <Min_fraglen> : Minimum fragment length. Use a number that is safely small, unless you want to apply fragment length filtering. Default 1. Not applicable for SE\0A\00"
@.str.24 = [94 x i8] c"\09 -h, --header <E|R> : fasta header option. E : Ensembl header(default), R : RefSeq header.\0A\00"
@.str.25 = [130 x i8] c"\09 -k, --max_repeat <max_repeat> : the maximum number of alignments per read allowed. Reads exceeding this number are discarded.\0A\00"
@.str.26 = [58 x i8] c"\09 -g, --print_segments : print out segment information.\0A\00"
@.str.27 = [54 x i8] c"\09 -T, --print_sfa : print out (mate1) suffix array.\0A\00"
@.str.28 = [53 x i8] c"\09 -v --verbose : make a (very) verbose output log.\0A\00"
@.str.29 = [43 x i8] c"\09 -q --no_verbose : turn-off verbosity.\0A\0A\00"
@.str.30 = [19 x i8] c"\09Advanced Options\0A\00"
@.str.31 = [177 x i8] c"\09 -b, --binsize <binsize> : binsize for indexing transcriptome (default : 5000). This bin size can be made smaller to improve speed at the cost of more memory, or vise versa.\0A\00"
@.str.32 = [228 x i8] c"\09 -t, --taglen <taglen> : length of short sequence tags to use for constructing suffix array on a subset of substrings only. This affects only speed and memory usage. Currently, three values are supported (1,2,3). (default 2)\0A\00"
@.str.33 = [97 x i8] c"\09 -n, --nround <num_rounds> : number of MLE runs for computing mean and sd of FPKM. Default 4.\0A\00"
@.str.34 = [89 x i8] c"\09 -e, --epsilon <epsilon> : epsilon value to check convergence of MLE (default : 1E-9)\0A\00"
@.str.35 = [95 x i8] c"\09 -r, --precision <precision> : estimate precision (epsilon for step size) (default : 1E-15)\0A\00"
@.str.36 = [149 x i8] c"\09 -i, --max_niter_mle <max_niter_mle> : maximum number of iteration before determining not converging and reinitializing for MLE (default : 10000)\0A\00"
@.str.37 = [120 x i8] c"\09 -l, --max_nloop_mle <max_nloop_mle> : maximum number of loops of iterations before giving up for MLE (default: 100)\0A\00"
@.str.38 = [61 x i8] c"\09 -d, --delta <delta> : delta offset for MLE (default : 0)\0A\00"
define void @printusage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([84 x i8], [84 x i8]* @.str, i64 0, i64 0), i8* %3)
%5 = load i8*, i8** %2
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([83 x i8], [83 x i8]* @.str.1, i64 0, i64 0), i8* %5)
%7 = load i8*, i8** %2
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([85 x i8], [85 x i8]* @.str.2, i64 0, i64 0), i8* %7)
%9 = load i8*, i8** %2
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([72 x i8], [72 x i8]* @.str.3, i64 0, i64 0), i8* %9)
%11 = load i8*, i8** %2
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.4, i64 0, i64 0), i8* %11)
%13 = load i8*, i8** %2
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([112 x i8], [112 x i8]* @.str.5, i64 0, i64 0), i8* %13)
%15 = load i8*, i8** %2
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([96 x i8], [96 x i8]* @.str.6, i64 0, i64 0), i8* %15)
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.7, i64 0, i64 0))
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.8, i64 0, i64 0))
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([381 x i8], [381 x i8]* @.str.9, i64 0, i64 0))
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([209 x i8], [209 x i8]* @.str.10, i64 0, i64 0))
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.11, i64 0, i64 0))
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([705 x i8], [705 x i8]* @.str.12, i64 0, i64 0))
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([356 x i8], [356 x i8]* @.str.13, i64 0, i64 0))
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0))
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([371 x i8], [371 x i8]* @.str.15, i64 0, i64 0))
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.16, i64 0, i64 0))
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([150 x i8], [150 x i8]* @.str.17, i64 0, i64 0))
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.18, i64 0, i64 0))
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.19, i64 0, i64 0))
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([219 x i8], [219 x i8]* @.str.20, i64 0, i64 0))
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([204 x i8], [204 x i8]* @.str.21, i64 0, i64 0))
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([185 x i8], [185 x i8]* @.str.22, i64 0, i64 0))
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([182 x i8], [182 x i8]* @.str.23, i64 0, i64 0))
%34 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([94 x i8], [94 x i8]* @.str.24, i64 0, i64 0))
%35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str.25, i64 0, i64 0))
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.26, i64 0, i64 0))
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.27, i64 0, i64 0))
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.28, i64 0, i64 0))
%39 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.29, i64 0, i64 0))
%40 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.30, i64 0, i64 0))
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([177 x i8], [177 x i8]* @.str.31, i64 0, i64 0))
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([228 x i8], [228 x i8]* @.str.32, i64 0, i64 0))
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([97 x i8], [97 x i8]* @.str.33, i64 0, i64 0))
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([89 x i8], [89 x i8]* @.str.34, i64 0, i64 0))
%45 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([95 x i8], [95 x i8]* @.str.35, i64 0, i64 0))
%46 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.36, i64 0, i64 0))
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([120 x i8], [120 x i8]* @.str.37, i64 0, i64 0))
%48 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.38, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [84 x i8] c"Usage : %s <options> -x fastafile outdir outprefix alignmentfile|alignmentfilelist\0A\00"
@.str.1 = [83 x i8] c"Usage2 : %s <options> -I rshfile outdir outprefix alignmentfile|alignmentfilelist\0A\00"
@.str.2 = [85 x i8] c"Usage3 : bowtie command | %s <options> [-x fastafile][-I rshfile] outdir outprefix\0A\0A\00"
@.str.3 = [72 x i8] c"\09ex : %s -p 4 -h R -x human.rna.fna RNAseq sample22 sample22.bowtieout\0A\00"
@.str.4 = [73 x i8] c"\09ex2 : %s -p 4 -B --PE -R -x human.rna.fna RNAseq sample22 sample22.BAM\0A\00"
@.str.5 = [112 x i8] c"\09ex3: %s -M -p 16 -B -I human.rna.rsh RNAseq samples samples.BAMlist ## BAM list file with -M and -B options\0A\00"
@.str.6 = [96 x i8] c"\09ex4 : bowtie -v 2 -a -m 100 -p 4 human.rna sample22.fastq | %s human.rna.fna RNAseq sample22\0A\0A\00"
@str = [14 x i8] c"\09Input files\0A\00"
@str.39 = [67 x i8] c"\09 *Either a fasta file (-x) or an rsh file (-I) must be provided.\00"
@str.40 = [380 x i8] c"\09 fasta file : A transcriptome sequence library file in fasta format. The header can either be in Refseq format('>xx|xx|xx|name|xx') in which name or xx does not contain '|' letter, or in Ensembl format '>name' or '>name xx' in which name does not contain whitespace(space or tab) and xx is separated by whitespace from the name. Name must be a unique identifier of a sequence.\00"
@str.41 = [208 x i8] c"\09 rsh file : This file can be constructed by using -R option combined with -x fasta file. Once it is constructed, it can be used for other RNA-seq samples with the same read length for speedy calculation.\0A\00"
@str.42 = [81 x i8] c"\09 *Either an alignment file or a file listing alignment files must be provided.\00"
@str.43 = [704 x i8] c"\09 alignmentfile : either a default bowtie output format (bowtieoutfile) or SAM/BAM format. SAM and BAM files must be used with -S and -B options, respectively. The SAM/BAM file should be either produced with the default sorting by bowtie or sorted by qname. We strongly recommend that bowtie is run with options -a -v 2 -m 100, without --best or --strata, without allowing any indels, for best results with EMSAR. The bowtie/SAM/BAM files can be streamed directly to EMSAR through a pipe. If mismatches were allowed, it is highly recommended that the SAM/BAM files contain the auxiliary MD flags that contains the match/mismatch information. Bowtie by default produces SAM/BAM files with the MD field.\00"
@str.44 = [355 x i8] c"\09 alignmentfilelist : a text file containing one alignment file name per line. The alignment files can be one of the formats specified above. When a list file is used, -M (--multisample) option must be used along with the -B, -S options. All the files must be of the same read length and library type. Paired and single-end samples cannot be combined.\0A\00"
@str.45 = [9 x i8] c"\09Options\00"
@str.46 = [370 x i8] c"\09 -M, --multisample : multisample (default : single sample). When this option is used, a file containing a list of alignment files must be specified as input instead of an alignment file. The resulting expression values may be slightly different between multi-sample and single-sample runs, because a pooled fragment length distribution is used for a multi-sample run.\00"
@str.47 = [53 x i8] c"\09 -P, --PE : paired-end data (default : single-end)\00"
@str.48 = [149 x i8] c"\09 -s, --strand_type <strand_type> : set strand type ('ns','ssf','ssr' for single-end, 'ns','ssfr','ssrf' for paired-end). (default: ns(unstranded))\00"
@str.49 = [76 x i8] c"\09 -S, --SAM : input file format is SAM (by default, default bowtie output)\00"
@str.50 = [76 x i8] c"\09 -B, --BAM : input file format is BAM (by default, default bowtie output)\00"
@str.51 = [218 x i8] c"\09 -R, --print_rsh : create an rsh file from the current fasta file (must be combined with -x not -I) and the bam file (that determines read length). This rsh file can be reused for later samples for fast calculation.\00"
@str.52 = [203 x i8] c"\09 -p, --maxthread <num_thread>: number of threads to use simultaneously. Using multiple threads comes with a slight increase in memory usage. We recommend -p 4 for an optimal performance. (default : 1)\00"
@str.53 = [184 x i8] c"\09 -F, --maxfraglen <Max_fraglen> : Maximum fragment length. Use a number that is safely large, unless you want to apply fragment length filtering. Default 400. Not applicable for SE.\00"
@str.54 = [181 x i8] c"\09 -f, --minfraglen <Min_fraglen> : Minimum fragment length. Use a number that is safely small, unless you want to apply fragment length filtering. Default 1. Not applicable for SE\00"
@str.55 = [93 x i8] c"\09 -h, --header <E|R> : fasta header option. E : Ensembl header(default), R : RefSeq header.\00"
@str.56 = [129 x i8] c"\09 -k, --max_repeat <max_repeat> : the maximum number of alignments per read allowed. Reads exceeding this number are discarded.\00"
@str.57 = [57 x i8] c"\09 -g, --print_segments : print out segment information.\00"
@str.58 = [53 x i8] c"\09 -T, --print_sfa : print out (mate1) suffix array.\00"
@str.59 = [52 x i8] c"\09 -v --verbose : make a (very) verbose output log.\00"
@str.60 = [42 x i8] c"\09 -q --no_verbose : turn-off verbosity.\0A\00"
@str.61 = [18 x i8] c"\09Advanced Options\00"
@str.62 = [176 x i8] c"\09 -b, --binsize <binsize> : binsize for indexing transcriptome (default : 5000). This bin size can be made smaller to improve speed at the cost of more memory, or vise versa.\00"
@str.63 = [227 x i8] c"\09 -t, --taglen <taglen> : length of short sequence tags to use for constructing suffix array on a subset of substrings only. This affects only speed and memory usage. Currently, three values are supported (1,2,3). (default 2)\00"
@str.64 = [96 x i8] c"\09 -n, --nround <num_rounds> : number of MLE runs for computing mean and sd of FPKM. Default 4.\00"
@str.65 = [88 x i8] c"\09 -e, --epsilon <epsilon> : epsilon value to check convergence of MLE (default : 1E-9)\00"
@str.66 = [94 x i8] c"\09 -r, --precision <precision> : estimate precision (epsilon for step size) (default : 1E-15)\00"
@str.67 = [148 x i8] c"\09 -i, --max_niter_mle <max_niter_mle> : maximum number of iteration before determining not converging and reinitializing for MLE (default : 10000)\00"
@str.68 = [119 x i8] c"\09 -l, --max_nloop_mle <max_nloop_mle> : maximum number of loops of iterations before giving up for MLE (default: 100)\00"
@str.69 = [60 x i8] c"\09 -d, --delta <delta> : delta offset for MLE (default : 0)\00"
define void @printusage(i8* %0) {
%2 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([84 x i8], [84 x i8]* @.str, i64 0, i64 0), i8* %0)
%3 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([83 x i8], [83 x i8]* @.str.1, i64 0, i64 0), i8* %0)
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([85 x i8], [85 x i8]* @.str.2, i64 0, i64 0), i8* %0)
%5 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @.str.3, i64 0, i64 0), i8* %0)
%6 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @.str.4, i64 0, i64 0), i8* %0)
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([112 x i8], [112 x i8]* @.str.5, i64 0, i64 0), i8* %0)
%8 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([96 x i8], [96 x i8]* @.str.6, i64 0, i64 0), i8* %0)
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.39, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([380 x i8], [380 x i8]* @str.40, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([208 x i8], [208 x i8]* @str.41, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.42, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([704 x i8], [704 x i8]* @str.43, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([355 x i8], [355 x i8]* @str.44, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.45, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([370 x i8], [370 x i8]* @str.46, i64 0, i64 0))
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([53 x i8], [53 x i8]* @str.47, i64 0, i64 0))
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([149 x i8], [149 x i8]* @str.48, i64 0, i64 0))
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @str.49, i64 0, i64 0))
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @str.50, i64 0, i64 0))
%22 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([218 x i8], [218 x i8]* @str.51, i64 0, i64 0))
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([203 x i8], [203 x i8]* @str.52, i64 0, i64 0))
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([184 x i8], [184 x i8]* @str.53, i64 0, i64 0))
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([181 x i8], [181 x i8]* @str.54, i64 0, i64 0))
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([93 x i8], [93 x i8]* @str.55, i64 0, i64 0))
%27 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([129 x i8], [129 x i8]* @str.56, i64 0, i64 0))
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @str.57, i64 0, i64 0))
%29 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([53 x i8], [53 x i8]* @str.58, i64 0, i64 0))
%30 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([52 x i8], [52 x i8]* @str.59, i64 0, i64 0))
%31 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @str.60, i64 0, i64 0))
%32 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str.61, i64 0, i64 0))
%33 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([176 x i8], [176 x i8]* @str.62, i64 0, i64 0))
%34 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([227 x i8], [227 x i8]* @str.63, i64 0, i64 0))
%35 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([96 x i8], [96 x i8]* @str.64, i64 0, i64 0))
%36 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([88 x i8], [88 x i8]* @str.65, i64 0, i64 0))
%37 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([94 x i8], [94 x i8]* @str.66, i64 0, i64 0))
%38 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([148 x i8], [148 x i8]* @str.67, i64 0, i64 0))
%39 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([119 x i8], [119 x i8]* @str.68, i64 0, i64 0))
%40 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([60 x i8], [60 x i8]* @str.69, i64 0, i64 0))
ret void
}