#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 stampa_messaggio_iniziale(void) {
  printf("\nInserire la formula di logica dei predicati in forma normale "
         "prenessa.\n\n"
         "==============================\n"
         "# = esiste\n"
         "* = per ogni\n"
         "^ = operatore di negazione\n"
         "==============================\n\n"
         "Le costanti devono appartenere a {a, b, c, d, e, f, g, h, i, j, k, "
         "l, m}\n"
         "Le variabili devono appartenere a {n, o, p, q, r, s, t, u, v, w, x, "
         "y, z}\n"
         "La formula deve contenere un (ed un solo) simbolo di predicato.\n"
         "Il simbolo di predicato dev'essere una lettera maiuscola.\n\n"
         "Esempi di sintassi correttamente acquisibili dal programma:\n\n"
         "1) #x*y^Pxyabc\n"
         "2) #x *y ^P x y a b c\n"
         "3) #x*y ^P x,y,a,b,c\n"
         "4) #x *y ^P x, y, a, b, c\n"
         "5) #x *y ^P (x,y,a,b,c)\n"
         "6) #x *y ^P(x,y,a,b,c) \n"
         "7) #x*y ^P (x, y, a, b, c)\n\n"
         "... ");
}


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

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

LLVM IR (-O0):
@.str = [683 x i8] c"\0AInserire la formula di logica dei predicati in forma normale prenessa.\0A\0A==============================\0A# = esiste\0A* = per ogni\0A^ = operatore di negazione\0A==============================\0A\0ALe costanti devono appartenere a {a, b, c, d, e, f, g, h, i, j, k, l, m}\0ALe variabili devono appartenere a {n, o, p, q, r, s, t, u, v, w, x, y, z}\0ALa formula deve contenere un (ed un solo) simbolo di predicato.\0AIl simbolo di predicato dev'essere una lettera maiuscola.\0A\0AEsempi di sintassi correttamente acquisibili dal programma:\0A\0A1) #x*y^Pxyabc\0A2) #x *y ^P x y a b c\0A3) #x*y ^P x,y,a,b,c\0A4) #x *y ^P x, y, a, b, c\0A5) #x *y ^P (x,y,a,b,c)\0A6) #x *y ^P(x,y,a,b,c) \0A7) #x*y ^P (x, y, a, b, c)\0A\0A... \00"
define void @stampa_messaggio_iniziale() {
%1 = call i32 @printf(i8* getelementptr inbounds ([683 x i8], [683 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [683 x i8] c"\0AInserire la formula di logica dei predicati in forma normale prenessa.\0A\0A==============================\0A# = esiste\0A* = per ogni\0A^ = operatore di negazione\0A==============================\0A\0ALe costanti devono appartenere a {a, b, c, d, e, f, g, h, i, j, k, l, m}\0ALe variabili devono appartenere a {n, o, p, q, r, s, t, u, v, w, x, y, z}\0ALa formula deve contenere un (ed un solo) simbolo di predicato.\0AIl simbolo di predicato dev'essere una lettera maiuscola.\0A\0AEsempi di sintassi correttamente acquisibili dal programma:\0A\0A1) #x*y^Pxyabc\0A2) #x *y ^P x y a b c\0A3) #x*y ^P x,y,a,b,c\0A4) #x *y ^P x, y, a, b, c\0A5) #x *y ^P (x,y,a,b,c)\0A6) #x *y ^P(x,y,a,b,c) \0A7) #x*y ^P (x, y, a, b, c)\0A\0A... \00"
define void @stampa_messaggio_iniziale() {
%1 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([683 x i8], [683 x i8]* @.str, i64 0, i64 0))
ret void
}