#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ vis5d_get_curved(int, int *);
int /*<<< orphan*/ vis5d_get_sizePRIME(int, int *, int *, int *, int *, int *,
                                       int *);
int /*<<< orphan*/ vis5d_gridPRIME_to_xyzPRIME(int, int /*<<< orphan*/,
                                               int /*<<< orphan*/, float, float,
                                               float, float *, float *,
                                               float *);
int /*<<< orphan*/ vis5d_project(int, float *, float *, float *);
float distance_to_vclip(int index, int curx, int cury, int num, float r1,
                        float c1, float r2, float c2, int *corner) {
  float cx, cy, px, py;
  float dist, neardist, p[3];
  float l, r, c;
  int curved;
  int i;
  int Nr, Nc, Nl, LowLev, MaxNlVar, WindNl, WindLow;
  vis5d_get_sizePRIME(index, &Nr, &Nc, &Nl, &LowLev, &WindNl, &WindLow);
  neardist = 1000000.0;
  cx = (float)curx;
  cy = (float)cury;
  for (i = 0; i < 4; i++) {
    switch (i) {
    case 0:
      r = r1;
      c = c1;
      l = (float)(Nl - 1 + LowLev);
      break;
    case 1:
      r = r2;
      c = c2;
      l = (float)(Nl - 1 + LowLev);
      break;
    case 2:
      r = r1;
      c = c1;
      l = (float)LowLev;
      break;
    case 3:
      r = r2;
      c = c2;
      l = (float)LowLev;
      break;
    }
    vis5d_gridPRIME_to_xyzPRIME(index, 0, 0, r, c, l, &p[0], &p[1], &p[2]);
    vis5d_project(index, p, &px, &py);
    dist = (px - cx) * (px - cx) + (py - cy) * (py - cy);
    if (dist < neardist) {
      neardist = dist;
      *corner = i;
    }
  }
  vis5d_get_curved(index, &curved);
  if (curved == 0) {
    for (i = 4; i < 6; i++) {
      c = (c1 + c2) / 2.0;
      r = (r1 + r2) / 2.0;
      if (i == 4) {
        l = (float)(Nl - 1 + LowLev);
      } else {
        l = (float)LowLev;
      }
      vis5d_gridPRIME_to_xyzPRIME(index, 0, 0, r, c, l, &p[0], &p[1], &p[2]);
      vis5d_project(index, p, &px, &py);
      dist = (px - cx) * (px - cx) + (py - cy) * (py - cy);
      if (dist < neardist) {
        neardist = dist;
        *corner = i;
      }
    }
  }
  return neardist;
}


x86 assembly (clang, -O0):
<distance_to_vclip>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
movss  %xmm0,-0x14(%rbp)
movss  %xmm1,-0x18(%rbp)
movss  %xmm2,-0x1c(%rbp)
movss  %xmm3,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    -0x4(%rbp),%edi
lea    -0x64(%rbp),%rsi
lea    -0x68(%rbp),%rdx
lea    -0x6c(%rbp),%rcx
lea    -0x70(%rbp),%r8
lea    -0x78(%rbp),%r9
lea    -0x7c(%rbp),%rax
mov    %rax,(%rsp)
call   1050 <vis5d_get_sizePRIME@plt>
movss  0xe65(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
cvtsi2ssl -0x8(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
cvtsi2ssl -0xc(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movl   $0x0,-0x60(%rbp)
cmpl   $0x4,-0x60(%rbp)
jge    133c <distance_to_vclip+0x1fc>
mov    -0x60(%rbp),%eax
mov    %rax,-0x88(%rbp)
sub    $0x3,%rax
ja     1287 <distance_to_vclip+0x147>
mov    -0x88(%rbp),%rax
lea    0xe29(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x6c(%rbp),%eax
sub    $0x1,%eax
add    -0x70(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x50(%rbp)
jmp    1287 <distance_to_vclip+0x147>
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x6c(%rbp),%eax
sub    $0x1,%eax
add    -0x70(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x50(%rbp)
jmp    1287 <distance_to_vclip+0x147>
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
cvtsi2ssl -0x70(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
jmp    1287 <distance_to_vclip+0x147>
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
cvtsi2ssl -0x70(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x4(%rbp),%edi
movss  -0x54(%rbp),%xmm0
movss  -0x58(%rbp),%xmm1
movss  -0x50(%rbp),%xmm2
lea    -0x4c(%rbp),%rcx
lea    -0x4c(%rbp),%r8
add    $0x4,%r8
lea    -0x4c(%rbp),%r9
add    $0x8,%r9
xor    %edx,%edx
mov    %edx,%esi
call   1060 <vis5d_gridPRIME_to_xyzPRIME@plt>
mov    -0x4(%rbp),%edi
lea    -0x4c(%rbp),%rsi
lea    -0x34(%rbp),%rdx
lea    -0x38(%rbp),%rcx
call   1040 <vis5d_project@plt>
movss  -0x34(%rbp),%xmm0
subss  -0x2c(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
subss  -0x2c(%rbp),%xmm2
movss  -0x38(%rbp),%xmm1
subss  -0x30(%rbp),%xmm1
movss  -0x38(%rbp),%xmm3
subss  -0x30(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x3c(%rbp),%xmm1
movss  -0x40(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1329 <distance_to_vclip+0x1e9>
movss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x60(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
jmp    132e <distance_to_vclip+0x1ee>
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    11bb <distance_to_vclip+0x7b>
mov    -0x4(%rbp),%edi
lea    -0x5c(%rbp),%rsi
call   1030 <vis5d_get_curved@plt>
cmpl   $0x0,-0x5c(%rbp)
jne    148e <distance_to_vclip+0x34e>
movl   $0x4,-0x60(%rbp)
cmpl   $0x6,-0x60(%rbp)
jge    1489 <distance_to_vclip+0x349>
movss  -0x18(%rbp),%xmm0
addss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc8f(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x14(%rbp),%xmm0
addss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc6c(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
cmpl   $0x4,-0x60(%rbp)
jne    13ca <distance_to_vclip+0x28a>
mov    -0x6c(%rbp),%eax
sub    $0x1,%eax
add    -0x70(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x50(%rbp)
jmp    13d4 <distance_to_vclip+0x294>
cvtsi2ssl -0x70(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x4(%rbp),%edi
movss  -0x54(%rbp),%xmm0
movss  -0x58(%rbp),%xmm1
movss  -0x50(%rbp),%xmm2
lea    -0x4c(%rbp),%rcx
lea    -0x4c(%rbp),%r8
add    $0x4,%r8
lea    -0x4c(%rbp),%r9
add    $0x8,%r9
xor    %edx,%edx
mov    %edx,%esi
call   1060 <vis5d_gridPRIME_to_xyzPRIME@plt>
mov    -0x4(%rbp),%edi
lea    -0x4c(%rbp),%rsi
lea    -0x34(%rbp),%rdx
lea    -0x38(%rbp),%rcx
call   1040 <vis5d_project@plt>
movss  -0x34(%rbp),%xmm0
subss  -0x2c(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
subss  -0x2c(%rbp),%xmm2
movss  -0x38(%rbp),%xmm1
subss  -0x30(%rbp),%xmm1
movss  -0x38(%rbp),%xmm3
subss  -0x30(%rbp),%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x3c(%rbp),%xmm1
movss  -0x40(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1476 <distance_to_vclip+0x336>
movss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x60(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
jmp    147b <distance_to_vclip+0x33b>
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    1359 <distance_to_vclip+0x219>
jmp    148e <distance_to_vclip+0x34e>
movss  -0x40(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<distance_to_vclip>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %r8,0x58(%rsp)
movss  %xmm3,0x38(%rsp)
movss  %xmm2,0x3c(%rsp)
movss  %xmm1,0x20(%rsp)
movss  %xmm0,0x1c(%rsp)
mov    %edx,%r14d
mov    %esi,%ebx
mov    %edi,%ebp
lea    0x68(%rsp),%rax
mov    %rax,(%rsp)
lea    0x74(%rsp),%rsi
lea    0x70(%rsp),%rdx
lea    0x48(%rsp),%rcx
lea    0x18(%rsp),%r8
lea    0x6c(%rsp),%r9
call   1050 <vis5d_get_sizePRIME@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %ebx,%xmm0
movss  %xmm0,0x40(%rsp)
xorps  %xmm0,%xmm0
cvtsi2ss %r14d,%xmm0
movss  %xmm0,0x44(%rsp)
movss  0xe44(%rip),%xmm1
xor    %r15d,%r15d
lea    0x4c(%rsp),%rbx
lea    0x28(%rsp),%r13
lea    0x24(%rsp),%r14
lea    0xe33(%rip),%r12
jmp    11ee <distance_to_vclip+0xae>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r15d
cmp    $0x4,%r15d
je     1314 <distance_to_vclip+0x1d4>
movss  %xmm1,0x14(%rsp)
cmp    $0x3,%r15d
ja     1297 <distance_to_vclip+0x157>
mov    %r15d,%eax
movslq (%r12,%rax,4),%rax
add    %r12,%rax
jmp    *%rax
mov    0x48(%rsp),%eax
mov    0x18(%rsp),%ecx
add    %ecx,%eax
add    $0xffffffff,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
jmp    1249 <distance_to_vclip+0x109>
mov    0x48(%rsp),%eax
mov    0x18(%rsp),%ecx
add    %ecx,%eax
add    $0xffffffff,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
jmp    1279 <distance_to_vclip+0x139>
cs nopw 0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2ssl 0x18(%rsp),%xmm0
movss  %xmm0,0x34(%rsp)
movss  0x1c(%rsp),%xmm0
movss  %xmm0,0x30(%rsp)
movss  0x20(%rsp),%xmm0
jmp    1291 <distance_to_vclip+0x151>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xorps  %xmm0,%xmm0
cvtsi2ssl 0x18(%rsp),%xmm0
movss  %xmm0,0x34(%rsp)
movss  0x3c(%rsp),%xmm0
movss  %xmm0,0x30(%rsp)
movss  0x38(%rsp),%xmm0
movss  %xmm0,0x2c(%rsp)
mov    %ebp,%edi
xor    %esi,%esi
xor    %edx,%edx
movss  0x30(%rsp),%xmm0
movss  0x2c(%rsp),%xmm1
movss  0x34(%rsp),%xmm2
mov    %rbx,%rcx
lea    0x50(%rsp),%r8
lea    0x54(%rsp),%r9
call   1060 <vis5d_gridPRIME_to_xyzPRIME@plt>
mov    %ebp,%edi
mov    %rbx,%rsi
mov    %r13,%rdx
mov    %r14,%rcx
call   1040 <vis5d_project@plt>
movss  0x28(%rsp),%xmm0
subss  0x40(%rsp),%xmm0
movss  0x24(%rsp),%xmm1
subss  0x44(%rsp),%xmm1
mulss  %xmm1,%xmm1
mulss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  0x14(%rsp),%xmm1
ucomiss %xmm0,%xmm1
jbe    11e0 <distance_to_vclip+0xa0>
mov    0x58(%rsp),%rax
mov    %r15d,(%rax)
movaps %xmm0,%xmm1
jmp    11e0 <distance_to_vclip+0xa0>
movss  %xmm1,0x14(%rsp)
lea    0x64(%rsp),%rsi
mov    %ebp,%edi
call   1030 <vis5d_get_curved@plt>
cmpl   $0x0,0x64(%rsp)
je     1338 <distance_to_vclip+0x1f8>
movss  0x14(%rsp),%xmm0
jmp    1476 <distance_to_vclip+0x336>
movss  0x20(%rsp),%xmm1
addss  0x38(%rsp),%xmm1
movss  0xcb8(%rip),%xmm2
mulss  %xmm2,%xmm1
movss  0x1c(%rsp),%xmm0
addss  0x3c(%rsp),%xmm0
mulss  %xmm2,%xmm0
mov    0x48(%rsp),%eax
mov    0x18(%rsp),%ecx
lea    -0x1(%rax,%rcx,1),%eax
xorps  %xmm2,%xmm2
cvtsi2ss %eax,%xmm2
lea    0x4c(%rsp),%rbx
mov    %ebp,%edi
xor    %esi,%esi
xor    %edx,%edx
movss  %xmm0,0x1c(%rsp)
movss  %xmm1,0x20(%rsp)
mov    %rbx,%rcx
lea    0x50(%rsp),%r8
lea    0x54(%rsp),%r9
call   1060 <vis5d_gridPRIME_to_xyzPRIME@plt>
lea    0x28(%rsp),%rdx
lea    0x24(%rsp),%rcx
mov    %ebp,%edi
mov    %rbx,%rsi
call   1040 <vis5d_project@plt>
movss  0x28(%rsp),%xmm0
subss  0x40(%rsp),%xmm0
movss  0x24(%rsp),%xmm1
subss  0x44(%rsp),%xmm1
mulss  %xmm1,%xmm1
mulss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  0x14(%rsp),%xmm1
ucomiss %xmm0,%xmm1
jbe    13ed <distance_to_vclip+0x2ad>
mov    0x58(%rsp),%rax
movl   $0x4,(%rax)
movaps %xmm0,%xmm1
movss  %xmm1,0x14(%rsp)
xorps  %xmm2,%xmm2
cvtsi2ssl 0x18(%rsp),%xmm2
lea    0x4c(%rsp),%rbx
mov    %ebp,%edi
xor    %esi,%esi
xor    %edx,%edx
movss  0x1c(%rsp),%xmm0
movss  0x20(%rsp),%xmm1
mov    %rbx,%rcx
lea    0x50(%rsp),%r8
lea    0x54(%rsp),%r9
call   1060 <vis5d_gridPRIME_to_xyzPRIME@plt>
lea    0x28(%rsp),%rdx
lea    0x24(%rsp),%rcx
mov    %ebp,%edi
mov    %rbx,%rsi
call   1040 <vis5d_project@plt>
movss  0x28(%rsp),%xmm2
subss  0x40(%rsp),%xmm2
movss  0x24(%rsp),%xmm1
subss  0x44(%rsp),%xmm1
mulss  %xmm1,%xmm1
mulss  %xmm2,%xmm2
addss  %xmm1,%xmm2
movss  0x14(%rsp),%xmm0
ucomiss %xmm2,%xmm0
jbe    1476 <distance_to_vclip+0x336>
mov    0x58(%rsp),%rax
movl   $0x5,(%rax)
movaps %xmm2,%xmm0
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define float @distance_to_vclip(i32 %0, i32 %1, i32 %2, i32 %3, float %4, float %5, float %6, float %7, i32* nocapture writeonly %8) {
%10 = alloca float
%11 = alloca float
%12 = alloca [3 x float]
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = bitcast float* %10 to i8*
%21 = bitcast float* %11 to i8*
%22 = bitcast [3 x float]* %12 to i8*
%23 = bitcast i32* %13 to i8*
%24 = bitcast i32* %14 to i8*
%25 = bitcast i32* %15 to i8*
%26 = bitcast i32* %16 to i8*
%27 = bitcast i32* %17 to i8*
%28 = bitcast i32* %18 to i8*
%29 = bitcast i32* %19 to i8*
%30 = call i32 @vis5d_get_sizePRIME(i32 %0, i32* %14, i32* %15, i32* %16, i32* %17, i32* %18, i32* %19)
%31 = sitofp i32 %1 to float
%32 = sitofp i32 %2 to float
%33 = getelementptr inbounds [3 x float], [3 x float]* %12, i64 0, i64 0
%34 = getelementptr inbounds [3 x float], [3 x float]* %12, i64 0, i64 1
%35 = getelementptr inbounds [3 x float], [3 x float]* %12, i64 0, i64 2
br label %36
36: ; preds = %9, %74
%37 = phi i32 [ 0, %9 ], [ %76, %74 ]
%38 = phi float [ undef, %9 ], [ %63, %74 ]
%39 = phi float [ undef, %9 ], [ %62, %74 ]
%40 = phi float [ undef, %9 ], [ %61, %74 ]
%41 = phi float [ 1.000000e+06, %9 ], [ %75, %74 ]
switch i32 %37, label %60 [
i32 0, label %42
i32 1, label %48
i32 2, label %54
i32 3, label %57
]
42: ; preds = %36
%43 = load i32, i32* %16
%44 = add nsw i32 %43, -1
%45 = load i32, i32* %17
%46 = add nsw i32 %44, %45
%47 = sitofp i32 %46 to float
br label %60
48: ; preds = %36
%49 = load i32, i32* %16
%50 = add nsw i32 %49, -1
%51 = load i32, i32* %17
%52 = add nsw i32 %50, %51
%53 = sitofp i32 %52 to float
br label %60
54: ; preds = %36
%55 = load i32, i32* %17
%56 = sitofp i32 %55 to float
br label %60
57: ; preds = %36
%58 = load i32, i32* %17
%59 = sitofp i32 %58 to float
br label %60
60: ; preds = %36, %57, %54, %48, %42
%61 = phi float [ %40, %36 ], [ %59, %57 ], [ %56, %54 ], [ %53, %48 ], [ %47, %42 ]
%62 = phi float [ %39, %36 ], [ %6, %57 ], [ %4, %54 ], [ %6, %48 ], [ %4, %42 ]
%63 = phi float [ %38, %36 ], [ %7, %57 ], [ %5, %54 ], [ %7, %48 ], [ %5, %42 ]
%64 = call i32 @vis5d_gridPRIME_to_xyzPRIME(i32 %0, i32 0, i32 0, float %62, float %63, float %61, float* %33, float* %34, float* %35)
%65 = call i32 @vis5d_project(i32 %0, float* %33, float* %10, float* %11)
%66 = load float, float* %10
%67 = fsub float %66, %31
%68 = load float, float* %11
%69 = fsub float %68, %32
%70 = fmul float %69, %69
%71 = call float @llvm.fmuladd.f32(float %67, float %67, float %70)
%72 = fcmp olt float %71, %41
br i1 %72, label %73, label %74
73: ; preds = %60
store i32 %37, i32* %8
br label %74
74: ; preds = %60, %73
%75 = phi float [ %71, %73 ], [ %41, %60 ]
%76 = add nuw nsw i32 %37, 1
%77 = icmp eq i32 %76, 4
br i1 %77, label %78, label %36
78: ; preds = %74
%79 = call i32 @vis5d_get_curved(i32 %0, i32* %13)
%80 = load i32, i32* %13
%81 = icmp eq i32 %80, 0
br i1 %81, label %82, label %116
82: ; preds = %78
%83 = fadd float %5, %7
%84 = fmul float %83, 5.000000e-01
%85 = fadd float %4, %6
%86 = fmul float %85, 5.000000e-01
%87 = load i32, i32* %16
%88 = add nsw i32 %87, -1
%89 = load i32, i32* %17
%90 = add nsw i32 %88, %89
%91 = sitofp i32 %90 to float
%92 = call i32 @vis5d_gridPRIME_to_xyzPRIME(i32 %0, i32 0, i32 0, float %86, float %84, float %91, float* %33, float* %34, float* %35)
%93 = call i32 @vis5d_project(i32 %0, float* %33, float* %10, float* %11)
%94 = load float, float* %10
%95 = fsub float %94, %31
%96 = load float, float* %11
%97 = fsub float %96, %32
%98 = fmul float %97, %97
%99 = call float @llvm.fmuladd.f32(float %95, float %95, float %98)
%100 = fcmp olt float %99, %75
br i1 %100, label %101, label %102
101: ; preds = %82
store i32 4, i32* %8
br label %102
102: ; preds = %82, %101
%103 = phi float [ %99, %101 ], [ %75, %82 ]
%104 = load i32, i32* %17
%105 = sitofp i32 %104 to float
%106 = call i32 @vis5d_gridPRIME_to_xyzPRIME(i32 %0, i32 0, i32 0, float %86, float %84, float %105, float* %33, float* %34, float* %35)
%107 = call i32 @vis5d_project(i32 %0, float* %33, float* %10, float* %11)
%108 = load float, float* %10
%109 = fsub float %108, %31
%110 = load float, float* %11
%111 = fsub float %110, %32
%112 = fmul float %111, %111
%113 = call float @llvm.fmuladd.f32(float %109, float %109, float %112)
%114 = fcmp olt float %113, %103
br i1 %114, label %115, label %116
115: ; preds = %102
store i32 5, i32* %8
br label %116
116: ; preds = %102, %115, %78
%117 = phi float [ %75, %78 ], [ %113, %115 ], [ %103, %102 ]
ret float %117
}