#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*/ pause_clear(int, int);
int /*<<< orphan*/ printf(char *);
void display_help(void) {
  printf("Help\n\n");
  printf("Order of Operation: Multiply - Division, Addition - Subtraction\n");
  printf(
      "The key to solving the equations generated by this program lies in "
      "using the Order of Operations (given above) in order to help one solve "
      "them. When solving equations, you normally work left to right, provided "
      "that each operator (+, -, /, *) has the same precedence. However, if "
      "you have a multiplication or division operator, you must do its terms "
      "first, prior to doing any addition or subtraction. Operators of the "
      "same precedence still work left to right, so, for example, if you have "
      "the first and third operator being multiplication or division "
      "operators, do the first operator first, then the third, then do the "
      "second operator with the results of the first and third operators (in "
      "this example, the second operator has a different precedence).\nAlso, "
      "remember that an addition of a negative number is the samething as "
      "subtraction, and that the subtraction of a negative number is the same "
      "thing as addition. Dividing 0 by any number has a result of 0, and "
      "multiplying any number by 0 has a result of 0. Although this program "
      "doesn't generate any, any number divided by 0 does not exist.\n");
  printf("\n");
  pause_clear(1, 1);
}


x86 assembly (clang, -O0):
<display_help>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
call   1030 <printf@plt>
lea    0xed0(%rip),%rdi
call   1030 <printf@plt>
lea    0xf05(%rip),%rdi
call   1030 <printf@plt>
lea    0xeb6(%rip),%rdi
call   1030 <printf@plt>
mov    $0x1,%esi
mov    %esi,%edi
call   1040 <pause_clear@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<display_help>:
push   %rax
lea    0xec8(%rip),%rdi
call   1040 <puts@plt>
lea    0xec2(%rip),%rdi
call   1040 <puts@plt>
lea    0xef6(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    $0x1,%edi
mov    $0x1,%esi
pop    %rax
jmp    1050 <pause_clear@plt>

LLVM IR (-O0):
@.str = [7 x i8] c"Help\0A\0A\00"
@.str.1 = [65 x i8] c"Order of Operation: Multiply - Division, Addition - Subtraction\0A\00"
@.str.2 = [1094 x i8] c"The key to solving the equations generated by this program lies in using the Order of Operations (given above) in order to help one solve them. When solving equations, you normally work left to right, provided that each operator (+, -, /, *) has the same precedence. However, if you have a multiplication or division operator, you must do its terms first, prior to doing any addition or subtraction. Operators of the same precedence still work left to right, so, for example, if you have the first and third operator being multiplication or division operators, do the first operator first, then the third, then do the second operator with the results of the first and third operators (in this example, the second operator has a different precedence).\0AAlso, remember that an addition of a negative number is the samething as subtraction, and that the subtraction of a negative number is the same thing as addition. Dividing 0 by any number has a result of 0, and multiplying any number by 0 has a result of 0. Although this program doesn't generate any, any number divided by 0 does not exist.\0A\00"
@.str.3 = [2 x i8] c"\0A\00"
define void @display_help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([1094 x i8], [1094 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
%5 = call i32 @pause_clear(i32 1, i32 1)
ret void
}

LLVM IR (-O2):
@str = [6 x i8] c"Help\0A\00"
@str.4 = [64 x i8] c"Order of Operation: Multiply - Division, Addition - Subtraction\00"
@str.5 = [1093 x i8] c"The key to solving the equations generated by this program lies in using the Order of Operations (given above) in order to help one solve them. When solving equations, you normally work left to right, provided that each operator (+, -, /, *) has the same precedence. However, if you have a multiplication or division operator, you must do its terms first, prior to doing any addition or subtraction. Operators of the same precedence still work left to right, so, for example, if you have the first and third operator being multiplication or division operators, do the first operator first, then the third, then do the second operator with the results of the first and third operators (in this example, the second operator has a different precedence).\0AAlso, remember that an addition of a negative number is the samething as subtraction, and that the subtraction of a negative number is the same thing as addition. Dividing 0 by any number has a result of 0, and multiplying any number by 0 has a result of 0. Although this program doesn't generate any, any number divided by 0 does not exist.\00"
define void @display_help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.4, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1093 x i8], [1093 x i8]* @str.5, i64 0, i64 0))
%4 = tail call i32 @putchar(i32 10)
%5 = tail call i32 @pause_clear(i32 1, i32 1)
ret void
}