#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 const *);
int const rand();
int /*<<< orphan*/ srand(int /*<<< orphan*/);
int /*<<< orphan*/ time(int /*<<< orphan*/ *);
int main() {
  srand(time(NULL));
  const int n = 8;
  const char *quotes[n];
  quotes[0] = "Le chaînon manquant entre le singe et l'homme c'est nous.";
  quotes[1] = "Les penses-bêtes sont les porte-clés de la mémoire.";
  quotes[2] = "On n'attrape pas des mouches avec du vinaigre ni une "
              "broncho-pneumonie dans un bain turc.";
  quotes[3] =
      "Quand on ne condamnera plus les portes et quand on n'acquittera plus "
      "les factures, la justice aura fait un beau demi-tour en avant.";
  quotes[4] = "Si vous avez les yeux plus grand que le ventre, vous n'êtes pas "
              "près de trouver une paire de lunette.";
  quotes[5] = "En politique, parler pour ne rien dire et ne rien dire pour "
              "parler sont les deux principes majeurs de tous ceux qui "
              "feraient mieux de la fermer avant de l'ouvrir.";
  quotes[6] =
      "Mourir en bonne santé, c'est le voeu de tout bon vivant bien portant.";
  quotes[7] = "Mettre de l'argent de côté pour l'avoir devant soi, est, pour "
              "paradoxale qu'elle soit, une façon comme une autre d'assurer "
              "ses arrières à effet de ne pas l'avoir dans le dos.";
  int r = rand() % n;
  printf("%s\n", quotes[r]);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
xor    %eax,%eax
mov    %eax,%edi
call   1050 <time@plt>
mov    %eax,%edi
call   1040 <srand@plt>
movl   $0x8,-0x4(%rbp)
mov    %rsp,%rax
mov    %rax,-0x10(%rbp)
lea    0xe93(%rip),%rax
mov    %rax,-0x60(%rbp)
lea    0xec3(%rip),%rax
mov    %rax,-0x58(%rbp)
lea    0xeef(%rip),%rax
mov    %rax,-0x50(%rbp)
lea    0xf3e(%rip),%rax
mov    %rax,-0x48(%rbp)
lea    0xfb7(%rip),%rax
mov    %rax,-0x40(%rbp)
lea    0x1014(%rip),%rax
mov    %rax,-0x38(%rbp)
lea    0x10ac(%rip),%rax
mov    %rax,-0x30(%rbp)
lea    0x10e8(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    $0x0,%al
call   1060 <rand@plt>
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
movslq -0x14(%rbp),%rax
mov    -0x60(%rbp,%rax,8),%rsi
lea    0x1176(%rip),%rdi
call   1030 <printf@plt>
mov    -0x10(%rbp),%rax
mov    %rax,%rsp
xor    %eax,%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x48,%rsp
xor    %edi,%edi
call   1050 <time@plt>
mov    %eax,%edi
call   1040 <srand@plt>
lea    0xea7(%rip),%rax
mov    %rax,(%rsp)
lea    0xed7(%rip),%rax
mov    %rax,0x8(%rsp)
lea    0xf02(%rip),%rax
mov    %rax,0x10(%rsp)
lea    0xf50(%rip),%rax
mov    %rax,0x18(%rsp)
lea    0xfc8(%rip),%rax
mov    %rax,0x20(%rsp)
lea    0x1024(%rip),%rax
mov    %rax,0x28(%rsp)
lea    0x10bb(%rip),%rax
mov    %rax,0x30(%rsp)
lea    0x10f6(%rip),%rax
mov    %rax,0x38(%rsp)
xor    %eax,%eax
call   1060 <rand@plt>
lea    0x7(%rax),%ecx
test   %eax,%eax
cmovns %eax,%ecx
and    $0xfffffff8,%ecx
sub    %ecx,%eax
cltq
mov    (%rsp,%rax,8),%rsi
lea    0x1184(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x48,%rsp
ret

LLVM IR (-O0):
@.str = [59 x i8] c"Le cha\C3\AEnon manquant entre le singe et l'homme c'est nous.\00"
@.str.1 = [55 x i8] c"Les penses-b\C3\AAtes sont les porte-cl\C3\A9s de la m\C3\A9moire.\00"
@.str.2 = [90 x i8] c"On n'attrape pas des mouches avec du vinaigre ni une broncho-pneumonie dans un bain turc.\00"
@.str.3 = [132 x i8] c"Quand on ne condamnera plus les portes et quand on n'acquittera plus les factures, la justice aura fait un beau demi-tour en avant.\00"
@.str.4 = [104 x i8] c"Si vous avez les yeux plus grand que le ventre, vous n'\C3\AAtes pas pr\C3\A8s de trouver une paire de lunette.\00"
@.str.5 = [163 x i8] c"En politique, parler pour ne rien dire et ne rien dire pour parler sont les deux principes majeurs de tous ceux qui feraient mieux de la fermer avant de l'ouvrir.\00"
@.str.6 = [71 x i8] c"Mourir en bonne sant\C3\A9, c'est le voeu de tout bon vivant bien portant.\00"
@.str.7 = [180 x i8] c"Mettre de l'argent de c\C3\B4t\C3\A9 pour l'avoir devant soi, est, pour paradoxale qu'elle soit, une fa\C3\A7on comme une autre d'assurer ses arri\C3\A8res \C3\A0 effet de ne pas l'avoir dans le dos.\00"
@.str.8 = [4 x i8] c"%s\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8*
%3 = alloca i32
%4 = call i32 @time(i32* null)
%5 = call i32 @srand(i32 %4)
store i32 8, i32* %1
%6 = call i8* @llvm.stacksave()
store i8* %6, i8** %2
%7 = alloca i8*, i64 8
%8 = getelementptr inbounds i8*, i8** %7, i64 0
store i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str, i64 0, i64 0), i8** %8
%9 = getelementptr inbounds i8*, i8** %7, i64 1
store i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.1, i64 0, i64 0), i8** %9
%10 = getelementptr inbounds i8*, i8** %7, i64 2
store i8* getelementptr inbounds ([90 x i8], [90 x i8]* @.str.2, i64 0, i64 0), i8** %10
%11 = getelementptr inbounds i8*, i8** %7, i64 3
store i8* getelementptr inbounds ([132 x i8], [132 x i8]* @.str.3, i64 0, i64 0), i8** %11
%12 = getelementptr inbounds i8*, i8** %7, i64 4
store i8* getelementptr inbounds ([104 x i8], [104 x i8]* @.str.4, i64 0, i64 0), i8** %12
%13 = getelementptr inbounds i8*, i8** %7, i64 5
store i8* getelementptr inbounds ([163 x i8], [163 x i8]* @.str.5, i64 0, i64 0), i8** %13
%14 = getelementptr inbounds i8*, i8** %7, i64 6
store i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.6, i64 0, i64 0), i8** %14
%15 = getelementptr inbounds i8*, i8** %7, i64 7
store i8* getelementptr inbounds ([180 x i8], [180 x i8]* @.str.7, i64 0, i64 0), i8** %15
%16 = call i32 (...) @rand()
%17 = srem i32 %16, 8
store i32 %17, i32* %3
%18 = load i32, i32* %3
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds i8*, i8** %7, i64 %19
%21 = load i8*, i8** %20
%22 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0), i8* %21)
%23 = load i8*, i8** %2
ret i32 0
}

LLVM IR (-O2):
@.str = [59 x i8] c"Le cha\C3\AEnon manquant entre le singe et l'homme c'est nous.\00"
@.str.1 = [55 x i8] c"Les penses-b\C3\AAtes sont les porte-cl\C3\A9s de la m\C3\A9moire.\00"
@.str.2 = [90 x i8] c"On n'attrape pas des mouches avec du vinaigre ni une broncho-pneumonie dans un bain turc.\00"
@.str.3 = [132 x i8] c"Quand on ne condamnera plus les portes et quand on n'acquittera plus les factures, la justice aura fait un beau demi-tour en avant.\00"
@.str.4 = [104 x i8] c"Si vous avez les yeux plus grand que le ventre, vous n'\C3\AAtes pas pr\C3\A8s de trouver une paire de lunette.\00"
@.str.5 = [163 x i8] c"En politique, parler pour ne rien dire et ne rien dire pour parler sont les deux principes majeurs de tous ceux qui feraient mieux de la fermer avant de l'ouvrir.\00"
@.str.6 = [71 x i8] c"Mourir en bonne sant\C3\A9, c'est le voeu de tout bon vivant bien portant.\00"
@.str.7 = [180 x i8] c"Mettre de l'argent de c\C3\B4t\C3\A9 pour l'avoir devant soi, est, pour paradoxale qu'elle soit, une fa\C3\A7on comme une autre d'assurer ses arri\C3\A8res \C3\A0 effet de ne pas l'avoir dans le dos.\00"
@.str.8 = [4 x i8] c"%s\0A\00"
define i32 @main() {
%1 = tail call i32 @time(i32* null)
%2 = tail call i32 @srand(i32 %1)
%3 = alloca [8 x i8*]
%4 = getelementptr inbounds [8 x i8*], [8 x i8*]* %3, i64 0, i64 0
store i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str, i64 0, i64 0), i8** %4
%5 = getelementptr inbounds [8 x i8*], [8 x i8*]* %3, i64 0, i64 1
store i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.1, i64 0, i64 0), i8** %5
%6 = getelementptr inbounds [8 x i8*], [8 x i8*]* %3, i64 0, i64 2
store i8* getelementptr inbounds ([90 x i8], [90 x i8]* @.str.2, i64 0, i64 0), i8** %6
%7 = getelementptr inbounds [8 x i8*], [8 x i8*]* %3, i64 0, i64 3
store i8* getelementptr inbounds ([132 x i8], [132 x i8]* @.str.3, i64 0, i64 0), i8** %7
%8 = getelementptr inbounds [8 x i8*], [8 x i8*]* %3, i64 0, i64 4
store i8* getelementptr inbounds ([104 x i8], [104 x i8]* @.str.4, i64 0, i64 0), i8** %8
%9 = getelementptr inbounds [8 x i8*], [8 x i8*]* %3, i64 0, i64 5
store i8* getelementptr inbounds ([163 x i8], [163 x i8]* @.str.5, i64 0, i64 0), i8** %9
%10 = getelementptr inbounds [8 x i8*], [8 x i8*]* %3, i64 0, i64 6
store i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.6, i64 0, i64 0), i8** %10
%11 = getelementptr inbounds [8 x i8*], [8 x i8*]* %3, i64 0, i64 7
store i8* getelementptr inbounds ([180 x i8], [180 x i8]* @.str.7, i64 0, i64 0), i8** %11
%12 = tail call i32 (...) @rand()
%13 = srem i32 %12, 8
%14 = sext i32 %13 to i64
%15 = getelementptr inbounds [8 x i8*], [8 x i8*]* %3, i64 0, i64 %14
%16 = load i8*, i8** %15
%17 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0), i8* %16)
ret i32 0
}