#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 */
char const *random_haiku(char *, char *, char *, char *, char *, char *,
                         int /*<<< orphan*/ *);
const char *libhaiku_generic(void) {
  return random_haiku("Error messages\n"
                      "cannot completely convey.\n"
                      "We now know shared loss.\n",
                      "Errors have occurred.\n"
                      "We won't tell you where or why.\n"
                      "Lazy programmers.\n",
                      "To have no errors.\n"
                      "Would be life without meaning.\n"
                      "No struggle, no joy.\n",
                      "There is a chasm\n"
                      "of carbon and silicon\n"
                      "the software can't bridge.\n",
                      "Beauty, success, truth\n"
                      "He is blessed who has two.\n"
                      "Your program has none.\n",
                      "Technical support\n"
                      "would be a flowing source of\n"
                      "sweet commiseration.\n",
                      NULL);
}


x86 assembly (clang, -O0):
<libhaiku_generic>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
lea    0xee1(%rip),%rdi
lea    0xf1d(%rip),%rsi
lea    0xf5f(%rip),%rdx
lea    0xfa0(%rip),%rcx
lea    0xfdc(%rip),%r8
lea    0x101f(%rip),%r9
xor    %eax,%eax
movq   $0x0,(%rsp)
call   1030 <random_haiku@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<libhaiku_generic>:
push   %rax
movq   $0x0,(%rsp)
lea    0xee0(%rip),%rdi
lea    0xf1c(%rip),%rsi
lea    0xf5e(%rip),%rdx
lea    0xf9f(%rip),%rcx
lea    0xfdb(%rip),%r8
lea    0x101e(%rip),%r9
call   1030 <random_haiku@plt>
pop    %rcx
ret

LLVM IR (-O0):
@.str = [67 x i8] c"Error messages\0Acannot completely convey.\0AWe now know shared loss.\0A\00"
@.str.1 = [73 x i8] c"Errors have occurred.\0AWe won't tell you where or why.\0ALazy programmers.\0A\00"
@.str.2 = [72 x i8] c"To have no errors.\0AWould be life without meaning.\0ANo struggle, no joy.\0A\00"
@.str.3 = [67 x i8] c"There is a chasm\0Aof carbon and silicon\0Athe software can't bridge.\0A\00"
@.str.4 = [74 x i8] c"Beauty, success, truth\0AHe is blessed who has two.\0AYour program has none.\0A\00"
@.str.5 = [69 x i8] c"Technical support\0Awould be a flowing source of\0Asweet commiseration.\0A\00"
define i8* @libhaiku_generic() {
%1 = call i8* @random_haiku(i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([72 x i8], [72 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.5, i64 0, i64 0), i32* null)
ret i8* %1
}

LLVM IR (-O2):
@.str = [67 x i8] c"Error messages\0Acannot completely convey.\0AWe now know shared loss.\0A\00"
@.str.1 = [73 x i8] c"Errors have occurred.\0AWe won't tell you where or why.\0ALazy programmers.\0A\00"
@.str.2 = [72 x i8] c"To have no errors.\0AWould be life without meaning.\0ANo struggle, no joy.\0A\00"
@.str.3 = [67 x i8] c"There is a chasm\0Aof carbon and silicon\0Athe software can't bridge.\0A\00"
@.str.4 = [74 x i8] c"Beauty, success, truth\0AHe is blessed who has two.\0AYour program has none.\0A\00"
@.str.5 = [69 x i8] c"Technical support\0Awould be a flowing source of\0Asweet commiseration.\0A\00"
define i8* @libhaiku_generic() {
%1 = tail call i8* @random_haiku(i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([72 x i8], [72 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.5, i64 0, i64 0), i32* null)
ret i8* %1
}