#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 const *);
void print_usage(const char *prog) {
  printf("Usage: %s [options]\n"
         "  -t, --test=<MODE>           run test mode <MODE>. Don't supply a "
         "mode to show a list of all supported modes.\n"
         "  -d, --destination=<TIME>    set destination time to <TIME>\n"
         "  -p, --present=<TIME>        set present time to <TIME>\n"
         "  -D, --departed=<TIME>       set last departed time to <TIME>\n"
         "  -u, --utc                   interpret all times as UTC\n"
         "  -l, --local                 interpret all times in local time\n"
         "  -r, --relative              interpret all times as relative\n"
         "  -H, --hour24=[0|1]          display in 24 hour mode\n"
         "  -s, --seconds=[0|1]         display seconds\n"
         "  -L, --loop                  loop\n",
         prog);
  exit(1);
}


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

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

LLVM IR (-O0):
@.str = [631 x i8] c"Usage: %s [options]\0A -t, --test=<MODE> run test mode <MODE>. Don't supply a mode to show a list of all supported modes.\0A -d, --destination=<TIME> set destination time to <TIME>\0A -p, --present=<TIME> set present time to <TIME>\0A -D, --departed=<TIME> set last departed time to <TIME>\0A -u, --utc interpret all times as UTC\0A -l, --local interpret all times in local time\0A -r, --relative interpret all times as relative\0A -H, --hour24=[0|1] display in 24 hour mode\0A -s, --seconds=[0|1] display seconds\0A -L, --loop loop\0A\00"
define void @print_usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([631 x i8], [631 x i8]* @.str, i64 0, i64 0), i8* %3)
%5 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@.str = [631 x i8] c"Usage: %s [options]\0A -t, --test=<MODE> run test mode <MODE>. Don't supply a mode to show a list of all supported modes.\0A -d, --destination=<TIME> set destination time to <TIME>\0A -p, --present=<TIME> set present time to <TIME>\0A -D, --departed=<TIME> set last departed time to <TIME>\0A -u, --utc interpret all times as UTC\0A -l, --local interpret all times in local time\0A -r, --relative interpret all times as relative\0A -H, --hour24=[0|1] display in 24 hour mode\0A -s, --seconds=[0|1] display seconds\0A -L, --loop loop\0A\00"
define void @print_usage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([631 x i8], [631 x i8]* @.str, i64 0, i64 0), i8* %0)
%3 = tail call i32 @exit(i32 1)
unreachable
}