#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: make_mask [-v] [-d] [-b] [-s] [-f] [-F factor] [-i "
        "mask_file_in]\n"
        "                 [-m mask_value_in] [-M mask_value_out] [-U "
        "unmask_value_out]\n"
        "          bytes_per_cell cols_in rows_in\n"
        "          col_start_in row_start_in cols_in_region rows_in_region\n"
        "          file_in\n"
        "          mask_file_out\n"
        "  input : bytes_per_cell - the number of bytes per single grid "
        "location\n"
        "            in the input file. Must be 1, 2, 4, or 8.\n"
        "            NOTE: If bytes_per_cell is 8, then -f must be specified.\n"
        "          cols_in - the number of columns in the input file.\n"
        "          rows_in - the number of rows in the input file.\n"
        "          col_start_in - the zero-based column number in the input "
        "file\n"
        "            specifying where to start reading the input file.\n"
        "          row_start_in - the zero-based row number in the input file\n"
        "            specifying where to start reading the input file.\n"
        "          cols_in_region - the number of columns to read in the input "
        "file.\n"
        "          rows_in_region - the number of rows to read in the input "
        "file.\n"
        "          file_in  - the input filename.\n"
        "  output: mask_file_out - the one byte per cell output mask "
        "filename.\n"
        "            There will be factor * cols_in_region columns and\n"
        "            factor * rows_in_region rows in the output file.\n"
        "  option: v - verbose (may be repeated)\n"
        "          d - delete mask_file_out if it consists entirely of "
        "mask_value_out.\n"
        "          b - byte-swap the input file.\n"
        "          s - specifies signed input data.\n"
        "          f - specifies floating-point input data. Requires that\n"
        "            bytes_per_cell be equal to 4 or 8.\n"
        "            NOTE: If -f is set then -s is ignored.\n"
        "          F factor - specifies the expansion factor to use in "
        "expanding\n"
        "            the mask. Must be an integer > 0. The default value is "
        "1.\n"
        "          i mask_file_in - specifies a 1 byte per cell input mask "
        "file to be\n"
        "            anded with the mask computed from the input file to "
        "produce the\n"
        "            mask output file. The dimensions of mask_file_in must be "
        "the\n"
        "              same as file_in.\n"
        "          m mask_value_in - specifies the mask value in the input "
        "file.\n"
        "            The default is 0.\n"
        "            NOTE: The unmask value in the input file is any value not "
        "equal\n"
        "                  to mask_value_in.\n"
        "          M mask_value_out - specifies the mask value in the mask "
        "input\n"
        "            file (if any), and the mask output file.\n"
        "            Must be between 0 and 255. The default is 0.\n"
        "          U unmask_value_out - specifies the unmask value in the mask "
        "input\n"
        "            file (if any), and the mask output file.\n"
        "            Must be between 0 and 255. The default is 1.\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 = [2624 x i8] c"$Revision: 1.6 $\0Ausage: make_mask [-v] [-d] [-b] [-s] [-f] [-F factor] [-i mask_file_in]\0A [-m mask_value_in] [-M mask_value_out] [-U unmask_value_out]\0A bytes_per_cell cols_in rows_in\0A col_start_in row_start_in cols_in_region rows_in_region\0A file_in\0A mask_file_out\0A input : bytes_per_cell - the number of bytes per single grid location\0A in the input file. Must be 1, 2, 4, or 8.\0A NOTE: If bytes_per_cell is 8, then -f must be specified.\0A cols_in - the number of columns in the input file.\0A rows_in - the number of rows in the input file.\0A col_start_in - the zero-based column number in the input file\0A specifying where to start reading the input file.\0A row_start_in - the zero-based row number in the input file\0A specifying where to start reading the input file.\0A cols_in_region - the number of columns to read in the input file.\0A rows_in_region - the number of rows to read in the input file.\0A file_in - the input filename.\0A output: mask_file_out - the one byte per cell output mask filename.\0A There will be factor * cols_in_region columns and\0A factor * rows_in_region rows in the output file.\0A option: v - verbose (may be repeated)\0A d - delete mask_file_out if it consists entirely of mask_value_out.\0A b - byte-swap the input file.\0A s - specifies signed input data.\0A f - specifies floating-point input data. Requires that\0A bytes_per_cell be equal to 4 or 8.\0A NOTE: If -f is set then -s is ignored.\0A F factor - specifies the expansion factor to use in expanding\0A the mask. Must be an integer > 0. The default value is 1.\0A i mask_file_in - specifies a 1 byte per cell input mask file to be\0A anded with the mask computed from the input file to produce the\0A mask output file. The dimensions of mask_file_in must be the\0A same as file_in.\0A m mask_value_in - specifies the mask value in the input file.\0A The default is 0.\0A NOTE: The unmask value in the input file is any value not equal\0A to mask_value_in.\0A M mask_value_out - specifies the mask value in the mask input\0A file (if any), and the mask output file.\0A Must be between 0 and 255. The default is 0.\0A U unmask_value_out - specifies the unmask value in the mask input\0A file (if any), and the mask output file.\0A Must be between 0 and 255. The default is 1.\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 ([2624 x i8], [2624 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 = [2624 x i8] c"$Revision: 1.6 $\0Ausage: make_mask [-v] [-d] [-b] [-s] [-f] [-F factor] [-i mask_file_in]\0A [-m mask_value_in] [-M mask_value_out] [-U unmask_value_out]\0A bytes_per_cell cols_in rows_in\0A col_start_in row_start_in cols_in_region rows_in_region\0A file_in\0A mask_file_out\0A input : bytes_per_cell - the number of bytes per single grid location\0A in the input file. Must be 1, 2, 4, or 8.\0A NOTE: If bytes_per_cell is 8, then -f must be specified.\0A cols_in - the number of columns in the input file.\0A rows_in - the number of rows in the input file.\0A col_start_in - the zero-based column number in the input file\0A specifying where to start reading the input file.\0A row_start_in - the zero-based row number in the input file\0A specifying where to start reading the input file.\0A cols_in_region - the number of columns to read in the input file.\0A rows_in_region - the number of rows to read in the input file.\0A file_in - the input filename.\0A output: mask_file_out - the one byte per cell output mask filename.\0A There will be factor * cols_in_region columns and\0A factor * rows_in_region rows in the output file.\0A option: v - verbose (may be repeated)\0A d - delete mask_file_out if it consists entirely of mask_value_out.\0A b - byte-swap the input file.\0A s - specifies signed input data.\0A f - specifies floating-point input data. Requires that\0A bytes_per_cell be equal to 4 or 8.\0A NOTE: If -f is set then -s is ignored.\0A F factor - specifies the expansion factor to use in expanding\0A the mask. Must be an integer > 0. The default value is 1.\0A i mask_file_in - specifies a 1 byte per cell input mask file to be\0A anded with the mask computed from the input file to produce the\0A mask output file. The dimensions of mask_file_in must be the\0A same as file_in.\0A m mask_value_in - specifies the mask value in the input file.\0A The default is 0.\0A NOTE: The unmask value in the input file is any value not equal\0A to mask_value_in.\0A M mask_value_out - specifies the mask value in the mask input\0A file (if any), and the mask output file.\0A Must be between 0 and 255. The default is 0.\0A U unmask_value_out - specifies the unmask value in the mask input\0A file (if any), and the mask output file.\0A Must be between 0 and 255. The default is 1.\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 ([2624 x i8], [2624 x i8]* @.str.1, i64 0, i64 0))
%3 = load i32, i32* @EXIT_FAILURE
%4 = tail call i32 @exit(i32 %3)
unreachable
}