#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 *, char *);
void usage_exit(int ret_code, char *progname) {
  printf(
      "Usage: %s [OPTION]...\n"
      "A program to kill all process running during a certain period of time "
      "or using too much cpu\n\n"
      "  -f, --foreground\t\tDo not daemonise, default is to daemonise\n"
      "  -l, --logfile=LOGFILE\t\tPath to logfile, default is to log on "
      "stdout\n"
      "      --minuid=UID\t\tDo not kill process owned by UID below MINUID, "
      "default is 10000\n"
      "      --maxuid=UID\t\tDo not kill process owner by UID above MAXUID, "
      "default is -1 (unlimited)\n"
      "      --runtimeterm=SECONDS\tMaximum allowed running time before "
      "sending SIGTERM signals, default to 300s\n"
      "      --runtimekill=SECONDS\tMaximum allowed running time before "
      "sending SIGKILL signals, default to 302s\n"
      "\t\t\t\tSetting -1 to either runtime* options disable running time "
      "check\n"
      "      --cputimeterm=SECONDS\tMaximum allowed cpu time before sending "
      "SIGTERM signals, default to 30s\n"
      "      --cputimekill=SECONDS\tMaximum allowed cpu time before sending "
      "SIGKILL signals, default to 32s\n"
      "\t\t\t\tSetting -1 to either cputime* options disable cpu time check\n"
      "  -i, --interval=SECONDS\tDelay between each probe, default to 1s\n"
      "  -d, --demo\t\t\tDo not kill any process, default is to kill them\n"
      "  -h, --help\t\t\tDisplay this help and exit\n"
      "  -v, --version\t\t\tOutput version information and exit\n",
      progname);
  exit(ret_code);
}


x86 assembly (clang, -O0):
<usage_exit>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rsi
lea    0xec6(%rip),%rdi
call   1030 <printf@plt>
mov    -0x4(%rbp),%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage_exit>:
push   %rbx
mov    %edi,%ebx
lea    0xed6(%rip),%rdi
call   1030 <printf@plt>
mov    %ebx,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@.str = [1194 x i8] c"Usage: %s [OPTION]...\0AA program to kill all process running during a certain period of time or using too much cpu\0A\0A -f, --foreground\09\09Do not daemonise, default is to daemonise\0A -l, --logfile=LOGFILE\09\09Path to logfile, default is to log on stdout\0A --minuid=UID\09\09Do not kill process owned by UID below MINUID, default is 10000\0A --maxuid=UID\09\09Do not kill process owner by UID above MAXUID, default is -1 (unlimited)\0A --runtimeterm=SECONDS\09Maximum allowed running time before sending SIGTERM signals, default to 300s\0A --runtimekill=SECONDS\09Maximum allowed running time before sending SIGKILL signals, default to 302s\0A\09\09\09\09Setting -1 to either runtime* options disable running time check\0A --cputimeterm=SECONDS\09Maximum allowed cpu time before sending SIGTERM signals, default to 30s\0A --cputimekill=SECONDS\09Maximum allowed cpu time before sending SIGKILL signals, default to 32s\0A\09\09\09\09Setting -1 to either cputime* options disable cpu time check\0A -i, --interval=SECONDS\09Delay between each probe, default to 1s\0A -d, --demo\09\09\09Do not kill any process, default is to kill them\0A -h, --help\09\09\09Display this help and exit\0A -v, --version\09\09\09Output version information and exit\0A\00"
define void @usage_exit(i32 %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
store i32 %0, i32* %3
store i8* %1, i8** %4
%5 = load i8*, i8** %4
%6 = call i32 @printf(i8* getelementptr inbounds ([1194 x i8], [1194 x i8]* @.str, i64 0, i64 0), i8* %5)
%7 = load i32, i32* %3
%8 = call i32 @exit(i32 %7)
unreachable
}

LLVM IR (-O2):
@.str = [1194 x i8] c"Usage: %s [OPTION]...\0AA program to kill all process running during a certain period of time or using too much cpu\0A\0A -f, --foreground\09\09Do not daemonise, default is to daemonise\0A -l, --logfile=LOGFILE\09\09Path to logfile, default is to log on stdout\0A --minuid=UID\09\09Do not kill process owned by UID below MINUID, default is 10000\0A --maxuid=UID\09\09Do not kill process owner by UID above MAXUID, default is -1 (unlimited)\0A --runtimeterm=SECONDS\09Maximum allowed running time before sending SIGTERM signals, default to 300s\0A --runtimekill=SECONDS\09Maximum allowed running time before sending SIGKILL signals, default to 302s\0A\09\09\09\09Setting -1 to either runtime* options disable running time check\0A --cputimeterm=SECONDS\09Maximum allowed cpu time before sending SIGTERM signals, default to 30s\0A --cputimekill=SECONDS\09Maximum allowed cpu time before sending SIGKILL signals, default to 32s\0A\09\09\09\09Setting -1 to either cputime* options disable cpu time check\0A -i, --interval=SECONDS\09Delay between each probe, default to 1s\0A -d, --demo\09\09\09Do not kill any process, default is to kill them\0A -h, --help\09\09\09Display this help and exit\0A -v, --version\09\09\09Output version information and exit\0A\00"
define void @usage_exit(i32 %0, i8* %1) {
%3 = tail call i32 @printf(i8* getelementptr inbounds ([1194 x i8], [1194 x i8]* @.str, i64 0, i64 0), i8* %1)
%4 = tail call i32 @exit(i32 %0)
unreachable
}