#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
char *malloc(size_t);
size_t strlen(char const *);
int runcmd_cmd2strv(const char *str, int *out_argc, char **out_argv) {
  int arg = 0, a = 0;
  unsigned int i;
  int state, ret = 0;
  size_t len;
  char *argz;
  (state = 0);
  len = strlen(str);
  argz = malloc(len + 10);
  for (i = 0; i < len; i++) {
    const char *p = &str[i];
    switch (*p) {
    case 0:
      return ret;
    case ' ':
    case '\t':
    case '\r':
    case '\n':
      if ((state == (1 << 1))) {
        (state = 0);
        argz[a++] = 0;
        continue;
      }
      if (!(state & ((1 << 2) | (1 << 3))))
        continue;
      break;
    case '\\':
      if (((state & (1 << 2)) == (1 << 2)) ||
          ((state & (1 << 5)) == (1 << 5))) {
        break;
      }
      if (((state & (1 << 3)) == (1 << 3))) {
        const char next = str[i + 1];
        switch (next) {
        case '"':
        case '\\':
        case '$':
        case '`':
          (state |= (1 << 5));
          continue;
        }
        break;
      }
      i++;
      break;
    case '\'':
      if (((state & (1 << 3)) == (1 << 3)))
        break;
      if (((state & (1 << 2)) == (1 << 2))) {
        (state &= ~(1 << 2));
        continue;
      }
      if ((state == 0) || (state == (1 << 1))) {
        if ((state == 0)) {
          out_argv[arg++] = &argz[a];
        }
        (state = (1 << 2) | (1 << 1));
        continue;
      }
    case '"':
      if (((state & (1 << 2)) == (1 << 2)))
        break;
      if (((state & (1 << 3)) == (1 << 3))) {
        (state &= ~(1 << 3));
        continue;
      }
      if ((state == 0) || (state == (1 << 1))) {
        if ((state == 0)) {
          out_argv[arg++] = &argz[a];
        }
        (state = (1 << 3) | (1 << 1));
        continue;
      }
      break;
    case '|':
      if (!(state & ((1 << 2) | (1 << 3)))) {
        (ret |= (1 << 0));
      }
      break;
    case '&':
    case ';':
      if (!(state & ((1 << 2) | (1 << 3)))) {
        (state = (1 << 4));
        (ret |= (1 << 3));
        if (i && str[i - 1] != *p) {
          argz[a++] = 0;
          out_argv[arg++] = &argz[a];
        }
      }
      break;
    case '`':
      if (!((state & (1 << 2)) == (1 << 2)) &&
          !((state & (1 << 5)) == (1 << 5))) {
        (ret |= (1 << 1));
      }
      break;
    case '(':
    case ')':
      if (!(state & ((1 << 2) | (1 << 3)))) {
        (ret |= (1 << 2));
      }
      break;
    case '$':
      if (!((state & (1 << 2)) == (1 << 2)) &&
          !((state & (1 << 5)) == (1 << 5))) {
        if (p[1] == '(')
          (ret |= (1 << 1));
        else
          (ret |= (1 << 7));
      }
      break;
    case '*':
    case '?':
      if (!(state & ((1 << 2) | (1 << 3)))) {
        (ret |= (1 << 6));
      }
    default:
      break;
    }
    (state &= ~(1 << 5));
    if ((state == 0)) {
      (state = (1 << 1));
      out_argv[arg++] = &argz[a];
    }
    argz[a++] = str[i];
  }
  argz[a++] = 0;
  if (((state & (1 << 2)) == (1 << 2)))
    (ret |= (1 << 4));
  if (((state & (1 << 3)) == (1 << 3)))
    (ret |= (1 << 5));
  *out_argc = arg;
  return ret;
}


x86 assembly (clang, -O0):
<runcmd_cmd2strv>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rdi
add    $0xa,%rdi
call   1040 <malloc@plt>
mov    %rax,-0x48(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x40(%rbp),%rax
jae    1582 <runcmd_cmd2strv+0x462>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,%ecx
mov    %rcx,-0x60(%rbp)
sub    $0x7c,%eax
ja     1515 <runcmd_cmd2strv+0x3f5>
mov    -0x60(%rbp),%rax
lea    0xe4f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x34(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    15d7 <runcmd_cmd2strv+0x4b7>
cmpl   $0x2,-0x30(%rbp)
jne    11f1 <runcmd_cmd2strv+0xd1>
movl   $0x0,-0x30(%rbp)
mov    -0x48(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1574 <runcmd_cmd2strv+0x454>
mov    -0x30(%rbp),%eax
and    $0xc,%eax
cmp    $0x0,%eax
jne    1205 <runcmd_cmd2strv+0xe5>
jmp    1574 <runcmd_cmd2strv+0x454>
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0x4,%eax
cmp    $0x4,%eax
je     1228 <runcmd_cmd2strv+0x108>
mov    -0x30(%rbp),%eax
and    $0x20,%eax
cmp    $0x20,%eax
jne    122d <runcmd_cmd2strv+0x10d>
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0x8,%eax
cmp    $0x8,%eax
jne    12a7 <runcmd_cmd2strv+0x187>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
mov    (%rax,%rcx,1),%al
mov    %al,-0x51(%rbp)
movsbl -0x51(%rbp),%eax
mov    %eax,-0x64(%rbp)
sub    $0x22,%eax
je     1294 <runcmd_cmd2strv+0x174>
jmp    1261 <runcmd_cmd2strv+0x141>
mov    -0x64(%rbp),%eax
sub    $0x24,%eax
je     1294 <runcmd_cmd2strv+0x174>
jmp    1272 <runcmd_cmd2strv+0x152>
mov    -0x64(%rbp),%eax
sub    $0x5c,%eax
je     1294 <runcmd_cmd2strv+0x174>
jmp    1283 <runcmd_cmd2strv+0x163>
mov    -0x64(%rbp),%eax
sub    $0x60,%eax
jne    12a2 <runcmd_cmd2strv+0x182>
jmp    1294 <runcmd_cmd2strv+0x174>
mov    -0x30(%rbp),%eax
or     $0x20,%eax
mov    %eax,-0x30(%rbp)
jmp    1574 <runcmd_cmd2strv+0x454>
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0x8,%eax
cmp    $0x8,%eax
jne    12c9 <runcmd_cmd2strv+0x1a9>
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0x4,%eax
cmp    $0x4,%eax
jne    12e6 <runcmd_cmd2strv+0x1c6>
mov    -0x30(%rbp),%eax
and    $0xfffffffb,%eax
mov    %eax,-0x30(%rbp)
jmp    1574 <runcmd_cmd2strv+0x454>
cmpl   $0x0,-0x30(%rbp)
je     12fa <runcmd_cmd2strv+0x1da>
cmpl   $0x2,-0x30(%rbp)
jne    1331 <runcmd_cmd2strv+0x211>
cmpl   $0x0,-0x30(%rbp)
jne    1325 <runcmd_cmd2strv+0x205>
mov    -0x48(%rbp),%rdx
movslq -0x28(%rbp),%rax
add    %rax,%rdx
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
movslq %ecx,%rcx
mov    %rdx,(%rax,%rcx,8)
movl   $0x6,-0x30(%rbp)
jmp    1574 <runcmd_cmd2strv+0x454>
jmp    1336 <runcmd_cmd2strv+0x216>
mov    -0x30(%rbp),%eax
and    $0x4,%eax
cmp    $0x4,%eax
jne    134a <runcmd_cmd2strv+0x22a>
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0x8,%eax
cmp    $0x8,%eax
jne    1367 <runcmd_cmd2strv+0x247>
mov    -0x30(%rbp),%eax
and    $0xfffffff7,%eax
mov    %eax,-0x30(%rbp)
jmp    1574 <runcmd_cmd2strv+0x454>
cmpl   $0x0,-0x30(%rbp)
je     137b <runcmd_cmd2strv+0x25b>
cmpl   $0x2,-0x30(%rbp)
jne    13b2 <runcmd_cmd2strv+0x292>
cmpl   $0x0,-0x30(%rbp)
jne    13a6 <runcmd_cmd2strv+0x286>
mov    -0x48(%rbp),%rdx
movslq -0x28(%rbp),%rax
add    %rax,%rdx
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
movslq %ecx,%rcx
mov    %rdx,(%rax,%rcx,8)
movl   $0xa,-0x30(%rbp)
jmp    1574 <runcmd_cmd2strv+0x454>
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0xc,%eax
cmp    $0x0,%eax
jne    13cf <runcmd_cmd2strv+0x2af>
mov    -0x34(%rbp),%eax
or     $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0xc,%eax
cmp    $0x0,%eax
jne    1458 <runcmd_cmd2strv+0x338>
movl   $0x10,-0x30(%rbp)
mov    -0x34(%rbp),%eax
or     $0x8,%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x2c(%rbp)
je     1453 <runcmd_cmd2strv+0x333>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
mov    %ecx,%ecx
movsbl (%rax,%rcx,1),%eax
mov    -0x50(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     1453 <runcmd_cmd2strv+0x333>
mov    -0x48(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x48(%rbp),%rdx
movslq -0x28(%rbp),%rax
add    %rax,%rdx
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
movslq %ecx,%rcx
mov    %rdx,(%rax,%rcx,8)
jmp    1458 <runcmd_cmd2strv+0x338>
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0x4,%eax
cmp    $0x4,%eax
je     1484 <runcmd_cmd2strv+0x364>
mov    -0x30(%rbp),%eax
and    $0x20,%eax
cmp    $0x20,%eax
je     1484 <runcmd_cmd2strv+0x364>
mov    -0x34(%rbp),%eax
or     $0x2,%eax
mov    %eax,-0x34(%rbp)
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0xc,%eax
cmp    $0x0,%eax
jne    14a1 <runcmd_cmd2strv+0x381>
mov    -0x34(%rbp),%eax
or     $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0x4,%eax
cmp    $0x4,%eax
je     14f3 <runcmd_cmd2strv+0x3d3>
mov    -0x30(%rbp),%eax
and    $0x20,%eax
cmp    $0x20,%eax
je     14f3 <runcmd_cmd2strv+0x3d3>
mov    -0x50(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x28,%eax
jne    14e3 <runcmd_cmd2strv+0x3c3>
mov    -0x34(%rbp),%eax
or     $0x2,%eax
mov    %eax,-0x34(%rbp)
jmp    14ee <runcmd_cmd2strv+0x3ce>
mov    -0x34(%rbp),%eax
or     $0x80,%eax
mov    %eax,-0x34(%rbp)
jmp    14f3 <runcmd_cmd2strv+0x3d3>
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0xc,%eax
cmp    $0x0,%eax
jne    1510 <runcmd_cmd2strv+0x3f0>
mov    -0x34(%rbp),%eax
or     $0x40,%eax
mov    %eax,-0x34(%rbp)
jmp    1515 <runcmd_cmd2strv+0x3f5>
jmp    151a <runcmd_cmd2strv+0x3fa>
mov    -0x30(%rbp),%eax
and    $0xffffffdf,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jne    1555 <runcmd_cmd2strv+0x435>
movl   $0x2,-0x30(%rbp)
mov    -0x48(%rbp),%rdx
movslq -0x28(%rbp),%rax
add    %rax,%rdx
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
movslq %ecx,%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
mov    (%rax,%rcx,1),%dl
mov    -0x48(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1175 <runcmd_cmd2strv+0x55>
mov    -0x48(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
and    $0x4,%eax
cmp    $0x4,%eax
jne    15b0 <runcmd_cmd2strv+0x490>
mov    -0x34(%rbp),%eax
or     $0x10,%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
and    $0x8,%eax
cmp    $0x8,%eax
jne    15c8 <runcmd_cmd2strv+0x4a8>
mov    -0x34(%rbp),%eax
or     $0x20,%eax
mov    %eax,-0x34(%rbp)
mov    -0x24(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x34(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<runcmd_cmd2strv>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdx,%r15
mov    %rsi,%r14
mov    %rdi,%r13
call   1030 <strlen@plt>
mov    %rax,%r12
lea    0xa(%rax),%rdi
call   1040 <malloc@plt>
test   %r12,%r12
je     1322 <runcmd_cmd2strv+0x202>
xor    %edx,%edx
lea    0xeab(%rip),%r10
movabs $0x4400000000000005,%r8
xor    %r9d,%r9d
xor    %esi,%esi
xor    %r11d,%r11d
xor    %edi,%edi
jmp    1191 <runcmd_cmd2strv+0x71>
xor    %edx,%edx
nopl   (%rax)
mov    %edx,%ecx
movzbl 0x0(%r13,%rcx,1),%ecx
movslq %esi,%rbx
add    $0x1,%esi
mov    %cl,(%rax,%rbx,1)
mov    %edi,%ecx
add    $0x1,%edx
mov    %ecx,%edi
cmp    %rdx,%r12
jbe    132c <runcmd_cmd2strv+0x20c>
movsbl 0x0(%r13,%rdx,1),%ecx
cmp    $0x7c,%ecx
ja     11f6 <runcmd_cmd2strv+0xd6>
movslq (%r10,%rcx,4),%rbx
add    %r10,%rbx
jmp    *%rbx
cmp    $0x2,%edi
je     121a <runcmd_cmd2strv+0xfa>
test   $0xc,%dil
je     1181 <runcmd_cmd2strv+0x61>
jmp    11f6 <runcmd_cmd2strv+0xd6>
test   $0xc,%dil
jne    11f6 <runcmd_cmd2strv+0xd6>
or     $0x8,%r11d
mov    $0x10,%edi
test   %edx,%edx
je     116b <runcmd_cmd2strv+0x4b>
lea    -0x1(%rdx),%ebx
cmp    %cl,0x0(%r13,%rbx,1)
je     1170 <runcmd_cmd2strv+0x50>
movslq %esi,%rcx
add    $0x1,%esi
movb   $0x0,(%rax,%rcx,1)
mov    $0x10,%edi
jmp    1204 <runcmd_cmd2strv+0xe4>
mov    %r11d,%ecx
or     $0x4,%ecx
jmp    11ee <runcmd_cmd2strv+0xce>
mov    %r11d,%ecx
or     $0x40,%ecx
test   $0xc,%dil
cmove  %ecx,%r11d
and    $0xffffffdf,%edi
jne    1170 <runcmd_cmd2strv+0x50>
mov    $0x2,%edi
movslq %esi,%rcx
add    %rax,%rcx
movslq %r9d,%rbx
add    $0x1,%r9d
mov    %rcx,(%r15,%rbx,8)
jmp    1170 <runcmd_cmd2strv+0x50>
movslq %esi,%rcx
add    $0x1,%esi
movb   $0x0,(%rax,%rcx,1)
xor    %ecx,%ecx
jmp    1183 <runcmd_cmd2strv+0x63>
test   $0x4,%dil
je     1263 <runcmd_cmd2strv+0x143>
jmp    11f6 <runcmd_cmd2strv+0xd6>
test   $0x24,%dil
jne    11f6 <runcmd_cmd2strv+0xd6>
cmpb   $0x28,0x1(%r13,%rdx,1)
jne    12c5 <runcmd_cmd2strv+0x1a5>
or     $0x2,%r11d
jmp    11f6 <runcmd_cmd2strv+0xd6>
test   $0x8,%dil
jne    11f6 <runcmd_cmd2strv+0xd6>
test   $0x4,%dil
jne    12d1 <runcmd_cmd2strv+0x1b1>
test   $0xfffffffd,%edi
je     12ff <runcmd_cmd2strv+0x1df>
test   $0x8,%dil
jne    12bd <runcmd_cmd2strv+0x19d>
test   $0xfffffffd,%edi
jne    11f6 <runcmd_cmd2strv+0xd6>
mov    $0xa,%ecx
test   %edi,%edi
jne    1183 <runcmd_cmd2strv+0x63>
jmp    130c <runcmd_cmd2strv+0x1ec>
test   $0x24,%dil
jne    11f6 <runcmd_cmd2strv+0xd6>
lea    0x1(%rdx),%ecx
test   $0x8,%dil
jne    12d9 <runcmd_cmd2strv+0x1b9>
mov    %ecx,%edx
jmp    11f6 <runcmd_cmd2strv+0xd6>
mov    %r11d,%ecx
or     $0x2,%ecx
test   $0x24,%dil
jmp    11f2 <runcmd_cmd2strv+0xd2>
xor    %ecx,%ecx
test   $0xc,%dil
sete   %cl
or     %ecx,%r11d
jmp    11f6 <runcmd_cmd2strv+0xd6>
and    $0xfffffff7,%edi
jmp    1181 <runcmd_cmd2strv+0x61>
or     $0x80,%r11d
jmp    11f6 <runcmd_cmd2strv+0xd6>
and    $0xfffffffb,%edi
jmp    1181 <runcmd_cmd2strv+0x61>
mov    %ecx,%ecx
movsbl 0x0(%r13,%rcx,1),%ecx
add    $0xffffffde,%ecx
cmp    $0x3e,%ecx
ja     11f6 <runcmd_cmd2strv+0xd6>
bt     %rcx,%r8
jae    11f6 <runcmd_cmd2strv+0xd6>
or     $0x20,%edi
jmp    1181 <runcmd_cmd2strv+0x61>
mov    $0x6,%ecx
test   %edi,%edi
jne    1183 <runcmd_cmd2strv+0x63>
movslq %esi,%rdi
add    %rax,%rdi
movslq %r9d,%rbx
add    $0x1,%r9d
mov    %rdi,(%r15,%rbx,8)
jmp    1183 <runcmd_cmd2strv+0x63>
xor    %ecx,%ecx
xor    %r11d,%r11d
xor    %esi,%esi
xor    %r9d,%r9d
movslq %esi,%rdx
movb   $0x0,(%rax,%rdx,1)
shl    $0x2,%ecx
mov    %ecx,%eax
and    $0x10,%eax
or     %r11d,%eax
and    $0x20,%ecx
or     %eax,%ecx
mov    %r9d,(%r14)
mov    %ecx,%r11d
mov    %r11d,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

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

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