int skip_item(const unsigned char *p_cInDat, unsigned int iInLen,
              unsigned int iPath, const unsigned char **pp_cOutDat,
              unsigned int *l_out) {
  unsigned int iNumTag = 0;
  unsigned int iLengthLen = 0;
  const unsigned char *p_cDat = p_cInDat;
  const unsigned char *p_cEnd = p_cInDat + iInLen - 1;
  unsigned int iIndex, j;
  unsigned int l_tag;
  unsigned int l_len;
  for (iIndex = 1; iIndex < iPath; iIndex++) {
    if ((*p_cDat == 0) && (*(p_cDat + 1) == 0)) {
      p_cDat += 2;
      while ((*p_cDat == 0) && (p_cDat <= p_cEnd)) {
        p_cDat++;
      }
    } else {
      iNumTag = *p_cDat & 0x1F;
      if (iNumTag == 0x1F) {
        iNumTag = 0;
        l_tag = 0;
        do {
          p_cDat++;
          l_tag++;
          if (l_tag > 4)
            return (-2);
          iNumTag = (iNumTag << 7) | (*p_cDat & 0x7F);
        } while ((*p_cDat & 0x80) && (p_cDat < p_cEnd));
      }
      if (p_cDat > p_cEnd)
        return (-4);
      p_cDat++;
      iLengthLen = l_len = (unsigned int)*p_cDat;
      if (l_len & 0x80) {
        if ((l_len &= 0x7F) > 4)
          return (-3);
        iLengthLen = 0;
        for (j = 0; j < l_len; j++) {
          if (p_cDat >= p_cEnd) {
            return (-4);
          } else {
            p_cDat++;
            iLengthLen = (iLengthLen << 8) | *p_cDat;
          }
        }
      }
      p_cDat = p_cDat + iLengthLen + 1;
      if (p_cDat > p_cEnd)
        return (-5);
    }
  }
  *pp_cOutDat = p_cDat;
  *l_out = iInLen - (unsigned int)(*pp_cOutDat - p_cInDat);
  return (0);
}


x86 assembly (clang, -O0):
<skip_item>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x40(%rbp)
movl   $0x1,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x18(%rbp),%eax
jae    1375 <skip_item+0x275>
mov    -0x38(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
jne    11c7 <skip_item+0xc7>
mov    -0x38(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
jne    11c7 <skip_item+0xc7>
mov    -0x38(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x51(%rbp)
jne    11a1 <skip_item+0xa1>
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
setbe  %al
mov    %al,-0x51(%rbp)
mov    -0x51(%rbp),%al
test   $0x1,%al
jne    11b1 <skip_item+0xb1>
jmp    11c2 <skip_item+0xc2>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    117e <skip_item+0x7e>
jmp    1362 <skip_item+0x262>
mov    -0x38(%rbp),%rax
movzbl (%rax),%eax
and    $0x1f,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x1f,-0x2c(%rbp)
jne    1265 <skip_item+0x165>
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x4,-0x4c(%rbp)
jbe    1217 <skip_item+0x117>
movl   $0xfffffffe,-0x4(%rbp)
jmp    13a0 <skip_item+0x2a0>
mov    -0x2c(%rbp),%eax
shl    $0x7,%eax
mov    -0x38(%rbp),%rcx
movzbl (%rcx),%ecx
and    $0x7f,%ecx
or     %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x38(%rbp),%rax
movzbl (%rax),%ecx
and    $0x80,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x52(%rbp)
je     1255 <skip_item+0x155>
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
setb   %al
mov    %al,-0x52(%rbp)
mov    -0x52(%rbp),%al
test   $0x1,%al
jne    11ec <skip_item+0xec>
jmp    1265 <skip_item+0x165>
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jbe    127f <skip_item+0x17f>
movl   $0xfffffffc,-0x4(%rbp)
jmp    13a0 <skip_item+0x2a0>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x50(%rbp)
mov    %eax,-0x30(%rbp)
mov    -0x50(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     1331 <skip_item+0x231>
mov    -0x50(%rbp),%eax
and    $0x7f,%eax
mov    %eax,-0x50(%rbp)
cmp    $0x4,%eax
jbe    12c7 <skip_item+0x1c7>
movl   $0xfffffffd,-0x4(%rbp)
jmp    13a0 <skip_item+0x2a0>
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x50(%rbp),%eax
jae    132c <skip_item+0x22c>
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jb     12fb <skip_item+0x1fb>
movl   $0xfffffffc,-0x4(%rbp)
jmp    13a0 <skip_item+0x2a0>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
shl    $0x8,%eax
mov    -0x38(%rbp),%rcx
movzbl (%rcx),%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
jmp    131e <skip_item+0x21e>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    12d5 <skip_item+0x1d5>
jmp    1331 <skip_item+0x231>
mov    -0x38(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    %rcx,%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jbe    135d <skip_item+0x25d>
movl   $0xfffffffb,-0x4(%rbp)
jmp    13a0 <skip_item+0x2a0>
jmp    1362 <skip_item+0x262>
jmp    1367 <skip_item+0x267>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1145 <skip_item+0x45>
mov    -0x38(%rbp),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x10(%rbp),%rdx
sub    %rdx,%rax
sub    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<skip_item>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rdi,%rbx
cmp    $0x2,%edx
jb     129d <skip_item+0x19d>
mov    %esi,%eax
lea    (%rdi,%rax,1),%r9
add    $0xffffffffffffffff,%r9
mov    $0x1,%r10d
mov    %rdi,%rbx
nopw   0x0(%rax,%rax,1)
mov    (%rbx),%al
test   %al,%al
je     1180 <skip_item+0x80>
not    %al
test   $0x1f,%al
jne    1186 <skip_item+0x86>
lea    0x1(%rbx),%r11
cmpb   $0x0,0x1(%rbx)
jns    1189 <skip_item+0x89>
cmp    %r9,%r11
jae    1189 <skip_item+0x89>
lea    0x2(%rbx),%r11
cmpb   $0x0,0x2(%rbx)
jns    1189 <skip_item+0x89>
cmp    %r9,%r11
jae    1189 <skip_item+0x89>
lea    0x3(%rbx),%r11
cmpb   $0x0,0x3(%rbx)
jns    1189 <skip_item+0x89>
cmp    %r9,%r11
jae    1189 <skip_item+0x89>
lea    0x4(%rbx),%r11
cmpb   $0x0,0x4(%rbx)
jns    1189 <skip_item+0x89>
cmp    %r9,%r11
jae    1189 <skip_item+0x89>
jmp    12c0 <skip_item+0x1c0>
nopl   (%rax)
cmpb   $0x0,0x1(%rbx)
je     11fc <skip_item+0xfc>
mov    %rbx,%r11
mov    $0xfffffffc,%eax
cmp    %r9,%r11
ja     12a9 <skip_item+0x1a9>
movzbl 0x1(%r11),%ebx
test   $0x80,%bl
jne    11b0 <skip_item+0xb0>
mov    %ebx,%r14d
jmp    1280 <skip_item+0x180>
nopl   0x0(%rax)
and    $0x7f,%ebx
cmp    $0x4,%ebx
ja     12b9 <skip_item+0x1b9>
test   %ebx,%ebx
je     11f4 <skip_item+0xf4>
lea    0x1(%r11),%r14
cmp    %r14,%r9
cmova  %r9,%r14
mov    %r11,%rbp
not    %rbp
add    %r14,%rbp
lea    -0x1(%rbx),%r15d
cmp    %r15,%rbp
jbe    12a9 <skip_item+0x1a9>
movzbl 0x2(%r11),%r14d
cmp    $0x1,%ebx
jne    1227 <skip_item+0x127>
add    $0x1,%r11
jmp    1280 <skip_item+0x180>
xor    %r14d,%r14d
jmp    1280 <skip_item+0x180>
add    $0x2,%rbx
mov    %rbx,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0x1(%rax),%rbx
cmpb   $0x0,(%rax)
jne    1221 <skip_item+0x121>
cmp    %r9,%rax
mov    %rbx,%rax
jbe    1210 <skip_item+0x110>
add    $0xffffffffffffffff,%rbx
jmp    1290 <skip_item+0x190>
cmp    %r15,%rbp
jbe    12a9 <skip_item+0x1a9>
mov    %r14d,%r12d
shl    $0x8,%r12d
movzbl 0x3(%r11),%r14d
or     %r12d,%r14d
cmp    $0x2,%ebx
jne    1246 <skip_item+0x146>
add    $0x2,%r11
jmp    1280 <skip_item+0x180>
cmp    %r15,%rbp
jbe    12a9 <skip_item+0x1a9>
mov    %r14d,%r12d
shl    $0x8,%r12d
movzbl 0x4(%r11),%r14d
or     %r12d,%r14d
cmp    $0x3,%ebx
jne    1265 <skip_item+0x165>
add    $0x3,%r11
jmp    1280 <skip_item+0x180>
cmp    %r15,%rbp
jbe    12a9 <skip_item+0x1a9>
shl    $0x8,%r14d
movzbl 0x5(%r11),%eax
add    $0x4,%r11
or     %eax,%r14d
nopw   0x0(%rax,%rax,1)
mov    %r14d,%eax
lea    (%r11,%rax,1),%rbx
add    $0x2,%rbx
cmp    %r9,%rbx
ja     12b2 <skip_item+0x1b2>
add    $0x1,%r10d
cmp    %edx,%r10d
jne    1130 <skip_item+0x30>
mov    %rbx,(%rcx)
sub    %ebx,%edi
add    %esi,%edi
mov    %edi,(%r8)
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0xfffffffb,%eax
jmp    12a9 <skip_item+0x1a9>
mov    $0xfffffffd,%eax
jmp    12a9 <skip_item+0x1a9>
mov    $0xfffffffe,%eax
jmp    12a9 <skip_item+0x1a9>

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

LLVM IR (-O2):
define i32 @skip_item(i8* %0, i32 %1, i32 %2, i8** nocapture writeonly %3, i32* nocapture writeonly %4) {
%6 = ptrtoint i8* %0 to i64
%7 = zext i32 %1 to i64
%8 = getelementptr inbounds i8, i8* %0, i64 %7
%9 = getelementptr inbounds i8, i8* %8, i64 -1
%10 = icmp ugt i32 %2, 1
br i1 %10, label %11, label %123
11: ; preds = %5
%12 = add i64 %6, %7
%13 = add i64 %12, -1
br label %14
14: ; preds = %11, %117
%15 = phi i32 [ %119, %117 ], [ 1, %11 ]
%16 = phi i8* [ %118, %117 ], [ %0, %11 ]
%17 = load i8, i8* %16
%18 = icmp eq i8 %17, 0
br i1 %18, label %19, label %32
19: ; preds = %14
%20 = getelementptr inbounds i8, i8* %16, i64 1
%21 = load i8, i8* %20
%22 = icmp eq i8 %21, 0
br i1 %22, label %23, label %59
23: ; preds = %19
%24 = getelementptr inbounds i8, i8* %16, i64 2
br label %25
25: ; preds = %25, %23
%26 = phi i8* [ %24, %23 ], [ %31, %25 ]
%27 = load i8, i8* %26
%28 = icmp eq i8 %27, 0
%29 = icmp ule i8* %26, %9
%30 = select i1 %28, i1 %29, i1 false
%31 = getelementptr inbounds i8, i8* %26, i64 1
br i1 %30, label %25, label %117
32: ; preds = %14
%33 = and i8 %17, 31
%34 = icmp eq i8 %33, 31
br i1 %34, label %35, label %59
35: ; preds = %32
%36 = getelementptr inbounds i8, i8* %16, i64 1
%37 = load i8, i8* %36
%38 = icmp slt i8 %37, 0
%39 = icmp ult i8* %36, %9
%40 = select i1 %38, i1 %39, i1 false
br i1 %40, label %41, label %59
41: ; preds = %35
%42 = getelementptr inbounds i8, i8* %16, i64 2
%43 = load i8, i8* %42
%44 = icmp slt i8 %43, 0
%45 = icmp ult i8* %42, %9
%46 = select i1 %44, i1 %45, i1 false
br i1 %46, label %47, label %59
47: ; preds = %41
%48 = getelementptr inbounds i8, i8* %16, i64 3
%49 = load i8, i8* %48
%50 = icmp slt i8 %49, 0
%51 = icmp ult i8* %48, %9
%52 = select i1 %50, i1 %51, i1 false
br i1 %52, label %53, label %59
53: ; preds = %47
%54 = getelementptr inbounds i8, i8* %16, i64 4
%55 = load i8, i8* %54
%56 = icmp slt i8 %55, 0
%57 = icmp ult i8* %54, %9
%58 = select i1 %56, i1 %57, i1 false
br i1 %58, label %129, label %59
59: ; preds = %35, %41, %47, %53, %19, %32
%60 = phi i8* [ %16, %32 ], [ %16, %19 ], [ %36, %35 ], [ %42, %41 ], [ %48, %47 ], [ %54, %53 ]
%61 = ptrtoint i8* %60 to i64
%62 = icmp ugt i8* %60, %9
br i1 %62, label %129, label %63
63: ; preds = %59
%64 = getelementptr inbounds i8, i8* %60, i64 1
%65 = load i8, i8* %64
%66 = zext i8 %65 to i32
%67 = and i32 %66, 128
%68 = icmp eq i32 %67, 0
br i1 %68, label %110, label %69
69: ; preds = %63
%70 = and i32 %66, 127
%71 = icmp ugt i32 %70, 4
br i1 %71, label %129, label %72
72: ; preds = %69
%73 = icmp eq i32 %70, 0
br i1 %73, label %110, label %74
74: ; preds = %72
%75 = add i64 %61, 1
%76 = call i64 @llvm.umax.i64(i64 %13, i64 %75)
%77 = xor i64 %61, -1
%78 = add i64 %76, %77
%79 = add nsw i32 %70, -1
%80 = zext i32 %79 to i64
%81 = icmp ugt i64 %78, %80
br i1 %81, label %82, label %129
82: ; preds = %74
%83 = getelementptr inbounds i8, i8* %60, i64 2
%84 = load i8, i8* %83
%85 = zext i8 %84 to i32
%86 = icmp eq i32 %70, 1
br i1 %86, label %110, label %87
87: ; preds = %82
br i1 %81, label %88, label %129
88: ; preds = %87
%89 = getelementptr inbounds i8, i8* %60, i64 3
%90 = shl nuw nsw i32 %85, 8
%91 = load i8, i8* %89
%92 = zext i8 %91 to i32
%93 = or i32 %90, %92
%94 = icmp eq i32 %70, 2
br i1 %94, label %110, label %95
95: ; preds = %88
br i1 %81, label %96, label %129
96: ; preds = %95
%97 = getelementptr inbounds i8, i8* %60, i64 4
%98 = shl nuw nsw i32 %93, 8
%99 = load i8, i8* %97
%100 = zext i8 %99 to i32
%101 = or i32 %98, %100
%102 = icmp eq i32 %70, 3
br i1 %102, label %110, label %103
103: ; preds = %96
br i1 %81, label %104, label %129
104: ; preds = %103
%105 = getelementptr inbounds i8, i8* %60, i64 5
%106 = shl nuw i32 %101, 8
%107 = load i8, i8* %105
%108 = zext i8 %107 to i32
%109 = or i32 %106, %108
br label %110
110: ; preds = %82, %88, %96, %104, %72, %63
%111 = phi i32 [ %66, %63 ], [ 0, %72 ], [ %85, %82 ], [ %93, %88 ], [ %101, %96 ], [ %109, %104 ]
%112 = phi i8* [ %60, %63 ], [ %60, %72 ], [ %64, %82 ], [ %83, %88 ], [ %89, %96 ], [ %97, %104 ]
%113 = zext i32 %111 to i64
%114 = getelementptr inbounds i8, i8* %112, i64 2
%115 = getelementptr inbounds i8, i8* %114, i64 %113
%116 = icmp ugt i8* %115, %9
br i1 %116, label %129, label %117
117: ; preds = %25, %110
%118 = phi i8* [ %115, %110 ], [ %26, %25 ]
%119 = add nuw i32 %15, 1
%120 = icmp eq i32 %119, %2
br i1 %120, label %121, label %14
121: ; preds = %117
%122 = ptrtoint i8* %118 to i64
br label %123
123: ; preds = %121, %5
%124 = phi i64 [ %122, %121 ], [ %6, %5 ]
%125 = phi i8* [ %118, %121 ], [ %0, %5 ]
store i8* %125, i8** %3
%126 = sub i64 %6, %124
%127 = trunc i64 %126 to i32
%128 = add i32 %127, %1
store i32 %128, i32* %4
br label %129
129: ; preds = %110, %69, %59, %53, %74, %87, %95, %103, %123
%130 = phi i32 [ 0, %123 ], [ -4, %103 ], [ -4, %95 ], [ -4, %87 ], [ -4, %74 ], [ -5, %110 ], [ -3, %69 ], [ -4, %59 ], [ -2, %53 ]
ret i32 %130
}