#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 */
scalar_t__ isspace(int);
char **malloc(int);
int /*<<< orphan*/ memmove(char *, char *, int);
int strlen(char *);
int string_split_quotes(char *str, int *argc, char ***argv) {
  *argc = 0;
  *argv = malloc((strlen(str) + 1) * sizeof(char *));
  if (!*argv)
    return 0;
  while (*str) {
    while (isspace((int)*str)) {
      str++;
    }
    if (!*str)
      break;
    (*argv)[(*argc)++] = str;
    while (*str) {
      if (*str == '\\') {
        memmove(str, str + 1, strlen(str));
        if (*str)
          str++;
      } else if (isspace((int)*str)) {
        *str = 0;
        str++;
        break;
      } else if (*str == '\'' || *str == '\"') {
        char quote = *str;
        memmove(str, str + 1, strlen(str));
        while (*str) {
          if (*str == '\\') {
            memmove(str, str + 1, strlen(str));
            if (*str)
              str++;
          } else if (*str == quote) {
            memmove(str, str + 1, strlen(str));
            break;
          } else {
            str++;
          }
        }
      } else if (!*str) {
        break;
      } else {
        str++;
      }
    }
  }
  (*argv)[*argc] = 0;
  return 1;
}


x86 assembly (clang, -O0):
<string_split_quotes>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
add    $0x1,%eax
cltq
shl    $0x3,%rax
mov    %eax,%edi
call   1050 <malloc@plt>
mov    %rax,%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
cmpq   $0x0,(%rax)
jne    119b <string_split_quotes+0x5b>
movl   $0x0,-0x4(%rbp)
jmp    140e <string_split_quotes+0x2ce>
jmp    11a0 <string_split_quotes+0x60>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     13f1 <string_split_quotes+0x2b1>
jmp    11b2 <string_split_quotes+0x72>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
je     11d9 <string_split_quotes+0x99>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11b2 <string_split_quotes+0x72>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
jne    11eb <string_split_quotes+0xab>
jmp    13f1 <string_split_quotes+0x2b1>
mov    -0x10(%rbp),%rdx
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rsi
mov    (%rsi),%ecx
mov    %ecx,%edi
add    $0x1,%edi
mov    %edi,(%rsi)
movslq %ecx,%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     13ec <string_split_quotes+0x2ac>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1271 <string_split_quotes+0x131>
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    -0x38(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    %eax,%edx
call   1060 <memmove@plt>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     126c <string_split_quotes+0x12c>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13e7 <string_split_quotes+0x2a7>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
je     129f <string_split_quotes+0x15f>
mov    -0x10(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13ec <string_split_quotes+0x2ac>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
je     12bf <string_split_quotes+0x17f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    13ba <string_split_quotes+0x27a>
mov    -0x10(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x21(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    -0x48(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    %eax,%edx
call   1060 <memmove@plt>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     13b5 <string_split_quotes+0x275>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    135b <string_split_quotes+0x21b>
mov    -0x10(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    -0x58(%rbp),%rdi
mov    -0x50(%rbp),%rsi
mov    %eax,%edx
call   1060 <memmove@plt>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     1356 <string_split_quotes+0x216>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13b0 <string_split_quotes+0x270>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x21(%rbp),%ecx
cmp    %ecx,%eax
jne    139f <string_split_quotes+0x25f>
mov    -0x10(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x60(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    -0x68(%rbp),%rdi
mov    -0x60(%rbp),%rsi
mov    %eax,%edx
call   1060 <memmove@plt>
jmp    13b5 <string_split_quotes+0x275>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13b0 <string_split_quotes+0x270>
jmp    12f4 <string_split_quotes+0x1b4>
jmp    13dd <string_split_quotes+0x29d>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
jne    13cc <string_split_quotes+0x28c>
jmp    13ec <string_split_quotes+0x2ac>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13dd <string_split_quotes+0x29d>
jmp    13e2 <string_split_quotes+0x2a2>
jmp    13e7 <string_split_quotes+0x2a7>
jmp    120a <string_split_quotes+0xca>
jmp    11a0 <string_split_quotes+0x60>
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%rcx
movslq (%rcx),%rcx
movq   $0x0,(%rax,%rcx,8)
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<string_split_quotes>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%r12
movl   $0x0,(%rsi)
call   1030 <strlen@plt>
lea    0x8(,%rax,8),%edi
call   1050 <malloc@plt>
mov    %rax,(%r14)
test   %rax,%rax
je     12fb <string_split_quotes+0x1bb>
mov    (%r12),%cl
test   %cl,%cl
je     12e9 <string_split_quotes+0x1a9>
movsbl %cl,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
call   1040 <isspace@plt>
test   %rax,%rax
je     11b0 <string_split_quotes+0x70>
movsbl 0x1(%r12),%edi
add    $0x1,%r12
jmp    1190 <string_split_quotes+0x50>
cs nopw 0x0(%rax,%rax,1)
cmpb   $0x0,(%r12)
je     12e6 <string_split_quotes+0x1a6>
mov    (%r14),%rax
movslq (%r15),%rcx
lea    0x1(%rcx),%edx
mov    %edx,(%r15)
mov    %r12,(%rax,%rcx,8)
jmp    11f3 <string_split_quotes+0xb3>
nopl   (%rax)
lea    0x1(%r12),%rbx
mov    %r12,%rdi
call   1030 <strlen@plt>
mov    %r12,%rdi
mov    %rbx,%rsi
mov    %eax,%edx
call   1060 <memmove@plt>
cmpb   $0x0,(%r12)
cmovne %rbx,%r12
movsbl (%r12),%edi
cmp    $0x5c,%edi
je     11d0 <string_split_quotes+0x90>
test   %dil,%dil
je     12e6 <string_split_quotes+0x1a6>
call   1040 <isspace@plt>
test   %rax,%rax
jne    12d0 <string_split_quotes+0x190>
mov    (%r12),%bpl
cmp    $0x22,%bpl
je     1240 <string_split_quotes+0x100>
cmp    $0x27,%bpl
je     1240 <string_split_quotes+0x100>
test   %bpl,%bpl
je     12e6 <string_split_quotes+0x1a6>
add    $0x1,%r12
jmp    11f3 <string_split_quotes+0xb3>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0x1(%r12),%rbx
mov    %r12,%rdi
call   1030 <strlen@plt>
mov    %r12,%rdi
mov    %rbx,%rsi
mov    %eax,%edx
call   1060 <memmove@plt>
jmp    1263 <string_split_quotes+0x123>
nopl   0x0(%rax)
mov    %rbx,%r12
mov    %r12,%rbx
movzbl (%r12),%eax
cmp    $0x5c,%al
je     1280 <string_split_quotes+0x140>
test   %al,%al
je     12a3 <string_split_quotes+0x163>
lea    0x1(%rbx),%r12
cmp    %bpl,%al
jne    1263 <string_split_quotes+0x123>
jmp    12ab <string_split_quotes+0x16b>
xchg   %ax,%ax
lea    0x1(%rbx),%r12
mov    %rbx,%rdi
call   1030 <strlen@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
mov    %eax,%edx
call   1060 <memmove@plt>
cmpb   $0x0,(%rbx)
je     1260 <string_split_quotes+0x120>
mov    %r12,%rbx
jmp    1260 <string_split_quotes+0x120>
mov    %rbx,%r12
jmp    11f3 <string_split_quotes+0xb3>
mov    %rbx,%rdi
call   1030 <strlen@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
mov    %eax,%edx
call   1060 <memmove@plt>
mov    %rbx,%r12
jmp    11f3 <string_split_quotes+0xb3>
nopl   0x0(%rax,%rax,1)
movb   $0x0,(%r12)
mov    0x1(%r12),%cl
add    $0x1,%r12
test   %cl,%cl
jne    1180 <string_split_quotes+0x40>
mov    (%r14),%rax
movslq (%r15),%rcx
movq   $0x0,(%rax,%rcx,8)
mov    $0x1,%eax
jmp    12fd <string_split_quotes+0x1bd>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

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