#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 *, char *, char *, char *, char *, char *,
                          char *, char *);
void help(char *argv[]) {
  printf(
      "Extracts a subtree (clade) defined by labels.\n"
      "\n"
      "Synopsis\n"
      "--------\n"
      "\n"
      "%s [-chmrs] <target tree filename|-> <label> [label]+\n"
      "\n"
      "Input\n"
      "-----\n"
      "\n"
      "The first argument is the name of a file containing one or more Newick\n"
      "trees, or '-' (in which case the trees are read on stdin).\n"
      "\n"
      "The next arguments are labels found in the tree (both leaf and "
      "internal\n"
      "labels work). Any label not found in the tree will be ignored. There\n"
      "must be at least one label. (See also option -r)\n"
      "\n"
      "Output\n"
      "------\n"
      "\n"
      "Outputs the clade rooted at the last common ancestor of all labels "
      "passed\n"
      "as arguments, as Newick.\n"
      "\n"
      "Options\n"
      "-------\n"
      "\n"
      "    -c <levels (int)>: give context, i.e. start the subtree not at the "
      "last\n"
      "        common ancestor of the labels, but 'level' nodes higher "
      "(limited\n"
      "        by the tree's root, of course).\n"
      "    -h: prints this message and exits\n"
      "    -m: only prints the clade if it is monophyletic, in the sense that "
      "ONLY\n"
      "        the labels passed as arguments are found in the clade.\n"
      "        See also -s.\n"
      "    -r <regexp>: clade is defined by labels that match the regexp "
      "(instead.\n"
      "        of labels passed as arguments)\n"
      "    -s: prints the siblings of the clade defined by the labels passed "
      "as\n"
      "        arguments, in the order in which they appear in the Newick.\n"
      "        If -m is also passed, only prints siblings if the labels "
      "passed\n"
      "        as arguments form a monophyletic group.\n"
      "\n"
      "Examples\n"
      "--------\n"
      "\n"
      "# clade defined by two leaves\n"
      "$ %s data/catarrhini Homo Hylobates\n"
      "\n"
      "# clade defined by a leaf and a inner node (Hominini)\n"
      "$ %s data/catarrhini Hominini Hylobates\n"
      "\n"
      "# clade is monophyletic\n"
      "$ %s -m data/catarrhini Homo Gorilla Pan\n"
      "\n"
      "# clade is not monophyletic (Gorilla is missing)\n"
      "$ %s -m data/catarrhini Homo Pongo Pan\n"
      "\n"
      "# clade defined by a regexp (all Poliovirus)\n"
      "$ %s -r data/HRV.nw '^POLIO.*'\n"
      "\n"
      "# clade defined by Homo and Pan, plus 1 level of context\n"
      "$ %s -c 1 data/catarrhini Homo Pan\n",
      argv[0], argv[0], argv[0], argv[0], argv[0], argv[0], argv[0]);
}


x86 assembly (clang, -O0):
<help>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rsi
mov    -0x8(%rbp),%rax
mov    (%rax),%rdx
mov    -0x8(%rbp),%rax
mov    (%rax),%rcx
mov    -0x8(%rbp),%rax
mov    (%rax),%r8
mov    -0x8(%rbp),%rax
mov    (%rax),%r9
mov    -0x8(%rbp),%rax
mov    (%rax),%r10
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
lea    0xeac(%rip),%rdi
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
call   1030 <printf@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<help>:
push   %rax
mov    (%rdi),%rcx
lea    0xee5(%rip),%rdi
mov    %rcx,%rsi
mov    %rcx,%rdx
mov    %rcx,%r8
mov    %rcx,%r9
push   %rcx
push   %rcx
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rax
ret

LLVM IR (-O0):
@.str = [1858 x i8] c"Extracts a subtree (clade) defined by labels.\0A\0ASynopsis\0A--------\0A\0A%s [-chmrs] <target tree filename|-> <label> [label]+\0A\0AInput\0A-----\0A\0AThe first argument is the name of a file containing one or more Newick\0Atrees, or '-' (in which case the trees are read on stdin).\0A\0AThe next arguments are labels found in the tree (both leaf and internal\0Alabels work). Any label not found in the tree will be ignored. There\0Amust be at least one label. (See also option -r)\0A\0AOutput\0A------\0A\0AOutputs the clade rooted at the last common ancestor of all labels passed\0Aas arguments, as Newick.\0A\0AOptions\0A-------\0A\0A -c <levels (int)>: give context, i.e. start the subtree not at the last\0A common ancestor of the labels, but 'level' nodes higher (limited\0A by the tree's root, of course).\0A -h: prints this message and exits\0A -m: only prints the clade if it is monophyletic, in the sense that ONLY\0A the labels passed as arguments are found in the clade.\0A See also -s.\0A -r <regexp>: clade is defined by labels that match the regexp (instead.\0A of labels passed as arguments)\0A -s: prints the siblings of the clade defined by the labels passed as\0A arguments, in the order in which they appear in the Newick.\0A If -m is also passed, only prints siblings if the labels passed\0A as arguments form a monophyletic group.\0A\0AExamples\0A--------\0A\0A# clade defined by two leaves\0A$ %s data/catarrhini Homo Hylobates\0A\0A# clade defined by a leaf and a inner node (Hominini)\0A$ %s data/catarrhini Hominini Hylobates\0A\0A# clade is monophyletic\0A$ %s -m data/catarrhini Homo Gorilla Pan\0A\0A# clade is not monophyletic (Gorilla is missing)\0A$ %s -m data/catarrhini Homo Pongo Pan\0A\0A# clade defined by a regexp (all Poliovirus)\0A$ %s -r data/HRV.nw '^POLIO.*'\0A\0A# clade defined by Homo and Pan, plus 1 level of context\0A$ %s -c 1 data/catarrhini Homo Pan\0A\00"
define void @help(i8** %0) {
%2 = alloca i8**
store i8** %0, i8*** %2
%3 = load i8**, i8*** %2
%4 = getelementptr inbounds i8*, i8** %3, i64 0
%5 = load i8*, i8** %4
%6 = load i8**, i8*** %2
%7 = getelementptr inbounds i8*, i8** %6, i64 0
%8 = load i8*, i8** %7
%9 = load i8**, i8*** %2
%10 = getelementptr inbounds i8*, i8** %9, i64 0
%11 = load i8*, i8** %10
%12 = load i8**, i8*** %2
%13 = getelementptr inbounds i8*, i8** %12, i64 0
%14 = load i8*, i8** %13
%15 = load i8**, i8*** %2
%16 = getelementptr inbounds i8*, i8** %15, i64 0
%17 = load i8*, i8** %16
%18 = load i8**, i8*** %2
%19 = getelementptr inbounds i8*, i8** %18, i64 0
%20 = load i8*, i8** %19
%21 = load i8**, i8*** %2
%22 = getelementptr inbounds i8*, i8** %21, i64 0
%23 = load i8*, i8** %22
%24 = call i32 @printf(i8* getelementptr inbounds ([1858 x i8], [1858 x i8]* @.str, i64 0, i64 0), i8* %5, i8* %8, i8* %11, i8* %14, i8* %17, i8* %20, i8* %23)
ret void
}

LLVM IR (-O2):
@.str = [1858 x i8] c"Extracts a subtree (clade) defined by labels.\0A\0ASynopsis\0A--------\0A\0A%s [-chmrs] <target tree filename|-> <label> [label]+\0A\0AInput\0A-----\0A\0AThe first argument is the name of a file containing one or more Newick\0Atrees, or '-' (in which case the trees are read on stdin).\0A\0AThe next arguments are labels found in the tree (both leaf and internal\0Alabels work). Any label not found in the tree will be ignored. There\0Amust be at least one label. (See also option -r)\0A\0AOutput\0A------\0A\0AOutputs the clade rooted at the last common ancestor of all labels passed\0Aas arguments, as Newick.\0A\0AOptions\0A-------\0A\0A -c <levels (int)>: give context, i.e. start the subtree not at the last\0A common ancestor of the labels, but 'level' nodes higher (limited\0A by the tree's root, of course).\0A -h: prints this message and exits\0A -m: only prints the clade if it is monophyletic, in the sense that ONLY\0A the labels passed as arguments are found in the clade.\0A See also -s.\0A -r <regexp>: clade is defined by labels that match the regexp (instead.\0A of labels passed as arguments)\0A -s: prints the siblings of the clade defined by the labels passed as\0A arguments, in the order in which they appear in the Newick.\0A If -m is also passed, only prints siblings if the labels passed\0A as arguments form a monophyletic group.\0A\0AExamples\0A--------\0A\0A# clade defined by two leaves\0A$ %s data/catarrhini Homo Hylobates\0A\0A# clade defined by a leaf and a inner node (Hominini)\0A$ %s data/catarrhini Hominini Hylobates\0A\0A# clade is monophyletic\0A$ %s -m data/catarrhini Homo Gorilla Pan\0A\0A# clade is not monophyletic (Gorilla is missing)\0A$ %s -m data/catarrhini Homo Pongo Pan\0A\0A# clade defined by a regexp (all Poliovirus)\0A$ %s -r data/HRV.nw '^POLIO.*'\0A\0A# clade defined by Homo and Pan, plus 1 level of context\0A$ %s -c 1 data/catarrhini Homo Pan\0A\00"
define void @help(i8** nocapture %0) {
%2 = load i8*, i8** %0
%3 = tail call i32 @printf(i8* getelementptr inbounds ([1858 x i8], [1858 x i8]* @.str, i64 0, i64 0), i8* %2, i8* %2, i8* %2, i8* %2, i8* %2, i8* %2, i8* %2)
ret void
}