int manacher(const char *str) {
  int i;
  int mx = 0, id = 0;
  int len = strlen(str);
  int src_len = 2 * len + 2;
  char *src = (char *)malloc(src_len + 1);
  int *pal = (int *)malloc(src_len + 1);
  memset(pal, 0, src_len + 1);
  src[0] = '$';
  for (i = 0; i < len; i++) {
    src[1 + 2 * i] = '#';
    src[2 + 2 * i] = str[i];
  }
  src[1 + 2 * len] = '#';
  src[src_len] = '\0';
  for (i = 1; i < src_len; i++) {
    if (mx > i)
      pal[i] = ({
        const typeof(pal[2 * id - 1]) __x = (pal[2 * id - 1]);
        const typeof(mx - i) __y = (mx - i);
        (void)(&__x == &__y);
        __x < __y ? __x : __y;
      });
    else
      pal[i] = 1;
    while (src[i + pal[i]] == src[i - pal[i]])
      pal[i]++;
    if (mx < pal[i] + i) {
      mx = pal[i] + 1;
      id = i;
    }
  }
  return find_max_int(pal, src_len + 1) - 1;
}


x86 assembly (clang, -O0):
<manacher>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
shl    $0x1,%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rdi
call   1050 <malloc@plt>
mov    %rax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rdi
call   1050 <malloc@plt>
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rdi
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rdx
xor    %esi,%esi
call   1040 <memset@plt>
mov    -0x28(%rbp),%rax
movb   $0x24,(%rax)
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1204 <manacher+0xc4>
mov    -0x28(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x23,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11b8 <manacher+0x78>
mov    -0x28(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x23,(%rax,%rcx,1)
mov    -0x28(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x1,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    133f <manacher+0x1ff>
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    1298 <manacher+0x158>
mov    -0x30(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%eax
sub    -0xc(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1279 <manacher+0x139>
mov    -0x34(%rbp),%eax
mov    %eax,-0x40(%rbp)
jmp    127f <manacher+0x13f>
mov    -0x38(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%edx
mov    -0x30(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    12a7 <manacher+0x167>
mov    -0x30(%rbp),%rax
movslq -0xc(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    12ac <manacher+0x16c>
mov    -0x28(%rbp),%rax
mov    -0xc(%rbp),%ecx
mov    -0x30(%rbp),%rdx
movslq -0xc(%rbp),%rsi
add    (%rdx,%rsi,4),%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x28(%rbp),%rcx
mov    -0xc(%rbp),%edx
mov    -0x30(%rbp),%rsi
movslq -0xc(%rbp),%rdi
sub    (%rsi,%rdi,4),%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    12fc <manacher+0x1bc>
mov    -0x30(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
add    $0x1,%edx
mov    %edx,(%rax,%rcx,4)
jmp    12ac <manacher+0x16c>
mov    -0x10(%rbp),%eax
mov    -0x30(%rbp),%rcx
movslq -0xc(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
add    -0xc(%rbp),%ecx
cmp    %ecx,%eax
jge    132c <manacher+0x1ec>
mov    -0x30(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    1331 <manacher+0x1f1>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    122b <manacher+0xeb>
mov    -0x30(%rbp),%rdi
mov    -0x1c(%rbp),%esi
add    $0x1,%esi
mov    $0x0,%al
call   1060 <find_max_int@plt>
sub    $0x1,%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<manacher>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%rbp
call   1030 <strlen@plt>
mov    %rax,%r15
add    %eax,%eax
mov    %eax,(%rsp)
lea    0x2(%r15,%r15,1),%r13d
lea    0x3(%r15,%r15,1),%eax
mov    %eax,0x4(%rsp)
movslq %eax,%r12
mov    %r12,%rdi
call   1050 <malloc@plt>
mov    %rax,%r14
mov    $0x1,%edi
mov    %r12,%rsi
call   1040 <calloc@plt>
movb   $0x24,(%r14)
test   %r15d,%r15d
jle    1209 <manacher+0xc9>
mov    %r15d,%ecx
cmp    $0x10,%rcx
jae    119a <manacher+0x5a>
xor    %edx,%edx
jmp    11f0 <manacher+0xb0>
mov    %r15d,%esi
and    $0xf,%esi
mov    %rcx,%rdx
sub    %rsi,%rdx
xor    %edi,%edi
movdqa 0xe50(%rip),%xmm0
movq   0x0(%rbp,%rdi,1),%xmm1
movq   0x8(%rbp,%rdi,1),%xmm2
movdqa %xmm0,%xmm3
punpcklbw %xmm1,%xmm3
movdqu %xmm3,0x1(%r14,%rdi,2)
movdqa %xmm0,%xmm1
punpcklbw %xmm2,%xmm1
movdqu %xmm1,0x11(%r14,%rdi,2)
add    $0x10,%rdi
cmp    %rdi,%rdx
jne    11b0 <manacher+0x70>
test   %rsi,%rsi
je     1209 <manacher+0xc9>
nopl   0x0(%rax,%rax,1)
movb   $0x23,0x1(%r14,%rdx,2)
movzbl 0x0(%rbp,%rdx,1),%ebx
mov    %bl,0x2(%r14,%rdx,2)
add    $0x1,%rdx
cmp    %rdx,%rcx
jne    11f0 <manacher+0xb0>
movslq (%rsp),%rcx
or     $0x1,%rcx
movb   $0x23,(%r14,%rcx,1)
movslq %r13d,%rcx
movb   $0x0,(%r14,%rcx,1)
test   %r15d,%r15d
js     12d0 <manacher+0x190>
cmp    $0x3,%r13d
mov    $0x2,%r8d
cmovge %r13d,%r8d
add    $0x1,%r14
mov    $0x1,%esi
xor    %r10d,%r10d
xor    %r11d,%r11d
xor    %r9d,%r9d
nopw   0x0(%rax,%rax,1)
movslq %r11d,%rbp
mov    $0x1,%ecx
cmp    %rbp,%rsi
jge    1272 <manacher+0x132>
lea    (%r9,%r9,1),%ecx
movslq %ecx,%rcx
mov    -0x4(%rax,%rcx,4),%ebp
mov    %r11d,%ecx
sub    %esi,%ecx
cmp    %ecx,%ebp
cmovl  %ebp,%ecx
movslq %ecx,%rcx
lea    (%r14,%rcx,1),%rbx
mov    %r14,%rbp
sub    %rcx,%rbp
neg    %ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl (%rbx),%edx
add    $0xffffffff,%ecx
add    $0x1,%rbx
lea    -0x1(%rbp),%rdi
cmp    0x0(%rbp),%dl
mov    %rdi,%rbp
je     1290 <manacher+0x150>
mov    %ecx,%edx
not    %edx
mov    %r10d,%edi
sub    %ecx,%edi
mov    %edx,(%rax,%rsi,4)
neg    %ecx
cmp    %edi,%r11d
cmovl  %esi,%r9d
cmovl  %ecx,%r11d
add    $0x1,%rsi
add    $0x1,%r10d
add    $0x1,%r14
cmp    %r8,%rsi
jne    1250 <manacher+0x110>
mov    %rax,%rdi
mov    0x4(%rsp),%esi
xor    %eax,%eax
call   1060 <find_max_int@plt>
add    $0xffffffff,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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