unsigned short minOfPrevious14_bt(unsigned short *out_rev,
                                  unsigned short *weights, const int x,
                                  const int y, const int z, const int dimx,
                                  const int dimy, const int dimz) {
  int a, b, c;
  unsigned short tmp, min;
  min = out_rev[((y) * (dimx) + (x) + (z) * (dimx) * (dimy))];
  c = z + 1;
  for (b = (y + 1); b >= (y - 1); b--)
    for (a = (x + 1); a >= (x - 1); a--) {
      if ((a >= 0) && (a < dimx) && (b >= 0) && (b < dimy) && (c >= 0) &&
          (c < dimz)) {
        tmp = out_rev[((b) * (dimx) + (a) + (c) * (dimx) * (dimy))] +
              weights[(((b - y) + 1) * (3) + ((a - x) + 1) +
                       ((c - z) + 1) * (3) * (3))];
        if (tmp < min) {
          min = tmp;
        }
      }
    }
  c = z;
  b = y + 1;
  for (a = (x + 1); a >= (x - 1); a--) {
    if ((a >= 0) && (a < dimx) && (b >= 0) && (b < dimy) && (c >= 0) &&
        (c < dimz)) {
      tmp = out_rev[((b) * (dimx) + (a) + (c) * (dimx) * (dimy))] +
            weights[(((b - y) + 1) * (3) + ((a - x) + 1) +
                     ((c - z) + 1) * (3) * (3))];
      if (tmp < min) {
        min = tmp;
      }
    }
  }
  c = z;
  b = y;
  a = x + 1;
  if ((a >= 0) && (a < dimx) && (b >= 0) && (b < dimy) && (c >= 0) &&
      (c < dimz)) {
    tmp = out_rev[((b) * (dimx) + (a) + (c) * (dimx) * (dimy))] +
          weights[(((b - y) + 1) * (3) + ((a - x) + 1) +
                   ((c - z) + 1) * (3) * (3))];
    if (tmp < min) {
      min = tmp;
    }
  }
  if (out_rev[((y) * (dimx) + (x) + (z) * (dimx) * (dimy))] < min) {
    min = tmp;
  }
  return min;
}


x86 assembly (clang, -O0):
<minOfPrevious14_bt>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9d,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
imul   -0x20(%rbp),%ecx
add    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%edx
imul   -0x20(%rbp),%edx
imul   0x10(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,2),%ax
mov    %ax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jl     1263 <minOfPrevious14_bt+0x163>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jl     1250 <minOfPrevious14_bt+0x150>
cmpl   $0x0,-0x24(%rbp)
jl     123d <minOfPrevious14_bt+0x13d>
mov    -0x24(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    123d <minOfPrevious14_bt+0x13d>
cmpl   $0x0,-0x28(%rbp)
jl     123d <minOfPrevious14_bt+0x13d>
mov    -0x28(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    123d <minOfPrevious14_bt+0x13d>
cmpl   $0x0,-0x2c(%rbp)
jl     123d <minOfPrevious14_bt+0x13d>
mov    -0x2c(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    123d <minOfPrevious14_bt+0x13d>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   -0x20(%rbp),%ecx
add    -0x24(%rbp),%ecx
mov    -0x2c(%rbp),%edx
imul   -0x20(%rbp),%edx
imul   0x10(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
mov    -0x10(%rbp),%rcx
mov    -0x28(%rbp),%edx
sub    -0x18(%rbp),%edx
add    $0x1,%edx
imul   $0x3,%edx,%edx
mov    -0x24(%rbp),%esi
sub    -0x14(%rbp),%esi
add    $0x1,%esi
add    %esi,%edx
mov    -0x2c(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   $0x3,%esi,%esi
imul   $0x3,%esi,%esi
add    %esi,%edx
movslq %edx,%rdx
movzwl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %ax,-0x2e(%rbp)
movzwl -0x2e(%rbp),%eax
movzwl -0x30(%rbp),%ecx
cmp    %ecx,%eax
jge    1238 <minOfPrevious14_bt+0x138>
mov    -0x2e(%rbp),%ax
mov    %ax,-0x30(%rbp)
jmp    123d <minOfPrevious14_bt+0x13d>
jmp    1242 <minOfPrevious14_bt+0x142>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1172 <minOfPrevious14_bt+0x72>
jmp    1255 <minOfPrevious14_bt+0x155>
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    1158 <minOfPrevious14_bt+0x58>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jl     1359 <minOfPrevious14_bt+0x259>
cmpl   $0x0,-0x24(%rbp)
jl     1346 <minOfPrevious14_bt+0x246>
mov    -0x24(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1346 <minOfPrevious14_bt+0x246>
cmpl   $0x0,-0x28(%rbp)
jl     1346 <minOfPrevious14_bt+0x246>
mov    -0x28(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    1346 <minOfPrevious14_bt+0x246>
cmpl   $0x0,-0x2c(%rbp)
jl     1346 <minOfPrevious14_bt+0x246>
mov    -0x2c(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1346 <minOfPrevious14_bt+0x246>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   -0x20(%rbp),%ecx
add    -0x24(%rbp),%ecx
mov    -0x2c(%rbp),%edx
imul   -0x20(%rbp),%edx
imul   0x10(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
mov    -0x10(%rbp),%rcx
mov    -0x28(%rbp),%edx
sub    -0x18(%rbp),%edx
add    $0x1,%edx
imul   $0x3,%edx,%edx
mov    -0x24(%rbp),%esi
sub    -0x14(%rbp),%esi
add    $0x1,%esi
add    %esi,%edx
mov    -0x2c(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   $0x3,%esi,%esi
imul   $0x3,%esi,%esi
add    %esi,%edx
movslq %edx,%rdx
movzwl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %ax,-0x2e(%rbp)
movzwl -0x2e(%rbp),%eax
movzwl -0x30(%rbp),%ecx
cmp    %ecx,%eax
jge    1341 <minOfPrevious14_bt+0x241>
mov    -0x2e(%rbp),%ax
mov    %ax,-0x30(%rbp)
jmp    1346 <minOfPrevious14_bt+0x246>
jmp    134b <minOfPrevious14_bt+0x24b>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    127b <minOfPrevious14_bt+0x17b>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jl     1428 <minOfPrevious14_bt+0x328>
mov    -0x24(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1428 <minOfPrevious14_bt+0x328>
cmpl   $0x0,-0x28(%rbp)
jl     1428 <minOfPrevious14_bt+0x328>
mov    -0x28(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    1428 <minOfPrevious14_bt+0x328>
cmpl   $0x0,-0x2c(%rbp)
jl     1428 <minOfPrevious14_bt+0x328>
mov    -0x2c(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1428 <minOfPrevious14_bt+0x328>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
imul   -0x20(%rbp),%ecx
add    -0x24(%rbp),%ecx
mov    -0x2c(%rbp),%edx
imul   -0x20(%rbp),%edx
imul   0x10(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
mov    -0x10(%rbp),%rcx
mov    -0x28(%rbp),%edx
sub    -0x18(%rbp),%edx
add    $0x1,%edx
imul   $0x3,%edx,%edx
mov    -0x24(%rbp),%esi
sub    -0x14(%rbp),%esi
add    $0x1,%esi
add    %esi,%edx
mov    -0x2c(%rbp),%esi
sub    -0x1c(%rbp),%esi
add    $0x1,%esi
imul   $0x3,%esi,%esi
imul   $0x3,%esi,%esi
add    %esi,%edx
movslq %edx,%rdx
movzwl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %ax,-0x2e(%rbp)
movzwl -0x2e(%rbp),%eax
movzwl -0x30(%rbp),%ecx
cmp    %ecx,%eax
jge    1423 <minOfPrevious14_bt+0x323>
mov    -0x2e(%rbp),%ax
mov    %ax,-0x30(%rbp)
jmp    1428 <minOfPrevious14_bt+0x328>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
imul   -0x20(%rbp),%ecx
add    -0x14(%rbp),%ecx
mov    -0x1c(%rbp),%edx
imul   -0x20(%rbp),%edx
imul   0x10(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movzwl (%rax,%rcx,2),%eax
movzwl -0x30(%rbp),%ecx
cmp    %ecx,%eax
jge    145e <minOfPrevious14_bt+0x35e>
mov    -0x2e(%rbp),%ax
mov    %ax,-0x30(%rbp)
movzwl -0x30(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<minOfPrevious14_bt>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rsi,-0x30(%rsp)
mov    0x38(%rsp),%ebx
mov    %r9d,%eax
imul   %ecx,%eax
mov    %r9d,%ebp
imul   %r8d,%ebp
imul   %ebx,%ebp
add    %eax,%ebp
mov    %rbp,-0x20(%rsp)
lea    (%rdx,%rbp,1),%eax
cltq
mov    %rdi,-0x38(%rsp)
movzwl (%rdi,%rax,2),%ebp
mov    %r8,-0x40(%rsp)
lea    0x1(%r8),%r10d
lea    0x1(%rcx),%r8d
lea    0x1(%rdx),%esi
mov    %r10d,%eax
imul   %ebx,%eax
mov    %rdx,-0x18(%rsp)
movslq %edx,%rbx
add    %ecx,%eax
add    $0x1,%eax
imul   %r9d,%eax
lea    (%rbx,%rax,1),%edi
add    $0x1,%edi
mov    %esi,-0x28(%rsp)
movslq %esi,%r15
mov    %r9d,-0x44(%rsp)
movslq %r9d,%r13
mov    $0x1a,%r9d
mov    %bp,-0x46(%rsp)
mov    %ebp,%eax
mov    %r8d,-0x24(%rsp)
mov    %r8d,%r14d
mov    %rcx,-0x8(%rsp)
mov    %r15,-0x10(%rsp)
jmp    11be <minOfPrevious14_bt+0xbe>
cs nopw 0x0(%rax,%rax,1)
nop
lea    -0x1(%r14),%edx
add    $0xfffffffd,%r9d
sub    -0x44(%rsp),%edi
mov    -0x8(%rsp),%rcx
cmp    %ecx,%r14d
mov    %edx,%r14d
mov    -0x10(%rsp),%r15
jl     1238 <minOfPrevious14_bt+0x138>
cmpl   $0xffffffff,-0x40(%rsp)
setl   %dl
cmp    0x38(%rsp),%r14d
setge  %r12b
or     %dl,%r12b
mov    %edi,%r11d
mov    %r9d,%edx
jmp    11f3 <minOfPrevious14_bt+0xf3>
nopw   0x0(%rax,%rax,1)
lea    -0x1(%r15),%rcx
add    $0xffffffff,%edx
add    $0xffffffff,%r11d
cmp    %rbx,%r15
mov    %rcx,%r15
jl     11a0 <minOfPrevious14_bt+0xa0>
test   %r15,%r15
js     11e0 <minOfPrevious14_bt+0xe0>
test   %r14d,%r14d
sets   %cl
cmp    %r13,%r15
setge  %r8b
or     %cl,%r8b
or     %r12b,%r8b
jne    11e0 <minOfPrevious14_bt+0xe0>
cmp    0x40(%rsp),%r10d
jge    11e0 <minOfPrevious14_bt+0xe0>
movslq %r11d,%rcx
movslq %edx,%rbp
mov    -0x30(%rsp),%rsi
movzwl (%rsi,%rbp,2),%ebp
mov    -0x38(%rsp),%rsi
add    (%rsi,%rcx,2),%bp
cmp    %ax,%bp
mov    %ebp,%ecx
cmovae %eax,%ecx
mov    %ecx,%eax
jmp    11e0 <minOfPrevious14_bt+0xe0>
mov    0x38(%rsp),%r8d
cmp    %r8d,-0x24(%rsp)
setl   %dil
mov    -0x40(%rsp),%rsi
test   %esi,%esi
setns  %dl
and    %dil,%dl
cmp    0x40(%rsp),%esi
setl   %r9b
and    %dl,%r9b
mov    %r8d,%edx
imul   %esi,%edx
lea    (%rcx,%rdx,1),%r8d
add    $0x1,%r8d
imul   -0x44(%rsp),%r8d
mov    -0x18(%rsp),%r14
add    %r14d,%r8d
mov    $0x11,%r11d
jmp    12a0 <minOfPrevious14_bt+0x1a0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x1(%r15),%rdx
add    $0xffffffff,%r11d
cmp    %rbx,%r15
mov    %rdx,%r15
jl     12e9 <minOfPrevious14_bt+0x1e9>
cmp    $0xffffffff,%ecx
setge  %r10b
test   %r15,%r15
setns  %dil
cmp    %r13,%r15
setl   %dl
and    %r10b,%dl
and    %dil,%dl
and    %r9b,%dl
cmp    $0x1,%dl
jne    1290 <minOfPrevious14_bt+0x190>
lea    (%r8,%r11,1),%edx
add    $0xfffffff0,%edx
movslq %edx,%rdx
movslq %r11d,%rdi
mov    -0x30(%rsp),%rsi
movzwl (%rsi,%rdi,2),%ebp
mov    -0x38(%rsp),%rsi
add    (%rsi,%rdx,2),%bp
cmp    %ax,%bp
cmovb  %ebp,%eax
jmp    1290 <minOfPrevious14_bt+0x190>
cmp    $0xffffffff,%r14d
jl     133a <minOfPrevious14_bt+0x23a>
test   %ecx,%ecx
js     133a <minOfPrevious14_bt+0x23a>
mov    -0x28(%rsp),%edx
cmp    -0x44(%rsp),%edx
jge    133a <minOfPrevious14_bt+0x23a>
cmpl   $0x0,-0x40(%rsp)
js     133a <minOfPrevious14_bt+0x23a>
cmp    0x38(%rsp),%ecx
jge    133a <minOfPrevious14_bt+0x23a>
mov    0x40(%rsp),%ecx
cmp    %ecx,-0x40(%rsp)
jge    133a <minOfPrevious14_bt+0x23a>
mov    -0x20(%rsp),%rcx
add    %edx,%ecx
movslq %ecx,%rcx
mov    -0x30(%rsp),%rdx
movzwl 0x1c(%rdx),%ebp
mov    -0x38(%rsp),%rdx
add    (%rdx,%rcx,2),%bp
cmp    %ax,%bp
mov    %ebp,%ecx
cmovae %eax,%ecx
mov    %ecx,%eax
movzwl -0x46(%rsp),%ecx
cmp    %ax,%cx
cmovb  %ebp,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define zeroext i16 @minOfPrevious14_bt(i16* %0, i16* %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7) {
%9 = alloca i16*
%10 = alloca i16*
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i16
%21 = alloca i16
store i16* %0, i16** %9
store i16* %1, i16** %10
store i32 %2, i32* %11
store i32 %3, i32* %12
store i32 %4, i32* %13
store i32 %5, i32* %14
store i32 %6, i32* %15
store i32 %7, i32* %16
%22 = load i16*, i16** %9
%23 = load i32, i32* %12
%24 = load i32, i32* %14
%25 = mul nsw i32 %23, %24
%26 = load i32, i32* %11
%27 = add nsw i32 %25, %26
%28 = load i32, i32* %13
%29 = load i32, i32* %14
%30 = mul nsw i32 %28, %29
%31 = load i32, i32* %15
%32 = mul nsw i32 %30, %31
%33 = add nsw i32 %27, %32
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds i16, i16* %22, i64 %34
%36 = load i16, i16* %35
store i16 %36, i16* %21
%37 = load i32, i32* %13
%38 = add nsw i32 %37, 1
store i32 %38, i32* %19
%39 = load i32, i32* %12
%40 = add nsw i32 %39, 1
store i32 %40, i32* %18
br label %41
41: ; preds = %129, %8
%42 = load i32, i32* %18
%43 = load i32, i32* %12
%44 = sub nsw i32 %43, 1
%45 = icmp sge i32 %42, %44
br i1 %45, label %46, label %132
46: ; preds = %41
%47 = load i32, i32* %11
%48 = add nsw i32 %47, 1
store i32 %48, i32* %17
br label %49
49: ; preds = %125, %46
%50 = load i32, i32* %17
%51 = load i32, i32* %11
%52 = sub nsw i32 %51, 1
%53 = icmp sge i32 %50, %52
br i1 %53, label %54, label %128
54: ; preds = %49
%55 = load i32, i32* %17
%56 = icmp sge i32 %55, 0
br i1 %56, label %57, label %124
57: ; preds = %54
%58 = load i32, i32* %17
%59 = load i32, i32* %14
%60 = icmp slt i32 %58, %59
br i1 %60, label %61, label %124
61: ; preds = %57
%62 = load i32, i32* %18
%63 = icmp sge i32 %62, 0
br i1 %63, label %64, label %124
64: ; preds = %61
%65 = load i32, i32* %18
%66 = load i32, i32* %15
%67 = icmp slt i32 %65, %66
br i1 %67, label %68, label %124
68: ; preds = %64
%69 = load i32, i32* %19
%70 = icmp sge i32 %69, 0
br i1 %70, label %71, label %124
71: ; preds = %68
%72 = load i32, i32* %19
%73 = load i32, i32* %16
%74 = icmp slt i32 %72, %73
br i1 %74, label %75, label %124
75: ; preds = %71
%76 = load i16*, i16** %9
%77 = load i32, i32* %18
%78 = load i32, i32* %14
%79 = mul nsw i32 %77, %78
%80 = load i32, i32* %17
%81 = add nsw i32 %79, %80
%82 = load i32, i32* %19
%83 = load i32, i32* %14
%84 = mul nsw i32 %82, %83
%85 = load i32, i32* %15
%86 = mul nsw i32 %84, %85
%87 = add nsw i32 %81, %86
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i16, i16* %76, i64 %88
%90 = load i16, i16* %89
%91 = zext i16 %90 to i32
%92 = load i16*, i16** %10
%93 = load i32, i32* %18
%94 = load i32, i32* %12
%95 = sub nsw i32 %93, %94
%96 = add nsw i32 %95, 1
%97 = mul nsw i32 %96, 3
%98 = load i32, i32* %17
%99 = load i32, i32* %11
%100 = sub nsw i32 %98, %99
%101 = add nsw i32 %100, 1
%102 = add nsw i32 %97, %101
%103 = load i32, i32* %19
%104 = load i32, i32* %13
%105 = sub nsw i32 %103, %104
%106 = add nsw i32 %105, 1
%107 = mul nsw i32 %106, 3
%108 = mul nsw i32 %107, 3
%109 = add nsw i32 %102, %108
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds i16, i16* %92, i64 %110
%112 = load i16, i16* %111
%113 = zext i16 %112 to i32
%114 = add nsw i32 %91, %113
%115 = trunc i32 %114 to i16
store i16 %115, i16* %20
%116 = load i16, i16* %20
%117 = zext i16 %116 to i32
%118 = load i16, i16* %21
%119 = zext i16 %118 to i32
%120 = icmp slt i32 %117, %119
br i1 %120, label %121, label %123
121: ; preds = %75
%122 = load i16, i16* %20
store i16 %122, i16* %21
br label %123
123: ; preds = %121, %75
br label %124
124: ; preds = %123, %71, %68, %64, %61, %57, %54
br label %125
125: ; preds = %124
%126 = load i32, i32* %17
%127 = add nsw i32 %126, -1
store i32 %127, i32* %17
br label %49
128: ; preds = %49
br label %129
129: ; preds = %128
%130 = load i32, i32* %18
%131 = add nsw i32 %130, -1
store i32 %131, i32* %18
br label %41
132: ; preds = %41
%133 = load i32, i32* %13
store i32 %133, i32* %19
%134 = load i32, i32* %12
%135 = add nsw i32 %134, 1
store i32 %135, i32* %18
%136 = load i32, i32* %11
%137 = add nsw i32 %136, 1
store i32 %137, i32* %17
br label %138
138: ; preds = %214, %132
%139 = load i32, i32* %17
%140 = load i32, i32* %11
%141 = sub nsw i32 %140, 1
%142 = icmp sge i32 %139, %141
br i1 %142, label %143, label %217
143: ; preds = %138
%144 = load i32, i32* %17
%145 = icmp sge i32 %144, 0
br i1 %145, label %146, label %213
146: ; preds = %143
%147 = load i32, i32* %17
%148 = load i32, i32* %14
%149 = icmp slt i32 %147, %148
br i1 %149, label %150, label %213
150: ; preds = %146
%151 = load i32, i32* %18
%152 = icmp sge i32 %151, 0
br i1 %152, label %153, label %213
153: ; preds = %150
%154 = load i32, i32* %18
%155 = load i32, i32* %15
%156 = icmp slt i32 %154, %155
br i1 %156, label %157, label %213
157: ; preds = %153
%158 = load i32, i32* %19
%159 = icmp sge i32 %158, 0
br i1 %159, label %160, label %213
160: ; preds = %157
%161 = load i32, i32* %19
%162 = load i32, i32* %16
%163 = icmp slt i32 %161, %162
br i1 %163, label %164, label %213
164: ; preds = %160
%165 = load i16*, i16** %9
%166 = load i32, i32* %18
%167 = load i32, i32* %14
%168 = mul nsw i32 %166, %167
%169 = load i32, i32* %17
%170 = add nsw i32 %168, %169
%171 = load i32, i32* %19
%172 = load i32, i32* %14
%173 = mul nsw i32 %171, %172
%174 = load i32, i32* %15
%175 = mul nsw i32 %173, %174
%176 = add nsw i32 %170, %175
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i16, i16* %165, i64 %177
%179 = load i16, i16* %178
%180 = zext i16 %179 to i32
%181 = load i16*, i16** %10
%182 = load i32, i32* %18
%183 = load i32, i32* %12
%184 = sub nsw i32 %182, %183
%185 = add nsw i32 %184, 1
%186 = mul nsw i32 %185, 3
%187 = load i32, i32* %17
%188 = load i32, i32* %11
%189 = sub nsw i32 %187, %188
%190 = add nsw i32 %189, 1
%191 = add nsw i32 %186, %190
%192 = load i32, i32* %19
%193 = load i32, i32* %13
%194 = sub nsw i32 %192, %193
%195 = add nsw i32 %194, 1
%196 = mul nsw i32 %195, 3
%197 = mul nsw i32 %196, 3
%198 = add nsw i32 %191, %197
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds i16, i16* %181, i64 %199
%201 = load i16, i16* %200
%202 = zext i16 %201 to i32
%203 = add nsw i32 %180, %202
%204 = trunc i32 %203 to i16
store i16 %204, i16* %20
%205 = load i16, i16* %20
%206 = zext i16 %205 to i32
%207 = load i16, i16* %21
%208 = zext i16 %207 to i32
%209 = icmp slt i32 %206, %208
br i1 %209, label %210, label %212
210: ; preds = %164
%211 = load i16, i16* %20
store i16 %211, i16* %21
br label %212
212: ; preds = %210, %164
br label %213
213: ; preds = %212, %160, %157, %153, %150, %146, %143
br label %214
214: ; preds = %213
%215 = load i32, i32* %17
%216 = add nsw i32 %215, -1
store i32 %216, i32* %17
br label %138
217: ; preds = %138
%218 = load i32, i32* %13
store i32 %218, i32* %19
%219 = load i32, i32* %12
store i32 %219, i32* %18
%220 = load i32, i32* %11
%221 = add nsw i32 %220, 1
store i32 %221, i32* %17
%222 = load i32, i32* %17
%223 = icmp sge i32 %222, 0
br i1 %223, label %224, label %291
224: ; preds = %217
%225 = load i32, i32* %17
%226 = load i32, i32* %14
%227 = icmp slt i32 %225, %226
br i1 %227, label %228, label %291
228: ; preds = %224
%229 = load i32, i32* %18
%230 = icmp sge i32 %229, 0
br i1 %230, label %231, label %291
231: ; preds = %228
%232 = load i32, i32* %18
%233 = load i32, i32* %15
%234 = icmp slt i32 %232, %233
br i1 %234, label %235, label %291
235: ; preds = %231
%236 = load i32, i32* %19
%237 = icmp sge i32 %236, 0
br i1 %237, label %238, label %291
238: ; preds = %235
%239 = load i32, i32* %19
%240 = load i32, i32* %16
%241 = icmp slt i32 %239, %240
br i1 %241, label %242, label %291
242: ; preds = %238
%243 = load i16*, i16** %9
%244 = load i32, i32* %18
%245 = load i32, i32* %14
%246 = mul nsw i32 %244, %245
%247 = load i32, i32* %17
%248 = add nsw i32 %246, %247
%249 = load i32, i32* %19
%250 = load i32, i32* %14
%251 = mul nsw i32 %249, %250
%252 = load i32, i32* %15
%253 = mul nsw i32 %251, %252
%254 = add nsw i32 %248, %253
%255 = sext i32 %254 to i64
%256 = getelementptr inbounds i16, i16* %243, i64 %255
%257 = load i16, i16* %256
%258 = zext i16 %257 to i32
%259 = load i16*, i16** %10
%260 = load i32, i32* %18
%261 = load i32, i32* %12
%262 = sub nsw i32 %260, %261
%263 = add nsw i32 %262, 1
%264 = mul nsw i32 %263, 3
%265 = load i32, i32* %17
%266 = load i32, i32* %11
%267 = sub nsw i32 %265, %266
%268 = add nsw i32 %267, 1
%269 = add nsw i32 %264, %268
%270 = load i32, i32* %19
%271 = load i32, i32* %13
%272 = sub nsw i32 %270, %271
%273 = add nsw i32 %272, 1
%274 = mul nsw i32 %273, 3
%275 = mul nsw i32 %274, 3
%276 = add nsw i32 %269, %275
%277 = sext i32 %276 to i64
%278 = getelementptr inbounds i16, i16* %259, i64 %277
%279 = load i16, i16* %278
%280 = zext i16 %279 to i32
%281 = add nsw i32 %258, %280
%282 = trunc i32 %281 to i16
store i16 %282, i16* %20
%283 = load i16, i16* %20
%284 = zext i16 %283 to i32
%285 = load i16, i16* %21
%286 = zext i16 %285 to i32
%287 = icmp slt i32 %284, %286
br i1 %287, label %288, label %290
288: ; preds = %242
%289 = load i16, i16* %20
store i16 %289, i16* %21
br label %290
290: ; preds = %288, %242
br label %291
291: ; preds = %290, %238, %235, %231, %228, %224, %217
%292 = load i16*, i16** %9
%293 = load i32, i32* %12
%294 = load i32, i32* %14
%295 = mul nsw i32 %293, %294
%296 = load i32, i32* %11
%297 = add nsw i32 %295, %296
%298 = load i32, i32* %13
%299 = load i32, i32* %14
%300 = mul nsw i32 %298, %299
%301 = load i32, i32* %15
%302 = mul nsw i32 %300, %301
%303 = add nsw i32 %297, %302
%304 = sext i32 %303 to i64
%305 = getelementptr inbounds i16, i16* %292, i64 %304
%306 = load i16, i16* %305
%307 = zext i16 %306 to i32
%308 = load i16, i16* %21
%309 = zext i16 %308 to i32
%310 = icmp slt i32 %307, %309
br i1 %310, label %311, label %313
311: ; preds = %291
%312 = load i16, i16* %20
store i16 %312, i16* %21
br label %313
313: ; preds = %311, %291
%314 = load i16, i16* %21
ret i16 %314
}

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