#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 *, ...);
void about(char *version, char *datestring, char *homepage) {
  printf("Motsognir v%s Copyright (C) Mateusz Viste %s\n\n", version,
         datestring);
  printf("This program is free software: you can redistribute it and/or modify "
         "it under\n"
         "the terms of the GNU General Public License as published by the Free "
         "Software\n"
         "Foundation, either version 3 of the License, or (at your option) any "
         "later\n"
         "version.\n");
  printf("This program is distributed in the hope that it will be useful, but "
         "WITHOUT ANY\n"
         "WARRANTY; without even the implied warranty of MERCHANTABILITY or "
         "FITNESS FOR A\n"
         "PARTICULAR PURPOSE. See the GNU General Public License for more "
         "details.\n\n");
  printf("Motsognir is a robust and reliable open-source gopher server for "
         "POSIX systems.\n"
         "Motsognir is entirely written in ANSI C, without any external "
         "dependencies.\n\n");
  printf("Available command-line parameters:\n"
         "  --config file.conf       use a configuration file in a custom "
         "location\n"
         "\n");
  printf("homepage: %s\n\n", homepage);
}


x86 assembly (clang, -O0):
<about>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x8(%rbp),%rsi
mov    -0x10(%rbp),%rdx
lea    0xecd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xeee(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfd1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10ae(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x113e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x18(%rbp),%rsi
lea    0x119a(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<about>:
push   %rbx
mov    %rdx,%rbx
mov    %rsi,%rdx
mov    %rdi,%rsi
lea    0xecf(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xeff(%rip),%rdi
call   1030 <puts@plt>
lea    0xfe3(%rip),%rdi
call   1030 <puts@plt>
lea    0x10c1(%rip),%rdi
call   1030 <puts@plt>
lea    0x1152(%rip),%rdi
call   1030 <puts@plt>
lea    0xec0(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
pop    %rbx
jmp    1040 <printf@plt>

LLVM IR (-O0):
@.str = [47 x i8] c"Motsognir v%s Copyright (C) Mateusz Viste %s\0A\0A\00"
@.str.1 = [241 x i8] c"This program is free software: you can redistribute it and/or modify it under\0Athe terms of the GNU General Public License as published by the Free Software\0AFoundation, either version 3 of the License, or (at your option) any later\0Aversion.\0A\00"
@.str.2 = [235 x i8] c"This program is distributed in the hope that it will be useful, but WITHOUT ANY\0AWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\0APARTICULAR PURPOSE. See the GNU General Public License for more details.\0A\0A\00"
@.str.3 = [158 x i8] c"Motsognir is a robust and reliable open-source gopher server for POSIX systems.\0AMotsognir is entirely written in ANSI C, without any external dependencies.\0A\0A\00"
@.str.4 = [110 x i8] c"Available command-line parameters:\0A --config file.conf use a configuration file in a custom location\0A\0A\00"
@.str.5 = [15 x i8] c"homepage: %s\0A\0A\00"
define void @about(i8* %0, i8* %1, i8* %2) {
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
store i8* %0, i8** %4
store i8* %1, i8** %5
store i8* %2, i8** %6
%7 = load i8*, i8** %4
%8 = load i8*, i8** %5
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str, i64 0, i64 0), i8* %7, i8* %8)
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([241 x i8], [241 x i8]* @.str.1, i64 0, i64 0))
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([235 x i8], [235 x i8]* @.str.2, i64 0, i64 0))
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([158 x i8], [158 x i8]* @.str.3, i64 0, i64 0))
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([110 x i8], [110 x i8]* @.str.4, i64 0, i64 0))
%14 = load i8*, i8** %6
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.5, i64 0, i64 0), i8* %14)
ret void
}

LLVM IR (-O2):
@.str = [47 x i8] c"Motsognir v%s Copyright (C) Mateusz Viste %s\0A\0A\00"
@.str.5 = [15 x i8] c"homepage: %s\0A\0A\00"
@str = [240 x i8] c"This program is free software: you can redistribute it and/or modify it under\0Athe terms of the GNU General Public License as published by the Free Software\0AFoundation, either version 3 of the License, or (at your option) any later\0Aversion.\00"
@str.6 = [234 x i8] c"This program is distributed in the hope that it will be useful, but WITHOUT ANY\0AWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A\0APARTICULAR PURPOSE. See the GNU General Public License for more details.\0A\00"
@str.7 = [157 x i8] c"Motsognir is a robust and reliable open-source gopher server for POSIX systems.\0AMotsognir is entirely written in ANSI C, without any external dependencies.\0A\00"
@str.8 = [109 x i8] c"Available command-line parameters:\0A --config file.conf use a configuration file in a custom location\0A\00"
define void @about(i8* %0, i8* %1, i8* %2) {
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @.str, i64 0, i64 0), i8* %0, i8* %1)
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([240 x i8], [240 x i8]* @str, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([234 x i8], [234 x i8]* @str.6, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([157 x i8], [157 x i8]* @str.7, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([109 x i8], [109 x i8]* @str.8, i64 0, i64 0))
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.5, i64 0, i64 0), i8* %2)
ret void
}