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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ isspace(unsigned char);
unsigned int wg_split(char **result, char *dest, char *src, int maxsegments) {
  char *p = src;
  char *w = dest;
  int cnt = 0;
  int state = 0;
  if (maxsegments == 0) {
    return 0;
  }
  maxsegments--;
  while (cnt < maxsegments && *p) {
    switch (state) {
    case 0:
      while (isspace((unsigned char)*p)) {
        p++;
      }
      result[cnt] = w;
      cnt++;
      state = 1;
    case 1:
      while (*p) {
        if (isspace((unsigned char)*p)) {
          *w++ = '\0';
          p++;
          state = 0;
          break;
        } else if (*p == '\'') {
          p++;
          state = 2;
          break;
        } else if (*p == '\\' && p[1]) {
          p++;
          *w++ = *p++;
        } else {
          *w++ = *p++;
        }
      }
      break;
    case 2:
      while (*p) {
        if (*p == '\'') {
          p++;
          break;
        } else if (*p == '\\' && p[1]) {
          p++;
          *w++ = *p++;
        } else {
          *w++ = *p++;
        }
      }
      state = 1;
      break;
    }
  }
  if (!*p) {
    *w = '\0';
    return cnt;
  }
  result[cnt++] = w;
  while (*p) {
    *w++ = *p++;
  }
  *w = '\0';
  return cnt;
}


x86 assembly (clang, -O0):
<wg_split>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
cmpl   $0x0,-0x24(%rbp)
jne    115b <wg_split+0x4b>
movl   $0x0,-0x4(%rbp)
jmp    1451 <wg_split+0x341>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
mov    -0x3c(%rbp),%ecx
xor    %eax,%eax
cmp    -0x24(%rbp),%ecx
mov    %al,-0x41(%rbp)
jge    1185 <wg_split+0x75>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    1195 <wg_split+0x85>
jmp    13d7 <wg_split+0x2c7>
mov    -0x40(%rbp),%eax
mov    %eax,-0x48(%rbp)
test   %eax,%eax
je     11ca <wg_split+0xba>
jmp    11a8 <wg_split+0x98>
mov    -0x48(%rbp),%eax
sub    $0x1,%eax
je     1215 <wg_split+0x105>
jmp    11b9 <wg_split+0xa9>
mov    -0x48(%rbp),%eax
sub    $0x2,%eax
je     1318 <wg_split+0x208>
jmp    13d2 <wg_split+0x2c2>
jmp    11cf <wg_split+0xbf>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isspace@plt>
cmp    $0x0,%eax
je     11f5 <wg_split+0xe5>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    11cf <wg_split+0xbf>
mov    -0x38(%rbp),%rdx
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x40(%rbp)
jmp    121a <wg_split+0x10a>
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
je     1313 <wg_split+0x203>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1030 <isspace@plt>
cmp    $0x0,%eax
je     1266 <wg_split+0x156>
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x38(%rbp)
movb   $0x0,(%rax)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x40(%rbp)
jmp    1313 <wg_split+0x203>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
jne    128e <wg_split+0x17e>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movl   $0x2,-0x40(%rbp)
jmp    1313 <wg_split+0x203>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    12e2 <wg_split+0x1d2>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     12e2 <wg_split+0x1d2>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
jmp    1304 <wg_split+0x1f4>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
jmp    1309 <wg_split+0x1f9>
jmp    130e <wg_split+0x1fe>
jmp    121a <wg_split+0x10a>
jmp    13d2 <wg_split+0x2c2>
jmp    131d <wg_split+0x20d>
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
je     13cb <wg_split+0x2bb>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
jne    134b <wg_split+0x23b>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13cb <wg_split+0x2bb>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    139f <wg_split+0x28f>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     139f <wg_split+0x28f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
jmp    13c1 <wg_split+0x2b1>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
jmp    13c6 <wg_split+0x2b6>
jmp    131d <wg_split+0x20d>
movl   $0x1,-0x40(%rbp)
jmp    1164 <wg_split+0x54>
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
jne    13f6 <wg_split+0x2e6>
mov    -0x38(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1451 <wg_split+0x341>
mov    -0x38(%rbp),%rdx
mov    -0x10(%rbp),%rax
mov    -0x3c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x3c(%rbp)
movslq %ecx,%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
je     1444 <wg_split+0x334>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
jmp    1410 <wg_split+0x300>
mov    -0x38(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wg_split>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
test   %ecx,%ecx
je     12ba <wg_split+0x1aa>
mov    %ecx,%r12d
mov    %rdx,%rbx
mov    %rsi,%r13
mov    %rdi,%r15
xor    %r14d,%r14d
cmp    $0x2,%ecx
jl     1282 <wg_split+0x172>
add    $0xffffffff,%r12d
xor    %eax,%eax
xor    %r14d,%r14d
jmp    1158 <wg_split+0x48>
add    $0x1,%rbx
mov    $0x1,%eax
cmp    %r12d,%r14d
jge    1282 <wg_split+0x172>
mov    (%rbx),%cl
test   %cl,%cl
je     12b3 <wg_split+0x1a3>
test   %eax,%eax
je     11c0 <wg_split+0xb0>
cmp    $0x1,%eax
je     1205 <wg_split+0xf5>
cmp    $0x2,%eax
je     1196 <wg_split+0x86>
jmp    114f <wg_split+0x3f>
cs nopw 0x0(%rax,%rax,1)
mov    $0x1,%eax
mov    %ecx,%edx
mov    %dl,0x0(%r13)
movzbl (%rbx,%rax,1),%ecx
add    %rax,%rbx
add    $0x1,%r13
cmp    $0x5c,%cl
je     11b0 <wg_split+0xa0>
test   %cl,%cl
je     114a <wg_split+0x3a>
cmp    $0x27,%cl
jne    1180 <wg_split+0x70>
jmp    1146 <wg_split+0x36>
cs nopw 0x0(%rax,%rax,1)
movzbl 0x1(%rbx),%edx
mov    $0x2,%eax
test   %dl,%dl
jne    1187 <wg_split+0x77>
jmp    1180 <wg_split+0x70>
nop
movzbl %cl,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
call   1030 <isspace@plt>
test   %eax,%eax
je     11f0 <wg_split+0xe0>
movzbl 0x1(%rbx),%edi
add    $0x1,%rbx
jmp    11d0 <wg_split+0xc0>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movslq %r14d,%r14
mov    %r13,(%r15,%r14,8)
add    $0x1,%r14d
mov    (%rbx),%cl
test   %cl,%cl
je     114a <wg_split+0x3a>
mov    %rbx,%rbp
jmp    1237 <wg_split+0x127>
nopw   0x0(%rax,%rax,1)
cmp    $0x27,%al
je     1271 <wg_split+0x161>
mov    $0x1,%ecx
mov    %eax,%edx
lea    (%rcx,%rbp,1),%rbx
mov    %dl,0x0(%r13)
add    $0x1,%r13
movzbl 0x0(%rbp,%rcx,1),%ecx
mov    %rbx,%rbp
test   %cl,%cl
je     114a <wg_split+0x3a>
movzbl %cl,%edi
call   1030 <isspace@plt>
test   %eax,%eax
jne    125a <wg_split+0x14a>
movzbl 0x0(%rbp),%eax
cmp    $0x5c,%al
jne    1210 <wg_split+0x100>
movzbl 0x1(%rbp),%edx
mov    $0x2,%ecx
test   %dl,%dl
jne    121b <wg_split+0x10b>
jmp    1214 <wg_split+0x104>
movb   $0x0,0x0(%r13)
add    $0x1,%r13
add    $0x1,%rbp
xor    %eax,%eax
mov    %rbp,%rbx
jmp    114f <wg_split+0x3f>
add    $0x1,%rbp
mov    $0x2,%eax
mov    %rbp,%rbx
jmp    114f <wg_split+0x3f>
cmpb   $0x0,(%rbx)
je     12b3 <wg_split+0x1a3>
movslq %r14d,%rax
add    $0x1,%r14d
mov    %r13,(%r15,%rax,8)
mov    (%rbx),%al
test   %al,%al
je     12b3 <wg_split+0x1a3>
add    $0x1,%rbx
nopl   0x0(%rax)
mov    %al,0x0(%r13)
add    $0x1,%r13
movzbl (%rbx),%eax
add    $0x1,%rbx
test   %al,%al
jne    12a0 <wg_split+0x190>
movb   $0x0,0x0(%r13)
jmp    12bd <wg_split+0x1ad>
xor    %r14d,%r14d
mov    %r14d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @wg_split(i8** nocapture writeonly %0, i8* %1, i8* nocapture %2, i32 %3) {
%5 = icmp eq i32 %3, 0
br i1 %5, label %108, label %6
6: ; preds = %4
%7 = add nsw i32 %3, -1
%8 = icmp sgt i32 %3, 1
br i1 %8, label %9, label %85
9: ; preds = %6, %79
%10 = phi i32 [ %83, %79 ], [ 0, %6 ]
%11 = phi i32 [ %82, %79 ], [ 0, %6 ]
%12 = phi i8* [ %81, %79 ], [ %1, %6 ]
%13 = phi i8* [ %80, %79 ], [ %2, %6 ]
%14 = load i8, i8* %13
%15 = icmp eq i8 %14, 0
br i1 %15, label %105, label %16
16: ; preds = %9
switch i32 %10, label %79 [
i32 0, label %17
i32 1, label %33
i32 2, label %62
]
17: ; preds = %16
%18 = tail call i32 @isspace(i8 zeroext %14)
%19 = icmp eq i32 %18, 0
br i1 %19, label %26, label %20
20: ; preds = %17, %20
%21 = phi i8* [ %22, %20 ], [ %13, %17 ]
%22 = getelementptr inbounds i8, i8* %21, i64 1
%23 = load i8, i8* %22
%24 = tail call i32 @isspace(i8 zeroext %23)
%25 = icmp eq i32 %24, 0
br i1 %25, label %26, label %20
26: ; preds = %20, %17
%27 = phi i8* [ %13, %17 ], [ %22, %20 ]
%28 = sext i32 %11 to i64
%29 = getelementptr inbounds i8*, i8** %0, i64 %28
store i8* %12, i8** %29
%30 = add nsw i32 %11, 1
%31 = load i8, i8* %27
%32 = icmp eq i8 %31, 0
br i1 %32, label %79, label %33
33: ; preds = %16, %26
%34 = phi i32 [ %30, %26 ], [ %11, %16 ]
%35 = phi i8* [ %27, %26 ], [ %13, %16 ]
%36 = phi i8 [ %31, %26 ], [ %14, %16 ]
br label %37
37: ; preds = %33, %55
%38 = phi i8 [ %60, %55 ], [ %36, %33 ]
%39 = phi i8* [ %59, %55 ], [ %12, %33 ]
%40 = phi i8* [ %58, %55 ], [ %35, %33 ]
%41 = tail call i32 @isspace(i8 zeroext %38)
%42 = icmp eq i32 %41, 0
br i1 %42, label %46, label %43
43: ; preds = %37
%44 = getelementptr inbounds i8, i8* %39, i64 1
store i8 0, i8* %39
%45 = getelementptr inbounds i8, i8* %40, i64 1
br label %79
46: ; preds = %37
%47 = load i8, i8* %40
switch i8 %47, label %54 [
i8 39, label %48
i8 92, label %50
]
48: ; preds = %46
%49 = getelementptr inbounds i8, i8* %40, i64 1
br label %79
50: ; preds = %46
%51 = getelementptr inbounds i8, i8* %40, i64 1
%52 = load i8, i8* %51
%53 = icmp eq i8 %52, 0
br i1 %53, label %54, label %55
54: ; preds = %46, %50
br label %55
55: ; preds = %50, %54
%56 = phi i64 [ 1, %54 ], [ 2, %50 ]
%57 = phi i8 [ %47, %54 ], [ %52, %50 ]
%58 = getelementptr inbounds i8, i8* %40, i64 %56
%59 = getelementptr inbounds i8, i8* %39, i64 1
store i8 %57, i8* %39
%60 = load i8, i8* %58
%61 = icmp eq i8 %60, 0
br i1 %61, label %79, label %37
62: ; preds = %16, %73
%63 = phi i8 [ %78, %73 ], [ %14, %16 ]
%64 = phi i8* [ %76, %73 ], [ %13, %16 ]
%65 = phi i8* [ %77, %73 ], [ %12, %16 ]
switch i8 %63, label %72 [
i8 0, label %79
i8 39, label %66
i8 92, label %68
]
66: ; preds = %62
%67 = getelementptr inbounds i8, i8* %64, i64 1
br label %79
68: ; preds = %62
%69 = getelementptr inbounds i8, i8* %64, i64 1
%70 = load i8, i8* %69
%71 = icmp eq i8 %70, 0
br i1 %71, label %72, label %73
72: ; preds = %62, %68
br label %73
73: ; preds = %68, %72
%74 = phi i64 [ 1, %72 ], [ 2, %68 ]
%75 = phi i8 [ %63, %72 ], [ %70, %68 ]
%76 = getelementptr inbounds i8, i8* %64, i64 %74
%77 = getelementptr inbounds i8, i8* %65, i64 1
store i8 %75, i8* %65
%78 = load i8, i8* %76
br label %62
79: ; preds = %62, %55, %26, %66, %43, %48, %16
%80 = phi i8* [ %13, %16 ], [ %45, %43 ], [ %49, %48 ], [ %67, %66 ], [ %27, %26 ], [ %58, %55 ], [ %64, %62 ]
%81 = phi i8* [ %12, %16 ], [ %44, %43 ], [ %39, %48 ], [ %65, %66 ], [ %12, %26 ], [ %59, %55 ], [ %65, %62 ]
%82 = phi i32 [ %11, %16 ], [ %34, %43 ], [ %34, %48 ], [ %11, %66 ], [ %30, %26 ], [ %34, %55 ], [ %11, %62 ]
%83 = phi i32 [ %10, %16 ], [ 0, %43 ], [ 2, %48 ], [ 1, %66 ], [ 1, %26 ], [ 1, %55 ], [ 1, %62 ]
%84 = icmp slt i32 %82, %7
br i1 %84, label %9, label %85
85: ; preds = %79, %6
%86 = phi i8* [ %2, %6 ], [ %80, %79 ]
%87 = phi i8* [ %1, %6 ], [ %81, %79 ]
%88 = phi i32 [ 0, %6 ], [ %82, %79 ]
%89 = load i8, i8* %86
%90 = icmp eq i8 %89, 0
br i1 %90, label %105, label %91
91: ; preds = %85
%92 = add nsw i32 %88, 1
%93 = sext i32 %88 to i64
%94 = getelementptr inbounds i8*, i8** %0, i64 %93
store i8* %87, i8** %94
%95 = load i8, i8* %86
%96 = icmp eq i8 %95, 0
br i1 %96, label %105, label %97
97: ; preds = %91, %97
%98 = phi i8 [ %103, %97 ], [ %95, %91 ]
%99 = phi i8* [ %102, %97 ], [ %87, %91 ]
%100 = phi i8* [ %101, %97 ], [ %86, %91 ]
%101 = getelementptr inbounds i8, i8* %100, i64 1
%102 = getelementptr inbounds i8, i8* %99, i64 1
store i8 %98, i8* %99
%103 = load i8, i8* %101
%104 = icmp eq i8 %103, 0
br i1 %104, label %105, label %97
105: ; preds = %9, %97, %91, %85
%106 = phi i8* [ %87, %85 ], [ %87, %91 ], [ %102, %97 ], [ %12, %9 ]
%107 = phi i32 [ %88, %85 ], [ %92, %91 ], [ %92, %97 ], [ %11, %9 ]
store i8 0, i8* %106
br label %108
108: ; preds = %105, %4
%109 = phi i32 [ 0, %4 ], [ %107, %105 ]
ret i32 %109
}