int CheckIfElecHop(int xx, int yy, int zz, int *Xsource, int *Ysource,
                   int *Zsource, int *Xdrain, int *Ydrain, int *Zdrain,
                   int *TrackX, int *TrackY, int *TrackZ,
                   long double *TotalVelX, long double *TotalVelY,
                   long double *TotalVelZ, const int SLength, const int SWidth,
                   const int SHeight, const int EndX, const int EndY,
                   const int EndZ, int *NumAvgVel, long double *TimeTrack1,
                   long double t, double SiteDistance, int *nc, int *ElecExit,
                   const int PeriodicX, const int PeriodicY,
                   const int PeriodicZ) {
  long double TrackX2 = (long double)(*TrackX);
  long double TrackY2 = (long double)(*TrackY);
  long double TrackZ2 = (long double)(*TrackZ);
  long double nc2 = (long double)(*nc);
  long double SiteDistance2 = (long double)SiteDistance;
  if (xx == -1 && PeriodicX != 1) {
    (*Xsource) = *Xsource + 1;
    (*TotalVelX) = (*TotalVelX) +
                   (TrackX2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelY) = (*TotalVelY) +
                   (TrackY2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelZ) = (*TotalVelZ) +
                   (TrackZ2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  } else if (xx == SLength * EndX && EndX != 0) {
    (*Xdrain) = *Xdrain + 1;
    (*TotalVelX) = (*TotalVelX) +
                   (TrackX2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelY) = (*TotalVelY) +
                   (TrackY2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelZ) = (*TotalVelZ) +
                   (TrackZ2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  }
  if (yy == -1 && PeriodicY != 1) {
    (*Ysource) = *Ysource + 1;
    (*TotalVelX) = (*TotalVelX) +
                   (TrackX2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelY) = (*TotalVelY) +
                   (TrackY2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelZ) = (*TotalVelZ) +
                   (TrackZ2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  } else if (yy == SWidth * EndY && EndY != 0) {
    (*Ydrain) = *Ydrain + 1;
    (*TotalVelX) = (*TotalVelX) +
                   (TrackX2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelY) = (*TotalVelY) +
                   (TrackY2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelZ) = (*TotalVelZ) +
                   (TrackZ2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  }
  if (zz == -1 && PeriodicZ != 1) {
    (*Zsource) = *Zsource + 1;
    (*TotalVelX) = (*TotalVelX) +
                   (TrackX2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelY) = (*TotalVelY) +
                   (TrackY2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelZ) = (*TotalVelZ) +
                   (TrackZ2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  } else if (zz == SHeight * EndZ && EndZ != 0) {
    (*Zdrain) = *Zdrain + 1;
    (*TotalVelX) = (*TotalVelX) +
                   (TrackX2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelY) = (*TotalVelY) +
                   (TrackY2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TotalVelZ) = (*TotalVelZ) +
                   (TrackZ2) * (SiteDistance2) / ((t - (*TimeTrack1)) * (nc2));
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<CheckIfElecHop>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    0xd0(%rbp),%eax
mov    0xc8(%rbp),%eax
mov    0xc0(%rbp),%eax
mov    0xb8(%rbp),%rax
mov    0xb0(%rbp),%rax
fldt   0xa0(%rbp)
mov    0x90(%rbp),%rax
mov    0x88(%rbp),%rax
mov    0x80(%rbp),%eax
mov    0x78(%rbp),%eax
mov    0x70(%rbp),%eax
mov    0x68(%rbp),%eax
mov    0x60(%rbp),%eax
mov    0x58(%rbp),%eax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
fstpt  -0x40(%rbp)
movsd  %xmm0,-0x48(%rbp)
mov    0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xb0(%rbp)
fildl  -0xb0(%rbp)
fstpt  -0x60(%rbp)
mov    0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xac(%rbp)
fildl  -0xac(%rbp)
fstpt  -0x70(%rbp)
mov    0x38(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xa8(%rbp)
fildl  -0xa8(%rbp)
fstpt  -0x80(%rbp)
mov    0xb0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xa4(%rbp)
fildl  -0xa4(%rbp)
fstpt  -0x90(%rbp)
fldl   -0x48(%rbp)
fstpt  -0xa0(%rbp)
cmpl   $0xffffffff,-0x4(%rbp)
jne    12e8 <CheckIfElecHop+0x1e8>
cmpl   $0x1,0xc0(%rbp)
je     12e8 <CheckIfElecHop+0x1e8>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    13e0 <CheckIfElecHop+0x2e0>
mov    -0x4(%rbp),%eax
mov    0x58(%rbp),%ecx
imul   0x70(%rbp),%ecx
cmp    %ecx,%eax
jne    13db <CheckIfElecHop+0x2db>
cmpl   $0x0,0x70(%rbp)
je     13db <CheckIfElecHop+0x2db>
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    13e0 <CheckIfElecHop+0x2e0>
cmpl   $0xffffffff,-0x8(%rbp)
jne    14d3 <CheckIfElecHop+0x3d3>
cmpl   $0x1,0xc8(%rbp)
je     14d3 <CheckIfElecHop+0x3d3>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    15cb <CheckIfElecHop+0x4cb>
mov    -0x8(%rbp),%eax
mov    0x60(%rbp),%ecx
imul   0x78(%rbp),%ecx
cmp    %ecx,%eax
jne    15c6 <CheckIfElecHop+0x4c6>
cmpl   $0x0,0x78(%rbp)
je     15c6 <CheckIfElecHop+0x4c6>
mov    0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    15cb <CheckIfElecHop+0x4cb>
cmpl   $0xffffffff,-0xc(%rbp)
jne    16be <CheckIfElecHop+0x5be>
cmpl   $0x1,0xd0(%rbp)
je     16be <CheckIfElecHop+0x5be>
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    17bc <CheckIfElecHop+0x6bc>
mov    -0xc(%rbp),%eax
mov    0x68(%rbp),%ecx
imul   0x80(%rbp),%ecx
cmp    %ecx,%eax
jne    17b7 <CheckIfElecHop+0x6b7>
cmpl   $0x0,0x80(%rbp)
je     17b7 <CheckIfElecHop+0x6b7>
mov    0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    17bc <CheckIfElecHop+0x6bc>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<CheckIfElecHop>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0xe0(%rsp),%r10
fldt   0xc8(%rsp)
mov    0xb8(%rsp),%rax
mov    0xb0(%rsp),%r11
mov    0x78(%rsp),%r13
mov    0x70(%rsp),%rbx
mov    0x60(%rsp),%r14
mov    0x58(%rsp),%r15
mov    0x50(%rsp),%r12
mov    (%r12),%ebp
mov    %ebp,-0x24(%rsp)
fildl  -0x24(%rsp)
mov    (%r15),%ebp
mov    %ebp,-0x20(%rsp)
fildl  -0x20(%rsp)
mov    (%r14),%ebp
mov    %ebp,-0x1c(%rsp)
mov    0xd8(%rsp),%rbp
fildl  -0x1c(%rsp)
fstpt  -0x14(%rsp)
mov    0x0(%rbp),%ebp
mov    %ebp,-0x18(%rsp)
mov    0x68(%rsp),%rbp
fildl  -0x18(%rsp)
movsd  %xmm0,-0x8(%rsp)
fldl   -0x8(%rsp)
cmp    $0xffffffff,%edi
jne    1199 <CheckIfElecHop+0x99>
cmpl   $0x1,0xe8(%rsp)
01
jne    11b5 <CheckIfElecHop+0xb5>
mov    0x98(%rsp),%ecx
test   %ecx,%ecx
je     121b <CheckIfElecHop+0x11b>
imul   0x80(%rsp),%ecx
cmp    %edi,%ecx
jne    121b <CheckIfElecHop+0x11b>
mov    0x38(%rsp),%rcx
addl   $0x1,(%rcx)
fld    %st(0)
fmul   %st(4),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   0x0(%rbp)
faddp  %st,%st(1)
fstpt  0x0(%rbp)
fld    %st(0)
fmul   %st(3),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   (%rbx)
faddp  %st,%st(1)
fstpt  (%rbx)
fldt   -0x14(%rsp)
fmul   %st(1),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   0x0(%r13)
faddp  %st,%st(1)
fstpt  0x0(%r13)
movl   $0x0,(%r12)
movl   $0x0,(%r15)
movl   $0x0,(%r14)
addl   $0x1,(%r11)
fld    %st(4)
fstpt  (%rax)
movl   $0x1,(%r10)
cmp    $0xffffffff,%esi
jne    122a <CheckIfElecHop+0x12a>
cmpl   $0x1,0xf0(%rsp)
01
jne    1246 <CheckIfElecHop+0x146>
mov    0xa0(%rsp),%ecx
test   %ecx,%ecx
je     12ad <CheckIfElecHop+0x1ad>
imul   0x88(%rsp),%ecx
cmp    %esi,%ecx
jne    12ad <CheckIfElecHop+0x1ad>
mov    0x40(%rsp),%r8
addl   $0x1,(%r8)
fld    %st(0)
fmul   %st(4),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   0x0(%rbp)
faddp  %st,%st(1)
fstpt  0x0(%rbp)
fld    %st(0)
fmul   %st(3),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   (%rbx)
faddp  %st,%st(1)
fstpt  (%rbx)
fldt   -0x14(%rsp)
fmul   %st(1),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   0x0(%r13)
faddp  %st,%st(1)
fstpt  0x0(%r13)
movl   $0x0,(%r12)
movl   $0x0,(%r15)
movl   $0x0,(%r14)
addl   $0x1,(%r11)
fld    %st(4)
fstpt  (%rax)
movl   $0x1,(%r10)
cmp    $0xffffffff,%edx
jne    12bc <CheckIfElecHop+0x1bc>
cmpl   $0x1,0xf8(%rsp)
01
jne    12e4 <CheckIfElecHop+0x1e4>
mov    0xa8(%rsp),%ecx
test   %ecx,%ecx
fxch   %st(1)
fxch   %st(3)
je     1353 <CheckIfElecHop+0x253>
imul   0x90(%rsp),%ecx
cmp    %edx,%ecx
jne    1353 <CheckIfElecHop+0x253>
mov    0x48(%rsp),%r9
fxch   %st(3)
fxch   %st(1)
addl   $0x1,(%r9)
fmul   %st,%st(3)
fldt   (%rax)
fsubr  %st(5),%st
fmul   %st(2),%st
fdivrp %st,%st(4)
fldt   0x0(%rbp)
faddp  %st,%st(4)
fxch   %st(3)
fstpt  0x0(%rbp)
fxch   %st(1)
fmul   %st(2),%st
fldt   (%rax)
fsubr  %st(4),%st
fmul   %st(2),%st
fdivrp %st,%st(1)
fldt   (%rbx)
faddp  %st,%st(1)
fstpt  (%rbx)
fldt   -0x14(%rsp)
fmulp  %st,%st(2)
fldt   (%rax)
fsubr  %st(3),%st
fmulp  %st,%st(1)
fdivrp %st,%st(1)
fldt   0x0(%r13)
faddp  %st,%st(1)
fstpt  0x0(%r13)
movl   $0x0,(%r12)
movl   $0x0,(%r15)
movl   $0x0,(%r14)
addl   $0x1,(%r11)
fstpt  (%rax)
movl   $0x1,(%r10)
fldz
fldz
fldz
fldz
fldz
fstp   %st(4)
fstp   %st(2)
fstp   %st(0)
fstp   %st(0)
fstp   %st(0)
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @CheckIfElecHop(i32 %0, i32 %1, i32 %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8, i32* %9, i32* %10, i32* %11, x86_fp80* %12, x86_fp80* %13, x86_fp80* %14, i32 %15, i32 %16, i32 %17, i32 %18, i32 %19, i32 %20, i32* %21, x86_fp80* %22, x86_fp80 %23, double %24, i32* %25, i32* %26, i32 %27, i32 %28, i32 %29) {
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32*
%35 = alloca i32*
%36 = alloca i32*
%37 = alloca i32*
%38 = alloca i32*
%39 = alloca i32*
%40 = alloca i32*
%41 = alloca i32*
%42 = alloca i32*
%43 = alloca x86_fp80*
%44 = alloca x86_fp80*
%45 = alloca x86_fp80*
%46 = alloca i32
%47 = alloca i32
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
%51 = alloca i32
%52 = alloca i32*
%53 = alloca x86_fp80*
%54 = alloca x86_fp80
%55 = alloca double
%56 = alloca i32*
%57 = alloca i32*
%58 = alloca i32
%59 = alloca i32
%60 = alloca i32
%61 = alloca x86_fp80
%62 = alloca x86_fp80
%63 = alloca x86_fp80
%64 = alloca x86_fp80
%65 = alloca x86_fp80
store i32 %0, i32* %31
store i32 %1, i32* %32
store i32 %2, i32* %33
store i32* %3, i32** %34
store i32* %4, i32** %35
store i32* %5, i32** %36
store i32* %6, i32** %37
store i32* %7, i32** %38
store i32* %8, i32** %39
store i32* %9, i32** %40
store i32* %10, i32** %41
store i32* %11, i32** %42
store x86_fp80* %12, x86_fp80** %43
store x86_fp80* %13, x86_fp80** %44
store x86_fp80* %14, x86_fp80** %45
store i32 %15, i32* %46
store i32 %16, i32* %47
store i32 %17, i32* %48
store i32 %18, i32* %49
store i32 %19, i32* %50
store i32 %20, i32* %51
store i32* %21, i32** %52
store x86_fp80* %22, x86_fp80** %53
store x86_fp80 %23, x86_fp80* %54
store double %24, double* %55
store i32* %25, i32** %56
store i32* %26, i32** %57
store i32 %27, i32* %58
store i32 %28, i32* %59
store i32 %29, i32* %60
%66 = load i32*, i32** %40
%67 = load i32, i32* %66
%68 = sitofp i32 %67 to x86_fp80
store x86_fp80 %68, x86_fp80* %61
%69 = load i32*, i32** %41
%70 = load i32, i32* %69
%71 = sitofp i32 %70 to x86_fp80
store x86_fp80 %71, x86_fp80* %62
%72 = load i32*, i32** %42
%73 = load i32, i32* %72
%74 = sitofp i32 %73 to x86_fp80
store x86_fp80 %74, x86_fp80* %63
%75 = load i32*, i32** %56
%76 = load i32, i32* %75
%77 = sitofp i32 %76 to x86_fp80
store x86_fp80 %77, x86_fp80* %64
%78 = load double, double* %55
%79 = fpext double %78 to x86_fp80
store x86_fp80 %79, x86_fp80* %65
%80 = load i32, i32* %31
%81 = icmp eq i32 %80, -1
br i1 %81, label %82, label %142
82: ; preds = %30
%83 = load i32, i32* %58
%84 = icmp ne i32 %83, 1
br i1 %84, label %85, label %142
85: ; preds = %82
%86 = load i32*, i32** %34
%87 = load i32, i32* %86
%88 = add nsw i32 %87, 1
%89 = load i32*, i32** %34
store i32 %88, i32* %89
%90 = load x86_fp80*, x86_fp80** %43
%91 = load x86_fp80, x86_fp80* %90
%92 = load x86_fp80, x86_fp80* %61
%93 = load x86_fp80, x86_fp80* %65
%94 = fmul x86_fp80 %92, %93
%95 = load x86_fp80, x86_fp80* %54
%96 = load x86_fp80*, x86_fp80** %53
%97 = load x86_fp80, x86_fp80* %96
%98 = fsub x86_fp80 %95, %97
%99 = load x86_fp80, x86_fp80* %64
%100 = fmul x86_fp80 %98, %99
%101 = fdiv x86_fp80 %94, %100
%102 = fadd x86_fp80 %91, %101
%103 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %102, x86_fp80* %103
%104 = load x86_fp80*, x86_fp80** %44
%105 = load x86_fp80, x86_fp80* %104
%106 = load x86_fp80, x86_fp80* %62
%107 = load x86_fp80, x86_fp80* %65
%108 = fmul x86_fp80 %106, %107
%109 = load x86_fp80, x86_fp80* %54
%110 = load x86_fp80*, x86_fp80** %53
%111 = load x86_fp80, x86_fp80* %110
%112 = fsub x86_fp80 %109, %111
%113 = load x86_fp80, x86_fp80* %64
%114 = fmul x86_fp80 %112, %113
%115 = fdiv x86_fp80 %108, %114
%116 = fadd x86_fp80 %105, %115
%117 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %116, x86_fp80* %117
%118 = load x86_fp80*, x86_fp80** %45
%119 = load x86_fp80, x86_fp80* %118
%120 = load x86_fp80, x86_fp80* %63
%121 = load x86_fp80, x86_fp80* %65
%122 = fmul x86_fp80 %120, %121
%123 = load x86_fp80, x86_fp80* %54
%124 = load x86_fp80*, x86_fp80** %53
%125 = load x86_fp80, x86_fp80* %124
%126 = fsub x86_fp80 %123, %125
%127 = load x86_fp80, x86_fp80* %64
%128 = fmul x86_fp80 %126, %127
%129 = fdiv x86_fp80 %122, %128
%130 = fadd x86_fp80 %119, %129
%131 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %130, x86_fp80* %131
%132 = load i32*, i32** %40
store i32 0, i32* %132
%133 = load i32*, i32** %41
store i32 0, i32* %133
%134 = load i32*, i32** %42
store i32 0, i32* %134
%135 = load i32*, i32** %52
%136 = load i32, i32* %135
%137 = add nsw i32 %136, 1
%138 = load i32*, i32** %52
store i32 %137, i32* %138
%139 = load x86_fp80, x86_fp80* %54
%140 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %139, x86_fp80* %140
%141 = load i32*, i32** %57
store i32 1, i32* %141
br label %209
142: ; preds = %82, %30
%143 = load i32, i32* %31
%144 = load i32, i32* %46
%145 = load i32, i32* %49
%146 = mul nsw i32 %144, %145
%147 = icmp eq i32 %143, %146
br i1 %147, label %148, label %208
148: ; preds = %142
%149 = load i32, i32* %49
%150 = icmp ne i32 %149, 0
br i1 %150, label %151, label %208
151: ; preds = %148
%152 = load i32*, i32** %37
%153 = load i32, i32* %152
%154 = add nsw i32 %153, 1
%155 = load i32*, i32** %37
store i32 %154, i32* %155
%156 = load x86_fp80*, x86_fp80** %43
%157 = load x86_fp80, x86_fp80* %156
%158 = load x86_fp80, x86_fp80* %61
%159 = load x86_fp80, x86_fp80* %65
%160 = fmul x86_fp80 %158, %159
%161 = load x86_fp80, x86_fp80* %54
%162 = load x86_fp80*, x86_fp80** %53
%163 = load x86_fp80, x86_fp80* %162
%164 = fsub x86_fp80 %161, %163
%165 = load x86_fp80, x86_fp80* %64
%166 = fmul x86_fp80 %164, %165
%167 = fdiv x86_fp80 %160, %166
%168 = fadd x86_fp80 %157, %167
%169 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %168, x86_fp80* %169
%170 = load x86_fp80*, x86_fp80** %44
%171 = load x86_fp80, x86_fp80* %170
%172 = load x86_fp80, x86_fp80* %62
%173 = load x86_fp80, x86_fp80* %65
%174 = fmul x86_fp80 %172, %173
%175 = load x86_fp80, x86_fp80* %54
%176 = load x86_fp80*, x86_fp80** %53
%177 = load x86_fp80, x86_fp80* %176
%178 = fsub x86_fp80 %175, %177
%179 = load x86_fp80, x86_fp80* %64
%180 = fmul x86_fp80 %178, %179
%181 = fdiv x86_fp80 %174, %180
%182 = fadd x86_fp80 %171, %181
%183 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %182, x86_fp80* %183
%184 = load x86_fp80*, x86_fp80** %45
%185 = load x86_fp80, x86_fp80* %184
%186 = load x86_fp80, x86_fp80* %63
%187 = load x86_fp80, x86_fp80* %65
%188 = fmul x86_fp80 %186, %187
%189 = load x86_fp80, x86_fp80* %54
%190 = load x86_fp80*, x86_fp80** %53
%191 = load x86_fp80, x86_fp80* %190
%192 = fsub x86_fp80 %189, %191
%193 = load x86_fp80, x86_fp80* %64
%194 = fmul x86_fp80 %192, %193
%195 = fdiv x86_fp80 %188, %194
%196 = fadd x86_fp80 %185, %195
%197 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %196, x86_fp80* %197
%198 = load i32*, i32** %40
store i32 0, i32* %198
%199 = load i32*, i32** %41
store i32 0, i32* %199
%200 = load i32*, i32** %42
store i32 0, i32* %200
%201 = load i32*, i32** %52
%202 = load i32, i32* %201
%203 = add nsw i32 %202, 1
%204 = load i32*, i32** %52
store i32 %203, i32* %204
%205 = load x86_fp80, x86_fp80* %54
%206 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %205, x86_fp80* %206
%207 = load i32*, i32** %57
store i32 1, i32* %207
br label %208
208: ; preds = %151, %148, %142
br label %209
209: ; preds = %208, %85
%210 = load i32, i32* %32
%211 = icmp eq i32 %210, -1
br i1 %211, label %212, label %272
212: ; preds = %209
%213 = load i32, i32* %59
%214 = icmp ne i32 %213, 1
br i1 %214, label %215, label %272
215: ; preds = %212
%216 = load i32*, i32** %35
%217 = load i32, i32* %216
%218 = add nsw i32 %217, 1
%219 = load i32*, i32** %35
store i32 %218, i32* %219
%220 = load x86_fp80*, x86_fp80** %43
%221 = load x86_fp80, x86_fp80* %220
%222 = load x86_fp80, x86_fp80* %61
%223 = load x86_fp80, x86_fp80* %65
%224 = fmul x86_fp80 %222, %223
%225 = load x86_fp80, x86_fp80* %54
%226 = load x86_fp80*, x86_fp80** %53
%227 = load x86_fp80, x86_fp80* %226
%228 = fsub x86_fp80 %225, %227
%229 = load x86_fp80, x86_fp80* %64
%230 = fmul x86_fp80 %228, %229
%231 = fdiv x86_fp80 %224, %230
%232 = fadd x86_fp80 %221, %231
%233 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %232, x86_fp80* %233
%234 = load x86_fp80*, x86_fp80** %44
%235 = load x86_fp80, x86_fp80* %234
%236 = load x86_fp80, x86_fp80* %62
%237 = load x86_fp80, x86_fp80* %65
%238 = fmul x86_fp80 %236, %237
%239 = load x86_fp80, x86_fp80* %54
%240 = load x86_fp80*, x86_fp80** %53
%241 = load x86_fp80, x86_fp80* %240
%242 = fsub x86_fp80 %239, %241
%243 = load x86_fp80, x86_fp80* %64
%244 = fmul x86_fp80 %242, %243
%245 = fdiv x86_fp80 %238, %244
%246 = fadd x86_fp80 %235, %245
%247 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %246, x86_fp80* %247
%248 = load x86_fp80*, x86_fp80** %45
%249 = load x86_fp80, x86_fp80* %248
%250 = load x86_fp80, x86_fp80* %63
%251 = load x86_fp80, x86_fp80* %65
%252 = fmul x86_fp80 %250, %251
%253 = load x86_fp80, x86_fp80* %54
%254 = load x86_fp80*, x86_fp80** %53
%255 = load x86_fp80, x86_fp80* %254
%256 = fsub x86_fp80 %253, %255
%257 = load x86_fp80, x86_fp80* %64
%258 = fmul x86_fp80 %256, %257
%259 = fdiv x86_fp80 %252, %258
%260 = fadd x86_fp80 %249, %259
%261 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %260, x86_fp80* %261
%262 = load i32*, i32** %40
store i32 0, i32* %262
%263 = load i32*, i32** %41
store i32 0, i32* %263
%264 = load i32*, i32** %42
store i32 0, i32* %264
%265 = load i32*, i32** %52
%266 = load i32, i32* %265
%267 = add nsw i32 %266, 1
%268 = load i32*, i32** %52
store i32 %267, i32* %268
%269 = load x86_fp80, x86_fp80* %54
%270 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %269, x86_fp80* %270
%271 = load i32*, i32** %57
store i32 1, i32* %271
br label %339
272: ; preds = %212, %209
%273 = load i32, i32* %32
%274 = load i32, i32* %47
%275 = load i32, i32* %50
%276 = mul nsw i32 %274, %275
%277 = icmp eq i32 %273, %276
br i1 %277, label %278, label %338
278: ; preds = %272
%279 = load i32, i32* %50
%280 = icmp ne i32 %279, 0
br i1 %280, label %281, label %338
281: ; preds = %278
%282 = load i32*, i32** %38
%283 = load i32, i32* %282
%284 = add nsw i32 %283, 1
%285 = load i32*, i32** %38
store i32 %284, i32* %285
%286 = load x86_fp80*, x86_fp80** %43
%287 = load x86_fp80, x86_fp80* %286
%288 = load x86_fp80, x86_fp80* %61
%289 = load x86_fp80, x86_fp80* %65
%290 = fmul x86_fp80 %288, %289
%291 = load x86_fp80, x86_fp80* %54
%292 = load x86_fp80*, x86_fp80** %53
%293 = load x86_fp80, x86_fp80* %292
%294 = fsub x86_fp80 %291, %293
%295 = load x86_fp80, x86_fp80* %64
%296 = fmul x86_fp80 %294, %295
%297 = fdiv x86_fp80 %290, %296
%298 = fadd x86_fp80 %287, %297
%299 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %298, x86_fp80* %299
%300 = load x86_fp80*, x86_fp80** %44
%301 = load x86_fp80, x86_fp80* %300
%302 = load x86_fp80, x86_fp80* %62
%303 = load x86_fp80, x86_fp80* %65
%304 = fmul x86_fp80 %302, %303
%305 = load x86_fp80, x86_fp80* %54
%306 = load x86_fp80*, x86_fp80** %53
%307 = load x86_fp80, x86_fp80* %306
%308 = fsub x86_fp80 %305, %307
%309 = load x86_fp80, x86_fp80* %64
%310 = fmul x86_fp80 %308, %309
%311 = fdiv x86_fp80 %304, %310
%312 = fadd x86_fp80 %301, %311
%313 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %312, x86_fp80* %313
%314 = load x86_fp80*, x86_fp80** %45
%315 = load x86_fp80, x86_fp80* %314
%316 = load x86_fp80, x86_fp80* %63
%317 = load x86_fp80, x86_fp80* %65
%318 = fmul x86_fp80 %316, %317
%319 = load x86_fp80, x86_fp80* %54
%320 = load x86_fp80*, x86_fp80** %53
%321 = load x86_fp80, x86_fp80* %320
%322 = fsub x86_fp80 %319, %321
%323 = load x86_fp80, x86_fp80* %64
%324 = fmul x86_fp80 %322, %323
%325 = fdiv x86_fp80 %318, %324
%326 = fadd x86_fp80 %315, %325
%327 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %326, x86_fp80* %327
%328 = load i32*, i32** %40
store i32 0, i32* %328
%329 = load i32*, i32** %41
store i32 0, i32* %329
%330 = load i32*, i32** %42
store i32 0, i32* %330
%331 = load i32*, i32** %52
%332 = load i32, i32* %331
%333 = add nsw i32 %332, 1
%334 = load i32*, i32** %52
store i32 %333, i32* %334
%335 = load x86_fp80, x86_fp80* %54
%336 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %335, x86_fp80* %336
%337 = load i32*, i32** %57
store i32 1, i32* %337
br label %338
338: ; preds = %281, %278, %272
br label %339
339: ; preds = %338, %215
%340 = load i32, i32* %33
%341 = icmp eq i32 %340, -1
br i1 %341, label %342, label %402
342: ; preds = %339
%343 = load i32, i32* %60
%344 = icmp ne i32 %343, 1
br i1 %344, label %345, label %402
345: ; preds = %342
%346 = load i32*, i32** %36
%347 = load i32, i32* %346
%348 = add nsw i32 %347, 1
%349 = load i32*, i32** %36
store i32 %348, i32* %349
%350 = load x86_fp80*, x86_fp80** %43
%351 = load x86_fp80, x86_fp80* %350
%352 = load x86_fp80, x86_fp80* %61
%353 = load x86_fp80, x86_fp80* %65
%354 = fmul x86_fp80 %352, %353
%355 = load x86_fp80, x86_fp80* %54
%356 = load x86_fp80*, x86_fp80** %53
%357 = load x86_fp80, x86_fp80* %356
%358 = fsub x86_fp80 %355, %357
%359 = load x86_fp80, x86_fp80* %64
%360 = fmul x86_fp80 %358, %359
%361 = fdiv x86_fp80 %354, %360
%362 = fadd x86_fp80 %351, %361
%363 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %362, x86_fp80* %363
%364 = load x86_fp80*, x86_fp80** %44
%365 = load x86_fp80, x86_fp80* %364
%366 = load x86_fp80, x86_fp80* %62
%367 = load x86_fp80, x86_fp80* %65
%368 = fmul x86_fp80 %366, %367
%369 = load x86_fp80, x86_fp80* %54
%370 = load x86_fp80*, x86_fp80** %53
%371 = load x86_fp80, x86_fp80* %370
%372 = fsub x86_fp80 %369, %371
%373 = load x86_fp80, x86_fp80* %64
%374 = fmul x86_fp80 %372, %373
%375 = fdiv x86_fp80 %368, %374
%376 = fadd x86_fp80 %365, %375
%377 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %376, x86_fp80* %377
%378 = load x86_fp80*, x86_fp80** %45
%379 = load x86_fp80, x86_fp80* %378
%380 = load x86_fp80, x86_fp80* %63
%381 = load x86_fp80, x86_fp80* %65
%382 = fmul x86_fp80 %380, %381
%383 = load x86_fp80, x86_fp80* %54
%384 = load x86_fp80*, x86_fp80** %53
%385 = load x86_fp80, x86_fp80* %384
%386 = fsub x86_fp80 %383, %385
%387 = load x86_fp80, x86_fp80* %64
%388 = fmul x86_fp80 %386, %387
%389 = fdiv x86_fp80 %382, %388
%390 = fadd x86_fp80 %379, %389
%391 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %390, x86_fp80* %391
%392 = load i32*, i32** %40
store i32 0, i32* %392
%393 = load i32*, i32** %41
store i32 0, i32* %393
%394 = load i32*, i32** %42
store i32 0, i32* %394
%395 = load i32*, i32** %52
%396 = load i32, i32* %395
%397 = add nsw i32 %396, 1
%398 = load i32*, i32** %52
store i32 %397, i32* %398
%399 = load x86_fp80, x86_fp80* %54
%400 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %399, x86_fp80* %400
%401 = load i32*, i32** %57
store i32 1, i32* %401
br label %469
402: ; preds = %342, %339
%403 = load i32, i32* %33
%404 = load i32, i32* %48
%405 = load i32, i32* %51
%406 = mul nsw i32 %404, %405
%407 = icmp eq i32 %403, %406
br i1 %407, label %408, label %468
408: ; preds = %402
%409 = load i32, i32* %51
%410 = icmp ne i32 %409, 0
br i1 %410, label %411, label %468
411: ; preds = %408
%412 = load i32*, i32** %39
%413 = load i32, i32* %412
%414 = add nsw i32 %413, 1
%415 = load i32*, i32** %39
store i32 %414, i32* %415
%416 = load x86_fp80*, x86_fp80** %43
%417 = load x86_fp80, x86_fp80* %416
%418 = load x86_fp80, x86_fp80* %61
%419 = load x86_fp80, x86_fp80* %65
%420 = fmul x86_fp80 %418, %419
%421 = load x86_fp80, x86_fp80* %54
%422 = load x86_fp80*, x86_fp80** %53
%423 = load x86_fp80, x86_fp80* %422
%424 = fsub x86_fp80 %421, %423
%425 = load x86_fp80, x86_fp80* %64
%426 = fmul x86_fp80 %424, %425
%427 = fdiv x86_fp80 %420, %426
%428 = fadd x86_fp80 %417, %427
%429 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %428, x86_fp80* %429
%430 = load x86_fp80*, x86_fp80** %44
%431 = load x86_fp80, x86_fp80* %430
%432 = load x86_fp80, x86_fp80* %62
%433 = load x86_fp80, x86_fp80* %65
%434 = fmul x86_fp80 %432, %433
%435 = load x86_fp80, x86_fp80* %54
%436 = load x86_fp80*, x86_fp80** %53
%437 = load x86_fp80, x86_fp80* %436
%438 = fsub x86_fp80 %435, %437
%439 = load x86_fp80, x86_fp80* %64
%440 = fmul x86_fp80 %438, %439
%441 = fdiv x86_fp80 %434, %440
%442 = fadd x86_fp80 %431, %441
%443 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %442, x86_fp80* %443
%444 = load x86_fp80*, x86_fp80** %45
%445 = load x86_fp80, x86_fp80* %444
%446 = load x86_fp80, x86_fp80* %63
%447 = load x86_fp80, x86_fp80* %65
%448 = fmul x86_fp80 %446, %447
%449 = load x86_fp80, x86_fp80* %54
%450 = load x86_fp80*, x86_fp80** %53
%451 = load x86_fp80, x86_fp80* %450
%452 = fsub x86_fp80 %449, %451
%453 = load x86_fp80, x86_fp80* %64
%454 = fmul x86_fp80 %452, %453
%455 = fdiv x86_fp80 %448, %454
%456 = fadd x86_fp80 %445, %455
%457 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %456, x86_fp80* %457
%458 = load i32*, i32** %40
store i32 0, i32* %458
%459 = load i32*, i32** %41
store i32 0, i32* %459
%460 = load i32*, i32** %42
store i32 0, i32* %460
%461 = load i32*, i32** %52
%462 = load i32, i32* %461
%463 = add nsw i32 %462, 1
%464 = load i32*, i32** %52
store i32 %463, i32* %464
%465 = load x86_fp80, x86_fp80* %54
%466 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %465, x86_fp80* %466
%467 = load i32*, i32** %57
store i32 1, i32* %467
br label %468
468: ; preds = %411, %408, %402
br label %469
469: ; preds = %468, %345
ret i32 0
}

LLVM IR (-O2):
define i32 @CheckIfElecHop(i32 %0, i32 %1, i32 %2, i32* nocapture %3, i32* nocapture %4, i32* nocapture %5, i32* nocapture %6, i32* nocapture %7, i32* nocapture %8, i32* nocapture %9, i32* nocapture %10, i32* nocapture %11, x86_fp80* nocapture %12, x86_fp80* nocapture %13, x86_fp80* nocapture %14, i32 %15, i32 %16, i32 %17, i32 %18, i32 %19, i32 %20, i32* nocapture %21, x86_fp80* %22, x86_fp80 %23, double %24, i32* nocapture %25, i32* nocapture writeonly %26, i32 %27, i32 %28, i32 %29) {
%31 = load i32, i32* %9
%32 = sitofp i32 %31 to x86_fp80
%33 = load i32, i32* %10
%34 = sitofp i32 %33 to x86_fp80
%35 = load i32, i32* %11
%36 = sitofp i32 %35 to x86_fp80
%37 = load i32, i32* %25
%38 = sitofp i32 %37 to x86_fp80
%39 = fpext double %24 to x86_fp80
%40 = icmp eq i32 %0, -1
%41 = icmp ne i32 %27, 1
%42 = and i1 %40, %41
br i1 %42, label %48, label %43
43: ; preds = %30
%44 = mul nsw i32 %18, %15
%45 = icmp eq i32 %44, %0
%46 = icmp ne i32 %18, 0
%47 = and i1 %46, %45
br i1 %47, label %48, label %75
48: ; preds = %43, %30
%49 = phi i32* [ %3, %30 ], [ %6, %43 ]
%50 = load i32, i32* %49
%51 = add nsw i32 %50, 1
store i32 %51, i32* %49
%52 = load x86_fp80, x86_fp80* %12
%53 = fmul x86_fp80 %39, %32
%54 = load x86_fp80, x86_fp80* %22
%55 = fsub x86_fp80 %23, %54
%56 = fmul x86_fp80 %55, %38
%57 = fdiv x86_fp80 %53, %56
%58 = fadd x86_fp80 %52, %57
store x86_fp80 %58, x86_fp80* %12
%59 = load x86_fp80, x86_fp80* %13
%60 = fmul x86_fp80 %39, %34
%61 = load x86_fp80, x86_fp80* %22
%62 = fsub x86_fp80 %23, %61
%63 = fmul x86_fp80 %62, %38
%64 = fdiv x86_fp80 %60, %63
%65 = fadd x86_fp80 %59, %64
store x86_fp80 %65, x86_fp80* %13
%66 = load x86_fp80, x86_fp80* %14
%67 = fmul x86_fp80 %39, %36
%68 = load x86_fp80, x86_fp80* %22
%69 = fsub x86_fp80 %23, %68
%70 = fmul x86_fp80 %69, %38
%71 = fdiv x86_fp80 %67, %70
%72 = fadd x86_fp80 %66, %71
store x86_fp80 %72, x86_fp80* %14
store i32 0, i32* %9
store i32 0, i32* %10
store i32 0, i32* %11
%73 = load i32, i32* %21
%74 = add nsw i32 %73, 1
store i32 %74, i32* %21
store x86_fp80 %23, x86_fp80* %22
store i32 1, i32* %26
br label %75
75: ; preds = %48, %43
%76 = icmp eq i32 %1, -1
%77 = icmp ne i32 %28, 1
%78 = and i1 %76, %77
br i1 %78, label %84, label %79
79: ; preds = %75
%80 = mul nsw i32 %19, %16
%81 = icmp eq i32 %80, %1
%82 = icmp ne i32 %19, 0
%83 = and i1 %82, %81
br i1 %83, label %84, label %111
84: ; preds = %79, %75
%85 = phi i32* [ %4, %75 ], [ %7, %79 ]
%86 = load i32, i32* %85
%87 = add nsw i32 %86, 1
store i32 %87, i32* %85
%88 = load x86_fp80, x86_fp80* %12
%89 = fmul x86_fp80 %39, %32
%90 = load x86_fp80, x86_fp80* %22
%91 = fsub x86_fp80 %23, %90
%92 = fmul x86_fp80 %91, %38
%93 = fdiv x86_fp80 %89, %92
%94 = fadd x86_fp80 %88, %93
store x86_fp80 %94, x86_fp80* %12
%95 = load x86_fp80, x86_fp80* %13
%96 = fmul x86_fp80 %39, %34
%97 = load x86_fp80, x86_fp80* %22
%98 = fsub x86_fp80 %23, %97
%99 = fmul x86_fp80 %98, %38
%100 = fdiv x86_fp80 %96, %99
%101 = fadd x86_fp80 %95, %100
store x86_fp80 %101, x86_fp80* %13
%102 = load x86_fp80, x86_fp80* %14
%103 = fmul x86_fp80 %39, %36
%104 = load x86_fp80, x86_fp80* %22
%105 = fsub x86_fp80 %23, %104
%106 = fmul x86_fp80 %105, %38
%107 = fdiv x86_fp80 %103, %106
%108 = fadd x86_fp80 %102, %107
store x86_fp80 %108, x86_fp80* %14
store i32 0, i32* %9
store i32 0, i32* %10
store i32 0, i32* %11
%109 = load i32, i32* %21
%110 = add nsw i32 %109, 1
store i32 %110, i32* %21
store x86_fp80 %23, x86_fp80* %22
store i32 1, i32* %26
br label %111
111: ; preds = %84, %79
%112 = icmp eq i32 %2, -1
%113 = icmp ne i32 %29, 1
%114 = and i1 %112, %113
br i1 %114, label %120, label %115
115: ; preds = %111
%116 = mul nsw i32 %20, %17
%117 = icmp eq i32 %116, %2
%118 = icmp ne i32 %20, 0
%119 = and i1 %118, %117
br i1 %119, label %120, label %147
120: ; preds = %115, %111
%121 = phi i32* [ %5, %111 ], [ %8, %115 ]
%122 = load i32, i32* %121
%123 = add nsw i32 %122, 1
store i32 %123, i32* %121
%124 = load x86_fp80, x86_fp80* %12
%125 = fmul x86_fp80 %39, %32
%126 = load x86_fp80, x86_fp80* %22
%127 = fsub x86_fp80 %23, %126
%128 = fmul x86_fp80 %127, %38
%129 = fdiv x86_fp80 %125, %128
%130 = fadd x86_fp80 %124, %129
store x86_fp80 %130, x86_fp80* %12
%131 = load x86_fp80, x86_fp80* %13
%132 = fmul x86_fp80 %39, %34
%133 = load x86_fp80, x86_fp80* %22
%134 = fsub x86_fp80 %23, %133
%135 = fmul x86_fp80 %134, %38
%136 = fdiv x86_fp80 %132, %135
%137 = fadd x86_fp80 %131, %136
store x86_fp80 %137, x86_fp80* %13
%138 = load x86_fp80, x86_fp80* %14
%139 = fmul x86_fp80 %39, %36
%140 = load x86_fp80, x86_fp80* %22
%141 = fsub x86_fp80 %23, %140
%142 = fmul x86_fp80 %141, %38
%143 = fdiv x86_fp80 %139, %142
%144 = fadd x86_fp80 %138, %143
store x86_fp80 %144, x86_fp80* %14
store i32 0, i32* %9
store i32 0, i32* %10
store i32 0, i32* %11
%145 = load i32, i32* %21
%146 = add nsw i32 %145, 1
store i32 %146, i32* %21
store x86_fp80 %23, x86_fp80* %22
store i32 1, i32* %26
br label %147
147: ; preds = %120, %115
ret i32 0
}