#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 /*<<< orphan*/);
int /*<<< orphan*/ printf(char *);
void print_usage_and_exit() {
  printf(
      "\n"
      "Program: gkmtrain (lsgkm program for SVM model training)\n"
      "Version: "
      "v0.1.1"
      "\n\n"
      "Usage: gkmtrain [options] <posfile> <negfile> <outprefix>\n"
      "\n"
      " train gkm-SVM using libSVM\n"
      "\n"
      "Arguments:\n"
      " posfile: positive sequence file (FASTA format)\n"
      " negfile: negative sequence file (FASTA format)\n"
      " outprefix: prefix of output file(s) <outprefix>.model.txt or\n"
      "            <outprefix>.cvpred.txt\n"
      "\n"
      "Options:\n"
      " -t <0 ~ 5>   set kernel function (default: 2 gkm)\n"
      "              NOTE: RBF kernels (3 and 5) work best with -c 10 -g 2\n"
      "                0 -- gapped-kmer\n"
      "                1 -- estimated l-mer with full filter\n"
      "                2 -- estimated l-mer with truncated filter (gkm)\n"
      "                3 -- gkm + RBF (gkmrbf)\n"
      "                4 -- gkm + center weighted (wgkm)\n"
      "                     [weight = max(M, floor(M*exp(-ln(2)*D/H)+1))]\n"
      "                5 -- gkm + center weighted + RBF (wgkmrbf)\n"
      " -l <int>     set word length, 3<=l<=12 (default: 11)\n"
      " -k <int>     set number of informative column, k<=l (default: 7)\n"
      " -d <int>     set maximum number of mismatches to consider, d<=4 "
      "(default: 3)\n"
      " -g <float>   set gamma for RBF kernel. -t 3 or 5 only (default: 1.0)\n"
      " -M <int>     set the initial value (M) of the exponential decay "
      "function\n"
      "              for wgkm-kernels. max=255, -t 4 or 5 only (default: 50)\n"
      " -H <float>   set the half-life parameter (H) that is the distance (D) "
      "required\n"
      "              to fall to half of its initial value in the exponential "
      "decay\n"
      "              function for wgkm-kernels. -t 4 or 5 only (default: 50)\n"
      " -R           if set, reverse-complement is not considered as the same "
      "feature\n"
      " -c <float>   set the regularization parameter SVM-C (default: 1.0)\n"
      " -e <float>   set the precision parameter epsilon (default: 0.001)\n"
      " -w <float>   set the parameter SVM-C to w*C for the positive set "
      "(default: 1.0)\n"
      " -m <float>   set cache memory size in MB (default: 100.0)\n"
      "              NOTE: Large cache signifcantly reduces runtime. >4Gb is "
      "recommended\n"
      " -s           if set, use the shrinking heuristics\n"
      " -x <int>     set N-fold cross validation mode (default: no cross "
      "validation)\n"
      " -i <int>     run i-th cross validation only 1<=i<=ncv (default: all)\n"
      " -r <int>     set random seed for shuffling in cross validation mode "
      "(default: 1)\n"
      " -v <0 ~ 4>   set the level of verbosity (default: 2)\n"
      "                0 -- error msgs only (ERROR)\n"
      "                1 -- warning msgs (WARN)\n"
      "                2 -- progress msgs at coarse-grained level (INFO)\n"
      "                3 -- progress msgs at fine-grained level (DEBUG)\n"
      "                4 -- progress msgs at finer-grained level (TRACE)\n"
      "-T <1|4|16>   set the number of threads for parallel calculation, 1, 4, "
      "or 16\n"
      "                 (default: 1)\n"
      "\n");
  exit(0);
}


x86 assembly (clang, -O0):
<print_usage_and_exit>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
call   1030 <printf@plt>
xor    %edi,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<print_usage_and_exit>:
push   %rax
lea    0xed8(%rip),%rdi
call   1030 <puts@plt>
xor    %edi,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@.str = [2666 x i8] c"\0AProgram: gkmtrain (lsgkm program for SVM model training)\0AVersion: v0.1.1\0A\0AUsage: gkmtrain [options] <posfile> <negfile> <outprefix>\0A\0A train gkm-SVM using libSVM\0A\0AArguments:\0A posfile: positive sequence file (FASTA format)\0A negfile: negative sequence file (FASTA format)\0A outprefix: prefix of output file(s) <outprefix>.model.txt or\0A <outprefix>.cvpred.txt\0A\0AOptions:\0A -t <0 ~ 5> set kernel function (default: 2 gkm)\0A NOTE: RBF kernels (3 and 5) work best with -c 10 -g 2\0A 0 -- gapped-kmer\0A 1 -- estimated l-mer with full filter\0A 2 -- estimated l-mer with truncated filter (gkm)\0A 3 -- gkm + RBF (gkmrbf)\0A 4 -- gkm + center weighted (wgkm)\0A [weight = max(M, floor(M*exp(-ln(2)*D/H)+1))]\0A 5 -- gkm + center weighted + RBF (wgkmrbf)\0A -l <int> set word length, 3<=l<=12 (default: 11)\0A -k <int> set number of informative column, k<=l (default: 7)\0A -d <int> set maximum number of mismatches to consider, d<=4 (default: 3)\0A -g <float> set gamma for RBF kernel. -t 3 or 5 only (default: 1.0)\0A -M <int> set the initial value (M) of the exponential decay function\0A for wgkm-kernels. max=255, -t 4 or 5 only (default: 50)\0A -H <float> set the half-life parameter (H) that is the distance (D) required\0A to fall to half of its initial value in the exponential decay\0A function for wgkm-kernels. -t 4 or 5 only (default: 50)\0A -R if set, reverse-complement is not considered as the same feature\0A -c <float> set the regularization parameter SVM-C (default: 1.0)\0A -e <float> set the precision parameter epsilon (default: 0.001)\0A -w <float> set the parameter SVM-C to w*C for the positive set (default: 1.0)\0A -m <float> set cache memory size in MB (default: 100.0)\0A NOTE: Large cache signifcantly reduces runtime. >4Gb is recommended\0A -s if set, use the shrinking heuristics\0A -x <int> set N-fold cross validation mode (default: no cross validation)\0A -i <int> run i-th cross validation only 1<=i<=ncv (default: all)\0A -r <int> set random seed for shuffling in cross validation mode (default: 1)\0A -v <0 ~ 4> set the level of verbosity (default: 2)\0A 0 -- error msgs only (ERROR)\0A 1 -- warning msgs (WARN)\0A 2 -- progress msgs at coarse-grained level (INFO)\0A 3 -- progress msgs at fine-grained level (DEBUG)\0A 4 -- progress msgs at finer-grained level (TRACE)\0A-T <1|4|16> set the number of threads for parallel calculation, 1, 4, or 16\0A (default: 1)\0A\0A\00"
define void @print_usage_and_exit() {
%1 = call i32 @printf(i8* getelementptr inbounds ([2666 x i8], [2666 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@str = [2665 x i8] c"\0AProgram: gkmtrain (lsgkm program for SVM model training)\0AVersion: v0.1.1\0A\0AUsage: gkmtrain [options] <posfile> <negfile> <outprefix>\0A\0A train gkm-SVM using libSVM\0A\0AArguments:\0A posfile: positive sequence file (FASTA format)\0A negfile: negative sequence file (FASTA format)\0A outprefix: prefix of output file(s) <outprefix>.model.txt or\0A <outprefix>.cvpred.txt\0A\0AOptions:\0A -t <0 ~ 5> set kernel function (default: 2 gkm)\0A NOTE: RBF kernels (3 and 5) work best with -c 10 -g 2\0A 0 -- gapped-kmer\0A 1 -- estimated l-mer with full filter\0A 2 -- estimated l-mer with truncated filter (gkm)\0A 3 -- gkm + RBF (gkmrbf)\0A 4 -- gkm + center weighted (wgkm)\0A [weight = max(M, floor(M*exp(-ln(2)*D/H)+1))]\0A 5 -- gkm + center weighted + RBF (wgkmrbf)\0A -l <int> set word length, 3<=l<=12 (default: 11)\0A -k <int> set number of informative column, k<=l (default: 7)\0A -d <int> set maximum number of mismatches to consider, d<=4 (default: 3)\0A -g <float> set gamma for RBF kernel. -t 3 or 5 only (default: 1.0)\0A -M <int> set the initial value (M) of the exponential decay function\0A for wgkm-kernels. max=255, -t 4 or 5 only (default: 50)\0A -H <float> set the half-life parameter (H) that is the distance (D) required\0A to fall to half of its initial value in the exponential decay\0A function for wgkm-kernels. -t 4 or 5 only (default: 50)\0A -R if set, reverse-complement is not considered as the same feature\0A -c <float> set the regularization parameter SVM-C (default: 1.0)\0A -e <float> set the precision parameter epsilon (default: 0.001)\0A -w <float> set the parameter SVM-C to w*C for the positive set (default: 1.0)\0A -m <float> set cache memory size in MB (default: 100.0)\0A NOTE: Large cache signifcantly reduces runtime. >4Gb is recommended\0A -s if set, use the shrinking heuristics\0A -x <int> set N-fold cross validation mode (default: no cross validation)\0A -i <int> run i-th cross validation only 1<=i<=ncv (default: all)\0A -r <int> set random seed for shuffling in cross validation mode (default: 1)\0A -v <0 ~ 4> set the level of verbosity (default: 2)\0A 0 -- error msgs only (ERROR)\0A 1 -- warning msgs (WARN)\0A 2 -- progress msgs at coarse-grained level (INFO)\0A 3 -- progress msgs at fine-grained level (DEBUG)\0A 4 -- progress msgs at finer-grained level (TRACE)\0A-T <1|4|16> set the number of threads for parallel calculation, 1, 4, or 16\0A (default: 1)\0A\00"
define void @print_usage_and_exit() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2665 x i8], [2665 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @exit(i32 0)
unreachable
}