#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 hint_msg() {
  printf("Welcome;\n");
  printf("This is a basic program for adding, subtracting, and multiplying "
         "polynomials.\n");
  printf("A polynomial is a function, that takes the general form "
         "of:\n\t->\ta(n)*x^(n) + a(n-1)*x^(n-1) + a(n-2)*x^(n-2) + ... + "
         "a(0)\nWhere:\ta(i) is an arbitrary constant, positive or negative, "
         "with or without a fraction, representing the coefficient of the "
         "unknown X.\n\tn is a positive integer, representing the power of the "
         "unknown X.\n\n");
  printf("\t*Notes on input*\n-> Order of the terms does not need to be "
         "decending or ascending based on it's power.\n-> Presence of the "
         "brackets { ( and ) } is not neccessary.\n-> Presence of '*' "
         "(multiplied by) sign between the coefficient and the unknow X is not "
         "neccessary.\n-> Presence of '^' (raised to the power of) sign is "
         "required. Otherwise the input would be concidered incorrect.\n\n");
  printf("\t\t****\n");
}


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

x86 assembly (clang, -O2):
<hint_msg>:
push   %rax
lea    0xee8(%rip),%rdi
call   1030 <puts@plt>
lea    0xee5(%rip),%rdi
call   1030 <puts@plt>
lea    0xf27(%rip),%rdi
call   1030 <puts@plt>
lea    0x1060(%rip),%rdi
call   1030 <puts@plt>
lea    0x11cd(%rip),%rdi
pop    %rax
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [10 x i8] c"Welcome;\0A\00"
@.str.1 = [79 x i8] c"This is a basic program for adding, subtracting, and multiplying polynomials.\0A\00"
@.str.2 = [326 x i8] c"A polynomial is a function, that takes the general form of:\0A\09->\09a(n)*x^(n) + a(n-1)*x^(n-1) + a(n-2)*x^(n-2) + ... + a(0)\0AWhere:\09a(i) is an arbitrary constant, positive or negative, with or without a fraction, representing the coefficient of the unknown X.\0A\09n is a positive integer, representing the power of the unknown X.\0A\0A\00"
@.str.3 = [378 x i8] c"\09*Notes on input*\0A-> Order of the terms does not need to be decending or ascending based on it's power.\0A-> Presence of the brackets { ( and ) } is not neccessary.\0A-> Presence of '*' (multiplied by) sign between the coefficient and the unknow X is not neccessary.\0A-> Presence of '^' (raised to the power of) sign is required. Otherwise the input would be concidered incorrect.\0A\0A\00"
@.str.4 = [8 x i8] c"\09\09****\0A\00"
define void @hint_msg() {
%1 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([326 x i8], [326 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 @printf(i8* getelementptr inbounds ([378 x i8], [378 x i8]* @.str.3, i64 0, i64 0))
%5 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [9 x i8] c"Welcome;\00"
@str.5 = [78 x i8] c"This is a basic program for adding, subtracting, and multiplying polynomials.\00"
@str.6 = [325 x i8] c"A polynomial is a function, that takes the general form of:\0A\09->\09a(n)*x^(n) + a(n-1)*x^(n-1) + a(n-2)*x^(n-2) + ... + a(0)\0AWhere:\09a(i) is an arbitrary constant, positive or negative, with or without a fraction, representing the coefficient of the unknown X.\0A\09n is a positive integer, representing the power of the unknown X.\0A\00"
@str.7 = [377 x i8] c"\09*Notes on input*\0A-> Order of the terms does not need to be decending or ascending based on it's power.\0A-> Presence of the brackets { ( and ) } is not neccessary.\0A-> Presence of '*' (multiplied by) sign between the coefficient and the unknow X is not neccessary.\0A-> Presence of '^' (raised to the power of) sign is required. Otherwise the input would be concidered incorrect.\0A\00"
@str.8 = [7 x i8] c"\09\09****\00"
define void @hint_msg() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([78 x i8], [78 x i8]* @str.5, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([325 x i8], [325 x i8]* @str.6, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([377 x i8], [377 x i8]* @str.7, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.8, i64 0, i64 0))
ret void
}