#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 intro(void) {
  printf(
      "Cell Life\n---------\n\n"
      "The rules of this game are based on Conway's Game of Life. Tokens are\n"
      "placed on the board, then with every generation a token will live, die, "
      "or\n"
      "be born based on these rules :"
      " o A token with 2 or 3 neighbors survives.\n"
      " o A token with more or less than 2 or 3 neighbors dies from lonelyness "
      "or\n"
      "   overpopulation.\n"
      " o An empty space with exactly 3 neighbors gives birth to a new "
      "token.\n\n"
      "When giving birth the player with the majority of the 3 neighbors of "
      "an\n"
      "empty cell gets the new cell. If no one has the majority (in the case "
      "of\n"
      "a 3 way tie) the cell becomes a hybred that no one controls.\n"
      "Remember to count the number of neighbors same as in minesweeper. In "
      "other\n"
      "words a cell can have up to 8 neighbors.\n\n"
      "The first three moves (Generation 0) are when you place your initial\n"
      "pieces.\n\n"
      "Remember to pay close attention to who's turn it is as every turn a\n"
      "different player gets to go first.\n\n"
      "Good Luck.\n\n");
}


x86 assembly (clang, -O0):
<intro>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<intro>:
lea    0xee9(%rip),%rdi
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [923 x i8] c"Cell Life\0A---------\0A\0AThe rules of this game are based on Conway's Game of Life. Tokens are\0Aplaced on the board, then with every generation a token will live, die, or\0Abe born based on these rules : o A token with 2 or 3 neighbors survives.\0A o A token with more or less than 2 or 3 neighbors dies from lonelyness or\0A overpopulation.\0A o An empty space with exactly 3 neighbors gives birth to a new token.\0A\0AWhen giving birth the player with the majority of the 3 neighbors of an\0Aempty cell gets the new cell. If no one has the majority (in the case of\0Aa 3 way tie) the cell becomes a hybred that no one controls.\0ARemember to count the number of neighbors same as in minesweeper. In other\0Awords a cell can have up to 8 neighbors.\0A\0AThe first three moves (Generation 0) are when you place your initial\0Apieces.\0A\0ARemember to pay close attention to who's turn it is as every turn a\0Adifferent player gets to go first.\0A\0AGood Luck.\0A\0A\00"
define void @intro() {
%1 = call i32 @printf(i8* getelementptr inbounds ([923 x i8], [923 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [922 x i8] c"Cell Life\0A---------\0A\0AThe rules of this game are based on Conway's Game of Life. Tokens are\0Aplaced on the board, then with every generation a token will live, die, or\0Abe born based on these rules : o A token with 2 or 3 neighbors survives.\0A o A token with more or less than 2 or 3 neighbors dies from lonelyness or\0A overpopulation.\0A o An empty space with exactly 3 neighbors gives birth to a new token.\0A\0AWhen giving birth the player with the majority of the 3 neighbors of an\0Aempty cell gets the new cell. If no one has the majority (in the case of\0Aa 3 way tie) the cell becomes a hybred that no one controls.\0ARemember to count the number of neighbors same as in minesweeper. In other\0Awords a cell can have up to 8 neighbors.\0A\0AThe first three moves (Generation 0) are when you place your initial\0Apieces.\0A\0ARemember to pay close attention to who's turn it is as every turn a\0Adifferent player gets to go first.\0A\0AGood Luck.\0A\00"
define void @intro() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([922 x i8], [922 x i8]* @str, i64 0, i64 0))
ret void
}