#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*/ puts(char *);
size_t hae(int val) {
  puts("bftxt"
       " "
       "v0.1.1-r1"
       ", Copyright 2014-2015 "
       "Francesco Palumbo"
       " <"
       "franzodev@gmail.com"
       "> \n"
       "Usage: "
       "bftxt"
       " [-h][-l][-a][-m][-r][-n][-c][-s <sep>] \"<string>\"\n"
       "\n"
       "  -h          print this help.\n"
       "  -l          use loops.\n"
       "  -a          use annidated loops.\n"
       "  -m          multiline output.\n"
       "  -r          generate by last char position.\n"
       "  -n          suppress newline at the end of the string.\n"
       "  -c          add names of chars as comments.\n"
       "  -s <sep>    use <sep> as separator between chars.\n"
       "\n"
       "This program is free software: you can redistribute it and/or modify\n"
       "it under the terms of the GNU General Public License as published by\n"
       "the Free Software Foundation, either version 3 of the License, or\n"
       "(at your option) any later version.\n"
       "\n"
       "This program is distributed in the hope that it will be useful,\n"
       "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
       "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
       "GNU General Public License for more details.\n"
       "\n"
       "You should have received a copy of the GNU General Public License\n"
       "along with this program. If not, see <http://www.gnu.org/licenses/>.");
  exit(val);
}


x86 assembly (clang, -O0):
<hae>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
lea    0xece(%rip),%rdi
call   1030 <puts@plt>
mov    -0x4(%rbp),%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<hae>:
push   %rbx
mov    %edi,%ebx
lea    0xed6(%rip),%rdi
call   1030 <puts@plt>
mov    %ebx,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@.str = [1078 x i8] c"bftxt v0.1.1-r1, Copyright 2014-2015 Francesco Palumbo <franzodev@gmail.com> \0AUsage: bftxt [-h][-l][-a][-m][-r][-n][-c][-s <sep>] \22<string>\22\0A\0A -h print this help.\0A -l use loops.\0A -a use annidated loops.\0A -m multiline output.\0A -r generate by last char position.\0A -n suppress newline at the end of the string.\0A -c add names of chars as comments.\0A -s <sep> use <sep> as separator between chars.\0A\0AThis program is free software: you can redistribute it and/or modify\0Ait under the terms of the GNU General Public License as published by\0Athe Free Software Foundation, either version 3 of the License, or\0A(at your option) any later version.\0A\0AThis program is distributed in the hope that it will be useful,\0Abut WITHOUT ANY WARRANTY; without even the implied warranty of\0AMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\0AGNU General Public License for more details.\0A\0AYou should have received a copy of the GNU General Public License\0Aalong with this program. If not, see <http://www.gnu.org/licenses/>.\00"
define i64 @hae(i32 %0) {
%2 = alloca i32
store i32 %0, i32* %2
%3 = call i32 @puts(i8* getelementptr inbounds ([1078 x i8], [1078 x i8]* @.str, i64 0, i64 0))
%4 = load i32, i32* %2
%5 = call i32 @exit(i32 %4)
unreachable
}

LLVM IR (-O2):
@.str = [1078 x i8] c"bftxt v0.1.1-r1, Copyright 2014-2015 Francesco Palumbo <franzodev@gmail.com> \0AUsage: bftxt [-h][-l][-a][-m][-r][-n][-c][-s <sep>] \22<string>\22\0A\0A -h print this help.\0A -l use loops.\0A -a use annidated loops.\0A -m multiline output.\0A -r generate by last char position.\0A -n suppress newline at the end of the string.\0A -c add names of chars as comments.\0A -s <sep> use <sep> as separator between chars.\0A\0AThis program is free software: you can redistribute it and/or modify\0Ait under the terms of the GNU General Public License as published by\0Athe Free Software Foundation, either version 3 of the License, or\0A(at your option) any later version.\0A\0AThis program is distributed in the hope that it will be useful,\0Abut WITHOUT ANY WARRANTY; without even the implied warranty of\0AMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\0AGNU General Public License for more details.\0A\0AYou should have received a copy of the GNU General Public License\0Aalong with this program. If not, see <http://www.gnu.org/licenses/>.\00"
define i64 @hae(i32 %0) {
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1078 x i8], [1078 x i8]* @.str, i64 0, i64 0))
%3 = tail call i32 @exit(i32 %0)
unreachable
}