#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 printUsage() {
  printf("============================================================\n"
         "* This is a program to encrypt / decrypt file.\n"
         "* \n"
         "* Usage:\n"
         "* -i: Input file name. If you leave this blank, program will convert "
         "all files in the directory (exclude subdirectories) and ignore "
         "output setting.\n"
         "* -o: Output file name. If you leave this blank, it will generate "
         "the output file in \"xorered\" sub directory.\n"
         "* -x: XOR parameter. Binary will be XORed by this number. Default is "
         "0x19 (25). You can use 0xXX as a hexadecimal number, 0bXX as a "
         "binary number, or just XX as a decimal number.\n"
         "* -s: Start point parameter (Byte). Default is 0. Program will apply "
         "conversion right from this point.\n"
         "* -e: End point parameter (Byte). Default is 0. While it's 0 it'll "
         "be fixed to file size, and program will stop applying encryption "
         "before this point.\n"
         "============================================================\n\n");
}


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

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

LLVM IR (-O0):
@.str = [874 x i8] c"============================================================\0A* This is a program to encrypt / decrypt file.\0A* \0A* Usage:\0A* -i: Input file name. If you leave this blank, program will convert all files in the directory (exclude subdirectories) and ignore output setting.\0A* -o: Output file name. If you leave this blank, it will generate the output file in \22xorered\22 sub directory.\0A* -x: XOR parameter. Binary will be XORed by this number. Default is 0x19 (25). You can use 0xXX as a hexadecimal number, 0bXX as a binary number, or just XX as a decimal number.\0A* -s: Start point parameter (Byte). Default is 0. Program will apply conversion right from this point.\0A* -e: End point parameter (Byte). Default is 0. While it's 0 it'll be fixed to file size, and program will stop applying encryption before this point.\0A============================================================\0A\0A\00"
define void @printUsage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([874 x i8], [874 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [873 x i8] c"============================================================\0A* This is a program to encrypt / decrypt file.\0A* \0A* Usage:\0A* -i: Input file name. If you leave this blank, program will convert all files in the directory (exclude subdirectories) and ignore output setting.\0A* -o: Output file name. If you leave this blank, it will generate the output file in \22xorered\22 sub directory.\0A* -x: XOR parameter. Binary will be XORed by this number. Default is 0x19 (25). You can use 0xXX as a hexadecimal number, 0bXX as a binary number, or just XX as a decimal number.\0A* -s: Start point parameter (Byte). Default is 0. Program will apply conversion right from this point.\0A* -e: End point parameter (Byte). Default is 0. While it's 0 it'll be fixed to file size, and program will stop applying encryption before this point.\0A============================================================\0A\00"
define void @printUsage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([873 x i8], [873 x i8]* @str, i64 0, i64 0))
ret void
}