void normpath(char *p) {
  char *start;
  if (p[0] == '/')
    p++;
  start = p;
  while (1) {
    if (p[0] == 0) {
      break;
    } else if (p[0] == '/') {
      char *dst = p, *src = p + 1;
      while ((*dst++ = *src++))
        ;
    } else if (p[0] == '.' && p[1] == '/') {
      char *dst = p, *src = p + 2;
      while ((*dst++ = *src++))
        ;
    } else if (p[0] == '.' && p[1] == 0) {
      p[0] = 0;
    } else if (p[0] == '.' && p[1] == '.' && (p[2] == '/' || p[2] == 0)) {
      char *rest = p + 2;
      if (p != start)
        p -= 2;
      while (*p != '/' && p != start)
        --p;
      if (*p == '/')
        ++p;
      char *dst = p;
      while ((*dst++ = *rest++))
        ;
    } else {
      while (*p != 0 && *p != '/')
        p++;
      if (*p == '/')
        p++;
    }
  }
  if (p != start && p[-1] == '/')
    p[-1] = 0;
}


x86 assembly (clang, -O0):
<normpath>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1124 <normpath+0x24>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1141 <normpath+0x41>
jmp    13be <normpath+0x2be>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1199 <normpath+0x99>
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%al
mov    -0x18(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %al,(%rcx)
cmp    $0x0,%al
je     1194 <normpath+0x94>
jmp    1165 <normpath+0x65>
jmp    13b4 <normpath+0x2b4>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1202 <normpath+0x102>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1202 <normpath+0x102>
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
mov    %al,(%rcx)
cmp    $0x0,%al
je     11fd <normpath+0xfd>
jmp    11ce <normpath+0xce>
jmp    13af <normpath+0x2af>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    122f <normpath+0x12f>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
jne    122f <normpath+0x12f>
mov    -0x8(%rbp),%rax
movb   $0x0,(%rax)
jmp    13aa <normpath+0x2aa>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1339 <normpath+0x239>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2e,%eax
jne    1339 <normpath+0x239>
mov    -0x8(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x2f,%eax
je     1272 <normpath+0x172>
mov    -0x8(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x0,%eax
jne    1339 <normpath+0x239>
mov    -0x8(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     1298 <normpath+0x198>
mov    -0x8(%rbp),%rax
add    $0xfffffffffffffffe,%rax
mov    %rax,-0x8(%rbp)
jmp    129d <normpath+0x19d>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x2f,%ecx
mov    %al,-0x41(%rbp)
je     12c0 <normpath+0x1c0>
mov    -0x8(%rbp),%rax
cmp    -0x10(%rbp),%rax
setne  %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    12d0 <normpath+0x1d0>
jmp    12e1 <normpath+0x1e1>
mov    -0x8(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x8(%rbp)
jmp    129d <normpath+0x19d>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    12fd <normpath+0x1fd>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x38(%rbp)
mov    (%rax),%al
mov    -0x40(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x40(%rbp)
mov    %al,(%rcx)
cmp    $0x0,%al
je     1334 <normpath+0x234>
jmp    1305 <normpath+0x205>
jmp    13a5 <normpath+0x2a5>
jmp    133e <normpath+0x23e>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x42(%rbp)
je     1363 <normpath+0x263>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
setne  %al
mov    %al,-0x42(%rbp)
mov    -0x42(%rbp),%al
test   $0x1,%al
jne    1373 <normpath+0x273>
jmp    1384 <normpath+0x284>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    133e <normpath+0x23e>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    13a0 <normpath+0x2a0>
mov    -0x8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x8(%rbp)
jmp    13a5 <normpath+0x2a5>
jmp    13aa <normpath+0x2aa>
jmp    13af <normpath+0x2af>
jmp    13b4 <normpath+0x2b4>
jmp    13b9 <normpath+0x2b9>
jmp    112c <normpath+0x2c>
mov    -0x8(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     13e5 <normpath+0x2e5>
mov    -0x8(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    13e5 <normpath+0x2e5>
mov    -0x8(%rbp),%rax
movb   $0x0,-0x1(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<normpath>:
xor    %r8d,%r8d
cmpb   $0x2f,(%rdi)
sete   %r8b
add    %rdi,%r8
mov    %r8,%rax
jmp    112e <normpath+0x2e>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
cmp    $0x2f,%dl
sete   %al
add    %rax,%rcx
mov    %rcx,%rax
mov    %rax,%rcx
lea    0x2(%rax),%rsi
lea    0x1(%rax),%rdi
jmp    1143 <normpath+0x43>
nopl   0x0(%rax,%rax,1)
movb   $0x0,(%rcx)
mov    (%rcx),%dl
cmp    $0x2e,%dl
je     1170 <normpath+0x70>
cmp    $0x2f,%dl
jne    1190 <normpath+0x90>
mov    %rdi,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%rax),%edx
mov    %dl,-0x1(%rax)
add    $0x1,%rax
test   %dl,%dl
jne    1160 <normpath+0x60>
jmp    1143 <normpath+0x43>
mov    0x1(%rcx),%al
test   %al,%al
je     1140 <normpath+0x40>
cmp    $0x2f,%al
jne    11a0 <normpath+0xa0>
mov    %rsi,%rax
xchg   %ax,%ax
movzbl (%rax),%edx
mov    %dl,-0x2(%rax)
add    $0x1,%rax
test   %dl,%dl
jne    1180 <normpath+0x80>
jmp    1143 <normpath+0x43>
test   %dl,%dl
je     124b <normpath+0x14b>
jmp    1230 <normpath+0x130>
nopl   (%rax)
cmp    $0x2e,%al
jne    1230 <normpath+0x130>
mov    0x2(%rcx),%r9b
test   %r9b,%r9b
je     11b7 <normpath+0xb7>
cmp    $0x2f,%r9b
jne    1230 <normpath+0x130>
xor    %eax,%eax
cmp    %r8,%rcx
sete   %al
lea    (%rax,%rax,1),%rdx
add    $0xfffffffffffffffe,%rdx
lea    (%rcx,%rax,2),%rdi
add    $0xffffffffffffffff,%rdi
nop
movzbl -0x1(%rdi),%eax
add    $0xffffffffffffffff,%rdi
add    $0xffffffffffffffff,%rdx
cmp    $0x2f,%al
je     11e5 <normpath+0xe5>
cmp    %r8,%rdi
jne    11d0 <normpath+0xd0>
xor    %esi,%esi
cmp    $0x2f,%al
sete   %sil
mov    %rdi,%rax
add    %rsi,%rax
mov    %r9b,(%rdi,%rsi,1)
test   %r9b,%r9b
je     112e <normpath+0x2e>
add    $0x3,%rcx
add    %rdx,%rsi
nopw   0x0(%rax,%rax,1)
movzbl (%rcx),%edx
mov    %dl,-0x1(%rcx,%rsi,1)
add    $0x1,%rcx
test   %dl,%dl
jne    1210 <normpath+0x110>
jmp    112e <normpath+0x2e>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
test   %dl,%dl
je     1120 <normpath+0x20>
cmp    $0x2f,%dl
je     1120 <normpath+0x20>
movzbl 0x1(%rcx),%edx
add    $0x1,%rcx
jmp    1230 <normpath+0x130>
cmp    %r8,%rcx
je     125a <normpath+0x15a>
cmpb   $0x2f,-0x1(%rcx)
jne    125a <normpath+0x15a>
movb   $0x0,-0x1(%rcx)
ret

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

LLVM IR (-O2):
define void @normpath(i8* %0) {
%2 = load i8, i8* %0
%3 = icmp eq i8 %2, 47
%4 = zext i1 %3 to i64
%5 = getelementptr i8, i8* %0, i64 %4
br label %6
6: ; preds = %67, %1
%7 = phi i8* [ %5, %1 ], [ %68, %67 ]
%8 = getelementptr inbounds i8, i8* %7, i64 1
%9 = getelementptr inbounds i8, i8* %7, i64 2
br label %10
10: ; preds = %27, %6
%11 = load i8, i8* %7
switch i8 %11, label %31 [
i8 0, label %69
i8 47, label %12
i8 46, label %17
]
12: ; preds = %10, %12
%13 = phi i8* [ %14, %12 ], [ %7, %10 ]
%14 = getelementptr inbounds i8, i8* %13, i64 1
%15 = load i8, i8* %14
store i8 %15, i8* %13
%16 = icmp eq i8 %15, 0
br i1 %16, label %27, label %12
17: ; preds = %10
%18 = load i8, i8* %8
switch i8 %18, label %31 [
i8 47, label %19
i8 0, label %26
i8 46, label %28
]
19: ; preds = %17, %19
%20 = phi i8* [ %24, %19 ], [ %7, %17 ]
%21 = phi i8* [ %22, %19 ], [ %9, %17 ]
%22 = getelementptr inbounds i8, i8* %21, i64 1
%23 = load i8, i8* %21
%24 = getelementptr inbounds i8, i8* %20, i64 1
store i8 %23, i8* %20
%25 = icmp eq i8 %23, 0
br i1 %25, label %27, label %19
26: ; preds = %17
store i8 0, i8* %7
br label %27
27: ; preds = %19, %12, %26
br label %10
28: ; preds = %17
%29 = getelementptr inbounds i8, i8* %7, i64 2
%30 = load i8, i8* %29
switch i8 %30, label %31 [
i8 47, label %32
i8 0, label %32
]
31: ; preds = %17, %10, %28
br label %57
32: ; preds = %28, %28
%33 = icmp eq i8* %7, %5
%34 = select i1 %33, i64 0, i64 -2
%35 = getelementptr i8, i8* %7, i64 %34
br label %36
36: ; preds = %36, %32
%37 = phi i8* [ %35, %32 ], [ %42, %36 ]
%38 = load i8, i8* %37
%39 = icmp ne i8 %38, 47
%40 = icmp ne i8* %37, %5
%41 = select i1 %39, i1 %40, i1 false
%42 = getelementptr inbounds i8, i8* %37, i64 -1
br i1 %41, label %36, label %43
43: ; preds = %36
%44 = icmp eq i8 %38, 47
%45 = zext i1 %44 to i64
%46 = getelementptr i8, i8* %37, i64 %45
store i8 %30, i8* %46
%47 = icmp eq i8 %30, 0
br i1 %47, label %67, label %48
48: ; preds = %43
%49 = getelementptr inbounds i8, i8* %7, i64 3
br label %50
50: ; preds = %48, %50
%51 = phi i8* [ %49, %48 ], [ %55, %50 ]
%52 = phi i8* [ %46, %48 ], [ %53, %50 ]
%53 = getelementptr inbounds i8, i8* %52, i64 1
%54 = load i8, i8* %51
%55 = getelementptr inbounds i8, i8* %51, i64 1
store i8 %54, i8* %53
%56 = icmp eq i8 %54, 0
br i1 %56, label %67, label %50
57: ; preds = %31, %60
%58 = phi i8 [ %62, %60 ], [ %11, %31 ]
%59 = phi i8* [ %61, %60 ], [ %7, %31 ]
switch i8 %58, label %60 [
i8 0, label %63
i8 47, label %63
]
60: ; preds = %57
%61 = getelementptr inbounds i8, i8* %59, i64 1
%62 = load i8, i8* %61
br label %57
63: ; preds = %57, %57
%64 = icmp eq i8 %58, 47
%65 = zext i1 %64 to i64
%66 = getelementptr i8, i8* %59, i64 %65
br label %67
67: ; preds = %50, %63, %43
%68 = phi i8* [ %46, %43 ], [ %66, %63 ], [ %46, %50 ]
br label %6
69: ; preds = %10
%70 = icmp eq i8* %7, %5
br i1 %70, label %76, label %71
71: ; preds = %69
%72 = getelementptr inbounds i8, i8* %7, i64 -1
%73 = load i8, i8* %72
%74 = icmp eq i8 %73, 47
br i1 %74, label %75, label %76
75: ; preds = %71
store i8 0, i8* %72
br label %76
76: ; preds = %75, %71, %69
ret void
}