#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 */
struct tm {
  int tm_wday;
  int tm_mon;
  int tm_mday;
  int tm_hour;
  int tm_min;
  int tm_sec;
  int tm_year;
  int /*<<< orphan*/ tm_isdst;
  int /*<<< orphan*/ tm_yday;
};

/* Variables and functions */
int /*<<< orphan*/ daylight;
int /*<<< orphan*/ islower(char);
int /*<<< orphan*/ sprintf(char *, char *, ...);
int /*<<< orphan*/ *strchr(char const *, char);
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(char const *);
char toupper(char);
char **tzname;
int /*<<< orphan*/ tzset();
int weeknumber(struct tm const *, int);
size_t strftime(char *s, size_t maxsize, const char *format,
                const struct tm *timeptr) {
  char *endp = s + maxsize;
  char *start = s;
  char tbuf[100];
  int i;
  static short first = 1;
  static char *days_a[] = {
      "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
  };
  static char *days_l[] = {
      "Sunday",   "Monday", "Tuesday",  "Wednesday",
      "Thursday", "Friday", "Saturday",
  };
  static char *months_a[] = {
      "Jan", "Feb", "Mar", "Apr", "May", "Jun",
      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
  };
  static char *months_l[] = {
      "January", "February", "March",     "April",   "May",      "June",
      "July",    "August",   "September", "October", "November", "December",
  };
  static char *ampm[] = {
      "AM",
      "PM",
  };
  if (s == NULL || format == NULL || timeptr == NULL || maxsize == 0)
    return 0;
  if (strchr(format, '%') == NULL && strlen(format) + 1 >= maxsize)
    return 0;
  if (first) {
    tzset();
    first = 0;
  }
  for (; *format && s < endp - 1; format++) {
    tbuf[0] = '\0';
    if (*format != '%') {
      *s++ = *format;
      continue;
    }
  again:
    switch (*++format) {
    case '\0':
      *s++ = '%';
      goto out;
    case '%':
      *s++ = '%';
      continue;
    case 'a':
      if (timeptr->tm_wday < 0 || timeptr->tm_wday > 6)
        strcpy(tbuf, "?");
      else
        strcpy(tbuf, days_a[timeptr->tm_wday]);
      break;
    case 'A':
      if (timeptr->tm_wday < 0 || timeptr->tm_wday > 6)
        strcpy(tbuf, "?");
      else
        strcpy(tbuf, days_l[timeptr->tm_wday]);
      break;
    case 'h':
    case 'b':
      if (timeptr->tm_mon < 0 || timeptr->tm_mon > 11)
        strcpy(tbuf, "?");
      else
        strcpy(tbuf, months_a[timeptr->tm_mon]);
      break;
    case 'B':
      if (timeptr->tm_mon < 0 || timeptr->tm_mon > 11)
        strcpy(tbuf, "?");
      else
        strcpy(tbuf, months_l[timeptr->tm_mon]);
      break;
    case 'c':
      sprintf(tbuf, "%s %s %2d %02d:%02d:%02d %d", days_a[timeptr->tm_wday],
              months_a[timeptr->tm_mon], timeptr->tm_mday, timeptr->tm_hour,
              timeptr->tm_min, timeptr->tm_sec, timeptr->tm_year + 1900);
      break;
    case 'd':
      sprintf(tbuf, "%02d", timeptr->tm_mday);
      break;
    case 'H':
      sprintf(tbuf, "%02d", timeptr->tm_hour);
      break;
    case 'I':
      i = timeptr->tm_hour;
      if (i == 0)
        i = 12;
      else if (i > 12)
        i -= 12;
      sprintf(tbuf, "%02d", i);
      break;
    case 'j':
      sprintf(tbuf, "%03d", timeptr->tm_yday + 1);
      break;
    case 'm':
      sprintf(tbuf, "%02d", timeptr->tm_mon + 1);
      break;
    case 'M':
      sprintf(tbuf, "%02d", timeptr->tm_min);
      break;
    case 'p':
      if (timeptr->tm_hour < 12)
        strcpy(tbuf, ampm[0]);
      else
        strcpy(tbuf, ampm[1]);
      break;
    case 'S':
      sprintf(tbuf, "%02d", timeptr->tm_sec);
      break;
    case 'U':
      sprintf(tbuf, "%d", weeknumber(timeptr, 0));
      break;
    case 'w':
      sprintf(tbuf, "%d", timeptr->tm_wday);
      break;
    case 'W':
      sprintf(tbuf, "%d", weeknumber(timeptr, 1));
      break;
    case 'x':
      sprintf(tbuf, "%s %s %2d %d", days_a[timeptr->tm_wday],
              months_a[timeptr->tm_mon], timeptr->tm_mday,
              timeptr->tm_year + 1900);
      break;
    case 'X':
      sprintf(tbuf, "%02d:%02d:%02d", timeptr->tm_hour, timeptr->tm_min,
              timeptr->tm_sec);
      break;
    case 'y':
      i = timeptr->tm_year % 100;
      sprintf(tbuf, "%d", i);
      break;
    case 'Y':
      sprintf(tbuf, "%d", 1900 + timeptr->tm_year);
      break;
    case 'Z':
      i = 0;
      if (daylight && timeptr->tm_isdst)
        i = 1;
      strcpy(tbuf, tzname[i]);
      break;
    case 'n':
      tbuf[0] = '\n';
      tbuf[1] = '\0';
      break;
    case 't':
      tbuf[0] = '\t';
      tbuf[1] = '\0';
      break;
    case 'D':
      strftime(tbuf, sizeof tbuf, "%m/%d/%y", timeptr);
      break;
    case 'e':
      sprintf(tbuf, "%2d", timeptr->tm_mday);
      break;
    case 'r':
      strftime(tbuf, sizeof tbuf, "%I:%M:%S %p", timeptr);
      break;
    case 'R':
      strftime(tbuf, sizeof tbuf, "%H:%M", timeptr);
      break;
    case 'T':
      strftime(tbuf, sizeof tbuf, "%H:%M:%S", timeptr);
      break;
    case 'V':
      sprintf(tbuf, "%2d-%3.3s-%4d", timeptr->tm_mday,
              months_a[timeptr->tm_mon], timeptr->tm_year + 1900);
      for (i = 3; i < 6; i++)
        if (islower(tbuf[i]))
          tbuf[i] = toupper(tbuf[i]);
      break;
    case 'C':
      sprintf(tbuf, "%02d", (timeptr->tm_year + 1900) / 100);
      break;
    case 'E':
    case 'O':
      goto again;
    default:
      tbuf[0] = '%';
      tbuf[1] = *format;
      tbuf[2] = '\0';
      break;
    }
    i = strlen(tbuf);
    if (i)
      if (s + i < endp - 1) {
        strcpy(s, tbuf);
        s += i;
      } else
        return 0;
  }
out:
  if (s < endp && *format == '\0') {
    *s = '\0';
    return (s - start);
  } else
    return 0;
}


x86 assembly (clang, -O0):
<strftime>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x10(%rbp),%rax
add    -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     11eb <strftime+0x5b>
cmpq   $0x0,-0x20(%rbp)
je     11eb <strftime+0x5b>
cmpq   $0x0,-0x28(%rbp)
je     11eb <strftime+0x5b>
cmpq   $0x0,-0x18(%rbp)
jne    11f8 <strftime+0x68>
movq   $0x0,-0x8(%rbp)
jmp    1aed <strftime+0x95d>
mov    -0x20(%rbp),%rdi
mov    $0x25,%esi
call   1070 <strchr@plt>
cmp    $0x0,%rax
jne    1235 <strftime+0xa5>
mov    -0x20(%rbp),%rdi
call   1060 <strlen@plt>
add    $0x1,%eax
cltq
cmp    -0x18(%rbp),%rax
jb     1235 <strftime+0xa5>
movq   $0x0,-0x8(%rbp)
jmp    1aed <strftime+0x95d>
cmpw   $0x0,0x2e33(%rip)
je     1253 <strftime+0xc3>
mov    $0x0,%al
call   1090 <tzset@plt>
movw   $0x0,0x2e1d(%rip)
jmp    1258 <strftime+0xc8>
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0xa5(%rbp)
je     1288 <strftime+0xf8>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
add    $0xffffffffffffffff,%rcx
cmp    %rcx,%rax
setb   %al
mov    %al,-0xa5(%rbp)
mov    -0xa5(%rbp),%al
test   $0x1,%al
jne    129b <strftime+0x10b>
jmp    1aa7 <strftime+0x917>
movb   $0x0,-0xa0(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x25,%eax
je     12ce <strftime+0x13e>
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
jmp    1a96 <strftime+0x906>
jmp    12d3 <strftime+0x143>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movsbl 0x1(%rax),%eax
mov    %eax,%ecx
mov    %rcx,-0xb0(%rbp)
sub    $0x79,%eax
ja     19fe <strftime+0x86e>
mov    -0xb0(%rbp),%rax
lea    0xcfa(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x25,(%rax)
jmp    1aac <strftime+0x91c>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x25,(%rax)
jmp    1a96 <strftime+0x906>
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jl     1357 <strftime+0x1c7>
mov    -0x28(%rbp),%rax
cmpl   $0x6,(%rax)
jle    136f <strftime+0x1df>
lea    -0xa0(%rbp),%rdi
lea    0xf60(%rip),%rsi
call   1030 <strcpy@plt>
jmp    138d <strftime+0x1fd>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
movslq (%rax),%rcx
lea    0x2cfc(%rip),%rax
mov    (%rax,%rcx,8),%rsi
call   1030 <strcpy@plt>
jmp    1a18 <strftime+0x888>
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jl     13ac <strftime+0x21c>
mov    -0x28(%rbp),%rax
cmpl   $0x6,(%rax)
jle    13c4 <strftime+0x234>
lea    -0xa0(%rbp),%rdi
lea    0xf0b(%rip),%rsi
call   1030 <strcpy@plt>
jmp    13e2 <strftime+0x252>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
movslq (%rax),%rcx
lea    0x2ce7(%rip),%rax
mov    (%rax,%rcx,8),%rsi
call   1030 <strcpy@plt>
jmp    1a18 <strftime+0x888>
mov    -0x28(%rbp),%rax
cmpl   $0x0,0x4(%rax)
jl     1403 <strftime+0x273>
mov    -0x28(%rbp),%rax
cmpl   $0xb,0x4(%rax)
jle    141b <strftime+0x28b>
lea    -0xa0(%rbp),%rdi
lea    0xeb4(%rip),%rsi
call   1030 <strcpy@plt>
jmp    143a <strftime+0x2aa>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
movslq 0x4(%rax),%rcx
lea    0x2ccf(%rip),%rax
mov    (%rax,%rcx,8),%rsi
call   1030 <strcpy@plt>
jmp    1a18 <strftime+0x888>
mov    -0x28(%rbp),%rax
cmpl   $0x0,0x4(%rax)
jl     145b <strftime+0x2cb>
mov    -0x28(%rbp),%rax
cmpl   $0xb,0x4(%rax)
jle    1473 <strftime+0x2e3>
lea    -0xa0(%rbp),%rdi
lea    0xe5c(%rip),%rsi
call   1030 <strcpy@plt>
jmp    1492 <strftime+0x302>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
movslq 0x4(%rax),%rcx
lea    0x2cd7(%rip),%rax
mov    (%rax,%rcx,8),%rsi
call   1030 <strcpy@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
movslq (%rax),%rcx
lea    0x2bd4(%rip),%rax
mov    (%rax,%rcx,8),%rdx
mov    -0x28(%rbp),%rax
movslq 0x4(%rax),%rcx
lea    0x2c41(%rip),%rax
mov    (%rax,%rcx,8),%rcx
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%r8d
mov    -0x28(%rbp),%rax
mov    0xc(%rax),%r9d
mov    -0x28(%rbp),%rax
mov    0x10(%rax),%r11d
mov    -0x28(%rbp),%rax
mov    0x14(%rax),%r10d
mov    -0x28(%rbp),%rax
mov    0x18(%rax),%eax
add    $0x76c,%eax
lea    0xdd1(%rip),%rsi
mov    %r11d,(%rsp)
mov    %r10d,0x8(%rsp)
mov    %eax,0x10(%rsp)
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%edx
lea    0xddb(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0xc(%rax),%edx
lea    0xdba(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
mov    -0x28(%rbp),%rax
mov    0xc(%rax),%eax
mov    %eax,-0xa4(%rbp)
cmpl   $0x0,-0xa4(%rbp)
jne    157a <strftime+0x3ea>
movl   $0xc,-0xa4(%rbp)
jmp    159b <strftime+0x40b>
cmpl   $0xc,-0xa4(%rbp)
jle    1596 <strftime+0x406>
mov    -0xa4(%rbp),%eax
sub    $0xc,%eax
mov    %eax,-0xa4(%rbp)
jmp    159b <strftime+0x40b>
lea    -0xa0(%rbp),%rdi
mov    -0xa4(%rbp),%edx
lea    0xd50(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0x20(%rax),%edx
add    $0x1,%edx
lea    0xd10(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%edx
add    $0x1,%edx
lea    0xd08(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0x10(%rax),%edx
lea    0xce7(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
mov    -0x28(%rbp),%rax
cmpl   $0xc,0xc(%rax)
jge    164a <strftime+0x4ba>
lea    -0xa0(%rbp),%rdi
mov    0x2b80(%rip),%rsi
call   1030 <strcpy@plt>
jmp    165d <strftime+0x4cd>
lea    -0xa0(%rbp),%rdi
mov    0x2b70(%rip),%rsi
call   1030 <strcpy@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0x14(%rax),%edx
lea    0xc88(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rax
mov    %rax,-0xb8(%rbp)
mov    -0x28(%rbp),%rdi
xor    %esi,%esi
call   1080 <weeknumber@plt>
mov    -0xb8(%rbp),%rdi
mov    %eax,%edx
lea    0xc46(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    (%rax),%edx
lea    0xc26(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rax
mov    %rax,-0xc0(%rbp)
mov    -0x28(%rbp),%rdi
mov    $0x1,%esi
call   1080 <weeknumber@plt>
mov    -0xc0(%rbp),%rdi
mov    %eax,%edx
lea    0xbee(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
movslq (%rax),%rcx
lea    0x295b(%rip),%rax
mov    (%rax,%rcx,8),%rdx
mov    -0x28(%rbp),%rax
movslq 0x4(%rax),%rcx
lea    0x29c8(%rip),%rax
mov    (%rax,%rcx,8),%rcx
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%r8d
mov    -0x28(%rbp),%rax
mov    0x18(%rax),%r9d
add    $0x76c,%r9d
lea    0xb8e(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0xc(%rax),%edx
mov    -0x28(%rbp),%rax
mov    0x10(%rax),%ecx
mov    -0x28(%rbp),%rax
mov    0x14(%rax),%r8d
lea    0xb6b(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
mov    -0x28(%rbp),%rax
mov    0x18(%rax),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,-0xa4(%rbp)
lea    -0xa0(%rbp),%rdi
mov    -0xa4(%rbp),%edx
lea    0xb33(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0x18(%rax),%edx
add    $0x76c,%edx
lea    0xb0c(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
movl   $0x0,-0xa4(%rbp)
mov    0x27cd(%rip),%rax
cmpl   $0x0,(%rax)
je     1824 <strftime+0x694>
mov    -0x28(%rbp),%rax
cmpl   $0x0,0x1c(%rax)
je     1824 <strftime+0x694>
movl   $0x1,-0xa4(%rbp)
lea    -0xa0(%rbp),%rdi
mov    0x27ae(%rip),%rax
mov    (%rax),%rax
movslq -0xa4(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
call   1030 <strcpy@plt>
jmp    1a18 <strftime+0x888>
movb   $0xa,-0xa0(%rbp)
movb   $0x0,-0x9f(%rbp)
jmp    1a18 <strftime+0x888>
movb   $0x9,-0xa0(%rbp)
movb   $0x0,-0x9f(%rbp)
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rcx
mov    $0x64,%esi
lea    0xa7d(%rip),%rdx
call   10a0 <strftime@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%edx
lea    0xa67(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rcx
mov    $0x64,%esi
lea    0xa48(%rip),%rdx
call   10a0 <strftime@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rcx
mov    $0x64,%esi
lea    0xa33(%rip),%rdx
call   10a0 <strftime@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rcx
mov    $0x64,%esi
lea    0xa18(%rip),%rdx
call   10a0 <strftime@plt>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%edx
mov    -0x28(%rbp),%rax
movslq 0x4(%rax),%rcx
lea    0x27ce(%rip),%rax
mov    (%rax,%rcx,8),%rcx
mov    -0x28(%rbp),%rax
mov    0x18(%rax),%r8d
add    $0x76c,%r8d
lea    0x9e0(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
movl   $0x3,-0xa4(%rbp)
cmpl   $0x6,-0xa4(%rbp)
jge    19c4 <strftime+0x834>
movslq -0xa4(%rbp),%rax
movsbl -0xa0(%rbp,%rax,1),%edi
ff
call   1040 <islower@plt>
cmp    $0x0,%eax
je     19ab <strftime+0x81b>
movslq -0xa4(%rbp),%rax
movsbl -0xa0(%rbp,%rax,1),%edi
ff
call   1050 <toupper@plt>
mov    %al,%cl
movslq -0xa4(%rbp),%rax
mov    %cl,-0xa0(%rbp,%rax,1)
jmp    19b0 <strftime+0x820>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    195d <strftime+0x7cd>
jmp    1a18 <strftime+0x888>
lea    -0xa0(%rbp),%rdi
mov    -0x28(%rbp),%rax
mov    0x18(%rax),%eax
add    $0x76c,%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,%edx
lea    0x912(%rip),%rsi
mov    $0x0,%al
call   10b0 <sprintf@plt>
jmp    1a18 <strftime+0x888>
jmp    12d3 <strftime+0x143>
movb   $0x25,-0xa0(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x9f(%rbp)
movb   $0x0,-0x9e(%rbp)
lea    -0xa0(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,-0xa4(%rbp)
cmpl   $0x0,-0xa4(%rbp)
je     1a91 <strftime+0x901>
mov    -0x10(%rbp),%rax
movslq -0xa4(%rbp),%rcx
add    %rcx,%rax
mov    -0x30(%rbp),%rcx
add    $0xffffffffffffffff,%rcx
cmp    %rcx,%rax
jae    1a7f <strftime+0x8ef>
mov    -0x10(%rbp),%rdi
lea    -0xa0(%rbp),%rsi
call   1030 <strcpy@plt>
mov    -0xa4(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
jmp    1a8c <strftime+0x8fc>
movq   $0x0,-0x8(%rbp)
jmp    1aed <strftime+0x95d>
jmp    1a91 <strftime+0x901>
jmp    1a96 <strftime+0x906>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1258 <strftime+0xc8>
jmp    1aac <strftime+0x91c>
mov    -0x10(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    1ae5 <strftime+0x955>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1ae5 <strftime+0x955>
mov    -0x10(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
sub    %rcx,%rax
mov    %rax,-0x8(%rbp)
jmp    1aed <strftime+0x95d>
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<strftime>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
xor    %eax,%eax
test   %rsi,%rsi
je     1677 <strftime+0x4e7>
mov    %rdi,%r15
test   %rdi,%rdi
je     1677 <strftime+0x4e7>
mov    %rdx,%rbx
test   %rdx,%rdx
je     1677 <strftime+0x4e7>
mov    %rcx,%r12
test   %rcx,%rcx
je     1677 <strftime+0x4e7>
mov    %rsi,%rbp
mov    %rbx,%rdi
mov    $0x25,%esi
call   1070 <strchr@plt>
test   %rax,%rax
jne    11f8 <strftime+0x68>
mov    %rbx,%rdi
call   1060 <strlen@plt>
add    $0x1,%eax
cltq
cmp    %rbp,%rax
jae    1675 <strftime+0x4e5>
cmpb   $0x0,0x2e71(%rip)
jne    120f <strftime+0x7f>
xor    %eax,%eax
call   1090 <tzset@plt>
movb   $0x1,0x2e61(%rip)
add    %r15,%rbp
mov    (%rbx),%al
test   %al,%al
mov    %r15,0x68(%rsp)
mov    %rbp,0x70(%rsp)
je     1669 <strftime+0x4d9>
lea    -0x1(%rbp),%r13
cmp    %r15,%r13
jbe    1669 <strftime+0x4d9>
lea    0xdc6(%rip),%r14
nopw   0x0(%rax,%rax,1)
movb   $0x0,(%rsp)
cmp    $0x25,%al
jne    1280 <strftime+0xf0>
add    $0x1,%rbx
movsbl (%rbx),%eax
cmp    $0x79,%eax
ja     128c <strftime+0xfc>
movslq (%r14,%rax,4),%rcx
add    %r14,%rcx
jmp    *%rcx
mov    0x4(%r12),%eax
cmp    $0xc,%rax
jae    148e <strftime+0x2fe>
lea    0x2b3d(%rip),%rcx
jmp    1624 <strftime+0x494>
nopl   0x0(%rax,%rax,1)
mov    %al,(%r15)
add    $0x1,%r15
jmp    1655 <strftime+0x4c5>
movb   $0x25,(%rsp)
mov    %al,0x1(%rsp)
movb   $0x0,0x2(%rsp)
jmp    1630 <strftime+0x4a0>
movb   $0x25,(%r15)
add    $0x1,%r15
jmp    1655 <strftime+0x4c5>
mov    (%r12),%eax
cmp    $0x7,%rax
jae    148e <strftime+0x2fe>
lea    0xf28(%rip),%rcx
jmp    12d8 <strftime+0x148>
mov    0x4(%r12),%eax
cmp    $0xc,%rax
jae    148e <strftime+0x2fe>
lea    0xf2c(%rip),%rcx
movslq (%rcx,%rax,4),%rsi
add    %rcx,%rsi
jmp    1628 <strftime+0x498>
mov    $0x76c,%eax
add    0x18(%r12),%eax
cltq
imul   $0x51eb851f,%rax,%rdx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x25,%rdx
add    %eax,%edx
lea    0x1040(%rip),%rsi
jmp    15fe <strftime+0x46e>
lea    0x1039(%rip),%rdx
jmp    156a <strftime+0x3da>
mov    0xc(%r12),%edx
jmp    152a <strftime+0x39a>
mov    0xc(%r12),%eax
lea    -0xc(%rax),%ecx
cmp    $0xd,%eax
cmovl  %eax,%ecx
test   %eax,%eax
mov    $0xc,%edx
cmovne %ecx,%edx
jmp    152a <strftime+0x39a>
mov    0x10(%r12),%edx
jmp    152a <strftime+0x39a>
lea    0x1015(%rip),%rdx
jmp    156a <strftime+0x3da>
mov    0x14(%r12),%edx
jmp    152a <strftime+0x39a>
lea    0x1005(%rip),%rdx
jmp    156a <strftime+0x3da>
mov    %r12,%rdi
xor    %esi,%esi
jmp    140f <strftime+0x27f>
mov    0x8(%r12),%edx
movslq 0x4(%r12),%rax
lea    0x2a26(%rip),%rcx
mov    (%rcx,%rax,8),%rcx
mov    $0x76c,%r8d
add    0x18(%r12),%r8d
lea    0xfd8(%rip),%rsi
mov    %rsp,%rdi
xor    %eax,%eax
call   10b0 <sprintf@plt>
movsbl 0x3(%rsp),%edi
call   1040 <islower@plt>
test   %eax,%eax
je     13c6 <strftime+0x236>
movsbl 0x3(%rsp),%edi
call   1050 <toupper@plt>
mov    %al,0x3(%rsp)
movsbl 0x4(%rsp),%edi
call   1040 <islower@plt>
test   %eax,%eax
je     13e2 <strftime+0x252>
movsbl 0x4(%rsp),%edi
call   1050 <toupper@plt>
mov    %al,0x4(%rsp)
movsbl 0x5(%rsp),%edi
call   1040 <islower@plt>
test   %eax,%eax
je     1630 <strftime+0x4a0>
movsbl 0x5(%rsp),%edi
call   1050 <toupper@plt>
mov    %al,0x5(%rsp)
jmp    1630 <strftime+0x4a0>
mov    %r12,%rdi
mov    $0x1,%esi
call   1080 <weeknumber@plt>
lea    0xf23(%rip),%rsi
mov    %rsp,%rdi
mov    %eax,%edx
jmp    1534 <strftime+0x3a4>
mov    0xc(%r12),%edx
mov    0x10(%r12),%ecx
mov    0x14(%r12),%r8d
lea    0xf06(%rip),%rsi
mov    %rsp,%rdi
xor    %eax,%eax
call   10b0 <sprintf@plt>
jmp    1630 <strftime+0x4a0>
mov    $0x76c,%edx
add    0x18(%r12),%edx
lea    0xee3(%rip),%rsi
jmp    1531 <strftime+0x3a1>
mov    0x2b69(%rip),%rax
cmpl   $0x0,(%rax)
je     1618 <strftime+0x488>
xor    %eax,%eax
cmpl   $0x0,0x1c(%r12)
setne  %al
jmp    161a <strftime+0x48a>
mov    (%r12),%eax
cmp    $0x7,%rax
jb     1606 <strftime+0x476>
lea    0xe7c(%rip),%rsi
jmp    1628 <strftime+0x498>
movslq (%r12),%rax
lea    0x28cb(%rip),%rcx
mov    (%rcx,%rax,8),%rdx
movslq 0x4(%r12),%rax
lea    0x28fb(%rip),%rcx
mov    (%rcx,%rax,8),%rcx
mov    0x8(%r12),%r8d
mov    0xc(%r12),%r9d
mov    0x10(%r12),%r10d
mov    0x14(%r12),%r11d
mov    $0x76c,%ebp
add    0x18(%r12),%ebp
sub    $0x8,%rsp
lea    0xe31(%rip),%rsi
lea    0x8(%rsp),%rdi
xor    %eax,%eax
push   %rbp
push   %r11
push   %r10
call   10b0 <sprintf@plt>
add    $0x20,%rsp
jmp    1630 <strftime+0x4a0>
mov    0x8(%r12),%edx
jmp    152a <strftime+0x39a>
mov    0x8(%r12),%edx
lea    0xe4a(%rip),%rsi
jmp    1531 <strftime+0x3a1>
mov    0x20(%r12),%edx
add    $0x1,%edx
lea    0xe0f(%rip),%rsi
jmp    1531 <strftime+0x3a1>
mov    0x4(%r12),%edx
add    $0x1,%edx
lea    0xe1a(%rip),%rsi
mov    %rsp,%rdi
xor    %eax,%eax
call   10b0 <sprintf@plt>
jmp    1630 <strftime+0x4a0>
movw   $0xa,(%rsp)
jmp    1630 <strftime+0x4a0>
cmpl   $0xb,0xc(%r12)
jg     160f <strftime+0x47f>
lea    0xdad(%rip),%rsi
jmp    1628 <strftime+0x498>
lea    0xdf3(%rip),%rdx
mov    %rsp,%rdi
mov    $0x64,%esi
mov    %r12,%rcx
call   10a0 <strftime@plt>
jmp    1630 <strftime+0x4a0>
movw   $0x9,(%rsp)
jmp    1630 <strftime+0x4a0>
mov    (%r12),%edx
lea    0xda9(%rip),%rsi
jmp    1531 <strftime+0x3a1>
movslq (%r12),%rax
lea    0x27ce(%rip),%rcx
mov    (%rcx,%rax,8),%rdx
movslq 0x4(%r12),%rax
lea    0x27fe(%rip),%rcx
mov    (%rcx,%rax,8),%rcx
mov    0x8(%r12),%r8d
mov    $0x76c,%r9d
add    0x18(%r12),%r9d
lea    0xd67(%rip),%rsi
mov    %rsp,%rdi
xor    %eax,%eax
call   10b0 <sprintf@plt>
jmp    1630 <strftime+0x4a0>
movslq 0x18(%r12),%rdx
imul   $0x51eb851f,%rdx,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x25,%rax
add    %ecx,%eax
imul   $0x64,%eax,%eax
sub    %eax,%edx
lea    0xd40(%rip),%rsi
mov    %rsp,%rdi
jmp    1534 <strftime+0x3a4>
lea    0x2763(%rip),%rcx
jmp    1624 <strftime+0x494>
lea    0xcf8(%rip),%rsi
jmp    1628 <strftime+0x498>
xor    %eax,%eax
mov    0x29bf(%rip),%rcx
mov    (%rcx),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %rsp,%rdi
call   1030 <strcpy@plt>
mov    %rsp,%rdi
call   1060 <strlen@plt>
test   %eax,%eax
je     1655 <strftime+0x4c5>
movslq %eax,%rbp
add    %r15,%rbp
cmp    %r13,%rbp
jae    1675 <strftime+0x4e5>
mov    %r15,%rdi
mov    %rsp,%rsi
call   1030 <strcpy@plt>
mov    %rbp,%r15
mov    0x1(%rbx),%al
add    $0x1,%rbx
test   %al,%al
je     1669 <strftime+0x4d9>
cmp    %r13,%r15
jb     1240 <strftime+0xb0>
cmp    0x70(%rsp),%r15
jae    1675 <strftime+0x4e5>
cmpb   $0x0,(%rbx)
je     1686 <strftime+0x4f6>
xor    %eax,%eax
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movb   $0x0,(%r15)
sub    0x68(%rsp),%r15
mov    %r15,%rax
jmp    1677 <strftime+0x4e7>
movb   $0x25,(%r15)
add    $0x1,%r15
cmp    0x70(%rsp),%r15
jb     1670 <strftime+0x4e0>
jmp    1675 <strftime+0x4e5>

LLVM IR (-O0):
%struct.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
@strftime.first = internal global i16 1
@strftime.days_a = internal global [7 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i32 0, i32 0)]
@.str = [4 x i8] c"Sun\00"
@.str.1 = [4 x i8] c"Mon\00"
@.str.2 = [4 x i8] c"Tue\00"
@.str.3 = [4 x i8] c"Wed\00"
@.str.4 = [4 x i8] c"Thu\00"
@.str.5 = [4 x i8] c"Fri\00"
@.str.6 = [4 x i8] c"Sat\00"
@strftime.days_l = internal global [7 x i8*] [i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.13, i32 0, i32 0)]
@.str.7 = [7 x i8] c"Sunday\00"
@.str.8 = [7 x i8] c"Monday\00"
@.str.9 = [8 x i8] c"Tuesday\00"
@.str.10 = [10 x i8] c"Wednesday\00"
@.str.11 = [9 x i8] c"Thursday\00"
@.str.12 = [7 x i8] c"Friday\00"
@.str.13 = [9 x i8] c"Saturday\00"
@strftime.months_a = internal global [12 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.19, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.25, i32 0, i32 0)]
@.str.14 = [4 x i8] c"Jan\00"
@.str.15 = [4 x i8] c"Feb\00"
@.str.16 = [4 x i8] c"Mar\00"
@.str.17 = [4 x i8] c"Apr\00"
@.str.18 = [4 x i8] c"May\00"
@.str.19 = [4 x i8] c"Jun\00"
@.str.20 = [4 x i8] c"Jul\00"
@.str.21 = [4 x i8] c"Aug\00"
@.str.22 = [4 x i8] c"Sep\00"
@.str.23 = [4 x i8] c"Oct\00"
@.str.24 = [4 x i8] c"Nov\00"
@.str.25 = [4 x i8] c"Dec\00"
@strftime.months_l = internal global [12 x i8*] [i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.29, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.32, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.34, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.36, i32 0, i32 0)]
@.str.26 = [8 x i8] c"January\00"
@.str.27 = [9 x i8] c"February\00"
@.str.28 = [6 x i8] c"March\00"
@.str.29 = [6 x i8] c"April\00"
@.str.30 = [5 x i8] c"June\00"
@.str.31 = [5 x i8] c"July\00"
@.str.32 = [7 x i8] c"August\00"
@.str.33 = [10 x i8] c"September\00"
@.str.34 = [8 x i8] c"October\00"
@.str.35 = [9 x i8] c"November\00"
@.str.36 = [9 x i8] c"December\00"
@strftime.ampm = internal global [2 x i8*] [i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.38, i32 0, i32 0)]
@.str.37 = [3 x i8] c"AM\00"
@.str.38 = [3 x i8] c"PM\00"
@.str.39 = [2 x i8] c"?\00"
@.str.40 = [28 x i8] c"%s %s %2d %02d:%02d:%02d %d\00"
@.str.41 = [5 x i8] c"%02d\00"
@.str.42 = [5 x i8] c"%03d\00"
@.str.43 = [3 x i8] c"%d\00"
@.str.44 = [13 x i8] c"%s %s %2d %d\00"
@.str.45 = [15 x i8] c"%02d:%02d:%02d\00"
@daylight = global i32 0
@tzname = global i8** null
@.str.46 = [9 x i8] c"%m/%d/%y\00"
@.str.47 = [4 x i8] c"%2d\00"
@.str.48 = [12 x i8] c"%I:%M:%S %p\00"
@.str.49 = [6 x i8] c"%H:%M\00"
@.str.50 = [9 x i8] c"%H:%M:%S\00"
@.str.51 = [14 x i8] c"%2d-%3.3s-%4d\00"
define i64 @strftime(i8* %0, i64 %1, i8* %2, %struct.tm* %3) {
%5 = alloca i64
%6 = alloca i8*
%7 = alloca i64
%8 = alloca i8*
%9 = alloca %struct.tm*
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca [100 x i8]
%13 = alloca i32
store i8* %0, i8** %6
store i64 %1, i64* %7
store i8* %2, i8** %8
store %struct.tm* %3, %struct.tm** %9
%14 = load i8*, i8** %6
%15 = load i64, i64* %7
%16 = getelementptr inbounds i8, i8* %14, i64 %15
store i8* %16, i8** %10
%17 = load i8*, i8** %6
store i8* %17, i8** %11
%18 = load i8*, i8** %6
%19 = icmp eq i8* %18, null
br i1 %19, label %29, label %20
20: ; preds = %4
%21 = load i8*, i8** %8
%22 = icmp eq i8* %21, null
br i1 %22, label %29, label %23
23: ; preds = %20
%24 = load %struct.tm*, %struct.tm** %9
%25 = icmp eq %struct.tm* %24, null
br i1 %25, label %29, label %26
26: ; preds = %23
%27 = load i64, i64* %7
%28 = icmp eq i64 %27, 0
br i1 %28, label %29, label %30
29: ; preds = %26, %23, %20, %4
store i64 0, i64* %5
br label %486
30: ; preds = %26
%31 = load i8*, i8** %8
%32 = call i32* @strchr(i8* %31, i8 signext 37)
%33 = icmp eq i32* %32, null
br i1 %33, label %34, label %42
34: ; preds = %30
%35 = load i8*, i8** %8
%36 = call i32 @strlen(i8* %35)
%37 = add nsw i32 %36, 1
%38 = sext i32 %37 to i64
%39 = load i64, i64* %7
%40 = icmp uge i64 %38, %39
br i1 %40, label %41, label %42
41: ; preds = %34
store i64 0, i64* %5
br label %486
42: ; preds = %34, %30
%43 = load i16, i16* @strftime.first
%44 = icmp ne i16 %43, 0
br i1 %44, label %45, label %47
45: ; preds = %42
%46 = call i32 (...) @tzset()
store i16 0, i16* @strftime.first
br label %47
47: ; preds = %45, %42
br label %48
48: ; preds = %465, %47
%49 = load i8*, i8** %8
%50 = load i8, i8* %49
%51 = sext i8 %50 to i32
%52 = icmp ne i32 %51, 0
br i1 %52, label %53, label %58
53: ; preds = %48
%54 = load i8*, i8** %6
%55 = load i8*, i8** %10
%56 = getelementptr inbounds i8, i8* %55, i64 -1
%57 = icmp ult i8* %54, %56
br label %58
58: ; preds = %53, %48
%59 = phi i1 [ false, %48 ], [ %57, %53 ]
br i1 %59, label %60, label %468
60: ; preds = %58
%61 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
store i8 0, i8* %61
%62 = load i8*, i8** %8
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
%65 = icmp ne i32 %64, 37
br i1 %65, label %66, label %71
66: ; preds = %60
%67 = load i8*, i8** %8
%68 = load i8, i8* %67
%69 = load i8*, i8** %6
%70 = getelementptr inbounds i8, i8* %69, i32 1
store i8* %70, i8** %6
store i8 %68, i8* %69
br label %465
71: ; preds = %60
br label %72
72: ; preds = %434, %71
%73 = load i8*, i8** %8
%74 = getelementptr inbounds i8, i8* %73, i32 1
store i8* %74, i8** %8
%75 = load i8, i8* %74
%76 = sext i8 %75 to i32
switch i32 %76, label %435 [
i32 0, label %77
i32 37, label %80
i32 97, label %83
i32 65, label %106
i32 104, label %129
i32 98, label %129
i32 66, label %152
i32 99, label %175
i32 100, label %206
i32 72, label %212
i32 73, label %218
i32 106, label %236
i32 109, label %243
i32 77, label %250
i32 112, label %256
i32 83, label %270
i32 85, label %276
i32 119, label %281
i32 87, label %287
i32 120, label %292
i32 88, label %314
i32 121, label %326
i32 89, label %334
i32 90, label %341
i32 110, label %358
i32 116, label %361
i32 68, label %364
i32 101, label %368
i32 114, label %374
i32 82, label %378
i32 84, label %382
i32 86, label %386
i32 67, label %426
i32 69, label %434
i32 79, label %434
]
77: ; preds = %72
%78 = load i8*, i8** %6
%79 = getelementptr inbounds i8, i8* %78, i32 1
store i8* %79, i8** %6
store i8 37, i8* %78
br label %469
80: ; preds = %72
%81 = load i8*, i8** %6
%82 = getelementptr inbounds i8, i8* %81, i32 1
store i8* %82, i8** %6
store i8 37, i8* %81
br label %465
83: ; preds = %72
%84 = load %struct.tm*, %struct.tm** %9
%85 = getelementptr inbounds %struct.tm, %struct.tm* %84, i32 0, i32 0
%86 = load i32, i32* %85
%87 = icmp slt i32 %86, 0
br i1 %87, label %93, label %88
88: ; preds = %83
%89 = load %struct.tm*, %struct.tm** %9
%90 = getelementptr inbounds %struct.tm, %struct.tm* %89, i32 0, i32 0
%91 = load i32, i32* %90
%92 = icmp sgt i32 %91, 6
br i1 %92, label %93, label %96
93: ; preds = %88, %83
%94 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%95 = call i32 @strcpy(i8* %94, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
br label %105
96: ; preds = %88
%97 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%98 = load %struct.tm*, %struct.tm** %9
%99 = getelementptr inbounds %struct.tm, %struct.tm* %98, i32 0, i32 0
%100 = load i32, i32* %99
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds [7 x i8*], [7 x i8*]* @strftime.days_a, i64 0, i64 %101
%103 = load i8*, i8** %102
%104 = call i32 @strcpy(i8* %97, i8* %103)
br label %105
105: ; preds = %96, %93
br label %441
106: ; preds = %72
%107 = load %struct.tm*, %struct.tm** %9
%108 = getelementptr inbounds %struct.tm, %struct.tm* %107, i32 0, i32 0
%109 = load i32, i32* %108
%110 = icmp slt i32 %109, 0
br i1 %110, label %116, label %111
111: ; preds = %106
%112 = load %struct.tm*, %struct.tm** %9
%113 = getelementptr inbounds %struct.tm, %struct.tm* %112, i32 0, i32 0
%114 = load i32, i32* %113
%115 = icmp sgt i32 %114, 6
br i1 %115, label %116, label %119
116: ; preds = %111, %106
%117 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%118 = call i32 @strcpy(i8* %117, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
br label %128
119: ; preds = %111
%120 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%121 = load %struct.tm*, %struct.tm** %9
%122 = getelementptr inbounds %struct.tm, %struct.tm* %121, i32 0, i32 0
%123 = load i32, i32* %122
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds [7 x i8*], [7 x i8*]* @strftime.days_l, i64 0, i64 %124
%126 = load i8*, i8** %125
%127 = call i32 @strcpy(i8* %120, i8* %126)
br label %128
128: ; preds = %119, %116
br label %441
129: ; preds = %72, %72
%130 = load %struct.tm*, %struct.tm** %9
%131 = getelementptr inbounds %struct.tm, %struct.tm* %130, i32 0, i32 1
%132 = load i32, i32* %131
%133 = icmp slt i32 %132, 0
br i1 %133, label %139, label %134
134: ; preds = %129
%135 = load %struct.tm*, %struct.tm** %9
%136 = getelementptr inbounds %struct.tm, %struct.tm* %135, i32 0, i32 1
%137 = load i32, i32* %136
%138 = icmp sgt i32 %137, 11
br i1 %138, label %139, label %142
139: ; preds = %134, %129
%140 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%141 = call i32 @strcpy(i8* %140, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
br label %151
142: ; preds = %134
%143 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%144 = load %struct.tm*, %struct.tm** %9
%145 = getelementptr inbounds %struct.tm, %struct.tm* %144, i32 0, i32 1
%146 = load i32, i32* %145
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds [12 x i8*], [12 x i8*]* @strftime.months_a, i64 0, i64 %147
%149 = load i8*, i8** %148
%150 = call i32 @strcpy(i8* %143, i8* %149)
br label %151
151: ; preds = %142, %139
br label %441
152: ; preds = %72
%153 = load %struct.tm*, %struct.tm** %9
%154 = getelementptr inbounds %struct.tm, %struct.tm* %153, i32 0, i32 1
%155 = load i32, i32* %154
%156 = icmp slt i32 %155, 0
br i1 %156, label %162, label %157
157: ; preds = %152
%158 = load %struct.tm*, %struct.tm** %9
%159 = getelementptr inbounds %struct.tm, %struct.tm* %158, i32 0, i32 1
%160 = load i32, i32* %159
%161 = icmp sgt i32 %160, 11
br i1 %161, label %162, label %165
162: ; preds = %157, %152
%163 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%164 = call i32 @strcpy(i8* %163, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
br label %174
165: ; preds = %157
%166 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%167 = load %struct.tm*, %struct.tm** %9
%168 = getelementptr inbounds %struct.tm, %struct.tm* %167, i32 0, i32 1
%169 = load i32, i32* %168
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds [12 x i8*], [12 x i8*]* @strftime.months_l, i64 0, i64 %170
%172 = load i8*, i8** %171
%173 = call i32 @strcpy(i8* %166, i8* %172)
br label %174
174: ; preds = %165, %162
br label %441
175: ; preds = %72
%176 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%177 = load %struct.tm*, %struct.tm** %9
%178 = getelementptr inbounds %struct.tm, %struct.tm* %177, i32 0, i32 0
%179 = load i32, i32* %178
%180 = sext i32 %179 to i64
%181 = getelementptr inbounds [7 x i8*], [7 x i8*]* @strftime.days_a, i64 0, i64 %180
%182 = load i8*, i8** %181
%183 = load %struct.tm*, %struct.tm** %9
%184 = getelementptr inbounds %struct.tm, %struct.tm* %183, i32 0, i32 1
%185 = load i32, i32* %184
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds [12 x i8*], [12 x i8*]* @strftime.months_a, i64 0, i64 %186
%188 = load i8*, i8** %187
%189 = load %struct.tm*, %struct.tm** %9
%190 = getelementptr inbounds %struct.tm, %struct.tm* %189, i32 0, i32 2
%191 = load i32, i32* %190
%192 = load %struct.tm*, %struct.tm** %9
%193 = getelementptr inbounds %struct.tm, %struct.tm* %192, i32 0, i32 3
%194 = load i32, i32* %193
%195 = load %struct.tm*, %struct.tm** %9
%196 = getelementptr inbounds %struct.tm, %struct.tm* %195, i32 0, i32 4
%197 = load i32, i32* %196
%198 = load %struct.tm*, %struct.tm** %9
%199 = getelementptr inbounds %struct.tm, %struct.tm* %198, i32 0, i32 5
%200 = load i32, i32* %199
%201 = load %struct.tm*, %struct.tm** %9
%202 = getelementptr inbounds %struct.tm, %struct.tm* %201, i32 0, i32 6
%203 = load i32, i32* %202
%204 = add nsw i32 %203, 1900
%205 = call i32 (i8*, i8*, ...) @sprintf(i8* %176, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.40, i64 0, i64 0), i8* %182, i8* %188, i32 %191, i32 %194, i32 %197, i32 %200, i32 %204)
br label %441
206: ; preds = %72
%207 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%208 = load %struct.tm*, %struct.tm** %9
%209 = getelementptr inbounds %struct.tm, %struct.tm* %208, i32 0, i32 2
%210 = load i32, i32* %209
%211 = call i32 (i8*, i8*, ...) @sprintf(i8* %207, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %210)
br label %441
212: ; preds = %72
%213 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%214 = load %struct.tm*, %struct.tm** %9
%215 = getelementptr inbounds %struct.tm, %struct.tm* %214, i32 0, i32 3
%216 = load i32, i32* %215
%217 = call i32 (i8*, i8*, ...) @sprintf(i8* %213, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %216)
br label %441
218: ; preds = %72
%219 = load %struct.tm*, %struct.tm** %9
%220 = getelementptr inbounds %struct.tm, %struct.tm* %219, i32 0, i32 3
%221 = load i32, i32* %220
store i32 %221, i32* %13
%222 = load i32, i32* %13
%223 = icmp eq i32 %222, 0
br i1 %223, label %224, label %225
224: ; preds = %218
store i32 12, i32* %13
br label %232
225: ; preds = %218
%226 = load i32, i32* %13
%227 = icmp sgt i32 %226, 12
br i1 %227, label %228, label %231
228: ; preds = %225
%229 = load i32, i32* %13
%230 = sub nsw i32 %229, 12
store i32 %230, i32* %13
br label %231
231: ; preds = %228, %225
br label %232
232: ; preds = %231, %224
%233 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%234 = load i32, i32* %13
%235 = call i32 (i8*, i8*, ...) @sprintf(i8* %233, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %234)
br label %441
236: ; preds = %72
%237 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%238 = load %struct.tm*, %struct.tm** %9
%239 = getelementptr inbounds %struct.tm, %struct.tm* %238, i32 0, i32 8
%240 = load i32, i32* %239
%241 = add nsw i32 %240, 1
%242 = call i32 (i8*, i8*, ...) @sprintf(i8* %237, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.42, i64 0, i64 0), i32 %241)
br label %441
243: ; preds = %72
%244 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%245 = load %struct.tm*, %struct.tm** %9
%246 = getelementptr inbounds %struct.tm, %struct.tm* %245, i32 0, i32 1
%247 = load i32, i32* %246
%248 = add nsw i32 %247, 1
%249 = call i32 (i8*, i8*, ...) @sprintf(i8* %244, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %248)
br label %441
250: ; preds = %72
%251 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%252 = load %struct.tm*, %struct.tm** %9
%253 = getelementptr inbounds %struct.tm, %struct.tm* %252, i32 0, i32 4
%254 = load i32, i32* %253
%255 = call i32 (i8*, i8*, ...) @sprintf(i8* %251, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %254)
br label %441
256: ; preds = %72
%257 = load %struct.tm*, %struct.tm** %9
%258 = getelementptr inbounds %struct.tm, %struct.tm* %257, i32 0, i32 3
%259 = load i32, i32* %258
%260 = icmp slt i32 %259, 12
br i1 %260, label %261, label %265
261: ; preds = %256
%262 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%263 = load i8*, i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @strftime.ampm, i64 0, i64 0)
%264 = call i32 @strcpy(i8* %262, i8* %263)
br label %269
265: ; preds = %256
%266 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%267 = load i8*, i8** getelementptr inbounds ([2 x i8*], [2 x i8*]* @strftime.ampm, i64 0, i64 1)
%268 = call i32 @strcpy(i8* %266, i8* %267)
br label %269
269: ; preds = %265, %261
br label %441
270: ; preds = %72
%271 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%272 = load %struct.tm*, %struct.tm** %9
%273 = getelementptr inbounds %struct.tm, %struct.tm* %272, i32 0, i32 5
%274 = load i32, i32* %273
%275 = call i32 (i8*, i8*, ...) @sprintf(i8* %271, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %274)
br label %441
276: ; preds = %72
%277 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%278 = load %struct.tm*, %struct.tm** %9
%279 = call i32 @weeknumber(%struct.tm* %278, i32 0)
%280 = call i32 (i8*, i8*, ...) @sprintf(i8* %277, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %279)
br label %441
281: ; preds = %72
%282 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%283 = load %struct.tm*, %struct.tm** %9
%284 = getelementptr inbounds %struct.tm, %struct.tm* %283, i32 0, i32 0
%285 = load i32, i32* %284
%286 = call i32 (i8*, i8*, ...) @sprintf(i8* %282, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %285)
br label %441
287: ; preds = %72
%288 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%289 = load %struct.tm*, %struct.tm** %9
%290 = call i32 @weeknumber(%struct.tm* %289, i32 1)
%291 = call i32 (i8*, i8*, ...) @sprintf(i8* %288, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %290)
br label %441
292: ; preds = %72
%293 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%294 = load %struct.tm*, %struct.tm** %9
%295 = getelementptr inbounds %struct.tm, %struct.tm* %294, i32 0, i32 0
%296 = load i32, i32* %295
%297 = sext i32 %296 to i64
%298 = getelementptr inbounds [7 x i8*], [7 x i8*]* @strftime.days_a, i64 0, i64 %297
%299 = load i8*, i8** %298
%300 = load %struct.tm*, %struct.tm** %9
%301 = getelementptr inbounds %struct.tm, %struct.tm* %300, i32 0, i32 1
%302 = load i32, i32* %301
%303 = sext i32 %302 to i64
%304 = getelementptr inbounds [12 x i8*], [12 x i8*]* @strftime.months_a, i64 0, i64 %303
%305 = load i8*, i8** %304
%306 = load %struct.tm*, %struct.tm** %9
%307 = getelementptr inbounds %struct.tm, %struct.tm* %306, i32 0, i32 2
%308 = load i32, i32* %307
%309 = load %struct.tm*, %struct.tm** %9
%310 = getelementptr inbounds %struct.tm, %struct.tm* %309, i32 0, i32 6
%311 = load i32, i32* %310
%312 = add nsw i32 %311, 1900
%313 = call i32 (i8*, i8*, ...) @sprintf(i8* %293, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.44, i64 0, i64 0), i8* %299, i8* %305, i32 %308, i32 %312)
br label %441
314: ; preds = %72
%315 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%316 = load %struct.tm*, %struct.tm** %9
%317 = getelementptr inbounds %struct.tm, %struct.tm* %316, i32 0, i32 3
%318 = load i32, i32* %317
%319 = load %struct.tm*, %struct.tm** %9
%320 = getelementptr inbounds %struct.tm, %struct.tm* %319, i32 0, i32 4
%321 = load i32, i32* %320
%322 = load %struct.tm*, %struct.tm** %9
%323 = getelementptr inbounds %struct.tm, %struct.tm* %322, i32 0, i32 5
%324 = load i32, i32* %323
%325 = call i32 (i8*, i8*, ...) @sprintf(i8* %315, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.45, i64 0, i64 0), i32 %318, i32 %321, i32 %324)
br label %441
326: ; preds = %72
%327 = load %struct.tm*, %struct.tm** %9
%328 = getelementptr inbounds %struct.tm, %struct.tm* %327, i32 0, i32 6
%329 = load i32, i32* %328
%330 = srem i32 %329, 100
store i32 %330, i32* %13
%331 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%332 = load i32, i32* %13
%333 = call i32 (i8*, i8*, ...) @sprintf(i8* %331, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %332)
br label %441
334: ; preds = %72
%335 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%336 = load %struct.tm*, %struct.tm** %9
%337 = getelementptr inbounds %struct.tm, %struct.tm* %336, i32 0, i32 6
%338 = load i32, i32* %337
%339 = add nsw i32 1900, %338
%340 = call i32 (i8*, i8*, ...) @sprintf(i8* %335, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %339)
br label %441
341: ; preds = %72
store i32 0, i32* %13
%342 = load i32, i32* @daylight
%343 = icmp ne i32 %342, 0
br i1 %343, label %344, label %350
344: ; preds = %341
%345 = load %struct.tm*, %struct.tm** %9
%346 = getelementptr inbounds %struct.tm, %struct.tm* %345, i32 0, i32 7
%347 = load i32, i32* %346
%348 = icmp ne i32 %347, 0
br i1 %348, label %349, label %350
349: ; preds = %344
store i32 1, i32* %13
br label %350
350: ; preds = %349, %344, %341
%351 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%352 = load i8**, i8*** @tzname
%353 = load i32, i32* %13
%354 = sext i32 %353 to i64
%355 = getelementptr inbounds i8*, i8** %352, i64 %354
%356 = load i8*, i8** %355
%357 = call i32 @strcpy(i8* %351, i8* %356)
br label %441
358: ; preds = %72
%359 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
store i8 10, i8* %359
%360 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 1
store i8 0, i8* %360
br label %441
361: ; preds = %72
%362 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
store i8 9, i8* %362
%363 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 1
store i8 0, i8* %363
br label %441
364: ; preds = %72
%365 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%366 = load %struct.tm*, %struct.tm** %9
%367 = call i64 @strftime(i8* %365, i64 100, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.46, i64 0, i64 0), %struct.tm* %366)
br label %441
368: ; preds = %72
%369 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%370 = load %struct.tm*, %struct.tm** %9
%371 = getelementptr inbounds %struct.tm, %struct.tm* %370, i32 0, i32 2
%372 = load i32, i32* %371
%373 = call i32 (i8*, i8*, ...) @sprintf(i8* %369, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.47, i64 0, i64 0), i32 %372)
br label %441
374: ; preds = %72
%375 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%376 = load %struct.tm*, %struct.tm** %9
%377 = call i64 @strftime(i8* %375, i64 100, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.48, i64 0, i64 0), %struct.tm* %376)
br label %441
378: ; preds = %72
%379 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%380 = load %struct.tm*, %struct.tm** %9
%381 = call i64 @strftime(i8* %379, i64 100, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.49, i64 0, i64 0), %struct.tm* %380)
br label %441
382: ; preds = %72
%383 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%384 = load %struct.tm*, %struct.tm** %9
%385 = call i64 @strftime(i8* %383, i64 100, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.50, i64 0, i64 0), %struct.tm* %384)
br label %441
386: ; preds = %72
%387 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%388 = load %struct.tm*, %struct.tm** %9
%389 = getelementptr inbounds %struct.tm, %struct.tm* %388, i32 0, i32 2
%390 = load i32, i32* %389
%391 = load %struct.tm*, %struct.tm** %9
%392 = getelementptr inbounds %struct.tm, %struct.tm* %391, i32 0, i32 1
%393 = load i32, i32* %392
%394 = sext i32 %393 to i64
%395 = getelementptr inbounds [12 x i8*], [12 x i8*]* @strftime.months_a, i64 0, i64 %394
%396 = load i8*, i8** %395
%397 = load %struct.tm*, %struct.tm** %9
%398 = getelementptr inbounds %struct.tm, %struct.tm* %397, i32 0, i32 6
%399 = load i32, i32* %398
%400 = add nsw i32 %399, 1900
%401 = call i32 (i8*, i8*, ...) @sprintf(i8* %387, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.51, i64 0, i64 0), i32 %390, i8* %396, i32 %400)
store i32 3, i32* %13
br label %402
402: ; preds = %422, %386
%403 = load i32, i32* %13
%404 = icmp slt i32 %403, 6
br i1 %404, label %405, label %425
405: ; preds = %402
%406 = load i32, i32* %13
%407 = sext i32 %406 to i64
%408 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 %407
%409 = load i8, i8* %408
%410 = call i32 @islower(i8 signext %409)
%411 = icmp ne i32 %410, 0
br i1 %411, label %412, label %421
412: ; preds = %405
%413 = load i32, i32* %13
%414 = sext i32 %413 to i64
%415 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 %414
%416 = load i8, i8* %415
%417 = call signext i8 @toupper(i8 signext %416)
%418 = load i32, i32* %13
%419 = sext i32 %418 to i64
%420 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 %419
store i8 %417, i8* %420
br label %421
421: ; preds = %412, %405
br label %422
422: ; preds = %421
%423 = load i32, i32* %13
%424 = add nsw i32 %423, 1
store i32 %424, i32* %13
br label %402
425: ; preds = %402
br label %441
426: ; preds = %72
%427 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%428 = load %struct.tm*, %struct.tm** %9
%429 = getelementptr inbounds %struct.tm, %struct.tm* %428, i32 0, i32 6
%430 = load i32, i32* %429
%431 = add nsw i32 %430, 1900
%432 = sdiv i32 %431, 100
%433 = call i32 (i8*, i8*, ...) @sprintf(i8* %427, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %432)
br label %441
434: ; preds = %72, %72
br label %72
435: ; preds = %72
%436 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
store i8 37, i8* %436
%437 = load i8*, i8** %8
%438 = load i8, i8* %437
%439 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 1
store i8 %438, i8* %439
%440 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 2
store i8 0, i8* %440
br label %441
441: ; preds = %435, %426, %425, %382, %378, %374, %368, %364, %361, %358, %350, %334, %326, %314, %292, %287, %281, %276, %270, %269, %250, %243, %236, %232, %212, %206, %175, %174, %151, %128, %105
%442 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%443 = call i32 @strlen(i8* %442)
store i32 %443, i32* %13
%444 = load i32, i32* %13
%445 = icmp ne i32 %444, 0
br i1 %445, label %446, label %464
446: ; preds = %441
%447 = load i8*, i8** %6
%448 = load i32, i32* %13
%449 = sext i32 %448 to i64
%450 = getelementptr inbounds i8, i8* %447, i64 %449
%451 = load i8*, i8** %10
%452 = getelementptr inbounds i8, i8* %451, i64 -1
%453 = icmp ult i8* %450, %452
br i1 %453, label %454, label %462
454: ; preds = %446
%455 = load i8*, i8** %6
%456 = getelementptr inbounds [100 x i8], [100 x i8]* %12, i64 0, i64 0
%457 = call i32 @strcpy(i8* %455, i8* %456)
%458 = load i32, i32* %13
%459 = load i8*, i8** %6
%460 = sext i32 %458 to i64
%461 = getelementptr inbounds i8, i8* %459, i64 %460
store i8* %461, i8** %6
br label %463
462: ; preds = %446
store i64 0, i64* %5
br label %486
463: ; preds = %454
br label %464
464: ; preds = %463, %441
br label %465
465: ; preds = %464, %80, %66
%466 = load i8*, i8** %8
%467 = getelementptr inbounds i8, i8* %466, i32 1
store i8* %467, i8** %8
br label %48
468: ; preds = %58
br label %469
469: ; preds = %468, %77
%470 = load i8*, i8** %6
%471 = load i8*, i8** %10
%472 = icmp ult i8* %470, %471
br i1 %472, label %473, label %485
473: ; preds = %469
%474 = load i8*, i8** %8
%475 = load i8, i8* %474
%476 = sext i8 %475 to i32
%477 = icmp eq i32 %476, 0
br i1 %477, label %478, label %485
478: ; preds = %473
%479 = load i8*, i8** %6
store i8 0, i8* %479
%480 = load i8*, i8** %6
%481 = load i8*, i8** %11
%482 = ptrtoint i8* %480 to i64
%483 = ptrtoint i8* %481 to i64
%484 = sub i64 %482, %483
store i64 %484, i64* %5
br label %486
485: ; preds = %473, %469
store i64 0, i64* %5
br label %486
486: ; preds = %485, %478, %462, %41, %29
%487 = load i64, i64* %5
ret i64 %487
}

LLVM IR (-O2):
%struct.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 }
@strftime.first = internal unnamed_addr global i1 false
@strftime.days_a = internal unnamed_addr constant [7 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i32 0, i32 0)]
@.str = [4 x i8] c"Sun\00"
@.str.1 = [4 x i8] c"Mon\00"
@.str.2 = [4 x i8] c"Tue\00"
@.str.3 = [4 x i8] c"Wed\00"
@.str.4 = [4 x i8] c"Thu\00"
@.str.5 = [4 x i8] c"Fri\00"
@.str.6 = [4 x i8] c"Sat\00"
@reltable.strftime = internal unnamed_addr constant [7 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.7 to i64), i64 ptrtoint ([7 x i32]* @reltable.strftime to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.8 to i64), i64 ptrtoint ([7 x i32]* @reltable.strftime to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str.9 to i64), i64 ptrtoint ([7 x i32]* @reltable.strftime to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([10 x i8]* @.str.10 to i64), i64 ptrtoint ([7 x i32]* @reltable.strftime to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([9 x i8]* @.str.11 to i64), i64 ptrtoint ([7 x i32]* @reltable.strftime to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.12 to i64), i64 ptrtoint ([7 x i32]* @reltable.strftime to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([9 x i8]* @.str.13 to i64), i64 ptrtoint ([7 x i32]* @reltable.strftime to i64)) to i32)]
@.str.7 = [7 x i8] c"Sunday\00"
@.str.8 = [7 x i8] c"Monday\00"
@.str.9 = [8 x i8] c"Tuesday\00"
@.str.10 = [10 x i8] c"Wednesday\00"
@.str.11 = [9 x i8] c"Thursday\00"
@.str.12 = [7 x i8] c"Friday\00"
@.str.13 = [9 x i8] c"Saturday\00"
@strftime.months_a = internal unnamed_addr constant [12 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.19, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.25, i32 0, i32 0)]
@.str.14 = [4 x i8] c"Jan\00"
@.str.15 = [4 x i8] c"Feb\00"
@.str.16 = [4 x i8] c"Mar\00"
@.str.17 = [4 x i8] c"Apr\00"
@.str.18 = [4 x i8] c"May\00"
@.str.19 = [4 x i8] c"Jun\00"
@.str.20 = [4 x i8] c"Jul\00"
@.str.21 = [4 x i8] c"Aug\00"
@.str.22 = [4 x i8] c"Sep\00"
@.str.23 = [4 x i8] c"Oct\00"
@.str.24 = [4 x i8] c"Nov\00"
@.str.25 = [4 x i8] c"Dec\00"
@reltable.strftime.52 = internal unnamed_addr constant [12 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str.26 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([9 x i8]* @.str.27 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @.str.28 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @.str.29 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.18 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.30 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.31 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.32 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([10 x i8]* @.str.33 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str.34 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([9 x i8]* @.str.35 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([9 x i8]* @.str.36 to i64), i64 ptrtoint ([12 x i32]* @reltable.strftime.52 to i64)) to i32)]
@.str.26 = [8 x i8] c"January\00"
@.str.27 = [9 x i8] c"February\00"
@.str.28 = [6 x i8] c"March\00"
@.str.29 = [6 x i8] c"April\00"
@.str.30 = [5 x i8] c"June\00"
@.str.31 = [5 x i8] c"July\00"
@.str.32 = [7 x i8] c"August\00"
@.str.33 = [10 x i8] c"September\00"
@.str.34 = [8 x i8] c"October\00"
@.str.35 = [9 x i8] c"November\00"
@.str.36 = [9 x i8] c"December\00"
@.str.37 = [3 x i8] c"AM\00"
@.str.38 = [3 x i8] c"PM\00"
@.str.39 = [2 x i8] c"?\00"
@.str.40 = [28 x i8] c"%s %s %2d %02d:%02d:%02d %d\00"
@.str.41 = [5 x i8] c"%02d\00"
@.str.42 = [5 x i8] c"%03d\00"
@.str.43 = [3 x i8] c"%d\00"
@.str.44 = [13 x i8] c"%s %s %2d %d\00"
@.str.45 = [15 x i8] c"%02d:%02d:%02d\00"
@daylight = global i32 0
@tzname = global i8** null
@.str.46 = [9 x i8] c"%m/%d/%y\00"
@.str.47 = [4 x i8] c"%2d\00"
@.str.48 = [12 x i8] c"%I:%M:%S %p\00"
@.str.49 = [6 x i8] c"%H:%M\00"
@.str.50 = [9 x i8] c"%H:%M:%S\00"
@.str.51 = [14 x i8] c"%2d-%3.3s-%4d\00"
define i64 @strftime(i8* %0, i64 %1, i8* %2, %struct.tm* %3) {
%5 = alloca [100 x i8]
%6 = getelementptr inbounds i8, i8* %0, i64 %1
%7 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 0
%8 = icmp eq i8* %0, null
%9 = icmp eq i8* %2, null
%10 = or i1 %8, %9
%11 = icmp eq %struct.tm* %3, null
%12 = or i1 %10, %11
%13 = icmp eq i64 %1, 0
%14 = or i1 %13, %12
br i1 %14, label %280, label %15
15: ; preds = %4
%16 = tail call i32* @strchr(i8* %2, i8 signext 37)
%17 = icmp eq i32* %16, null
br i1 %17, label %18, label %23
18: ; preds = %15
%19 = tail call i32 @strlen(i8* %2)
%20 = add nsw i32 %19, 1
%21 = sext i32 %20 to i64
%22 = icmp ult i64 %21, %1
br i1 %22, label %23, label %280
23: ; preds = %18, %15
%24 = load i1, i1* @strftime.first
br i1 %24, label %27, label %25
25: ; preds = %23
%26 = tail call i32 (...) @tzset()
store i1 true, i1* @strftime.first
br label %27
27: ; preds = %25, %23
%28 = getelementptr inbounds i8, i8* %6, i64 -1
%29 = load i8, i8* %2
%30 = icmp ne i8 %29, 0
%31 = icmp ugt i8* %28, %0
%32 = select i1 %30, i1 %31, i1 false
br i1 %32, label %33, label %269
33: ; preds = %27
%34 = getelementptr inbounds %struct.tm, %struct.tm* %3, i64 0, i32 6
%35 = getelementptr inbounds %struct.tm, %struct.tm* %3, i64 0, i32 2
%36 = getelementptr inbounds %struct.tm, %struct.tm* %3, i64 0, i32 1
%37 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 1
%38 = getelementptr inbounds %struct.tm, %struct.tm* %3, i64 0, i32 7
%39 = getelementptr inbounds %struct.tm, %struct.tm* %3, i64 0, i32 3
%40 = getelementptr inbounds %struct.tm, %struct.tm* %3, i64 0, i32 4
%41 = getelementptr inbounds %struct.tm, %struct.tm* %3, i64 0, i32 5
%42 = getelementptr inbounds %struct.tm, %struct.tm* %3, i64 0, i32 0
%43 = getelementptr inbounds %struct.tm, %struct.tm* %3, i64 0, i32 8
%44 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 2
%45 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 3
%46 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 4
%47 = getelementptr inbounds [100 x i8], [100 x i8]* %5, i64 0, i64 5
br label %48
48: ; preds = %33, %261
%49 = phi i8 [ %29, %33 ], [ %265, %261 ]
%50 = phi i8* [ %0, %33 ], [ %263, %261 ]
%51 = phi i8* [ %2, %33 ], [ %264, %261 ]
store i8 0, i8* %7
%52 = icmp eq i8 %49, 37
br i1 %52, label %55, label %53
53: ; preds = %48
%54 = getelementptr inbounds i8, i8* %50, i64 1
store i8 %49, i8* %50
br label %261
55: ; preds = %48, %60
%56 = phi i8* [ %57, %60 ], [ %51, %48 ]
%57 = getelementptr inbounds i8, i8* %56, i64 1
%58 = load i8, i8* %57
%59 = sext i8 %58 to i32
switch i32 %59, label %251 [
i32 0, label %61
i32 37, label %63
i32 97, label %65
i32 65, label %75
i32 104, label %85
i32 98, label %85
i32 66, label %95
i32 99, label %105
i32 100, label %121
i32 72, label %124
i32 73, label %127
i32 106, label %135
i32 109, label %139
i32 77, label %143
i32 112, label %146
i32 83, label %153
i32 85, label %156
i32 119, label %159
i32 87, label %162
i32 120, label %165
i32 88, label %178
i32 121, label %183
i32 89, label %187
i32 90, label %191
i32 110, label %204
i32 116, label %205
i32 68, label %206
i32 101, label %208
i32 114, label %211
i32 82, label %213
i32 84, label %215
i32 86, label %217
i32 67, label %246
i32 69, label %60
i32 79, label %60
]
60: ; preds = %55, %55
br label %55
61: ; preds = %55
%62 = getelementptr inbounds i8, i8* %50, i64 1
store i8 37, i8* %50
br label %269
63: ; preds = %55
%64 = getelementptr inbounds i8, i8* %50, i64 1
store i8 37, i8* %50
br label %261
65: ; preds = %55
%66 = load i32, i32* %42
%67 = icmp ugt i32 %66, 6
br i1 %67, label %68, label %70
68: ; preds = %65
%69 = call i32 @strcpy(i8* %7, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
br label %252
70: ; preds = %65
%71 = zext i32 %66 to i64
%72 = getelementptr inbounds [7 x i8*], [7 x i8*]* @strftime.days_a, i64 0, i64 %71
%73 = load i8*, i8** %72
%74 = call i32 @strcpy(i8* %7, i8* %73)
br label %252
75: ; preds = %55
%76 = load i32, i32* %42
%77 = icmp ugt i32 %76, 6
br i1 %77, label %78, label %80
78: ; preds = %75
%79 = call i32 @strcpy(i8* %7, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
br label %252
80: ; preds = %75
%81 = zext i32 %76 to i64
%82 = shl i64 %81, 2
%83 = call i8* @llvm.load.relative.i64(i8* bitcast ([7 x i32]* @reltable.strftime to i8*), i64 %82)
%84 = call i32 @strcpy(i8* %7, i8* %83)
br label %252
85: ; preds = %55, %55
%86 = load i32, i32* %36
%87 = icmp ugt i32 %86, 11
br i1 %87, label %88, label %90
88: ; preds = %85
%89 = call i32 @strcpy(i8* %7, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
br label %252
90: ; preds = %85
%91 = zext i32 %86 to i64
%92 = getelementptr inbounds [12 x i8*], [12 x i8*]* @strftime.months_a, i64 0, i64 %91
%93 = load i8*, i8** %92
%94 = call i32 @strcpy(i8* %7, i8* %93)
br label %252
95: ; preds = %55
%96 = load i32, i32* %36
%97 = icmp ugt i32 %96, 11
br i1 %97, label %98, label %100
98: ; preds = %95
%99 = call i32 @strcpy(i8* %7, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
br label %252
100: ; preds = %95
%101 = zext i32 %96 to i64
%102 = shl i64 %101, 2
%103 = call i8* @llvm.load.relative.i64(i8* bitcast ([12 x i32]* @reltable.strftime.52 to i8*), i64 %102)
%104 = call i32 @strcpy(i8* %7, i8* %103)
br label %252
105: ; preds = %55
%106 = load i32, i32* %42
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds [7 x i8*], [7 x i8*]* @strftime.days_a, i64 0, i64 %107
%109 = load i8*, i8** %108
%110 = load i32, i32* %36
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds [12 x i8*], [12 x i8*]* @strftime.months_a, i64 0, i64 %111
%113 = load i8*, i8** %112
%114 = load i32, i32* %35
%115 = load i32, i32* %39
%116 = load i32, i32* %40
%117 = load i32, i32* %41
%118 = load i32, i32* %34
%119 = add nsw i32 %118, 1900
%120 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @.str.40, i64 0, i64 0), i8* %109, i8* %113, i32 %114, i32 %115, i32 %116, i32 %117, i32 %119)
br label %252
121: ; preds = %55
%122 = load i32, i32* %35
%123 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %122)
br label %252
124: ; preds = %55
%125 = load i32, i32* %39
%126 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %125)
br label %252
127: ; preds = %55
%128 = load i32, i32* %39
%129 = icmp eq i32 %128, 0
%130 = icmp sgt i32 %128, 12
%131 = add nsw i32 %128, -12
%132 = select i1 %130, i32 %131, i32 %128
%133 = select i1 %129, i32 12, i32 %132
%134 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %133)
br label %252
135: ; preds = %55
%136 = load i32, i32* %43
%137 = add nsw i32 %136, 1
%138 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.42, i64 0, i64 0), i32 %137)
br label %252
139: ; preds = %55
%140 = load i32, i32* %36
%141 = add nsw i32 %140, 1
%142 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %141)
br label %252
143: ; preds = %55
%144 = load i32, i32* %40
%145 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %144)
br label %252
146: ; preds = %55
%147 = load i32, i32* %39
%148 = icmp slt i32 %147, 12
br i1 %148, label %149, label %151
149: ; preds = %146
%150 = call i32 @strcpy(i8* %7, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.37, i64 0, i64 0))
br label %252
151: ; preds = %146
%152 = call i32 @strcpy(i8* %7, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.38, i64 0, i64 0))
br label %252
153: ; preds = %55
%154 = load i32, i32* %41
%155 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %154)
br label %252
156: ; preds = %55
%157 = call i32 @weeknumber(%struct.tm* %3, i32 0)
%158 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %157)
br label %252
159: ; preds = %55
%160 = load i32, i32* %42
%161 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %160)
br label %252
162: ; preds = %55
%163 = call i32 @weeknumber(%struct.tm* %3, i32 1)
%164 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %163)
br label %252
165: ; preds = %55
%166 = load i32, i32* %42
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds [7 x i8*], [7 x i8*]* @strftime.days_a, i64 0, i64 %167
%169 = load i8*, i8** %168
%170 = load i32, i32* %36
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds [12 x i8*], [12 x i8*]* @strftime.months_a, i64 0, i64 %171
%173 = load i8*, i8** %172
%174 = load i32, i32* %35
%175 = load i32, i32* %34
%176 = add nsw i32 %175, 1900
%177 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.44, i64 0, i64 0), i8* %169, i8* %173, i32 %174, i32 %176)
br label %252
178: ; preds = %55
%179 = load i32, i32* %39
%180 = load i32, i32* %40
%181 = load i32, i32* %41
%182 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.45, i64 0, i64 0), i32 %179, i32 %180, i32 %181)
br label %252
183: ; preds = %55
%184 = load i32, i32* %34
%185 = srem i32 %184, 100
%186 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %185)
br label %252
187: ; preds = %55
%188 = load i32, i32* %34
%189 = add nsw i32 %188, 1900
%190 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.43, i64 0, i64 0), i32 %189)
br label %252
191: ; preds = %55
%192 = load i32, i32* @daylight
%193 = icmp eq i32 %192, 0
br i1 %193, label %198, label %194
194: ; preds = %191
%195 = load i32, i32* %38
%196 = icmp ne i32 %195, 0
%197 = zext i1 %196 to i64
br label %198
198: ; preds = %194, %191
%199 = phi i64 [ 0, %191 ], [ %197, %194 ]
%200 = load i8**, i8*** @tzname
%201 = getelementptr inbounds i8*, i8** %200, i64 %199
%202 = load i8*, i8** %201
%203 = call i32 @strcpy(i8* %7, i8* %202)
br label %252
204: ; preds = %55
store i8 10, i8* %7
store i8 0, i8* %37
br label %252
205: ; preds = %55
store i8 9, i8* %7
store i8 0, i8* %37
br label %252
206: ; preds = %55
%207 = call i64 @strftime(i8* %7, i64 100, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.46, i64 0, i64 0), %struct.tm* %3)
br label %252
208: ; preds = %55
%209 = load i32, i32* %35
%210 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.47, i64 0, i64 0), i32 %209)
br label %252
211: ; preds = %55
%212 = call i64 @strftime(i8* %7, i64 100, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.48, i64 0, i64 0), %struct.tm* %3)
br label %252
213: ; preds = %55
%214 = call i64 @strftime(i8* %7, i64 100, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.49, i64 0, i64 0), %struct.tm* %3)
br label %252
215: ; preds = %55
%216 = call i64 @strftime(i8* %7, i64 100, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.50, i64 0, i64 0), %struct.tm* %3)
br label %252
217: ; preds = %55
%218 = load i32, i32* %35
%219 = load i32, i32* %36
%220 = sext i32 %219 to i64
%221 = getelementptr inbounds [12 x i8*], [12 x i8*]* @strftime.months_a, i64 0, i64 %220
%222 = load i8*, i8** %221
%223 = load i32, i32* %34
%224 = add nsw i32 %223, 1900
%225 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.51, i64 0, i64 0), i32 %218, i8* %222, i32 %224)
%226 = load i8, i8* %45
%227 = call i32 @islower(i8 signext %226)
%228 = icmp eq i32 %227, 0
br i1 %228, label %232, label %229
229: ; preds = %217
%230 = load i8, i8* %45
%231 = call signext i8 @toupper(i8 signext %230)
store i8 %231, i8* %45
br label %232
232: ; preds = %217, %229
%233 = load i8, i8* %46
%234 = call i32 @islower(i8 signext %233)
%235 = icmp eq i32 %234, 0
br i1 %235, label %239, label %236
236: ; preds = %232
%237 = load i8, i8* %46
%238 = call signext i8 @toupper(i8 signext %237)
store i8 %238, i8* %46
br label %239
239: ; preds = %236, %232
%240 = load i8, i8* %47
%241 = call i32 @islower(i8 signext %240)
%242 = icmp eq i32 %241, 0
br i1 %242, label %252, label %243
243: ; preds = %239
%244 = load i8, i8* %47
%245 = call signext i8 @toupper(i8 signext %244)
store i8 %245, i8* %47
br label %252
246: ; preds = %55
%247 = load i32, i32* %34
%248 = add nsw i32 %247, 1900
%249 = sdiv i32 %248, 100
%250 = call i32 (i8*, i8*, ...) @sprintf(i8* %7, i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0), i32 %249)
br label %252
251: ; preds = %55
store i8 37, i8* %7
store i8 %58, i8* %37
store i8 0, i8* %44
br label %252
252: ; preds = %239, %243, %149, %151, %98, %100, %88, %90, %78, %80, %68, %70, %251, %246, %215, %213, %211, %208, %206, %205, %204, %198, %187, %183, %178, %165, %162, %159, %156, %153, %143, %139, %135, %127, %124, %121, %105
%253 = call i32 @strlen(i8* %7)
%254 = icmp eq i32 %253, 0
br i1 %254, label %261, label %255
255: ; preds = %252
%256 = sext i32 %253 to i64
%257 = getelementptr inbounds i8, i8* %50, i64 %256
%258 = icmp ult i8* %257, %28
br i1 %258, label %259, label %280
259: ; preds = %255
%260 = call i32 @strcpy(i8* %50, i8* %7)
br label %261
261: ; preds = %252, %259, %63, %53
%262 = phi i8* [ %51, %53 ], [ %57, %259 ], [ %57, %252 ], [ %57, %63 ]
%263 = phi i8* [ %54, %53 ], [ %257, %259 ], [ %50, %252 ], [ %64, %63 ]
%264 = getelementptr inbounds i8, i8* %262, i64 1
%265 = load i8, i8* %264
%266 = icmp ne i8 %265, 0
%267 = icmp ult i8* %263, %28
%268 = select i1 %266, i1 %267, i1 false
br i1 %268, label %48, label %269
269: ; preds = %261, %27, %61
%270 = phi i8* [ %57, %61 ], [ %2, %27 ], [ %264, %261 ]
%271 = phi i8* [ %62, %61 ], [ %0, %27 ], [ %263, %261 ]
%272 = icmp ult i8* %271, %6
br i1 %272, label %273, label %280
273: ; preds = %269
%274 = load i8, i8* %270
%275 = icmp eq i8 %274, 0
br i1 %275, label %276, label %280
276: ; preds = %273
store i8 0, i8* %271
%277 = ptrtoint i8* %271 to i64
%278 = ptrtoint i8* %0 to i64
%279 = sub i64 %277, %278
br label %280
280: ; preds = %255, %269, %273, %18, %4, %276
%281 = phi i64 [ %279, %276 ], [ 0, %4 ], [ 0, %18 ], [ 0, %273 ], [ 0, %269 ], [ 0, %255 ]
ret i64 %281
}