#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 /*<<< orphan*/);
int /*<<< orphan*/ printf(char *);
void Usage(void) {
  printf("\n");
  printf(" pdate [-hfinprstv]\n");
  printf("\n");
  printf("    Prints date and time.  Without arguments prints\n");
  printf("    current time in format YYYY-mm-dd-HH:MM such as\n");
  printf("       2000-08-14-01:43\n");
  printf("\n");
  printf("   -a  <a>{s|m|h|d} Adds negative or positive adjustment <a> to "
         "time.\n");
  printf("                      Append letter s,m,h,d for to use units of\n");
  printf("                      seconds, minutes, hours or days.  Multiple "
         "calls\n");
  printf("                      are cumulative.\n");
  printf("   -d  <n>          Daylight savings time - default 0\n");
  printf("                      (same as tm_isdst field in ctime command)\n");
  printf("   -h               Print help.\n");
  printf("   -i  <interval>   Interval of time for multiple date/time(s).  "
         "Format same\n");
  printf(
      "                      as -a option.  Default value is 1d (one day)\n");
  printf("   -f  <string>     Format string for time.  See 'man strftime' for "
         "details.\n");
  printf("   -n  <ndate>      Generate <ndate> date/times each -i <interval> "
         "apart\n");
  printf("   -p  <prefix>     Prepend string <prefix> to date(s).\n");
  printf("   -s  <suffix>     Append  string <suffix> to date(s).\n");
  printf("   -r  <interval>   Round time to previous interval using same\n");
  printf(
      "                      units as -a option above.  This is done before\n");
  printf("                      increment is added.  For example, if\n");
  printf("                      time is 12:41, the '-r 30m' option would\n");
  printf("                      round the time to 12:30\n");
  printf("   -t  <date/time>  Use specified date/time instead of current\n");
  printf("                      time, must be in format YYYY-mm-dd-HH:MM.\n");
  printf("   -v               Print version.\n");
  printf("\n");
  exit(0);
}


x86 assembly (clang, -O0):
<Usage>:
push   %rbp
mov    %rsp,%rbp
lea    0x10da(%rip),%rdi
call   1030 <printf@plt>
lea    0xec9(%rip),%rdi
call   1030 <printf@plt>
lea    0x10c2(%rip),%rdi
call   1030 <printf@plt>
lea    0xec6(%rip),%rdi
call   1030 <printf@plt>
lea    0xeef(%rip),%rdi
call   1030 <printf@plt>
lea    0xf18(%rip),%rdi
call   1030 <printf@plt>
lea    0x1092(%rip),%rdi
call   1030 <printf@plt>
lea    0xf19(%rip),%rdi
call   1030 <printf@plt>
lea    0xf54(%rip),%rdi
call   1030 <printf@plt>
lea    0xf89(%rip),%rdi
call   1030 <printf@plt>
lea    0xfc5(%rip),%rdi
call   1030 <printf@plt>
lea    0xfe0(%rip),%rdi
call   1030 <printf@plt>
lea    0x100b(%rip),%rdi
call   1030 <printf@plt>
lea    0x1040(%rip),%rdi
call   1030 <printf@plt>
lea    0x1055(%rip),%rdi
call   1030 <printf@plt>
lea    0x1097(%rip),%rdi
call   1030 <printf@plt>
lea    0x10cf(%rip),%rdi
call   1030 <printf@plt>
lea    0x1111(%rip),%rdi
call   1030 <printf@plt>
lea    0x114f(%rip),%rdi
call   1030 <printf@plt>
lea    0x117c(%rip),%rdi
call   1030 <printf@plt>
lea    0x11a9(%rip),%rdi
call   1030 <printf@plt>
lea    0x11dd(%rip),%rdi
call   1030 <printf@plt>
lea    0x1217(%rip),%rdi
call   1030 <printf@plt>
lea    0x1247(%rip),%rdi
call   1030 <printf@plt>
lea    0x127b(%rip),%rdi
call   1030 <printf@plt>
lea    0x129e(%rip),%rdi
call   1030 <printf@plt>
lea    0x12d2(%rip),%rdi
call   1030 <printf@plt>
lea    0x1307(%rip),%rdi
call   1030 <printf@plt>
lea    0xf8a(%rip),%rdi
call   1030 <printf@plt>
xor    %edi,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<Usage>:
push   %rax
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xebe(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xebc(%rip),%rdi
call   1040 <puts@plt>
lea    0xee4(%rip),%rdi
call   1040 <puts@plt>
lea    0xf0c(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xf0e(%rip),%rdi
call   1040 <puts@plt>
lea    0xf48(%rip),%rdi
call   1040 <puts@plt>
lea    0xf7c(%rip),%rdi
call   1040 <puts@plt>
lea    0xfb7(%rip),%rdi
call   1040 <puts@plt>
lea    0xfd1(%rip),%rdi
call   1040 <puts@plt>
lea    0xffb(%rip),%rdi
call   1040 <puts@plt>
lea    0x102f(%rip),%rdi
call   1040 <puts@plt>
lea    0x1043(%rip),%rdi
call   1040 <puts@plt>
lea    0x1084(%rip),%rdi
call   1040 <puts@plt>
lea    0x10bb(%rip),%rdi
call   1040 <puts@plt>
lea    0x10fc(%rip),%rdi
call   1040 <puts@plt>
lea    0x1139(%rip),%rdi
call   1040 <puts@plt>
lea    0x1165(%rip),%rdi
call   1040 <puts@plt>
lea    0x1191(%rip),%rdi
call   1040 <puts@plt>
lea    0x11c4(%rip),%rdi
call   1040 <puts@plt>
lea    0x11fd(%rip),%rdi
call   1040 <puts@plt>
lea    0x122c(%rip),%rdi
call   1040 <puts@plt>
lea    0x125f(%rip),%rdi
call   1040 <puts@plt>
lea    0x1281(%rip),%rdi
call   1040 <puts@plt>
lea    0x12b4(%rip),%rdi
call   1040 <puts@plt>
lea    0x12e8(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %edi,%edi
call   1050 <exit@plt>

LLVM IR (-O0):
@.str = [2 x i8] c"\0A\00"
@.str.1 = [21 x i8] c" pdate [-hfinprstv]\0A\00"
@.str.2 = [53 x i8] c" Prints date and time. Without arguments prints\0A\00"
@.str.3 = [53 x i8] c" current time in format YYYY-mm-dd-HH:MM such as\0A\00"
@.str.4 = [25 x i8] c" 2000-08-14-01:43\0A\00"
@.str.5 = [71 x i8] c" -a <a>{s|m|h|d} Adds negative or positive adjustment <a> to time.\0A\00"
@.str.6 = [65 x i8] c" Append letter s,m,h,d for to use units of\0A\00"
@.str.7 = [72 x i8] c" seconds, minutes, hours or days. Multiple calls\0A\00"
@.str.8 = [39 x i8] c" are cumulative.\0A\00"
@.str.9 = [55 x i8] c" -d <n> Daylight savings time - default 0\0A\00"
@.str.10 = [65 x i8] c" (same as tm_isdst field in ctime command)\0A\00"
@.str.11 = [33 x i8] c" -h Print help.\0A\00"
@.str.12 = [78 x i8] c" -i <interval> Interval of time for multiple date/time(s). Format same\0A\00"
@.str.13 = [68 x i8] c" as -a option. Default value is 1d (one day)\0A\00"
@.str.14 = [78 x i8] c" -f <string> Format string for time. See 'man strftime' for details.\0A\00"
@.str.15 = [74 x i8] c" -n <ndate> Generate <ndate> date/times each -i <interval> apart\0A\00"
@.str.16 = [57 x i8] c" -p <prefix> Prepend string <prefix> to date(s).\0A\00"
@.str.17 = [57 x i8] c" -s <suffix> Append string <suffix> to date(s).\0A\00"
@.str.18 = [64 x i8] c" -r <interval> Round time to previous interval using same\0A\00"
@.str.19 = [70 x i8] c" units as -a option above. This is done before\0A\00"
@.str.20 = [60 x i8] c" increment is added. For example, if\0A\00"
@.str.21 = [64 x i8] c" time is 12:41, the '-r 30m' option would\0A\00"
@.str.22 = [47 x i8] c" round the time to 12:30\0A\00"
@.str.23 = [64 x i8] c" -t <date/time> Use specified date/time instead of current\0A\00"
@.str.24 = [65 x i8] c" time, must be in format YYYY-mm-dd-HH:MM.\0A\00"
@.str.25 = [36 x i8] c" -v Print version.\0A\00"
define void @Usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%4 = call i32 @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.2, i64 0, i64 0))
%5 = call i32 @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.3, i64 0, i64 0))
%6 = call i32 @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.4, i64 0, i64 0))
%7 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%8 = call i32 @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.5, i64 0, i64 0))
%9 = call i32 @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.6, i64 0, i64 0))
%10 = call i32 @printf(i8* getelementptr inbounds ([72 x i8], [72 x i8]* @.str.7, i64 0, i64 0))
%11 = call i32 @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.8, i64 0, i64 0))
%12 = call i32 @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.9, i64 0, i64 0))
%13 = call i32 @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.10, i64 0, i64 0))
%14 = call i32 @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.11, i64 0, i64 0))
%15 = call i32 @printf(i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.12, i64 0, i64 0))
%16 = call i32 @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.13, i64 0, i64 0))
%17 = call i32 @printf(i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.14, i64 0, i64 0))
%18 = call i32 @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.15, i64 0, i64 0))
%19 = call i32 @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.16, i64 0, i64 0))
%20 = call i32 @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.17, i64 0, i64 0))
%21 = call i32 @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.18, i64 0, i64 0))
%22 = call i32 @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.19, i64 0, i64 0))
%23 = call i32 @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.20, i64 0, i64 0))
%24 = call i32 @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.21, i64 0, i64 0))
%25 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.22, i64 0, i64 0))
%26 = call i32 @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.23, i64 0, i64 0))
%27 = call i32 @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.24, i64 0, i64 0))
%28 = call i32 @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.25, i64 0, i64 0))
%29 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%30 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@str = [20 x i8] c" pdate [-hfinprstv]\00"
@str.26 = [52 x i8] c" Prints date and time. Without arguments prints\00"
@str.27 = [52 x i8] c" current time in format YYYY-mm-dd-HH:MM such as\00"
@str.28 = [24 x i8] c" 2000-08-14-01:43\00"
@str.29 = [70 x i8] c" -a <a>{s|m|h|d} Adds negative or positive adjustment <a> to time.\00"
@str.30 = [64 x i8] c" Append letter s,m,h,d for to use units of\00"
@str.31 = [71 x i8] c" seconds, minutes, hours or days. Multiple calls\00"
@str.32 = [38 x i8] c" are cumulative.\00"
@str.33 = [54 x i8] c" -d <n> Daylight savings time - default 0\00"
@str.34 = [64 x i8] c" (same as tm_isdst field in ctime command)\00"
@str.35 = [32 x i8] c" -h Print help.\00"
@str.36 = [77 x i8] c" -i <interval> Interval of time for multiple date/time(s). Format same\00"
@str.37 = [67 x i8] c" as -a option. Default value is 1d (one day)\00"
@str.38 = [77 x i8] c" -f <string> Format string for time. See 'man strftime' for details.\00"
@str.39 = [73 x i8] c" -n <ndate> Generate <ndate> date/times each -i <interval> apart\00"
@str.40 = [56 x i8] c" -p <prefix> Prepend string <prefix> to date(s).\00"
@str.41 = [56 x i8] c" -s <suffix> Append string <suffix> to date(s).\00"
@str.42 = [63 x i8] c" -r <interval> Round time to previous interval using same\00"
@str.43 = [69 x i8] c" units as -a option above. This is done before\00"
@str.44 = [59 x i8] c" increment is added. For example, if\00"
@str.45 = [63 x i8] c" time is 12:41, the '-r 30m' option would\00"
@str.46 = [46 x i8] c" round the time to 12:30\00"
@str.47 = [63 x i8] c" -t <date/time> Use specified date/time instead of current\00"
@str.48 = [64 x i8] c" time, must be in format YYYY-mm-dd-HH:MM.\00"
@str.49 = [35 x i8] c" -v Print version.\00"
define void @Usage() {
%1 = tail call i32 @putchar(i32 10)
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str, i64 0, i64 0))
%3 = tail call i32 @putchar(i32 10)
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([52 x i8], [52 x i8]* @str.26, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([52 x i8], [52 x i8]* @str.27, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @str.28, i64 0, i64 0))
%7 = tail call i32 @putchar(i32 10)
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.29, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.30, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([71 x i8], [71 x i8]* @str.31, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.32, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @str.33, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.34, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str.35, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([77 x i8], [77 x i8]* @str.36, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.37, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([77 x i8], [77 x i8]* @str.38, i64 0, i64 0))
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.39, i64 0, i64 0))
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([56 x i8], [56 x i8]* @str.40, i64 0, i64 0))
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([56 x i8], [56 x i8]* @str.41, i64 0, i64 0))
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.42, i64 0, i64 0))
%22 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([69 x i8], [69 x i8]* @str.43, i64 0, i64 0))
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str.44, i64 0, i64 0))
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.45, i64 0, i64 0))
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.46, i64 0, i64 0))
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.47, i64 0, i64 0))
%27 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.48, i64 0, i64 0))
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @str.49, i64 0, i64 0))
%29 = tail call i32 @putchar(i32 10)
%30 = tail call i32 @exit(i32 0)
unreachable
}