#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: gkmpredict (lsgkm program for scoring sequences using a "
      "trained model)\n"
      "Version: "
      "v0.1.1"
      "\n\n"
      "Usage: gkmpredict [options] <test_seqfile> <model_file> <output_file>\n"
      "\n"
      " score test sequences using trained gkm-SVM\n"
      "\n"
      "Arguments:\n"
      " test_seqfile: sequence file for test (fasta format)\n"
      " model_file: output of gkmtrain\n"
      " output_file: name of output file\n"
      "\n"
      "Options:\n"
      " -v <0|1|2|3|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 = [822 x i8] c"\0AProgram: gkmpredict (lsgkm program for scoring sequences using a trained model)\0AVersion: v0.1.1\0A\0AUsage: gkmpredict [options] <test_seqfile> <model_file> <output_file>\0A\0A score test sequences using trained gkm-SVM\0A\0AArguments:\0A test_seqfile: sequence file for test (fasta format)\0A model_file: output of gkmtrain\0A output_file: name of output file\0A\0AOptions:\0A -v <0|1|2|3|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 ([822 x i8], [822 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@str = [821 x i8] c"\0AProgram: gkmpredict (lsgkm program for scoring sequences using a trained model)\0AVersion: v0.1.1\0A\0AUsage: gkmpredict [options] <test_seqfile> <model_file> <output_file>\0A\0A score test sequences using trained gkm-SVM\0A\0AArguments:\0A test_seqfile: sequence file for test (fasta format)\0A model_file: output of gkmtrain\0A output_file: name of output file\0A\0AOptions:\0A -v <0|1|2|3|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 ([821 x i8], [821 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @exit(i32 0)
unreachable
}