#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 usage() {
  fprintf(
      stderr,
      "usage: needleman-wunsch [-c][-h][-l][-q][-s][-t][-u]\n                  "
      "      [-p num-threads] [-f sequence-file] m k d\nAlign two sequences "
      "with the Needleman-Wunsch algorithm\noperands:\n   m   match bonus\n   "
      "k   mismatch penalty\n   d   indel (gap) penalty\noptions:\n  -c   "
      "color the output with ANSI escape sequences\n  -f sequence-file\n       "
      "read the input strings from 'sequence-file' instead of standard input\n "
      " -h   print this usage message\n  -l   list match, mismatch, and indel "
      "counts for each alignment pair\n  -p num-threads\n       parallelize "
      "the computation with 'num-threads' threads (must be >1)\n  -q   be "
      "quiet and don't print the aligned strings\n  -s   summarize the "
      "algorithm's run\n  -t   print the scores table; only useful for shorter "
      "input strings\n  -u   use unicode arrows when printing the scores "
      "table\n");
  exit(1);
}


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

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

LLVM IR (-O0):
@stderr = global i32 0
@.str = [821 x i8] c"usage: needleman-wunsch [-c][-h][-l][-q][-s][-t][-u]\0A [-p num-threads] [-f sequence-file] m k d\0AAlign two sequences with the Needleman-Wunsch algorithm\0Aoperands:\0A m match bonus\0A k mismatch penalty\0A d indel (gap) penalty\0Aoptions:\0A -c color the output with ANSI escape sequences\0A -f sequence-file\0A read the input strings from 'sequence-file' instead of standard input\0A -h print this usage message\0A -l list match, mismatch, and indel counts for each alignment pair\0A -p num-threads\0A parallelize the computation with 'num-threads' threads (must be >1)\0A -q be quiet and don't print the aligned strings\0A -s summarize the algorithm's run\0A -t print the scores table; only useful for shorter input strings\0A -u use unicode arrows when printing the scores table\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([821 x i8], [821 x i8]* @.str, i64 0, i64 0))
%3 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [821 x i8] c"usage: needleman-wunsch [-c][-h][-l][-q][-s][-t][-u]\0A [-p num-threads] [-f sequence-file] m k d\0AAlign two sequences with the Needleman-Wunsch algorithm\0Aoperands:\0A m match bonus\0A k mismatch penalty\0A d indel (gap) penalty\0Aoptions:\0A -c color the output with ANSI escape sequences\0A -f sequence-file\0A read the input strings from 'sequence-file' instead of standard input\0A -h print this usage message\0A -l list match, mismatch, and indel counts for each alignment pair\0A -p num-threads\0A parallelize the computation with 'num-threads' threads (must be >1)\0A -q be quiet and don't print the aligned strings\0A -s summarize the algorithm's run\0A -t print the scores table; only useful for shorter input strings\0A -u use unicode arrows when printing the scores table\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([821 x i8], [821 x i8]* @.str, i64 0, i64 0))
%3 = tail call i32 @exit(i32 1)
unreachable
}