#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,
                          char, char);
void help(char *exec) {
  printf("Utilisation: %s [MODE] ... [ARGUMENTS]\n"
         "Calcule la signature MD5 (128-bit) d'un message.\n\n"
         "Les modes de lecture suivant sont possible :\n"
         "-i, --stdin            lecture %c%c partir de stdin [d%c%cfaut]\n"
         "-f, --file   [fichier] lecture %c%c partir d'un fichier\n"
         "-s, --string [message] lecture %c%c partir de la commande\n"
         "-h, --help             affiche ce message\n\n"
         "Copyright (c) 2016 Gabriel-Andrew Pollo-Guilbert\n",
         exec, '\xC3', '\xA0', '\xC3', '\xA9', '\xC3', '\xA0', '\xC3', '\xA0');
}


x86 assembly (clang, -O0):
<help>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
mov    $0xffffffc3,%r8d
mov    $0xffffffa0,%ecx
mov    $0xffffffa9,%r9d
mov    %r8d,%edx
movl   $0xffffffc3,(%rsp)
movl   $0xffffffa0,0x8(%rsp)
ff
movl   $0xffffffc3,0x10(%rsp)
ff
movl   $0xffffffa0,0x18(%rsp)
ff
call   1030 <printf@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<help>:
push   %rax
mov    %rdi,%rsi
lea    0xee5(%rip),%rdi
mov    $0xffffffc3,%edx
mov    $0xffffffa0,%ecx
mov    $0xffffffc3,%r8d
mov    $0xffffffa9,%r9d
push   $0xffffffffffffffa0
push   $0xffffffffffffffc3
push   $0xffffffffffffffa0
push   $0xffffffffffffffc3
call   1030 <printf@plt>
add    $0x20,%rsp
pop    %rax
ret

LLVM IR (-O0):
@.str = [405 x i8] c"Utilisation: %s [MODE] ... [ARGUMENTS]\0ACalcule la signature MD5 (128-bit) d'un message.\0A\0ALes modes de lecture suivant sont possible :\0A-i, --stdin lecture %c%c partir de stdin [d%c%cfaut]\0A-f, --file [fichier] lecture %c%c partir d'un fichier\0A-s, --string [message] lecture %c%c partir de la commande\0A-h, --help affiche ce message\0A\0ACopyright (c) 2016 Gabriel-Andrew Pollo-Guilbert\0A\00"
define void @help(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([405 x i8], [405 x i8]* @.str, i64 0, i64 0), i8* %3, i8 signext -61, i8 signext -96, i8 signext -61, i8 signext -87, i8 signext -61, i8 signext -96, i8 signext -61, i8 signext -96)
ret void
}

LLVM IR (-O2):
@.str = [405 x i8] c"Utilisation: %s [MODE] ... [ARGUMENTS]\0ACalcule la signature MD5 (128-bit) d'un message.\0A\0ALes modes de lecture suivant sont possible :\0A-i, --stdin lecture %c%c partir de stdin [d%c%cfaut]\0A-f, --file [fichier] lecture %c%c partir d'un fichier\0A-s, --string [message] lecture %c%c partir de la commande\0A-h, --help affiche ce message\0A\0ACopyright (c) 2016 Gabriel-Andrew Pollo-Guilbert\0A\00"
define void @help(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([405 x i8], [405 x i8]* @.str, i64 0, i64 0), i8* %0, i8 signext -61, i8 signext -96, i8 signext -61, i8 signext -87, i8 signext -61, i8 signext -96, i8 signext -61, i8 signext -96)
ret void
}