#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*/ init_matrix2(double ***, int /*<<< orphan*/, int,
                                int /*<<< orphan*/, int, int /*<<< orphan*/,
                                int, double);
int /*<<< orphan*/ isfluid(int);
scalar_t__ strcmp(char *, char *);
void init_uvwp(double UI, double VI, double WI, double PI, int ***Flag,
               int imax, int jmax, int kmax, double ***U, double ***V,
               double ***W, double ***P, char *problem) {
  int i, j, k;
  init_matrix2(U, 0, imax + 1, 0, jmax + 1, 0, kmax + 1, UI);
  init_matrix2(V, 0, imax + 1, 0, jmax + 1, 0, kmax + 1, VI);
  init_matrix2(W, 0, imax + 1, 0, jmax + 1, 0, kmax + 1, WI);
  init_matrix2(P, 0, imax + 1, 0, jmax + 1, 0, kmax + 1, PI);
  for (i = 0; i <= imax + 1; i++) {
    for (j = 0; j <= jmax + 1; j++) {
      for (k = 0; k <= kmax + 1; k++) {
        if (!isfluid(Flag[i][j][k])) {
          U[i][j][k] = 0;
          if (i > 0)
            U[i - 1][j][k] = 0;
          V[i][j][k] = 0;
          if (j > 0)
            V[i][j - 1][k] = 0;
          W[i][j][k] = 0;
          if (k > 0)
            W[i][j][k - 1] = 0;
          P[i][j][k] = 0;
        }
      }
    }
  }
  if (strcmp(problem, "step.pgm") == 0 || strcmp(problem, "surface.pgm") == 0) {
    for (i = 0; i <= imax + 1; i++) {
      for (j = 0; j <= jmax + 1; j++) {
        for (k = 0; k <= kmax * 0.5; k++) {
          U[i][j][k] = U[i][j][k] * 0.5;
        }
      }
    }
  } else if (strcmp(problem, "drop.pgm") == 0) {
    for (i = 0; i <= imax + 1; i++) {
      for (j = 0; j < 10; j++) {
        for (k = 0; k <= kmax + 1; k++) {
          V[i][j][k] = 0;
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<init_uvwp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
mov    %rdi,-0x28(%rbp)
mov    %esi,-0x2c(%rbp)
mov    %edx,-0x30(%rbp)
mov    %ecx,-0x34(%rbp)
mov    %r8,-0x40(%rbp)
mov    %r9,-0x48(%rbp)
mov    -0x40(%rbp),%rdi
mov    -0x2c(%rbp),%edx
add    $0x1,%edx
mov    -0x30(%rbp),%r8d
add    $0x1,%r8d
mov    -0x34(%rbp),%eax
add    $0x1,%eax
movsd  -0x8(%rbp),%xmm0
xor    %r9d,%r9d
mov    %r9d,%esi
mov    %r9d,%ecx
mov    %eax,(%rsp)
call   1050 <init_matrix2@plt>
mov    -0x48(%rbp),%rdi
mov    -0x2c(%rbp),%edx
add    $0x1,%edx
mov    -0x30(%rbp),%r8d
add    $0x1,%r8d
mov    -0x34(%rbp),%eax
add    $0x1,%eax
movsd  -0x10(%rbp),%xmm0
xor    %r9d,%r9d
mov    %r9d,%esi
mov    %r9d,%ecx
mov    %eax,(%rsp)
call   1050 <init_matrix2@plt>
mov    0x10(%rbp),%rdi
mov    -0x2c(%rbp),%edx
add    $0x1,%edx
mov    -0x30(%rbp),%r8d
add    $0x1,%r8d
mov    -0x34(%rbp),%eax
add    $0x1,%eax
movsd  -0x18(%rbp),%xmm0
xor    %r9d,%r9d
mov    %r9d,%esi
mov    %r9d,%ecx
mov    %eax,(%rsp)
call   1050 <init_matrix2@plt>
mov    0x18(%rbp),%rdi
mov    -0x2c(%rbp),%edx
add    $0x1,%edx
mov    -0x30(%rbp),%r8d
add    $0x1,%r8d
mov    -0x34(%rbp),%eax
add    $0x1,%eax
movsd  -0x20(%rbp),%xmm0
xor    %r9d,%r9d
mov    %r9d,%esi
mov    %r9d,%ecx
mov    %eax,(%rsp)
call   1050 <init_matrix2@plt>
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     13dc <init_uvwp+0x2ac>
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     13c9 <init_uvwp+0x299>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     13b6 <init_uvwp+0x286>
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,4),%edi
call   1030 <isfluid@plt>
cmp    $0x0,%eax
jne    13a3 <init_uvwp+0x273>
mov    -0x40(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
cmpl   $0x0,-0x4c(%rbp)
jle    12e5 <init_uvwp+0x1b5>
mov    -0x40(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
cmpl   $0x0,-0x50(%rbp)
jle    1334 <init_uvwp+0x204>
mov    -0x48(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
cmpl   $0x0,-0x54(%rbp)
jle    1383 <init_uvwp+0x253>
mov    0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    13a8 <init_uvwp+0x278>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    125c <init_uvwp+0x12c>
jmp    13bb <init_uvwp+0x28b>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1244 <init_uvwp+0x114>
jmp    13ce <init_uvwp+0x29e>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    122c <init_uvwp+0xfc>
mov    0x20(%rbp),%rdi
lea    0xc21(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
je     1410 <init_uvwp+0x2e0>
mov    0x20(%rbp),%rdi
lea    0xc10(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    14e2 <init_uvwp+0x3b2>
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     14dd <init_uvwp+0x3ad>
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     14ca <init_uvwp+0x39a>
movl   $0x0,-0x54(%rbp)
cvtsi2sdl -0x54(%rbp),%xmm1
cvtsi2sdl -0x34(%rbp),%xmm0
movsd  0xba7(%rip),%xmm2
mulsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jb     14b7 <init_uvwp+0x387>
mov    -0x40(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  0xb79(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1447 <init_uvwp+0x317>
jmp    14bc <init_uvwp+0x38c>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    142f <init_uvwp+0x2ff>
jmp    14cf <init_uvwp+0x39f>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1417 <init_uvwp+0x2e7>
jmp    159b <init_uvwp+0x46b>
mov    0x20(%rbp),%rdi
lea    0xb30(%rip),%rsi
call   1040 <strcmp@plt>
cmp    $0x0,%rax
jne    1596 <init_uvwp+0x466>
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     1591 <init_uvwp+0x461>
movl   $0x0,-0x50(%rbp)
cmpl   $0xa,-0x50(%rbp)
jge    157e <init_uvwp+0x44e>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     156b <init_uvwp+0x43b>
mov    -0x48(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    152c <init_uvwp+0x3fc>
jmp    1570 <init_uvwp+0x440>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    151b <init_uvwp+0x3eb>
jmp    1583 <init_uvwp+0x453>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1503 <init_uvwp+0x3d3>
jmp    1596 <init_uvwp+0x466>
jmp    159b <init_uvwp+0x46b>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_uvwp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %r9,%r15
mov    %esi,%r14d
mov    %rdi,%rbp
movsd  %xmm3,0x10(%rsp)
movsd  %xmm2,0x30(%rsp)
movsd  %xmm1,0x28(%rsp)
lea    0x1(%r14),%r13d
mov    %rdx,0x20(%rsp)
lea    0x1(%rdx),%r12d
mov    %rcx,0x8(%rsp)
lea    0x1(%rcx),%ebx
mov    %ebx,(%rsp)
mov    %r8,0x38(%rsp)
mov    %r8,%rdi
xor    %esi,%esi
mov    %r13d,%edx
xor    %ecx,%ecx
mov    %r12d,%r8d
xor    %r9d,%r9d
call   1060 <init_matrix2@plt>
mov    %ebx,(%rsp)
mov    %r15,0x40(%rsp)
mov    %r15,%rdi
xor    %esi,%esi
mov    %r13d,%edx
xor    %ecx,%ecx
mov    %r12d,%r8d
xor    %r9d,%r9d
movsd  0x28(%rsp),%xmm0
call   1060 <init_matrix2@plt>
mov    %ebx,(%rsp)
mov    0xa0(%rsp),%rdi
xor    %esi,%esi
mov    %r13d,%edx
xor    %ecx,%ecx
mov    %r12d,%r8d
xor    %r9d,%r9d
movsd  0x30(%rsp),%xmm0
call   1060 <init_matrix2@plt>
mov    %rbx,0x48(%rsp)
mov    %ebx,(%rsp)
mov    0xa8(%rsp),%rdi
xor    %esi,%esi
mov    %r13,0x58(%rsp)
mov    %r13d,%edx
xor    %ecx,%ecx
mov    %r12,0x50(%rsp)
mov    %r12d,%r8d
xor    %r9d,%r9d
movsd  0x10(%rsp),%xmm0
call   1060 <init_matrix2@plt>
mov    %r14,0x18(%rsp)
cmp    $0xffffffff,%r14d
jge    1381 <init_uvwp+0x241>
lea    0xddf(%rip),%rsi
mov    0xb0(%rsp),%rbx
mov    %rbx,%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1358 <init_uvwp+0x218>
lea    0xdc8(%rip),%rsi
mov    %rbx,%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
je     1358 <init_uvwp+0x218>
lea    0xdbc(%rip),%rsi
mov    %rbx,%rdi
call   1050 <strcmp@plt>
test   %rax,%rax
mov    0x18(%rsp),%r12
jne    1372 <init_uvwp+0x232>
cmp    $0xffffffff,%r12d
jl     1372 <init_uvwp+0x232>
xor    %ebp,%ebp
mov    0x48(%rsp),%rax
test   %eax,%eax
cmovle %ebp,%eax
lea    0x8(,%rax,8),%r14
add    $0x2,%r12d
mov    0x40(%rsp),%r15
jmp    12ad <init_uvwp+0x16d>
add    $0x1,%rbp
cmp    %rbp,%r12
je     1372 <init_uvwp+0x232>
cmpl   $0xffffffff,0x8(%rsp)
jl     12a0 <init_uvwp+0x160>
mov    (%r15,%rbp,8),%rbx
mov    (%rbx),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
mov    0x8(%rbx),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
mov    0x10(%rbx),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
mov    (%r15,%rbp,8),%rbx
mov    0x18(%rbx),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
mov    0x20(%rbx),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
mov    (%r15,%rbp,8),%rbx
mov    0x28(%rbx),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
mov    0x30(%rbx),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
mov    (%r15,%rbp,8),%rbx
mov    0x38(%rbx),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
mov    0x40(%rbx),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
mov    (%r15,%rbp,8),%rax
mov    0x48(%rax),%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1040 <memset@plt>
jmp    12a0 <init_uvwp+0x160>
cmpl   $0xffffffff,0x18(%rsp)
mov    0x38(%rsp),%rdi
mov    0x58(%rsp),%rbp
mov    0x50(%rsp),%rbx
jge    1588 <init_uvwp+0x448>
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x8(%rsp),%rax
lea    0x2(%rax),%ecx
mov    0x20(%rsp),%rax
add    $0x2,%eax
mov    %rax,0x30(%rsp)
mov    0x18(%rsp),%rax
add    $0x2,%eax
mov    %rax,0x60(%rsp)
mov    %rcx,0x28(%rsp)
lea    -0x1(%rcx),%r13
xor    %r15d,%r15d
jmp    13cf <init_uvwp+0x28f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r15
cmp    0x60(%rsp),%r15
je     1222 <init_uvwp+0xe2>
cmpl   $0xffffffff,0x20(%rsp)
jl     13c0 <init_uvwp+0x280>
mov    $0xffffffff,%eax
add    %r15d,%eax
mov    %rax,0x10(%rsp)
xor    %r14d,%r14d
jmp    13fb <init_uvwp+0x2bb>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r14
cmp    0x30(%rsp),%r14
je     13c0 <init_uvwp+0x280>
cmpl   $0xffffffff,0x8(%rsp)
jl     13f0 <init_uvwp+0x2b0>
mov    $0xffffffff,%eax
lea    (%r14,%rax,1),%r12d
mov    0x0(%rbp,%r15,8),%rax
mov    (%rax,%r14,8),%rax
mov    (%rax),%edi
call   1030 <isfluid@plt>
test   %eax,%eax
je     142b <init_uvwp+0x2eb>
cmpl   $0x1,0x28(%rsp)
je     13f0 <init_uvwp+0x2b0>
jmp    14b5 <init_uvwp+0x375>
mov    0x38(%rsp),%rcx
mov    (%rcx,%r15,8),%rax
mov    (%rax,%r14,8),%rax
movq   $0x0,(%rax)
test   %r15,%r15
je     1458 <init_uvwp+0x318>
mov    0x10(%rsp),%rax
mov    (%rcx,%rax,8),%rax
mov    (%rax,%r14,8),%rax
movq   $0x0,(%rax)
mov    0x40(%rsp),%rax
mov    (%rax,%r15,8),%rax
mov    (%rax,%r14,8),%rcx
movq   $0x0,(%rcx)
test   %r14,%r14
je     147c <init_uvwp+0x33c>
mov    (%rax,%r12,8),%rax
movq   $0x0,(%rax)
mov    0xa0(%rsp),%rax
mov    (%rax,%r15,8),%rax
mov    (%rax,%r14,8),%rax
movq   $0x0,(%rax)
mov    0xa8(%rsp),%rax
mov    (%rax,%r15,8),%rax
mov    (%rax,%r14,8),%rax
movq   $0x0,(%rax)
cmpl   $0x1,0x28(%rsp)
je     13f0 <init_uvwp+0x2b0>
xor    %ebx,%ebx
jmp    1510 <init_uvwp+0x3d0>
nopl   0x0(%rax)
mov    0xa0(%rsp),%rax
mov    (%rax,%r15,8),%rax
mov    (%rax,%r14,8),%rax
movq   $0x0,0x8(%rax,%rbx,8)
mov    $0xffffffff,%ecx
lea    0x1(%rcx,%rbx,1),%ecx
movq   $0x0,(%rax,%rcx,8)
mov    0xa8(%rsp),%rax
mov    (%rax,%r15,8),%rax
mov    (%rax,%r14,8),%rax
movq   $0x0,0x8(%rax,%rbx,8)
add    $0x1,%rbx
cmp    %rbx,%r13
je     13f0 <init_uvwp+0x2b0>
mov    0x0(%rbp,%r15,8),%rax
mov    (%rax,%r14,8),%rax
mov    0x4(%rax,%rbx,4),%edi
call   1030 <isfluid@plt>
test   %eax,%eax
jne    1503 <init_uvwp+0x3c3>
mov    0x38(%rsp),%rcx
mov    (%rcx,%r15,8),%rax
mov    (%rax,%r14,8),%rax
movq   $0x0,0x8(%rax,%rbx,8)
test   %r15,%r15
je     1557 <init_uvwp+0x417>
mov    0x10(%rsp),%rax
mov    (%rcx,%rax,8),%rax
mov    (%rax,%r14,8),%rax
movq   $0x0,0x8(%rax,%rbx,8)
mov    0x40(%rsp),%rax
mov    (%rax,%r15,8),%rax
mov    (%rax,%r14,8),%rcx
movq   $0x0,0x8(%rcx,%rbx,8)
test   %r14,%r14
je     14c0 <init_uvwp+0x380>
mov    (%rax,%r12,8),%rax
movq   $0x0,0x8(%rax,%rbx,8)
jmp    14c0 <init_uvwp+0x380>
xorps  %xmm0,%xmm0
cvtsi2sdl 0x8(%rsp),%xmm0
mulsd  0xa67(%rip),%xmm0
xor    %eax,%eax
test   %ebx,%ebx
cmovle %eax,%ebx
add    $0x1,%ebx
test   %ebp,%ebp
cmovle %eax,%ebp
add    $0x1,%ebp
xorpd  %xmm1,%xmm1
movsd  0xa49(%rip),%xmm2
jmp    15cd <init_uvwp+0x48d>
nopl   0x0(%rax)
add    $0x1,%rax
cmp    %rbp,%rax
je     1372 <init_uvwp+0x232>
cmpl   $0xffffffff,0x20(%rsp)
jl     15c0 <init_uvwp+0x480>
xor    %ecx,%ecx
jmp    15e9 <init_uvwp+0x4a9>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rcx
cmp    %rbx,%rcx
je     15c0 <init_uvwp+0x480>
ucomisd %xmm1,%xmm0
jb     15e0 <init_uvwp+0x4a0>
mov    (%rdi,%rax,8),%rdx
mov    (%rdx,%rcx,8),%rdx
xor    %esi,%esi
nopl   0x0(%rax)
movsd  (%rdx,%rsi,8),%xmm3
mulsd  %xmm2,%xmm3
movsd  %xmm3,(%rdx,%rsi,8)
add    $0x1,%rsi
xorps  %xmm3,%xmm3
cvtsi2sd %esi,%xmm3
ucomisd %xmm3,%xmm0
jae    1600 <init_uvwp+0x4c0>
jmp    15e0 <init_uvwp+0x4a0>

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

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