#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 */
typedef scalar_t__ time_t;

/* Variables and functions */
scalar_t__ atoi(char *);
char *ctime(scalar_t__ *);
int /*<<< orphan*/ free(char *);
scalar_t__ strlen(char *);
scalar_t__ time(scalar_t__ *);
int parse_cmd_jdoy(char *s, int *mm, int *dd, int *yy) {
  int st = 1;
  int cnt, len, len2;
  int p1, p2, k, i, p;
  time_t cur_time, tloc;
  char tmp[50], yy_str[10], *time_str;
  len = (int)strlen(s);
  if (len == 0)
    return -1;
  for (i = 0, cnt = 0; i < len; i++)
    if ((s[i] == '-') || (s[i] == ' ')) {
      cnt++;
      if (cnt == 1)
        p1 = i;
      else if (cnt == 2)
        p2 = i;
    }
  if (cnt == 0) {
    if (len <= 3) {
      *mm = 0;
      *dd = (int)atoi(s);
      tloc = 0;
      cur_time = time(&tloc);
      time_str = ctime(&cur_time);
      len2 = (int)strlen(time_str);
      p = len2 - 5;
      for (k = p; k <= len2; k++)
        yy_str[k - p] = time_str[k];
      *yy = (int)atoi(yy_str);
      free(time_str);
    } else {
      for (i = 0; i < 4; i++)
        tmp[i] = s[i];
      tmp[4] = '\0';
      *yy = (int)atoi(tmp);
      if (len == 8) {
        tmp[0] = s[4];
        tmp[1] = s[5];
        tmp[2] = '\0';
        *mm = (int)atoi(tmp);
        tmp[0] = s[6];
        tmp[1] = s[7];
        tmp[2] = '\0';
        *dd = (int)atoi(tmp);
      } else if (len < 8) {
        *mm = 0;
        for (i = 4; i <= len; i++)
          tmp[i - 4] = s[i];
        *dd = (int)atoi(tmp);
      } else
        st = -1;
    }
  } else if ((cnt == 1) || (cnt == 2)) {
    for (i = 0; i < p1; i++)
      tmp[i] = s[i];
    tmp[i] = '\0';
    *yy = (int)atoi(tmp);
    p1++;
    if (cnt == 1)
      *mm = 0;
    else {
      for (i = p1; i < p2; i++)
        tmp[i - p1] = s[i];
      tmp[i - p1] = '\0';
      *mm = (int)atoi(tmp);
      p1 = p2 + 1;
    }
    for (i = p1; i <= len; i++)
      tmp[i - p1] = s[i];
    *dd = (int)atoi(tmp);
  } else
    st = -1;
  return st;
}


x86 assembly (clang, -O0):
<parse_cmd_jdoy>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jne    1194 <parse_cmd_jdoy+0x44>
movl   $0xffffffff,-0x4(%rbp)
jmp    1591 <parse_cmd_jdoy+0x441>
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1223 <parse_cmd_jdoy+0xd3>
mov    -0x10(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2d,%eax
je     11d8 <parse_cmd_jdoy+0x88>
mov    -0x10(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    1210 <parse_cmd_jdoy+0xc0>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x1,-0x30(%rbp)
jne    11f6 <parse_cmd_jdoy+0xa6>
mov    -0x48(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    120b <parse_cmd_jdoy+0xbb>
cmpl   $0x2,-0x30(%rbp)
jne    1206 <parse_cmd_jdoy+0xb6>
mov    -0x48(%rbp),%eax
mov    %eax,-0x40(%rbp)
jmp    120b <parse_cmd_jdoy+0xbb>
jmp    1210 <parse_cmd_jdoy+0xc0>
jmp    1215 <parse_cmd_jdoy+0xc5>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    11a2 <parse_cmd_jdoy+0x52>
cmpl   $0x0,-0x30(%rbp)
jne    1438 <parse_cmd_jdoy+0x2e8>
cmpl   $0x3,-0x34(%rbp)
jg     12f1 <parse_cmd_jdoy+0x1a1>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
movq   $0x0,-0x60(%rbp)
lea    -0x60(%rbp),%rdi
call   1060 <time@plt>
mov    %rax,-0x58(%rbp)
lea    -0x58(%rbp),%rdi
call   1040 <ctime@plt>
mov    %rax,-0xb8(%rbp)
mov    -0xb8(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
sub    $0x5,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x38(%rbp),%eax
jg     12cc <parse_cmd_jdoy+0x17c>
mov    -0xb8(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
mov    -0x44(%rbp),%eax
sub    -0x4c(%rbp),%eax
cltq
mov    %cl,-0xaa(%rbp,%rax,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1295 <parse_cmd_jdoy+0x145>
lea    -0xaa(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0xb8(%rbp),%rdi
call   1030 <free@plt>
jmp    1433 <parse_cmd_jdoy+0x2e3>
movl   $0x0,-0x48(%rbp)
cmpl   $0x4,-0x48(%rbp)
jge    1326 <parse_cmd_jdoy+0x1d6>
mov    -0x10(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x48(%rbp),%rax
mov    %cl,-0xa0(%rbp,%rax,1)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    12f8 <parse_cmd_jdoy+0x1a8>
movb   $0x0,-0x9c(%rbp)
lea    -0xa0(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
cmpl   $0x8,-0x34(%rbp)
jne    13ba <parse_cmd_jdoy+0x26a>
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%al
mov    %al,-0xa0(%rbp)
mov    -0x10(%rbp),%rax
mov    0x5(%rax),%al
mov    %al,-0x9f(%rbp)
movb   $0x0,-0x9e(%rbp)
lea    -0xa0(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    0x6(%rax),%al
mov    %al,-0xa0(%rbp)
mov    -0x10(%rbp),%rax
mov    0x7(%rax),%al
mov    %al,-0x9f(%rbp)
movb   $0x0,-0x9e(%rbp)
lea    -0xa0(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    142e <parse_cmd_jdoy+0x2de>
cmpl   $0x8,-0x34(%rbp)
jge    1422 <parse_cmd_jdoy+0x2d2>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x4,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     1409 <parse_cmd_jdoy+0x2b9>
mov    -0x10(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
mov    -0x48(%rbp),%eax
sub    $0x4,%eax
cltq
mov    %cl,-0xa0(%rbp,%rax,1)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    13d5 <parse_cmd_jdoy+0x285>
lea    -0xa0(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    1429 <parse_cmd_jdoy+0x2d9>
movl   $0xffffffff,-0x2c(%rbp)
jmp    142e <parse_cmd_jdoy+0x2de>
jmp    1433 <parse_cmd_jdoy+0x2e3>
jmp    158b <parse_cmd_jdoy+0x43b>
cmpl   $0x1,-0x30(%rbp)
je     144c <parse_cmd_jdoy+0x2fc>
cmpl   $0x2,-0x30(%rbp)
jne    157f <parse_cmd_jdoy+0x42f>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1483 <parse_cmd_jdoy+0x333>
mov    -0x10(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x48(%rbp),%rax
mov    %cl,-0xa0(%rbp,%rax,1)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1453 <parse_cmd_jdoy+0x303>
movslq -0x48(%rbp),%rax
movb   $0x0,-0xa0(%rbp,%rax,1)
lea    -0xa0(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0x1,-0x30(%rbp)
jne    14c5 <parse_cmd_jdoy+0x375>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
jmp    152c <parse_cmd_jdoy+0x3dc>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    14ff <parse_cmd_jdoy+0x3af>
mov    -0x10(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
mov    -0x48(%rbp),%eax
sub    -0x3c(%rbp),%eax
cltq
mov    %cl,-0xa0(%rbp,%rax,1)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    14cb <parse_cmd_jdoy+0x37b>
mov    -0x48(%rbp),%eax
sub    -0x3c(%rbp),%eax
cltq
movb   $0x0,-0xa0(%rbp,%rax,1)
lea    -0xa0(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     1566 <parse_cmd_jdoy+0x416>
mov    -0x10(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
mov    -0x48(%rbp),%eax
sub    -0x3c(%rbp),%eax
cltq
mov    %cl,-0xa0(%rbp,%rax,1)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1532 <parse_cmd_jdoy+0x3e2>
lea    -0xa0(%rbp),%rdi
call   1070 <atoi@plt>
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    1586 <parse_cmd_jdoy+0x436>
movl   $0xffffffff,-0x2c(%rbp)
jmp    158b <parse_cmd_jdoy+0x43b>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parse_cmd_jdoy>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %rcx,%r14
mov    %rdx,%r12
mov    %rsi,%rbp
mov    %rdi,%rbx
call   1050 <strlen@plt>
mov    %rax,%r15
mov    $0xffffffff,%eax
test   %r15d,%r15d
je     1454 <parse_cmd_jdoy+0x2f4>
jle    12ce <parse_cmd_jdoy+0x16e>
mov    %r14,0x50(%rsp)
mov    %rbp,(%rsp)
mov    %r12,0x8(%rsp)
mov    %r15d,%edx
mov    %r15d,%edi
and    $0x1,%edi
cmp    $0x1,%rdx
jne    121b <parse_cmd_jdoy+0xbb>
xor    %r12d,%r12d
xor    %r13d,%r13d
test   %rdi,%rdi
je     11e1 <parse_cmd_jdoy+0x81>
mov    (%rbx,%r12,1),%cl
cmp    $0x2d,%cl
je     11cc <parse_cmd_jdoy+0x6c>
cmp    $0x20,%cl
jne    11e1 <parse_cmd_jdoy+0x81>
test   %r13d,%r13d
je     12ab <parse_cmd_jdoy+0x14b>
add    $0x1,%r13d
cmp    $0x2,%r13d
cmove  %r12d,%r14d
mov    %ebp,%r12d
test   %r13d,%r13d
je     12ba <parse_cmd_jdoy+0x15a>
lea    -0x1(%r13),%ecx
cmp    $0x1,%ecx
ja     1454 <parse_cmd_jdoy+0x2f4>
test   %r12d,%r12d
jle    13a5 <parse_cmd_jdoy+0x245>
mov    %r12d,%ebp
lea    0x10(%rsp),%rdi
mov    %rbx,%rsi
mov    %rbp,%rdx
call   1060 <memcpy@plt>
jmp    13a7 <parse_cmd_jdoy+0x247>
sub    %rdi,%rdx
xor    %r12d,%r12d
xor    %r13d,%r13d
jmp    1253 <parse_cmd_jdoy+0xf3>
cs nopw 0x0(%rax,%rax,1)
lea    0x1(%r12),%rsi
test   %r13d,%r13d
je     1280 <parse_cmd_jdoy+0x120>
add    $0x1,%r13d
cmp    $0x2,%r13d
cmove  %esi,%r14d
add    $0x2,%r12
cmp    %r12,%rdx
je     11b9 <parse_cmd_jdoy+0x59>
movzbl (%rbx,%r12,1),%ecx
cmp    $0x2d,%cl
je     1262 <parse_cmd_jdoy+0x102>
cmp    $0x20,%cl
jne    1299 <parse_cmd_jdoy+0x139>
test   %r13d,%r13d
je     1290 <parse_cmd_jdoy+0x130>
add    $0x1,%r13d
cmp    $0x2,%r13d
cmove  %r12d,%r14d
jmp    1299 <parse_cmd_jdoy+0x139>
cs nopw 0x0(%rax,%rax,1)
nop
mov    $0x1,%r13d
mov    %esi,%ebp
jmp    1246 <parse_cmd_jdoy+0xe6>
nopw   0x0(%rax,%rax,1)
mov    $0x1,%r13d
mov    %r12d,%ebp
movzbl 0x1(%rbx,%r12,1),%ecx
cmp    $0x2d,%cl
je     1230 <parse_cmd_jdoy+0xd0>
cmp    $0x20,%cl
je     1230 <parse_cmd_jdoy+0xd0>
jmp    1246 <parse_cmd_jdoy+0xe6>
mov    $0x1,%r13d
test   %r13d,%r13d
jne    11ed <parse_cmd_jdoy+0x8d>
cmp    $0x4,%r15d
mov    0x8(%rsp),%r12
mov    (%rsp),%rbp
mov    0x50(%rsp),%r14
jge    133c <parse_cmd_jdoy+0x1dc>
movl   $0x0,0x0(%rbp)
mov    %rbx,%rdi
call   1080 <atoi@plt>
mov    %eax,(%r12)
movq   $0x0,0x58(%rsp)
lea    0x58(%rsp),%rdi
call   1070 <time@plt>
mov    %rax,0x60(%rsp)
lea    0x60(%rsp),%rdi
call   1040 <ctime@plt>
mov    %rax,%rbx
mov    %rax,%rdi
call   1050 <strlen@plt>
cltq
mov    -0x5(%rax,%rbx,1),%ecx
mov    %ecx,0x10(%rsp)
movzwl -0x1(%rax,%rbx,1),%eax
mov    %ax,0x14(%rsp)
lea    0x10(%rsp),%rdi
call   1080 <atoi@plt>
mov    %eax,(%r14)
mov    %rbx,%rdi
call   1030 <free@plt>
jmp    144f <parse_cmd_jdoy+0x2ef>
mov    (%rbx),%eax
mov    %eax,0x10(%rsp)
movb   $0x0,0x14(%rsp)
lea    0x10(%rsp),%rdi
call   1080 <atoi@plt>
mov    %eax,(%r14)
cmp    $0x8,%r15d
jne    1463 <parse_cmd_jdoy+0x303>
mov    0x4(%rbx),%al
mov    %al,0x10(%rsp)
mov    0x5(%rbx),%al
mov    %al,0x11(%rsp)
movb   $0x0,0x12(%rsp)
lea    0x10(%rsp),%r14
mov    %r14,%rdi
call   1080 <atoi@plt>
mov    %eax,0x0(%rbp)
mov    0x6(%rbx),%al
mov    %al,0x10(%rsp)
mov    0x7(%rbx),%al
mov    %al,0x11(%rsp)
movb   $0x0,0x12(%rsp)
mov    %r14,%rdi
call   1080 <atoi@plt>
mov    %eax,(%r12)
jmp    144f <parse_cmd_jdoy+0x2ef>
xor    %ebp,%ebp
movb   $0x0,0x10(%rsp,%rbp,1)
lea    0x10(%rsp),%rdi
call   1080 <atoi@plt>
lea    0x1(%r12),%ebp
mov    0x50(%rsp),%rcx
mov    %eax,(%rcx)
cmp    $0x1,%r13d
jne    13d4 <parse_cmd_jdoy+0x274>
mov    (%rsp),%rax
movl   $0x0,(%rax)
jmp    141b <parse_cmd_jdoy+0x2bb>
mov    %ebp,%eax
cmp    %r14d,%ebp
jge    13fb <parse_cmd_jdoy+0x29b>
movslq %ebp,%rsi
add    %rbx,%rsi
mov    %r14d,%edx
sub    %r12d,%edx
add    $0xfffffffe,%edx
add    $0x1,%rdx
lea    0x10(%rsp),%rdi
call   1060 <memcpy@plt>
mov    %r14d,%eax
sub    %ebp,%eax
cltq
movb   $0x0,0x10(%rsp,%rax,1)
lea    0x10(%rsp),%rdi
call   1080 <atoi@plt>
mov    (%rsp),%rcx
mov    %eax,(%rcx)
add    $0x1,%r14d
mov    %r14d,%ebp
mov    0x8(%rsp),%r14
cmp    %r15d,%ebp
jg     1442 <parse_cmd_jdoy+0x2e2>
movslq %ebp,%rax
add    %rax,%rbx
sub    %ebp,%r15d
add    $0x1,%r15
lea    0x10(%rsp),%rdi
mov    %rbx,%rsi
mov    %r15,%rdx
call   1060 <memcpy@plt>
lea    0x10(%rsp),%rdi
call   1080 <atoi@plt>
mov    %eax,(%r14)
mov    $0x1,%eax
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0xffffffff,%eax
jae    1454 <parse_cmd_jdoy+0x2f4>
mov    (%rsp),%rax
movl   $0x0,(%rax)
add    $0x4,%rbx
add    $0xfffffffd,%r15d
lea    0x10(%rsp),%rbp
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    %r15,%rdx
call   1060 <memcpy@plt>
mov    %rbp,%rdi
call   1080 <atoi@plt>
mov    0x8(%rsp),%rcx
mov    %eax,(%rcx)
jmp    144f <parse_cmd_jdoy+0x2ef>

LLVM IR (-O0):
define i32 @parse_cmd_jdoy(i8* %0, i32* %1, i32* %2, i32* %3) {
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i32*
%8 = alloca i32*
%9 = alloca i32*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i64
%20 = alloca i64
%21 = alloca [50 x i8]
%22 = alloca [10 x i8]
%23 = alloca i8*
store i8* %0, i8** %6
store i32* %1, i32** %7
store i32* %2, i32** %8
store i32* %3, i32** %9
store i32 1, i32* %10
%24 = load i8*, i8** %6
%25 = call i64 @strlen(i8* %24)
%26 = trunc i64 %25 to i32
store i32 %26, i32* %12
%27 = load i32, i32* %12
%28 = icmp eq i32 %27, 0
br i1 %28, label %29, label %30
29: ; preds = %4
store i32 -1, i32* %5
br label %294
30: ; preds = %4
store i32 0, i32* %17
store i32 0, i32* %11
br label %31
31: ; preds = %66, %30
%32 = load i32, i32* %17
%33 = load i32, i32* %12
%34 = icmp slt i32 %32, %33
br i1 %34, label %35, label %69
35: ; preds = %31
%36 = load i8*, i8** %6
%37 = load i32, i32* %17
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i8, i8* %36, i64 %38
%40 = load i8, i8* %39
%41 = sext i8 %40 to i32
%42 = icmp eq i32 %41, 45
br i1 %42, label %51, label %43
43: ; preds = %35
%44 = load i8*, i8** %6
%45 = load i32, i32* %17
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds i8, i8* %44, i64 %46
%48 = load i8, i8* %47
%49 = sext i8 %48 to i32
%50 = icmp eq i32 %49, 32
br i1 %50, label %51, label %65
51: ; preds = %43, %35
%52 = load i32, i32* %11
%53 = add nsw i32 %52, 1
store i32 %53, i32* %11
%54 = load i32, i32* %11
%55 = icmp eq i32 %54, 1
br i1 %55, label %56, label %58
56: ; preds = %51
%57 = load i32, i32* %17
store i32 %57, i32* %14
br label %64
58: ; preds = %51
%59 = load i32, i32* %11
%60 = icmp eq i32 %59, 2
br i1 %60, label %61, label %63
61: ; preds = %58
%62 = load i32, i32* %17
store i32 %62, i32* %15
br label %63
63: ; preds = %61, %58
br label %64
64: ; preds = %63, %56
br label %65
65: ; preds = %64, %43
br label %66
66: ; preds = %65
%67 = load i32, i32* %17
%68 = add nsw i32 %67, 1
store i32 %68, i32* %17
br label %31
69: ; preds = %31
%70 = load i32, i32* %11
%71 = icmp eq i32 %70, 0
br i1 %71, label %72, label %196
72: ; preds = %69
%73 = load i32, i32* %12
%74 = icmp sle i32 %73, 3
br i1 %74, label %75, label %114
75: ; preds = %72
%76 = load i32*, i32** %7
store i32 0, i32* %76
%77 = load i8*, i8** %6
%78 = call i64 @atoi(i8* %77)
%79 = trunc i64 %78 to i32
%80 = load i32*, i32** %8
store i32 %79, i32* %80
store i64 0, i64* %20
%81 = call i64 @time(i64* %20)
store i64 %81, i64* %19
%82 = call i8* @ctime(i64* %19)
store i8* %82, i8** %23
%83 = load i8*, i8** %23
%84 = call i64 @strlen(i8* %83)
%85 = trunc i64 %84 to i32
store i32 %85, i32* %13
%86 = load i32, i32* %13
%87 = sub nsw i32 %86, 5
store i32 %87, i32* %18
%88 = load i32, i32* %18
store i32 %88, i32* %16
br label %89
89: ; preds = %104, %75
%90 = load i32, i32* %16
%91 = load i32, i32* %13
%92 = icmp sle i32 %90, %91
br i1 %92, label %93, label %107
93: ; preds = %89
%94 = load i8*, i8** %23
%95 = load i32, i32* %16
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i8, i8* %94, i64 %96
%98 = load i8, i8* %97
%99 = load i32, i32* %16
%100 = load i32, i32* %18
%101 = sub nsw i32 %99, %100
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds [10 x i8], [10 x i8]* %22, i64 0, i64 %102
store i8 %98, i8* %103
br label %104
104: ; preds = %93
%105 = load i32, i32* %16
%106 = add nsw i32 %105, 1
store i32 %106, i32* %16
br label %89
107: ; preds = %89
%108 = getelementptr inbounds [10 x i8], [10 x i8]* %22, i64 0, i64 0
%109 = call i64 @atoi(i8* %108)
%110 = trunc i64 %109 to i32
%111 = load i32*, i32** %9
store i32 %110, i32* %111
%112 = load i8*, i8** %23
%113 = call i32 @free(i8* %112)
br label %195
114: ; preds = %72
store i32 0, i32* %17
br label %115
115: ; preds = %127, %114
%116 = load i32, i32* %17
%117 = icmp slt i32 %116, 4
br i1 %117, label %118, label %130
118: ; preds = %115
%119 = load i8*, i8** %6
%120 = load i32, i32* %17
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds i8, i8* %119, i64 %121
%123 = load i8, i8* %122
%124 = load i32, i32* %17
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 %125
store i8 %123, i8* %126
br label %127
127: ; preds = %118
%128 = load i32, i32* %17
%129 = add nsw i32 %128, 1
store i32 %129, i32* %17
br label %115
130: ; preds = %115
%131 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 4
store i8 0, i8* %131
%132 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 0
%133 = call i64 @atoi(i8* %132)
%134 = trunc i64 %133 to i32
%135 = load i32*, i32** %9
store i32 %134, i32* %135
%136 = load i32, i32* %12
%137 = icmp eq i32 %136, 8
br i1 %137, label %138, label %165
138: ; preds = %130
%139 = load i8*, i8** %6
%140 = getelementptr inbounds i8, i8* %139, i64 4
%141 = load i8, i8* %140
%142 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 0
store i8 %141, i8* %142
%143 = load i8*, i8** %6
%144 = getelementptr inbounds i8, i8* %143, i64 5
%145 = load i8, i8* %144
%146 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 1
store i8 %145, i8* %146
%147 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 2
store i8 0, i8* %147
%148 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 0
%149 = call i64 @atoi(i8* %148)
%150 = trunc i64 %149 to i32
%151 = load i32*, i32** %7
store i32 %150, i32* %151
%152 = load i8*, i8** %6
%153 = getelementptr inbounds i8, i8* %152, i64 6
%154 = load i8, i8* %153
%155 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 0
store i8 %154, i8* %155
%156 = load i8*, i8** %6
%157 = getelementptr inbounds i8, i8* %156, i64 7
%158 = load i8, i8* %157
%159 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 1
store i8 %158, i8* %159
%160 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 2
store i8 0, i8* %160
%161 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 0
%162 = call i64 @atoi(i8* %161)
%163 = trunc i64 %162 to i32
%164 = load i32*, i32** %8
store i32 %163, i32* %164
br label %194
165: ; preds = %130
%166 = load i32, i32* %12
%167 = icmp slt i32 %166, 8
br i1 %167, label %168, label %192
168: ; preds = %165
%169 = load i32*, i32** %7
store i32 0, i32* %169
store i32 4, i32* %17
br label %170
170: ; preds = %184, %168
%171 = load i32, i32* %17
%172 = load i32, i32* %12
%173 = icmp sle i32 %171, %172
br i1 %173, label %174, label %187
174: ; preds = %170
%175 = load i8*, i8** %6
%176 = load i32, i32* %17
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i8, i8* %175, i64 %177
%179 = load i8, i8* %178
%180 = load i32, i32* %17
%181 = sub nsw i32 %180, 4
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 %182
store i8 %179, i8* %183
br label %184
184: ; preds = %174
%185 = load i32, i32* %17
%186 = add nsw i32 %185, 1
store i32 %186, i32* %17
br label %170
187: ; preds = %170
%188 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 0
%189 = call i64 @atoi(i8* %188)
%190 = trunc i64 %189 to i32
%191 = load i32*, i32** %8
store i32 %190, i32* %191
br label %193
192: ; preds = %165
store i32 -1, i32* %10
br label %193
193: ; preds = %192, %187
br label %194
194: ; preds = %193, %138
br label %195
195: ; preds = %194, %107
br label %292
196: ; preds = %69
%197 = load i32, i32* %11
%198 = icmp eq i32 %197, 1
br i1 %198, label %202, label %199
199: ; preds = %196
%200 = load i32, i32* %11
%201 = icmp eq i32 %200, 2
br i1 %201, label %202, label %290
202: ; preds = %199, %196
store i32 0, i32* %17
br label %203
203: ; preds = %216, %202
%204 = load i32, i32* %17
%205 = load i32, i32* %14
%206 = icmp slt i32 %204, %205
br i1 %206, label %207, label %219
207: ; preds = %203
%208 = load i8*, i8** %6
%209 = load i32, i32* %17
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds i8, i8* %208, i64 %210
%212 = load i8, i8* %211
%213 = load i32, i32* %17
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 %214
store i8 %212, i8* %215
br label %216
216: ; preds = %207
%217 = load i32, i32* %17
%218 = add nsw i32 %217, 1
store i32 %218, i32* %17
br label %203
219: ; preds = %203
%220 = load i32, i32* %17
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 %221
store i8 0, i8* %222
%223 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 0
%224 = call i64 @atoi(i8* %223)
%225 = trunc i64 %224 to i32
%226 = load i32*, i32** %9
store i32 %225, i32* %226
%227 = load i32, i32* %14
%228 = add nsw i32 %227, 1
store i32 %228, i32* %14
%229 = load i32, i32* %11
%230 = icmp eq i32 %229, 1
br i1 %230, label %231, label %233
231: ; preds = %219
%232 = load i32*, i32** %7
store i32 0, i32* %232
br label %265
233: ; preds = %219
%234 = load i32, i32* %14
store i32 %234, i32* %17
br label %235
235: ; preds = %250, %233
%236 = load i32, i32* %17
%237 = load i32, i32* %15
%238 = icmp slt i32 %236, %237
br i1 %238, label %239, label %253
239: ; preds = %235
%240 = load i8*, i8** %6
%241 = load i32, i32* %17
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds i8, i8* %240, i64 %242
%244 = load i8, i8* %243
%245 = load i32, i32* %17
%246 = load i32, i32* %14
%247 = sub nsw i32 %245, %246
%248 = sext i32 %247 to i64
%249 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 %248
store i8 %244, i8* %249
br label %250
250: ; preds = %239
%251 = load i32, i32* %17
%252 = add nsw i32 %251, 1
store i32 %252, i32* %17
br label %235
253: ; preds = %235
%254 = load i32, i32* %17
%255 = load i32, i32* %14
%256 = sub nsw i32 %254, %255
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 %257
store i8 0, i8* %258
%259 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 0
%260 = call i64 @atoi(i8* %259)
%261 = trunc i64 %260 to i32
%262 = load i32*, i32** %7
store i32 %261, i32* %262
%263 = load i32, i32* %15
%264 = add nsw i32 %263, 1
store i32 %264, i32* %14
br label %265
265: ; preds = %253, %231
%266 = load i32, i32* %14
store i32 %266, i32* %17
br label %267
267: ; preds = %282, %265
%268 = load i32, i32* %17
%269 = load i32, i32* %12
%270 = icmp sle i32 %268, %269
br i1 %270, label %271, label %285
271: ; preds = %267
%272 = load i8*, i8** %6
%273 = load i32, i32* %17
%274 = sext i32 %273 to i64
%275 = getelementptr inbounds i8, i8* %272, i64 %274
%276 = load i8, i8* %275
%277 = load i32, i32* %17
%278 = load i32, i32* %14
%279 = sub nsw i32 %277, %278
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 %280
store i8 %276, i8* %281
br label %282
282: ; preds = %271
%283 = load i32, i32* %17
%284 = add nsw i32 %283, 1
store i32 %284, i32* %17
br label %267
285: ; preds = %267
%286 = getelementptr inbounds [50 x i8], [50 x i8]* %21, i64 0, i64 0
%287 = call i64 @atoi(i8* %286)
%288 = trunc i64 %287 to i32
%289 = load i32*, i32** %8
store i32 %288, i32* %289
br label %291
290: ; preds = %199
store i32 -1, i32* %10
br label %291
291: ; preds = %290, %285
br label %292
292: ; preds = %291, %195
%293 = load i32, i32* %10
store i32 %293, i32* %5
br label %294
294: ; preds = %292, %29
%295 = load i32, i32* %5
ret i32 %295
}

LLVM IR (-O2):
define i32 @parse_cmd_jdoy(i8* nocapture %0, i32* nocapture writeonly %1, i32* nocapture writeonly %2, i32* nocapture writeonly %3) {
%5 = alloca i64
%6 = alloca i64
%7 = alloca [50 x i8]
%8 = getelementptr inbounds [50 x i8], [50 x i8]* %7, i64 0, i64 0
%9 = alloca [10 x i8]
%10 = getelementptr inbounds [10 x i8], [10 x i8]* %9, i64 0, i64 0
%11 = bitcast i64* %5 to i8*
%12 = bitcast i64* %6 to i8*
%13 = getelementptr inbounds [50 x i8], [50 x i8]* %7, i64 0, i64 0
%14 = getelementptr inbounds [10 x i8], [10 x i8]* %9, i64 0, i64 0
%15 = tail call i64 @strlen(i8* dereferenceable(1) %0)
%16 = trunc i64 %15 to i32
%17 = icmp eq i32 %16, 0
br i1 %17, label %175, label %18
18: ; preds = %4
%19 = icmp sgt i32 %16, 0
br i1 %19, label %20, label %94
20: ; preds = %18
%21 = and i64 %15, 4294967295
%22 = and i64 %15, 1
%23 = icmp eq i64 %21, 1
br i1 %23, label %62, label %24
24: ; preds = %20
%25 = sub nsw i64 %21, %22
br label %26
26: ; preds = %55, %24
%27 = phi i64 [ 0, %24 ], [ %59, %55 ]
%28 = phi i32 [ undef, %24 ], [ %58, %55 ]
%29 = phi i32 [ undef, %24 ], [ %57, %55 ]
%30 = phi i32 [ 0, %24 ], [ %56, %55 ]
%31 = phi i64 [ 0, %24 ], [ %60, %55 ]
%32 = getelementptr inbounds i8, i8* %0, i64 %27
%33 = load i8, i8* %32
switch i8 %33, label %41 [
i8 45, label %34
i8 32, label %34
]
34: ; preds = %26, %26
%35 = add nsw i32 %30, 1
%36 = icmp eq i32 %30, 0
%37 = trunc i64 %27 to i32
br i1 %36, label %41, label %38
38: ; preds = %34
%39 = icmp eq i32 %35, 2
%40 = select i1 %39, i32 %37, i32 %28
br label %41
41: ; preds = %38, %34, %26
%42 = phi i32 [ %30, %26 ], [ 1, %34 ], [ %35, %38 ]
%43 = phi i32 [ %29, %26 ], [ %37, %34 ], [ %29, %38 ]
%44 = phi i32 [ %28, %26 ], [ %28, %34 ], [ %40, %38 ]
%45 = or i64 %27, 1
%46 = getelementptr inbounds i8, i8* %0, i64 %45
%47 = load i8, i8* %46
switch i8 %47, label %55 [
i8 45, label %48
i8 32, label %48
]
48: ; preds = %41, %41
%49 = add nsw i32 %42, 1
%50 = icmp eq i32 %42, 0
%51 = trunc i64 %45 to i32
br i1 %50, label %55, label %52
52: ; preds = %48
%53 = icmp eq i32 %49, 2
%54 = select i1 %53, i32 %51, i32 %44
br label %55
55: ; preds = %52, %48, %41
%56 = phi i32 [ %42, %41 ], [ 1, %48 ], [ %49, %52 ]
%57 = phi i32 [ %43, %41 ], [ %51, %48 ], [ %43, %52 ]
%58 = phi i32 [ %44, %41 ], [ %44, %48 ], [ %54, %52 ]
%59 = add nuw nsw i64 %27, 2
%60 = add i64 %31, 2
%61 = icmp eq i64 %60, %25
br i1 %61, label %62, label %26
62: ; preds = %55, %20
%63 = phi i32 [ undef, %20 ], [ %56, %55 ]
%64 = phi i64 [ 0, %20 ], [ %59, %55 ]
%65 = phi i32 [ undef, %20 ], [ %58, %55 ]
%66 = phi i32 [ undef, %20 ], [ %57, %55 ]
%67 = phi i32 [ 0, %20 ], [ %56, %55 ]
%68 = icmp eq i64 %22, 0
br i1 %68, label %79, label %69
69: ; preds = %62
%70 = getelementptr inbounds i8, i8* %0, i64 %64
%71 = load i8, i8* %70
switch i8 %71, label %79 [
i8 45, label %72
i8 32, label %72
]
72: ; preds = %69, %69
%73 = add nsw i32 %67, 1
%74 = icmp eq i32 %67, 0
%75 = trunc i64 %64 to i32
br i1 %74, label %79, label %76
76: ; preds = %72
%77 = icmp eq i32 %73, 2
%78 = select i1 %77, i32 %75, i32 %65
br label %79
79: ; preds = %69, %72, %76, %62
%80 = phi i32 [ %63, %62 ], [ %67, %69 ], [ 1, %72 ], [ %73, %76 ]
%81 = phi i32 [ %66, %62 ], [ %66, %69 ], [ %75, %72 ], [ %66, %76 ]
%82 = phi i32 [ %65, %62 ], [ %65, %69 ], [ %65, %72 ], [ %78, %76 ]
%83 = icmp eq i32 %80, 0
br i1 %83, label %84, label %130
84: ; preds = %79
%85 = icmp slt i32 %16, 4
br i1 %85, label %94, label %86
86: ; preds = %84
%87 = bitcast i8* %0 to i32*
%88 = bitcast [50 x i8]* %7 to i32*
%89 = load i32, i32* %87
store i32 %89, i32* %88
%90 = getelementptr inbounds [50 x i8], [50 x i8]* %7, i64 0, i64 4
store i8 0, i8* %90
%91 = call i64 @atoi(i8* %13)
%92 = trunc i64 %91 to i32
store i32 %92, i32* %3
%93 = icmp eq i32 %16, 8
br i1 %93, label %107, label %122
94: ; preds = %18, %84
store i32 0, i32* %1
%95 = tail call i64 @atoi(i8* %0)
%96 = trunc i64 %95 to i32
store i32 %96, i32* %2
store i64 0, i64* %6
%97 = call i64 @time(i64* %6)
store i64 %97, i64* %5
%98 = call i8* @ctime(i64* %5)
%99 = call i64 @strlen(i8* dereferenceable(1) %98)
%100 = shl i64 %99, 32
%101 = ashr exact i64 %100, 32
%102 = add nsw i64 %101, -5
%103 = getelementptr i8, i8* %98, i64 %102
%104 = call i64 @atoi(i8* %14)
%105 = trunc i64 %104 to i32
store i32 %105, i32* %3
%106 = call i32 @free(i8* %98)
br label %175
107: ; preds = %86
%108 = getelementptr inbounds i8, i8* %0, i64 4
%109 = load i8, i8* %108
store i8 %109, i8* %13
%110 = getelementptr inbounds i8, i8* %0, i64 5
%111 = load i8, i8* %110
%112 = getelementptr inbounds [50 x i8], [50 x i8]* %7, i64 0, i64 1
store i8 %111, i8* %112
%113 = getelementptr inbounds [50 x i8], [50 x i8]* %7, i64 0, i64 2
store i8 0, i8* %113
%114 = call i64 @atoi(i8* %13)
%115 = trunc i64 %114 to i32
store i32 %115, i32* %1
%116 = getelementptr inbounds i8, i8* %0, i64 6
%117 = load i8, i8* %116
store i8 %117, i8* %13
%118 = getelementptr inbounds i8, i8* %0, i64 7
%119 = load i8, i8* %118
store i8 %119, i8* %112
store i8 0, i8* %113
%120 = call i64 @atoi(i8* %13)
%121 = trunc i64 %120 to i32
store i32 %121, i32* %2
br label %175
122: ; preds = %86
%123 = icmp ult i32 %16, 8
br i1 %123, label %124, label %175
124: ; preds = %122
store i32 0, i32* %1
%125 = getelementptr i8, i8* %0, i64 4
%126 = add i64 %15, 4294967293
%127 = and i64 %126, 4294967295
%128 = call i64 @atoi(i8* %13)
%129 = trunc i64 %128 to i32
store i32 %129, i32* %2
br label %175
130: ; preds = %79
%131 = icmp eq i32 %80, 1
%132 = add i32 %80, -1
%133 = icmp ult i32 %132, 2
br i1 %133, label %134, label %175
134: ; preds = %130
%135 = icmp sgt i32 %81, 0
br i1 %135, label %136, label %139
136: ; preds = %134
%137 = zext i32 %81 to i64
%138 = zext i32 %81 to i64
br label %139
139: ; preds = %136, %134
%140 = phi i64 [ 0, %134 ], [ %138, %136 ]
%141 = getelementptr inbounds [50 x i8], [50 x i8]* %7, i64 0, i64 %140
store i8 0, i8* %141
%142 = call i64 @atoi(i8* %13)
%143 = trunc i64 %142 to i32
store i32 %143, i32* %3
%144 = add i32 %81, 1
br i1 %131, label %154, label %145
145: ; preds = %139
%146 = icmp slt i32 %144, %82
br i1 %146, label %147, label %155
147: ; preds = %145
%148 = sext i32 %144 to i64
%149 = getelementptr i8, i8* %0, i64 %148
%150 = add i32 %82, -2
%151 = sub i32 %150, %81
%152 = zext i32 %151 to i64
%153 = add nuw nsw i64 %152, 1
br label %155
154: ; preds = %139
store i32 0, i32* %1
br label %163
155: ; preds = %147, %145
%156 = phi i32 [ %144, %145 ], [ %82, %147 ]
%157 = sub nsw i32 %156, %144
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds [50 x i8], [50 x i8]* %7, i64 0, i64 %158
store i8 0, i8* %159
%160 = call i64 @atoi(i8* %13)
%161 = trunc i64 %160 to i32
store i32 %161, i32* %1
%162 = add nsw i32 %82, 1
br label %163
163: ; preds = %155, %154
%164 = phi i32 [ %144, %154 ], [ %162, %155 ]
%165 = icmp sgt i32 %164, %16
br i1 %165, label %172, label %166
166: ; preds = %163
%167 = sext i32 %164 to i64
%168 = getelementptr i8, i8* %0, i64 %167
%169 = sub i32 %16, %164
%170 = zext i32 %169 to i64
%171 = add nuw nsw i64 %170, 1
br label %172
172: ; preds = %166, %163
%173 = call i64 @atoi(i8* %13)
%174 = trunc i64 %173 to i32
store i32 %174, i32* %2
br label %175
175: ; preds = %107, %124, %94, %172, %122, %130, %4
%176 = phi i32 [ -1, %4 ], [ 1, %94 ], [ 1, %107 ], [ 1, %124 ], [ 1, %172 ], [ -1, %122 ], [ -1, %130 ]
ret i32 %176
}