#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*/ EXIT_FAILURE;
int /*<<< orphan*/ exit(int /*<<< orphan*/);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, char *);
int /*<<< orphan*/ stderr;
void DisplayUsage(void) {
  {
    fprintf(
        stderr, "%s\n",
        "$Revision: 1.6 $\n"
        "usage: apply_mask [-v] [-d] [-b] [-B] [-s] [-f] [-S]\n"
        "                  [-m mask_value_in] [-M mask_value_out]\n"
        "          bytes_per_cell cols_in rows_in\n"
        "          col_start_in row_start_in cols_in_region rows_in_region\n"
        "          mask_file_in file_in file_out\n"
        "  input : bytes_per_cell - the number of bytes per single grid "
        "location\n"
        "            in file_in and file_out. Must be 1, 2, 4, or 8.\n"
        "            NOTE: If bytes_per_cell is 8, then -f must be specified "
        "and\n"
        "                  neither -b nor -B may be specified.\n"
        "          cols_in - the number of columns in the input files.\n"
        "          rows_in - the number of rows in the input files.\n"
        "          col_start_in - the zero-based column number in the input "
        "files\n"
        "            specifying where to start reading.\n"
        "          row_start_in - the zero-based row number in the input "
        "files\n"
        "            specifying where to start reading.\n"
        "          cols_in_region - the number of columns to read in the input "
        "files\n"
        "            and the number of columns in the output file.\n"
        "          rows_in_region - the number of rows to read in the input "
        "files\n"
        "            and the number of rows in the output file.\n"
        "          mask_file_in - specifies a 1 byte per cell input mask "
        "file.\n"
        "          file_in  - the input filename.\n"
        "              NOTE: The dimensions of mask_file_in must be the\n"
        "                    same as file_in.\n"
        "  output: file_out - the masked output file.\n"
        "  option: v - verbose (may be repeated)\n"
        "          d - delete file_out if it consists entirely of "
        "mask_value_out.\n"
        "          b - byte-swap the input file.\n"
        "          B - byte-swap the output file.\n"
        "          s - specifies signed input and output data.\n"
        "          f - specifies floating-point input and output data. "
        "Requires that\n"
        "            bytes_per_cell be equal to 4 or 8.\n"
        "          S - specifies that the mask file is in the same format as "
        "that\n"
        "              specified for the input file.\n"
        "              The default is that the mask file is 1 byte per cell.\n"
        "            NOTE: If -f is set then -s is ignored.\n"
        "          m mask_value_in - specifies the mask value in "
        "mask_file_in.\n"
        "            Must be between 0 and 255 unless -S is specified. The "
        "default is 0.\n"
        "          M mask_value_out - specifies the value in the output file "
        "to which\n"
        "            all occurrences of mask_value_in in mask_file_in will be "
        "mapped.\n"
        "            The default is 0.\n");
    exit(EXIT_FAILURE);
  };
}


x86 assembly (clang, -O0):
<DisplayUsage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2eb5(%rip),%rax
mov    (%rax),%edi
lea    0xecc(%rip),%rsi
lea    0xec9(%rip),%rdx
call   1030 <fprintf@plt>
mov    0x2e91(%rip),%rax
mov    (%rax),%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<DisplayUsage>:
push   %rax
mov    0x2eb8(%rip),%rax
mov    (%rax),%edi
lea    0xecf(%rip),%rsi
lea    0xecc(%rip),%rdx
call   1030 <fprintf@plt>
mov    0x2e94(%rip),%rax
mov    (%rax),%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [4 x i8] c"%s\0A\00"
@.str.1 = [2350 x i8] c"$Revision: 1.6 $\0Ausage: apply_mask [-v] [-d] [-b] [-B] [-s] [-f] [-S]\0A [-m mask_value_in] [-M mask_value_out]\0A bytes_per_cell cols_in rows_in\0A col_start_in row_start_in cols_in_region rows_in_region\0A mask_file_in file_in file_out\0A input : bytes_per_cell - the number of bytes per single grid location\0A in file_in and file_out. Must be 1, 2, 4, or 8.\0A NOTE: If bytes_per_cell is 8, then -f must be specified and\0A neither -b nor -B may be specified.\0A cols_in - the number of columns in the input files.\0A rows_in - the number of rows in the input files.\0A col_start_in - the zero-based column number in the input files\0A specifying where to start reading.\0A row_start_in - the zero-based row number in the input files\0A specifying where to start reading.\0A cols_in_region - the number of columns to read in the input files\0A and the number of columns in the output file.\0A rows_in_region - the number of rows to read in the input files\0A and the number of rows in the output file.\0A mask_file_in - specifies a 1 byte per cell input mask file.\0A file_in - the input filename.\0A NOTE: The dimensions of mask_file_in must be the\0A same as file_in.\0A output: file_out - the masked output file.\0A option: v - verbose (may be repeated)\0A d - delete file_out if it consists entirely of mask_value_out.\0A b - byte-swap the input file.\0A B - byte-swap the output file.\0A s - specifies signed input and output data.\0A f - specifies floating-point input and output data. Requires that\0A bytes_per_cell be equal to 4 or 8.\0A S - specifies that the mask file is in the same format as that\0A specified for the input file.\0A The default is that the mask file is 1 byte per cell.\0A NOTE: If -f is set then -s is ignored.\0A m mask_value_in - specifies the mask value in mask_file_in.\0A Must be between 0 and 255 unless -S is specified. The default is 0.\0A M mask_value_out - specifies the value in the output file to which\0A all occurrences of mask_value_in in mask_file_in will be mapped.\0A The default is 0.\0A\00"
@EXIT_FAILURE = global i32 0
define void @DisplayUsage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([2350 x i8], [2350 x i8]* @.str.1, i64 0, i64 0))
%3 = load i32, i32* @EXIT_FAILURE
%4 = call i32 @exit(i32 %3)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [4 x i8] c"%s\0A\00"
@.str.1 = [2350 x i8] c"$Revision: 1.6 $\0Ausage: apply_mask [-v] [-d] [-b] [-B] [-s] [-f] [-S]\0A [-m mask_value_in] [-M mask_value_out]\0A bytes_per_cell cols_in rows_in\0A col_start_in row_start_in cols_in_region rows_in_region\0A mask_file_in file_in file_out\0A input : bytes_per_cell - the number of bytes per single grid location\0A in file_in and file_out. Must be 1, 2, 4, or 8.\0A NOTE: If bytes_per_cell is 8, then -f must be specified and\0A neither -b nor -B may be specified.\0A cols_in - the number of columns in the input files.\0A rows_in - the number of rows in the input files.\0A col_start_in - the zero-based column number in the input files\0A specifying where to start reading.\0A row_start_in - the zero-based row number in the input files\0A specifying where to start reading.\0A cols_in_region - the number of columns to read in the input files\0A and the number of columns in the output file.\0A rows_in_region - the number of rows to read in the input files\0A and the number of rows in the output file.\0A mask_file_in - specifies a 1 byte per cell input mask file.\0A file_in - the input filename.\0A NOTE: The dimensions of mask_file_in must be the\0A same as file_in.\0A output: file_out - the masked output file.\0A option: v - verbose (may be repeated)\0A d - delete file_out if it consists entirely of mask_value_out.\0A b - byte-swap the input file.\0A B - byte-swap the output file.\0A s - specifies signed input and output data.\0A f - specifies floating-point input and output data. Requires that\0A bytes_per_cell be equal to 4 or 8.\0A S - specifies that the mask file is in the same format as that\0A specified for the input file.\0A The default is that the mask file is 1 byte per cell.\0A NOTE: If -f is set then -s is ignored.\0A m mask_value_in - specifies the mask value in mask_file_in.\0A Must be between 0 and 255 unless -S is specified. The default is 0.\0A M mask_value_out - specifies the value in the output file to which\0A all occurrences of mask_value_in in mask_file_in will be mapped.\0A The default is 0.\0A\00"
@EXIT_FAILURE = global i32 0
define void @DisplayUsage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([2350 x i8], [2350 x i8]* @.str.1, i64 0, i64 0))
%3 = load i32, i32* @EXIT_FAILURE
%4 = tail call i32 @exit(i32 %3)
unreachable
}