#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*/ fprintf(int /*<<< orphan*/, char *, char *);
int /*<<< orphan*/ stderr;
void error_print(char *arr) {
  fprintf(stderr,
          "\n%s prints to the output the info about the phase distribution\n",
          arr);
  fprintf(stderr,
          "\nUSAGE: %s  P1 [P2], where P1 and P1 are \nnames of datafiles "
          "containing the phase distributions\nthe program will output to the "
          "stdout the phase map with shift extracted\nif two files are given "
          "the program will extract the second phase\nfrom the first one and "
          "then output the difference to the stdout\n\n",
          arr);
}


x86 assembly (clang, -O0):
<error_print>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    0x2ebd(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xed0(%rip),%rsi
call   1030 <fprintf@plt>
mov    0x2ea4(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xef7(%rip),%rsi
call   1030 <fprintf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<error_print>:
push   %r14
push   %rbx
push   %rax
mov    %rdi,%rbx
mov    0x2ec2(%rip),%r14
mov    (%r14),%edi
lea    0xed8(%rip),%rsi
mov    %rbx,%rdx
call   1030 <fprintf@plt>
mov    (%r14),%edi
lea    0xf06(%rip),%rsi
mov    %rbx,%rdx
add    $0x8,%rsp
pop    %rbx
pop    %r14
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [64 x i8] c"\0A%s prints to the output the info about the phase distribution\0A\00"
@.str.1 = [300 x i8] c"\0AUSAGE: %s P1 [P2], where P1 and P1 are \0Anames of datafiles containing the phase distributions\0Athe program will output to the stdout the phase map with shift extracted\0Aif two files are given the program will extract the second phase\0Afrom the first one and then output the difference to the stdout\0A\0A\00"
define void @error_print(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i32, i32* @stderr
%4 = load i8*, i8** %2
%5 = call i32 @fprintf(i32 %3, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str, i64 0, i64 0), i8* %4)
%6 = load i32, i32* @stderr
%7 = load i8*, i8** %2
%8 = call i32 @fprintf(i32 %6, i8* getelementptr inbounds ([300 x i8], [300 x i8]* @.str.1, i64 0, i64 0), i8* %7)
ret void
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [64 x i8] c"\0A%s prints to the output the info about the phase distribution\0A\00"
@.str.1 = [300 x i8] c"\0AUSAGE: %s P1 [P2], where P1 and P1 are \0Anames of datafiles containing the phase distributions\0Athe program will output to the stdout the phase map with shift extracted\0Aif two files are given the program will extract the second phase\0Afrom the first one and then output the difference to the stdout\0A\0A\00"
define void @error_print(i8* %0) {
%2 = load i32, i32* @stderr
%3 = tail call i32 @fprintf(i32 %2, i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str, i64 0, i64 0), i8* %0)
%4 = load i32, i32* @stderr
%5 = tail call i32 @fprintf(i32 %4, i8* getelementptr inbounds ([300 x i8], [300 x i8]* @.str.1, i64 0, i64 0), i8* %0)
ret void
}