#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*/ printk(char *);
int init_module(void) {
  printk("<1>Hello_world\n");
  printk("<1> _   _      _ _                            _     _   _ \n");
  printk("<1>| | | | ___| | | ___   __      _____  _ __| | __| | | |\n");
  printk("<1>| |_| |/ _ \\ | |/ _ \\  \\ \\ /\\ / / _ \\| '__| |/ _` | | |\n");
  printk("<1>|  _  |  __/ | | (_) |  \\ V  V / (_) | |  | | (_| | |_|\n");
  printk("<1>|_| |_|\\___|_|_|\\___/    \\_/\\_/ \\___/|_|  |_|\\__,_| (_)\n");
  printk("<1>                                                       \n");
  return 0;
}


x86 assembly (clang, -O0):
<init_module>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printk@plt>
lea    0xee9(%rip),%rdi
call   1030 <printk@plt>
lea    0xf19(%rip),%rdi
call   1030 <printk@plt>
lea    0xf49(%rip),%rdi
call   1030 <printk@plt>
lea    0xf79(%rip),%rdi
call   1030 <printk@plt>
lea    0xfa9(%rip),%rdi
call   1030 <printk@plt>
lea    0xfd9(%rip),%rdi
call   1030 <printk@plt>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_module>:
push   %rax
lea    0xee8(%rip),%rdi
call   1030 <printk@plt>
lea    0xeec(%rip),%rdi
call   1030 <printk@plt>
lea    0xf1c(%rip),%rdi
call   1030 <printk@plt>
lea    0xf4c(%rip),%rdi
call   1030 <printk@plt>
lea    0xf7c(%rip),%rdi
call   1030 <printk@plt>
lea    0xfac(%rip),%rdi
call   1030 <printk@plt>
lea    0xfdc(%rip),%rdi
call   1030 <printk@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [16 x i8] c"<1>Hello_world\0A\00"
@.str.1 = [60 x i8] c"<1> _ _ _ _ _ _ _ \0A\00"
@.str.2 = [60 x i8] c"<1>| | | | ___| | | ___ __ _____ _ __| | __| | | |\0A\00"
@.str.3 = [60 x i8] c"<1>| |_| |/ _ \\ | |/ _ \\ \\ \\ /\\ / / _ \\| '__| |/ _` | | |\0A\00"
@.str.4 = [60 x i8] c"<1>| _ | __/ | | (_) | \\ V V / (_) | | | | (_| | |_|\0A\00"
@.str.5 = [60 x i8] c"<1>|_| |_|\\___|_|_|\\___/ \\_/\\_/ \\___/|_| |_|\\__,_| (_)\0A\00"
@.str.6 = [60 x i8] c"<1> \0A\00"
define i32 @init_module() {
%1 = call i32 @printk(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.3, i64 0, i64 0))
%5 = call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.4, i64 0, i64 0))
%6 = call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.5, i64 0, i64 0))
%7 = call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.6, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@.str = [16 x i8] c"<1>Hello_world\0A\00"
@.str.1 = [60 x i8] c"<1> _ _ _ _ _ _ _ \0A\00"
@.str.2 = [60 x i8] c"<1>| | | | ___| | | ___ __ _____ _ __| | __| | | |\0A\00"
@.str.3 = [60 x i8] c"<1>| |_| |/ _ \\ | |/ _ \\ \\ \\ /\\ / / _ \\| '__| |/ _` | | |\0A\00"
@.str.4 = [60 x i8] c"<1>| _ | __/ | | (_) | \\ V V / (_) | | | | (_| | |_|\0A\00"
@.str.5 = [60 x i8] c"<1>|_| |_|\\___|_|_|\\___/ \\_/\\_/ \\___/|_| |_|\\__,_| (_)\0A\00"
@.str.6 = [60 x i8] c"<1> \0A\00"
define i32 @init_module() {
%1 = tail call i32 @printk(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.2, i64 0, i64 0))
%4 = tail call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.3, i64 0, i64 0))
%5 = tail call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.4, i64 0, i64 0))
%6 = tail call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.5, i64 0, i64 0))
%7 = tail call i32 @printk(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.6, i64 0, i64 0))
ret i32 0
}