void InsertNode(int r, int lson[], int rson[], int dad[], int *match_position,
                int *match_length, unsigned char text_buf[]) {
  int i, p, cmp;
  unsigned char *key;
  cmp = 1;
  key = &text_buf[r];
  p = 4096 + 1 + key[0];
  rson[r] = lson[r] = 4096;
  *match_length = 0;
  for (;;) {
    if (cmp >= 0) {
      if (rson[p] != 4096)
        p = rson[p];
      else {
        rson[p] = r;
        dad[r] = p;
        return;
      }
    } else {
      if (lson[p] != 4096)
        p = lson[p];
      else {
        lson[p] = r;
        dad[r] = p;
        return;
      }
    }
    for (i = 1; i < 18; i++)
      if ((cmp = key[i] - text_buf[p + i]) != 0)
        break;
    if (i > *match_length) {
      *match_position = p;
      if ((*match_length = i) >= 18)
        break;
    }
  }
  dad[r] = dad[p];
  lson[r] = lson[p];
  rson[r] = rson[p];
  dad[lson[p]] = r;
  dad[rson[p]] = r;
  if (rson[dad[p]] == p)
    rson[dad[p]] = r;
  else
    lson[dad[p]] = r;
  dad[p] = 4096;
}


x86 assembly (clang, -O0):
<InsertNode>:
push   %rbp
mov    %rsp,%rbp
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x1,-0x3c(%rbp)
mov    0x10(%rbp),%rax
movslq -0x4(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
movzbl (%rax),%eax
add    $0x1001,%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x4(%rbp),%rcx
movl   $0x1000,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x4(%rbp),%rcx
movl   $0x1000,(%rax,%rcx,4)
mov    -0x30(%rbp),%rax
movl   $0x0,(%rax)
cmpl   $0x0,-0x3c(%rbp)
jl     11c4 <InsertNode+0xc4>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
cmpl   $0x1000,(%rax,%rcx,4)
je     119e <InsertNode+0x9e>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x38(%rbp)
jmp    11bf <InsertNode+0xbf>
mov    -0x4(%rbp),%edx
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%edx
mov    -0x20(%rbp),%rax
movslq -0x4(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1369 <InsertNode+0x269>
jmp    1212 <InsertNode+0x112>
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
cmpl   $0x1000,(%rax,%rcx,4)
je     11ec <InsertNode+0xec>
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x38(%rbp)
jmp    120d <InsertNode+0x10d>
mov    -0x4(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%edx
mov    -0x20(%rbp),%rax
movslq -0x4(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1369 <InsertNode+0x269>
jmp    1212 <InsertNode+0x112>
movl   $0x1,-0x34(%rbp)
cmpl   $0x12,-0x34(%rbp)
jge    1266 <InsertNode+0x166>
mov    -0x48(%rbp),%rax
movslq -0x34(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    0x10(%rbp),%rcx
mov    -0x38(%rbp),%edx
add    -0x34(%rbp),%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
mov    %eax,-0x3c(%rbp)
cmp    $0x0,%eax
je     1253 <InsertNode+0x153>
jmp    1266 <InsertNode+0x166>
jmp    1258 <InsertNode+0x158>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1219 <InsertNode+0x119>
mov    -0x34(%rbp),%eax
mov    -0x30(%rbp),%rcx
cmp    (%rcx),%eax
jle    129a <InsertNode+0x19a>
mov    -0x38(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x34(%rbp),%eax
mov    -0x30(%rbp),%rcx
mov    %eax,(%rcx)
cmp    $0x12,%eax
jl     1295 <InsertNode+0x195>
jmp    129f <InsertNode+0x19f>
jmp    129a <InsertNode+0x19a>
jmp    116c <InsertNode+0x6c>
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x20(%rbp),%rax
movslq -0x4(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x4(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x18(%rbp),%rax
movslq -0x4(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x4(%rbp),%edx
mov    -0x20(%rbp),%rax
mov    -0x10(%rbp),%rcx
movslq -0x38(%rbp),%rsi
movslq (%rcx,%rsi,4),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x4(%rbp),%edx
mov    -0x20(%rbp),%rax
mov    -0x18(%rbp),%rcx
movslq -0x38(%rbp),%rsi
movslq (%rcx,%rsi,4),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq -0x38(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x38(%rbp),%eax
jne    1344 <InsertNode+0x244>
mov    -0x4(%rbp),%edx
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq -0x38(%rbp),%rsi
movslq (%rcx,%rsi,4),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    135a <InsertNode+0x25a>
mov    -0x4(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq -0x38(%rbp),%rsi
movslq (%rcx,%rsi,4),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movl   $0x1000,(%rax,%rcx,4)
pop    %rbp
ret

x86 assembly (clang, -O2):
<InsertNode>:
push   %rbp
push   %r15
push   %r14
push   %rbx
mov    0x28(%rsp),%r14
movslq %edi,%r10
movzbl (%r14,%r10,1),%edi
add    $0x1001,%edi
movl   $0x1000,(%rsi,%r10,4)
movl   $0x1000,(%rdx,%r10,4)
movl   $0x0,(%r9)
mov    $0x1,%ebp
xor    %r11d,%r11d
jmp    1149 <InsertNode+0x49>
nopw   0x0(%rax,%rax,1)
cmp    %r11d,%eax
jg     1311 <InsertNode+0x211>
movslq %edi,%rax
test   %ebp,%ebp
js     1160 <InsertNode+0x60>
mov    (%rdx,%rax,4),%edi
cmp    $0x1000,%edi
jne    116f <InsertNode+0x6f>
jmp    131f <InsertNode+0x21f>
mov    (%rsi,%rax,4),%edi
cmp    $0x1000,%edi
je     1325 <InsertNode+0x225>
movslq %edi,%r15
movzbl 0x1(%r14,%r10,1),%ebp
movzbl 0x1(%r15,%r14,1),%ebx
mov    $0x1,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x2(%r14,%r10,1),%ebp
movzbl 0x2(%r15,%r14,1),%ebx
mov    $0x2,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x3(%r14,%r10,1),%ebp
movzbl 0x3(%r15,%r14,1),%ebx
mov    $0x3,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x4(%r14,%r10,1),%ebp
movzbl 0x4(%r15,%r14,1),%ebx
mov    $0x4,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x5(%r14,%r10,1),%ebp
movzbl 0x5(%r15,%r14,1),%ebx
mov    $0x5,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x6(%r14,%r10,1),%ebp
movzbl 0x6(%r15,%r14,1),%ebx
mov    $0x6,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x7(%r14,%r10,1),%ebp
movzbl 0x7(%r15,%r14,1),%ebx
mov    $0x7,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x8(%r14,%r10,1),%ebp
movzbl 0x8(%r15,%r14,1),%ebx
mov    $0x8,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x9(%r14,%r10,1),%ebp
movzbl 0x9(%r15,%r14,1),%ebx
mov    $0x9,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0xa(%r14,%r10,1),%ebp
movzbl 0xa(%r15,%r14,1),%ebx
mov    $0xa,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0xb(%r14,%r10,1),%ebp
movzbl 0xb(%r15,%r14,1),%ebx
mov    $0xb,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0xc(%r14,%r10,1),%ebp
movzbl 0xc(%r15,%r14,1),%ebx
mov    $0xc,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0xd(%r14,%r10,1),%ebp
movzbl 0xd(%r15,%r14,1),%ebx
mov    $0xd,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0xe(%r14,%r10,1),%ebp
movzbl 0xe(%r15,%r14,1),%ebx
mov    $0xe,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0xf(%r14,%r10,1),%ebp
movzbl 0xf(%r15,%r14,1),%ebx
mov    $0xf,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x10(%r14,%r10,1),%ebp
movzbl 0x10(%r15,%r14,1),%ebx
mov    $0x10,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
movzbl 0x11(%r14,%r10,1),%ebp
movzbl 0x11(%r15,%r14,1),%ebx
mov    $0x11,%eax
sub    %ebx,%ebp
jne    1140 <InsertNode+0x40>
jmp    1334 <InsertNode+0x234>
mov    %edi,(%r8)
mov    %eax,(%r9)
mov    %eax,%r11d
jmp    1149 <InsertNode+0x49>
mov    %r10d,(%rdx,%rax,4)
jmp    1329 <InsertNode+0x229>
mov    %r10d,(%rsi,%rax,4)
mov    %eax,(%rcx,%r10,4)
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %edi,(%r8)
movl   $0x12,(%r9)
mov    (%rcx,%r15,4),%eax
mov    %eax,(%rcx,%r10,4)
mov    (%rsi,%r15,4),%eax
mov    %eax,(%rsi,%r10,4)
mov    (%rdx,%r15,4),%eax
mov    %eax,(%rdx,%r10,4)
movslq (%rsi,%r15,4),%rax
mov    %r10d,(%rcx,%rax,4)
movslq (%rdx,%r15,4),%rax
mov    %r10d,(%rcx,%rax,4)
movslq (%rcx,%r15,4),%rax
cmp    %edi,(%rdx,%rax,4)
cmove  %rdx,%rsi
mov    %r10d,(%rsi,%rax,4)
movl   $0x1000,(%rcx,%r15,4)
jmp    132d <InsertNode+0x22d>

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

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