#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(int);
int /*<<< orphan*/ printf(char *);
void usage() {
  printf("Usage: parallel [OPTIONS] COMMAND -- ARGUMENTS\n"
         "         Run COMMAND in parallel and pass one ARGUMENT to each "
         "instance.\n"
         "   or: parallel [OPTIONS] -- COMMANDS\n"
         "         Run specified COMMANDS in parallel.\n\n"
         "Options:\n"
         "  -h           Display this help.\n"
         "  -j maxjobs   Use to limit the number of jobs that are run at the "
         "same time.\n"
         "  -l maxload   Wait as needed to avoid starting new jobs when the "
         "system's load\n"
         "                 average is not below the specified limit.\n"
         "  -i           Normally the command is passed the argument at the "
         "end of its\n"
         "                 command line. With this option, any instances of "
         "\"{}\" in the\n"
         "                 command are replaced with the argument.\n"
         "  -n #args     Number of arguments to pass to a command at a time. "
         "Default is 1.\n"
         "                 When specified together with -i, each {} (up to "
         "#args) will be\n"
         "                 replaced by a different argument.\n");
  exit(1);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
call   1030 <printf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
lea    0xed8(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@.str = [889 x i8] c"Usage: parallel [OPTIONS] COMMAND -- ARGUMENTS\0A Run COMMAND in parallel and pass one ARGUMENT to each instance.\0A or: parallel [OPTIONS] -- COMMANDS\0A Run specified COMMANDS in parallel.\0A\0AOptions:\0A -h Display this help.\0A -j maxjobs Use to limit the number of jobs that are run at the same time.\0A -l maxload Wait as needed to avoid starting new jobs when the system's load\0A average is not below the specified limit.\0A -i Normally the command is passed the argument at the end of its\0A command line. With this option, any instances of \22{}\22 in the\0A command are replaced with the argument.\0A -n #args Number of arguments to pass to a command at a time. Default is 1.\0A When specified together with -i, each {} (up to #args) will be\0A replaced by a different argument.\0A\00"
define void @usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([889 x i8], [889 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@str = [888 x i8] c"Usage: parallel [OPTIONS] COMMAND -- ARGUMENTS\0A Run COMMAND in parallel and pass one ARGUMENT to each instance.\0A or: parallel [OPTIONS] -- COMMANDS\0A Run specified COMMANDS in parallel.\0A\0AOptions:\0A -h Display this help.\0A -j maxjobs Use to limit the number of jobs that are run at the same time.\0A -l maxload Wait as needed to avoid starting new jobs when the system's load\0A average is not below the specified limit.\0A -i Normally the command is passed the argument at the end of its\0A command line. With this option, any instances of \22{}\22 in the\0A command are replaced with the argument.\0A -n #args Number of arguments to pass to a command at a time. Default is 1.\0A When specified together with -i, each {} (up to #args) will be\0A replaced by a different argument.\00"
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([888 x i8], [888 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @exit(i32 1)
unreachable
}