int preBmGs(unsigned char *x, int m, int bmGs[]) {
  int *suff, i, j;
  suff = (int *)calloc(sizeof(int), m);
  if (suff == ((void *)0))
    return -1;
  suffixes(x, m, suff);
  for (i = 0; i < m; ++i)
    bmGs[i] = m;
  j = 0;
  for (i = m - 1; i >= -1; --i)
    if (i == -1 || suff[i] == i + 1)
      for (; j < m - 1 - i; ++j)
        if (bmGs[j] == m)
          bmGs[j] = m - 1 - i;
  for (i = 0; i <= m - 2; ++i)
    bmGs[m - 1 - suff[i]] = m - 1 - i;
  free(suff);
  return 0;
}


x86 assembly (clang, -O0):
<preBmGs>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
movslq -0x14(%rbp),%rsi
mov    $0x4,%edi
call   1050 <calloc@plt>
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    116c <preBmGs+0x3c>
movl   $0xffffffff,-0x4(%rbp)
jmp    12b0 <preBmGs+0x180>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x28(%rbp),%rdx
mov    $0x0,%al
call   1040 <suffixes@plt>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11ad <preBmGs+0x7d>
mov    -0x14(%rbp),%edx
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1185 <preBmGs+0x55>
movl   $0x0,-0x30(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0xffffffff,-0x2c(%rbp)
jl     1256 <preBmGs+0x126>
cmpl   $0xffffffff,-0x2c(%rbp)
je     11ea <preBmGs+0xba>
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jne    1243 <preBmGs+0x113>
jmp    11ef <preBmGs+0xbf>
mov    -0x30(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
sub    -0x2c(%rbp),%ecx
cmp    %ecx,%eax
jge    123e <preBmGs+0x10e>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    122b <preBmGs+0xfb>
mov    -0x14(%rbp),%edx
sub    $0x1,%edx
sub    -0x2c(%rbp),%edx
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1230 <preBmGs+0x100>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11ef <preBmGs+0xbf>
jmp    1243 <preBmGs+0x113>
jmp    1248 <preBmGs+0x118>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    11bd <preBmGs+0x8d>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jg     12a0 <preBmGs+0x170>
mov    -0x14(%rbp),%edx
sub    $0x1,%edx
sub    -0x2c(%rbp),%edx
mov    -0x20(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x28(%rbp),%rsi
movslq -0x2c(%rbp),%rdi
sub    (%rsi,%rdi,4),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    125d <preBmGs+0x12d>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<preBmGs>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdx,%r13
mov    %esi,%r15d
mov    %rdi,%r12
movslq %esi,%rsi
mov    $0x4,%edi
call   1050 <calloc@plt>
test   %rax,%rax
je     1180 <preBmGs+0x50>
mov    %rax,%r14
mov    %r12,%rdi
mov    %r15d,%esi
mov    %rax,%rdx
xor    %eax,%eax
call   1040 <suffixes@plt>
test   %r15d,%r15d
jle    129e <preBmGs+0x16e>
mov    %r15d,%eax
cmp    $0x8,%r15d
jae    118a <preBmGs+0x5a>
xor    %ecx,%ecx
jmp    1290 <preBmGs+0x160>
mov    $0xffffffff,%eax
jmp    145f <preBmGs+0x32f>
mov    %eax,%ecx
and    $0xfffffff8,%ecx
movd   %r15d,%xmm0
pshufd $0x0,%xmm0,%xmm0
lea    -0x8(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x3,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x38,%rdi
jae    11ba <preBmGs+0x8a>
xor    %edi,%edi
jmp    1256 <preBmGs+0x126>
and    $0xfffffffffffffff8,%rsi
xor    %edi,%edi
movdqu %xmm0,0x0(%r13,%rdi,4)
movdqu %xmm0,0x10(%r13,%rdi,4)
movdqu %xmm0,0x20(%r13,%rdi,4)
movdqu %xmm0,0x30(%r13,%rdi,4)
movdqu %xmm0,0x40(%r13,%rdi,4)
movdqu %xmm0,0x50(%r13,%rdi,4)
movdqu %xmm0,0x60(%r13,%rdi,4)
movdqu %xmm0,0x70(%r13,%rdi,4)
movdqu %xmm0,0x80(%r13,%rdi,4)
movdqu %xmm0,0x90(%r13,%rdi,4)
movdqu %xmm0,0xa0(%r13,%rdi,4)
movdqu %xmm0,0xb0(%r13,%rdi,4)
movdqu %xmm0,0xc0(%r13,%rdi,4)
movdqu %xmm0,0xd0(%r13,%rdi,4)
movdqu %xmm0,0xe0(%r13,%rdi,4)
movdqu %xmm0,0xf0(%r13,%rdi,4)
add    $0x40,%rdi
add    $0xfffffffffffffff8,%rsi
jne    11c0 <preBmGs+0x90>
test   %rdx,%rdx
je     1284 <preBmGs+0x154>
lea    0x10(,%rdi,4),%rsi
add    %r13,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
nopl   0x0(%rax)
movdqu %xmm0,-0x10(%rsi,%rdi,1)
movdqu %xmm0,(%rsi,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    1270 <preBmGs+0x140>
cmp    %rax,%rcx
je     129e <preBmGs+0x16e>
nopl   0x0(%rax)
mov    %r15d,0x0(%r13,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1290 <preBmGs+0x160>
test   %r15d,%r15d
js     1455 <preBmGs+0x325>
lea    -0x1(%r15),%r8d
movd   %r15d,%xmm0
pshufd $0x0,%xmm0,%xmm0
xor    %ecx,%ecx
xor    %edx,%edx
mov    %r8d,%r10d
jmp    12d9 <preBmGs+0x1a9>
xchg   %ax,%ax
mov    %ecx,%edx
add    $0xffffffff,%r10d
mov    %rcx,%rax
add    $0x1,%rax
cmp    %r15d,%ecx
mov    %rax,%rcx
je     13eb <preBmGs+0x2bb>
cmp    $0xffffffff,%r10d
je     12ec <preBmGs+0x1bc>
mov    %r10d,%eax
lea    0x1(%r10),%esi
cmp    %esi,(%r14,%rax,4)
jne    12c2 <preBmGs+0x192>
mov    %r8d,%esi
sub    %r10d,%esi
cmp    %esi,%edx
jge    12c2 <preBmGs+0x192>
movslq %edx,%rdx
mov    %rcx,%r9
sub    %rdx,%r9
cmp    $0x8,%r9
jae    130d <preBmGs+0x1dd>
mov    %rdx,%rdi
jmp    13dd <preBmGs+0x2ad>
mov    %r9,%r11
and    $0xfffffffffffffff8,%r11
lea    (%r11,%rdx,1),%rdi
lea    0x0(,%rdx,4),%rbx
add    %r13,%rbx
xor    %edx,%edx
jmp    1339 <preBmGs+0x209>
nopw   0x0(%rax,%rax,1)
add    $0x8,%rdx
cmp    %rdx,%r11
je     13b6 <preBmGs+0x286>
movdqu (%rbx,%rdx,4),%xmm1
pcmpeqd %xmm0,%xmm1
movd   %xmm1,%eax
test   $0x1,%al
je     134d <preBmGs+0x21d>
mov    %esi,(%rbx,%rdx,4)
pextrw $0x2,%xmm1,%eax
test   $0x1,%al
je     135a <preBmGs+0x22a>
mov    %esi,0x4(%rbx,%rdx,4)
pextrw $0x4,%xmm1,%eax
test   $0x1,%al
je     1367 <preBmGs+0x237>
mov    %esi,0x8(%rbx,%rdx,4)
pextrw $0x6,%xmm1,%eax
test   $0x1,%al
je     1374 <preBmGs+0x244>
mov    %esi,0xc(%rbx,%rdx,4)
movdqu 0x10(%rbx,%rdx,4),%xmm1
pcmpeqd %xmm0,%xmm1
movd   %xmm1,%eax
test   $0x1,%al
je     138a <preBmGs+0x25a>
mov    %esi,0x10(%rbx,%rdx,4)
pextrw $0x2,%xmm1,%eax
test   $0x1,%al
je     1397 <preBmGs+0x267>
mov    %esi,0x14(%rbx,%rdx,4)
pextrw $0x4,%xmm1,%eax
test   $0x1,%al
je     13a4 <preBmGs+0x274>
mov    %esi,0x18(%rbx,%rdx,4)
pextrw $0x6,%xmm1,%eax
test   $0x1,%al
je     1330 <preBmGs+0x200>
mov    %esi,0x1c(%rbx,%rdx,4)
jmp    1330 <preBmGs+0x200>
mov    %ecx,%edx
cmp    %r11,%r9
jne    13dd <preBmGs+0x2ad>
jmp    12c2 <preBmGs+0x192>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%rdi
cmp    %rdi,%rcx
je     12c0 <preBmGs+0x190>
cmp    %r15d,0x0(%r13,%rdi,4)
jne    13d0 <preBmGs+0x2a0>
mov    %esi,0x0(%r13,%rdi,4)
jmp    13d0 <preBmGs+0x2a0>
cmp    $0x2,%r15d
jl     1455 <preBmGs+0x325>
mov    %r8d,%r9d
movslq %r8d,%rcx
cmp    $0x1,%r8d
jne    1401 <preBmGs+0x2d1>
xor    %edx,%edx
jmp    1440 <preBmGs+0x310>
mov    %r9d,%esi
and    $0xfffffffe,%esi
add    $0xfffffffe,%r15d
xor    %edx,%edx
nopl   (%rax)
lea    0x1(%r15),%edi
movslq (%r14,%rdx,4),%rbx
mov    %rcx,%rax
sub    %rbx,%rax
mov    %edi,0x0(%r13,%rax,4)
movslq 0x4(%r14,%rdx,4),%rax
mov    %rcx,%rdi
sub    %rax,%rdi
mov    %r15d,0x0(%r13,%rdi,4)
add    $0x2,%rdx
add    $0xfffffffe,%r15d
cmp    %rdx,%rsi
jne    1410 <preBmGs+0x2e0>
test   $0x1,%r9b
je     1455 <preBmGs+0x325>
sub    %edx,%r8d
movslq (%r14,%rdx,4),%rax
sub    %rax,%rcx
mov    %r8d,0x0(%r13,%rcx,4)
mov    %r14,%rdi
call   1030 <free@plt>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define i32 @preBmGs(i8* %0, i32 %1, i32* %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32*
%8 = alloca i32*
%9 = alloca i32
%10 = alloca i32
store i8* %0, i8** %5
store i32 %1, i32* %6
store i32* %2, i32** %7
%11 = load i32, i32* %6
%12 = sext i32 %11 to i64
%13 = call i8* @calloc(i64 4, i64 %12)
%14 = bitcast i8* %13 to i32*
store i32* %14, i32** %8
%15 = load i32*, i32** %8
%16 = icmp eq i32* %15, null
br i1 %16, label %17, label %18
17: ; preds = %3
store i32 -1, i32* %4
br label %116
18: ; preds = %3
%19 = load i8*, i8** %5
%20 = load i32, i32* %6
%21 = load i32*, i32** %8
%22 = call i32 (i8*, i32, i32*, ...) bitcast (i32 (...)* @suffixes to i32 (i8*, i32, i32*, ...)*)(i8* %19, i32 %20, i32* %21)
store i32 0, i32* %9
br label %23
23: ; preds = %33, %18
%24 = load i32, i32* %9
%25 = load i32, i32* %6
%26 = icmp slt i32 %24, %25
br i1 %26, label %27, label %36
27: ; preds = %23
%28 = load i32, i32* %6
%29 = load i32*, i32** %7
%30 = load i32, i32* %9
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i32, i32* %29, i64 %31
store i32 %28, i32* %32
br label %33
33: ; preds = %27
%34 = load i32, i32* %9
%35 = add nsw i32 %34, 1
store i32 %35, i32* %9
br label %23
36: ; preds = %23
store i32 0, i32* %10
%37 = load i32, i32* %6
%38 = sub nsw i32 %37, 1
store i32 %38, i32* %9
br label %39
39: ; preds = %85, %36
%40 = load i32, i32* %9
%41 = icmp sge i32 %40, -1
br i1 %41, label %42, label %88
42: ; preds = %39
%43 = load i32, i32* %9
%44 = icmp eq i32 %43, -1
br i1 %44, label %54, label %45
45: ; preds = %42
%46 = load i32*, i32** %8
%47 = load i32, i32* %9
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds i32, i32* %46, i64 %48
%50 = load i32, i32* %49
%51 = load i32, i32* %9
%52 = add nsw i32 %51, 1
%53 = icmp eq i32 %50, %52
br i1 %53, label %54, label %84
54: ; preds = %45, %42
br label %55
55: ; preds = %80, %54
%56 = load i32, i32* %10
%57 = load i32, i32* %6
%58 = sub nsw i32 %57, 1
%59 = load i32, i32* %9
%60 = sub nsw i32 %58, %59
%61 = icmp slt i32 %56, %60
br i1 %61, label %62, label %83
62: ; preds = %55
%63 = load i32*, i32** %7
%64 = load i32, i32* %10
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i32, i32* %63, i64 %65
%67 = load i32, i32* %66
%68 = load i32, i32* %6
%69 = icmp eq i32 %67, %68
br i1 %69, label %70, label %79
70: ; preds = %62
%71 = load i32, i32* %6
%72 = sub nsw i32 %71, 1
%73 = load i32, i32* %9
%74 = sub nsw i32 %72, %73
%75 = load i32*, i32** %7
%76 = load i32, i32* %10
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds i32, i32* %75, i64 %77
store i32 %74, i32* %78
br label %79
79: ; preds = %70, %62
br label %80
80: ; preds = %79
%81 = load i32, i32* %10
%82 = add nsw i32 %81, 1
store i32 %82, i32* %10
br label %55
83: ; preds = %55
br label %84
84: ; preds = %83, %45
br label %85
85: ; preds = %84
%86 = load i32, i32* %9
%87 = add nsw i32 %86, -1
store i32 %87, i32* %9
br label %39
88: ; preds = %39
store i32 0, i32* %9
br label %89
89: ; preds = %110, %88
%90 = load i32, i32* %9
%91 = load i32, i32* %6
%92 = sub nsw i32 %91, 2
%93 = icmp sle i32 %90, %92
br i1 %93, label %94, label %113
94: ; preds = %89
%95 = load i32, i32* %6
%96 = sub nsw i32 %95, 1
%97 = load i32, i32* %9
%98 = sub nsw i32 %96, %97
%99 = load i32*, i32** %7
%100 = load i32, i32* %6
%101 = sub nsw i32 %100, 1
%102 = load i32*, i32** %8
%103 = load i32, i32* %9
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i32, i32* %102, i64 %104
%106 = load i32, i32* %105
%107 = sub nsw i32 %101, %106
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds i32, i32* %99, i64 %108
store i32 %98, i32* %109
br label %110
110: ; preds = %94
%111 = load i32, i32* %9
%112 = add nsw i32 %111, 1
store i32 %112, i32* %9
br label %89
113: ; preds = %89
%114 = load i32*, i32** %8
%115 = bitcast i32* %114 to i8*
store i32 0, i32* %4
br label %116
116: ; preds = %113, %17
%117 = load i32, i32* %4
ret i32 %117
}

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