Meter(npatch, timing, work) int npatch;
double *timing, *work;
{
  static double area[8192], box[7], coeff[8192][8192], diag[3][8192],
      emiss[6][3], place[3][8192], result[3][8192], rho[6][3], rhs[3][8192],
      size[2][8192];
  double ops[8], p[6], sec[8], tmp1, tmp2;
  int i, itmp1, non0;
  static int loop[6][2];
  static char *tasks[] = {"Reader", "Region", "SetUp1", "SetUp2",
                          "SetUp3", "Solver", "Storer"};
  static char *format = "%6.6s%8.3f%17.0f%14.6f%10.1f %%\n";
  if (npatch < 6) {
    printf("Must be at least 6, the number of faces.\n");
    return ((1 == 0));
  } else if (npatch > 8192) {
    printf("Exceeds %d = maximum for this system.\n", 8192);
    return ((1 == 0));
  }
  unlink("answer");
  sec[0] = When();
  if (!Reader(box, rho, emiss))
    return ((1 == 0));
  sec[1] = When();
  if (!Region(npatch, loop, box, place, size, area))
    return ((1 == 0));
  sec[2] = When();
  SetUp1(npatch, loop, coeff, place, size);
  sec[3] = When();
  SetUp2(npatch, loop, coeff, place, size);
  sec[4] = When();
  if (!SetUp3(npatch, loop, area, rho, emiss, coeff, diag, rhs))
    return ((1 == 0));
  sec[5] = When();
  non0 = loop[1][0];
  Solver(npatch, non0, coeff, diag, rhs, result);
  sec[6] = When();
  Storer(npatch, loop, place, size, result);
  sec[7] = When();
  *timing = sec[7] - sec[0];
  for (i = 0; i < 7; i++)
    sec[i] = sec[i + 1] - sec[i];
  itmp1 = 0;
  tmp1 = 0.0;
  for (i = 0; i < 6; i++) {
    p[i] = loop[i][1] - loop[i][0] + 1;
    tmp1 += p[i] * p[i];
    itmp1 += sqrt(p[i] * box[i] / box[i + 1]) + 0.5;
  }
  tmp2 = p[0] * p[3] + p[1] * p[4] + p[2] * p[5];
  ops[0] = 258;
  ops[1] = 154 + (double)8 * itmp1 + npatch;
  ops[2] = 3 + 840 * tmp2;
  ops[3] = 430 * ((double)npatch * npatch - tmp1 - 2 * tmp2) / 2.0;
  ops[4] = 72 + (double)9 * npatch + (double)npatch * npatch - tmp1;
  ops[5] = npatch * (npatch * ((double)npatch + 7.5) - 2.5) - 21 +
           (non0 + 1) * ((non0 + 1) * (2 * ((double)non0 + 1) - 16.5) + 35.5) +
           (non0 + 1) * npatch * (9 - 3 * ((double)non0 + 1));
  ops[6] = 48 * npatch;
  *work = ops[0] + ops[1] + ops[2] + ops[3] + ops[4] + ops[5] + ops[6];
  printf("%d patches:\n", npatch);
  printf(" Task  Seconds       Operations        MFLOPS    %% of Time\n");
  for (i = 0; i < 7; i++) {
    if (sec[i] == 0.0)
      sec[i] = 0.001;
    printf(format, tasks[i], sec[i], ops[i], (ops[i] / sec[i]) * 1e-6,
           100.0 * sec[i] / *timing);
  }
  printf(format, "TOTALS", *timing, *work, (*work / *timing) * 1e-6, 100.0);
  Verify(npatch, coeff, diag, rhs, result);
  return ((!(1 == 0)));
}


x86 assembly (clang, -O0):
<Meter>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
cmpl   $0x6,-0x8(%rbp)
jge    11fa <Meter+0x3a>
lea    0xf0b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
jmp    199f <Meter+0x7df>
cmpl   $0x2000,-0x8(%rbp)
jle    1226 <Meter+0x66>
lea    0xf0e(%rip),%rdi
mov    $0x2000,%esi
mov    $0x0,%al
call   1060 <printf@plt>
movl   $0x0,-0x4(%rbp)
jmp    199f <Meter+0x7df>
jmp    122b <Meter+0x6b>
lea    0xf11(%rip),%rdi
mov    $0x0,%al
call   1030 <unlink@plt>
mov    $0x0,%al
call   10e0 <When@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
lea    0x12e8d(%rip),%rdi
lea    0x200a2f56(%rip),%rsi
lea    0x20042ebf(%rip),%rdx
mov    $0x0,%al
call   1040 <Reader@plt>
cmp    $0x0,%eax
jne    127d <Meter+0xbd>
movl   $0x0,-0x4(%rbp)
jmp    199f <Meter+0x7df>
mov    $0x0,%al
call   10e0 <When@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x8(%rbp),%edi
lea    0x200f2fa6(%rip),%rsi
lea    0x12e3f(%rip),%rdx
lea    0x20042f08(%rip),%rcx
lea    0x200d2f91(%rip),%r8
lea    0x2e2a(%rip),%r9
mov    $0x0,%al
call   1090 <Region@plt>
cmp    $0x0,%eax
jne    12d2 <Meter+0x112>
movl   $0x0,-0x4(%rbp)
jmp    199f <Meter+0x7df>
mov    $0x0,%al
call   10e0 <When@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x8(%rbp),%edi
lea    0x200f2f51(%rip),%rsi
lea    0x12e2a(%rip),%rdx
lea    0x20042eb3(%rip),%rcx
lea    0x200d2f3c(%rip),%r8
mov    $0x0,%al
call   10d0 <SetUp1@plt>
mov    $0x0,%al
call   10e0 <When@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x8(%rbp),%edi
lea    0x200f2f18(%rip),%rsi
lea    0x12df1(%rip),%rdx
lea    0x20042e7a(%rip),%rcx
lea    0x200d2f03(%rip),%r8
mov    $0x0,%al
call   1080 <SetUp2@plt>
mov    $0x0,%al
call   10e0 <When@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x8(%rbp),%edi
lea    0x200f2edf(%rip),%rsi
lea    0x2d78(%rip),%rdx
lea    0x200a2e41(%rip),%rcx
lea    0x20042daa(%rip),%r8
lea    0x12da3(%rip),%r9
lea    0x20012d9c(%rip),%r10
lea    0x200a2eb5(%rip),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
mov    $0x0,%al
call   10c0 <SetUp3@plt>
cmp    $0x0,%eax
jne    13b0 <Meter+0x1f0>
movl   $0x0,-0x4(%rbp)
jmp    199f <Meter+0x7df>
mov    $0x0,%al
call   10e0 <When@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x200f2e7f(%rip),%eax
mov    %eax,-0xec(%rbp)
mov    -0x8(%rbp),%edi
mov    -0xec(%rbp),%esi
lea    0x12d41(%rip),%rdx
lea    0x20012d3a(%rip),%rcx
lea    0x200a2e53(%rip),%r8
lea    0x20072dbc(%rip),%r9
mov    $0x0,%al
call   1050 <Solver@plt>
mov    $0x0,%al
call   10e0 <When@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x8(%rbp),%edi
lea    0x200f2e28(%rip),%rsi
lea    0x20042d91(%rip),%rdx
lea    0x200d2e1a(%rip),%rcx
lea    0x20072d83(%rip),%r8
mov    $0x0,%al
call   1070 <Storer@plt>
mov    $0x0,%al
call   10e0 <When@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
subsd  -0xd0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0xe4(%rbp)
cmpl   $0x7,-0xe4(%rbp)
jge    14be <Meter+0x2fe>
mov    -0xe4(%rbp),%eax
add    $0x1,%eax
cltq
movsd  -0xd0(%rbp,%rax,8),%xmm0
ff ff
movslq -0xe4(%rbp),%rax
subsd  -0xd0(%rbp,%rax,8),%xmm0
ff ff
movslq -0xe4(%rbp),%rax
movsd  %xmm0,-0xd0(%rbp,%rax,8)
ff ff
mov    -0xe4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe4(%rbp)
jmp    1469 <Meter+0x2a9>
movl   $0x0,-0xe8(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movl   $0x0,-0xe4(%rbp)
cmpl   $0x6,-0xe4(%rbp)
jge    15d5 <Meter+0x415>
movslq -0xe4(%rbp),%rcx
lea    0x200f2d48(%rip),%rax
mov    0x4(%rax,%rcx,8),%eax
movslq -0xe4(%rbp),%rdx
lea    0x200f2d36(%rip),%rcx
sub    (%rcx,%rdx,8),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
movslq -0xe4(%rbp),%rax
movsd  %xmm0,-0x90(%rbp,%rax,8)
ff ff
movslq -0xe4(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
movslq -0xe4(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm2
ff ff
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movslq -0xe4(%rbp),%rax
movsd  -0x90(%rbp,%rax,8),%xmm0
ff ff
movslq -0xe4(%rbp),%rcx
lea    0x12b66(%rip),%rax
mulsd  (%rax,%rcx,8),%xmm0
mov    -0xe4(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    0x12b4e(%rip),%rax
divsd  (%rax,%rcx,8),%xmm0
call   10a0 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0xaf1(%rip),%xmm0
addsd  %xmm0,%xmm1
cvtsi2sdl -0xe8(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0xe8(%rbp)
mov    -0xe4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe4(%rbp)
jmp    14dd <Meter+0x31d>
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x70(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  0xa5f(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
cvtsi2sdl -0xe8(%rbp),%xmm0
ff
movsd  0xa3a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa36(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl -0x8(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0xe0(%rbp),%xmm0
ff
movsd  0x9fc(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9f8(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
cvtsi2sdl -0x8(%rbp),%xmm1
cvtsi2sdl -0x8(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
addsd  %xmm0,%xmm0
subsd  %xmm0,%xmm1
movsd  0x996(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x982(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
cvtsi2sdl -0x8(%rbp),%xmm1
movsd  0x92c(%rip),%xmm0
mulsd  %xmm0,%xmm1
movsd  0x958(%rip),%xmm0
addsd  %xmm0,%xmm1
cvtsi2sdl -0x8(%rbp),%xmm0
cvtsi2sdl -0x8(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x40(%rbp)
cvtsi2sdl -0x8(%rbp),%xmm0
cvtsi2sdl -0x8(%rbp),%xmm1
cvtsi2sdl -0x8(%rbp),%xmm2
movsd  0x916(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
movsd  0x8fe(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0x8e6(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0xec(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
mov    -0xec(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm2
cvtsi2sdl -0xec(%rbp),%xmm3
ff
movsd  0x8a0(%rip),%xmm4
addsd  %xmm4,%xmm3
addsd  %xmm3,%xmm3
movsd  0x8a0(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm2
movsd  0x888(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0xec(%rbp),%eax
add    $0x1,%eax
imul   -0x8(%rbp),%eax
cvtsi2sd %eax,%xmm0
cvtsi2sdl -0xec(%rbp),%xmm2
ff
movsd  0x853(%rip),%xmm3
addsd  %xmm3,%xmm2
movsd  0x837(%rip),%xmm3
mulsd  %xmm3,%xmm2
movsd  0x833(%rip),%xmm3
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
imul   $0x30,-0x8(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%esi
lea    0x922(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x921(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movl   $0x0,-0xe4(%rbp)
cmpl   $0x7,-0xe4(%rbp)
jge    1929 <Meter+0x769>
movslq -0xe4(%rbp),%rax
movsd  -0xd0(%rbp,%rax,8),%xmm0
ff ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    188f <Meter+0x6cf>
jp     188f <Meter+0x6cf>
movslq -0xe4(%rbp),%rax
movsd  0x80a(%rip),%xmm0
movsd  %xmm0,-0xd0(%rbp,%rax,8)
ff ff
mov    0x2832(%rip),%rdi
movslq -0xe4(%rbp),%rcx
lea    0x27ec(%rip),%rax
mov    (%rax,%rcx,8),%rsi
movslq -0xe4(%rbp),%rax
movsd  -0xd0(%rbp,%rax,8),%xmm0
ff ff
movslq -0xe4(%rbp),%rax
movsd  -0x60(%rbp,%rax,8),%xmm1
movslq -0xe4(%rbp),%rax
movsd  -0x60(%rbp,%rax,8),%xmm2
movslq -0xe4(%rbp),%rax
divsd  -0xd0(%rbp,%rax,8),%xmm2
ff ff
movsd  0x79e(%rip),%xmm3
mulsd  %xmm3,%xmm2
movslq -0xe4(%rbp),%rax
movsd  0x783(%rip),%xmm3
mulsd  -0xd0(%rbp,%rax,8),%xmm3
ff ff
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm3
mov    $0x4,%al
call   1060 <printf@plt>
mov    -0xe4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe4(%rbp)
jmp    1847 <Meter+0x687>
mov    0x2798(%rip),%rdi
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm2
movsd  0x730(%rip),%xmm3
mulsd  %xmm3,%xmm2
lea    0x831(%rip),%rsi
movsd  0x715(%rip),%xmm3
mov    $0x4,%al
call   1060 <printf@plt>
mov    -0x8(%rbp),%edi
lea    0x127a4(%rip),%rsi
lea    0x2001279d(%rip),%rdx
lea    0x200a28b6(%rip),%rcx
lea    0x2007281f(%rip),%r8
mov    $0x0,%al
call   10b0 <Verify@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Meter>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x118,%rsp
cmp    $0x5,%edi
jg     11f9 <Meter+0x29>
lea    0xfa0(%rip),%rdi
call   1040 <puts@plt>
xor    %ebp,%ebp
jmp    1a62 <Meter+0x892>
mov    %edi,%r14d
cmp    $0x2001,%edi
jb     121e <Meter+0x4e>
lea    0xf03(%rip),%rdi
xor    %ebp,%ebp
mov    $0x2000,%esi
xor    %eax,%eax
call   1070 <printf@plt>
jmp    1a62 <Meter+0x892>
mov    %rdx,%rbx
mov    %rsi,%r15
lea    0xf0a(%rip),%rdi
xor    %ebp,%ebp
xor    %eax,%eax
call   1030 <unlink@plt>
xor    %eax,%eax
call   10f0 <When@plt>
mov    %eax,0x50(%rsp)
lea    0x12e5a(%rip),%rdi
lea    0x200a2f23(%rip),%rsi
lea    0x20042e8c(%rip),%rdx
xor    %eax,%eax
call   1050 <Reader@plt>
test   %eax,%eax
je     1a62 <Meter+0x892>
xor    %ebp,%ebp
xor    %eax,%eax
call   10f0 <When@plt>
mov    %eax,0x10(%rsp)
lea    0x200f2f89(%rip),%rsi
lea    0x12e22(%rip),%rdx
lea    0x20042eeb(%rip),%rcx
lea    0x200d2f74(%rip),%r8
lea    0x2e0d(%rip),%r9
mov    %r14d,%edi
xor    %eax,%eax
call   10a0 <Region@plt>
test   %eax,%eax
je     1a62 <Meter+0x892>
xor    %ebp,%ebp
xor    %eax,%eax
call   10f0 <When@plt>
mov    %eax,0x40(%rsp)
lea    0x200f2f47(%rip),%r12
lea    0x12e20(%rip),%rdx
lea    0x20042ea9(%rip),%rcx
mov    %rbx,0x68(%rsp)
lea    0x200d2f2d(%rip),%r13
mov    %r14d,%edi
mov    %r12,%rsi
mov    %rdx,%rbx
mov    %r13,%r8
xor    %eax,%eax
call   10e0 <SetUp1@plt>
xor    %eax,%eax
call   10f0 <When@plt>
mov    %eax,(%rsp)
mov    %r14d,%edi
mov    %r12,%rsi
mov    %rbx,%rdx
lea    0x20042e70(%rip),%rcx
mov    %r13,%r8
mov    0x68(%rsp),%r13
xor    %eax,%eax
call   1090 <SetUp2@plt>
xor    %eax,%eax
call   10f0 <When@plt>
mov    %eax,%r12d
lea    0x200a2ee0(%rip),%r10
lea    0x20012db9(%rip),%r11
lea    0x2d72(%rip),%rdx
lea    0x200a2e3b(%rip),%rcx
lea    0x20042da4(%rip),%r8
mov    %r14d,%edi
lea    0x200f2eba(%rip),%rsi
mov    %rbx,%r9
xor    %eax,%eax
push   %r10
push   %r11
call   10d0 <SetUp3@plt>
add    $0x10,%rsp
test   %eax,%eax
je     1a62 <Meter+0x892>
cvtsi2sdl 0x50(%rsp),%xmm0
movapd %xmm0,0x30(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl 0x10(%rsp),%xmm0
movapd %xmm0,0x20(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sdl 0x40(%rsp),%xmm0
movapd %xmm0,0x50(%rsp)
movd   (%rsp),%xmm0
movd   %r12d,%xmm1
punpckldq %xmm1,%xmm0
cvtdq2pd %xmm0,%xmm0
movaps %xmm0,0x10(%rsp)
xor    %eax,%eax
call   10f0 <When@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movapd %xmm0,0x40(%rsp)
mov    0x200f2e4c(%rip),%r12d
lea    0x200f2e3d(%rip),%rbx
lea    0x12d16(%rip),%rdx
lea    0x20012d0f(%rip),%rcx
lea    0x200a2e28(%rip),%r8
lea    0x20072d91(%rip),%rbp
mov    %r14d,%edi
mov    %r12d,%esi
mov    %rbp,%r9
xor    %eax,%eax
call   1060 <Solver@plt>
xor    %eax,%eax
call   10f0 <When@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,(%rsp)
lea    0x20042d67(%rip),%rdx
lea    0x200d2df0(%rip),%rcx
mov    %r14d,%edi
mov    %rbx,%rsi
mov    %rbp,%r8
xor    %eax,%eax
call   1080 <Storer@plt>
xor    %eax,%eax
call   10f0 <When@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0xc8(%rsp)
movapd %xmm0,%xmm1
movapd 0x30(%rsp),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%r15)
movapd 0x20(%rsp),%xmm3
unpcklpd %xmm3,%xmm2
movapd %xmm2,%xmm1
movapd 0x50(%rsp),%xmm2
unpcklpd %xmm2,%xmm3
subpd  %xmm1,%xmm3
movapd %xmm3,0x90(%rsp)
movapd 0x10(%rsp),%xmm3
movapd %xmm3,%xmm1
subsd  %xmm2,%xmm1
movsd  %xmm1,0xa0(%rsp)
movapd %xmm3,%xmm1
movapd 0x40(%rsp),%xmm2
shufpd $0x1,%xmm2,%xmm1
subpd  %xmm3,%xmm1
movupd %xmm1,0xa8(%rsp)
movsd  (%rsp),%xmm1
subsd  %xmm1,%xmm0
subsd  %xmm2,%xmm1
movsd  %xmm1,0xb8(%rsp)
movsd  %xmm0,0xc0(%rsp)
mov    0x200f2d3d(%rip),%eax
sub    0x200f2d33(%rip),%eax
add    $0x1,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm1,%xmm4
mulsd  %xmm1,%xmm4
xorpd  %xmm3,%xmm3
addsd  %xmm3,%xmm4
movsd  0x12bb1(%rip),%xmm0
movsd  %xmm1,0x50(%rsp)
mulsd  %xmm1,%xmm0
divsd  0x12ba7(%rip),%xmm0
ucomisd %xmm3,%xmm0
jb     150d <Meter+0x33d>
sqrtsd %xmm0,%xmm0
jmp    1522 <Meter+0x352>
movsd  %xmm4,0x10(%rsp)
call   10b0 <sqrt@plt>
movsd  0x10(%rsp),%xmm4
xorpd  %xmm3,%xmm3
addsd  0xad6(%rip),%xmm0
addsd  %xmm3,%xmm0
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm5
mov    0x200f2cd0(%rip),%eax
sub    0x200f2cc6(%rip),%eax
add    $0x1,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
addsd  %xmm4,%xmm2
movsd  0x12b48(%rip),%xmm0
movsd  %xmm1,0x40(%rsp)
mulsd  %xmm1,%xmm0
divsd  0x12b3e(%rip),%xmm0
ucomisd %xmm3,%xmm0
jb     157e <Meter+0x3ae>
sqrtsd %xmm0,%xmm0
jmp    1598 <Meter+0x3c8>
movsd  %xmm2,0x10(%rsp)
movaps %xmm5,(%rsp)
call   10b0 <sqrt@plt>
movapd (%rsp),%xmm5
movsd  0x10(%rsp),%xmm2
addsd  0xa60(%rip),%xmm0
addsd  %xmm5,%xmm0
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm5
mov    0x200f2c62(%rip),%eax
sub    0x200f2c58(%rip),%eax
add    $0x1,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm1,%xmm3
movsd  0x12ade(%rip),%xmm0
movsd  %xmm1,0x10(%rsp)
mulsd  %xmm1,%xmm0
divsd  0x12ad4(%rip),%xmm0
addsd  %xmm2,%xmm3
xorpd  %xmm4,%xmm4
ucomisd %xmm4,%xmm0
jb     15f8 <Meter+0x428>
sqrtsd %xmm0,%xmm0
jmp    1616 <Meter+0x446>
movsd  %xmm3,(%rsp)
movaps %xmm5,0x20(%rsp)
call   10b0 <sqrt@plt>
movapd 0x20(%rsp),%xmm5
xorpd  %xmm4,%xmm4
movsd  (%rsp),%xmm3
addsd  0x9e2(%rip),%xmm0
addsd  %xmm5,%xmm0
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm5
mov    0x200f2bec(%rip),%eax
sub    0x200f2be2(%rip),%eax
add    $0x1,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
addsd  %xmm3,%xmm2
movsd  0x12a64(%rip),%xmm0
movsd  %xmm1,(%rsp)
mulsd  %xmm1,%xmm0
divsd  0x12a5b(%rip),%xmm0
ucomisd %xmm4,%xmm0
jb     1671 <Meter+0x4a1>
sqrtsd %xmm0,%xmm0
jmp    168d <Meter+0x4bd>
movsd  %xmm2,0x20(%rsp)
movaps %xmm5,0x30(%rsp)
call   10b0 <sqrt@plt>
movapd 0x30(%rsp),%xmm5
movsd  0x20(%rsp),%xmm2
addsd  0x96b(%rip),%xmm0
addsd  %xmm5,%xmm0
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm4
mov    0x200f2b7d(%rip),%eax
sub    0x200f2b73(%rip),%eax
add    $0x1,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm1,%xmm3
movsd  0x129f9(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  0x129f5(%rip),%xmm0
addsd  %xmm2,%xmm3
xorpd  %xmm5,%xmm5
ucomisd %xmm5,%xmm0
movsd  %xmm1,0x20(%rsp)
jb     16ed <Meter+0x51d>
sqrtsd %xmm0,%xmm0
jmp    1713 <Meter+0x543>
movsd  %xmm3,0x30(%rsp)
movaps %xmm4,0x70(%rsp)
call   10b0 <sqrt@plt>
movapd 0x70(%rsp),%xmm4
xorpd  %xmm5,%xmm5
movsd  0x30(%rsp),%xmm3
movsd  0x20(%rsp),%xmm1
addsd  0x8e5(%rip),%xmm0
addsd  %xmm4,%xmm0
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm6
mov    0x200f2aff(%rip),%eax
sub    0x200f2af5(%rip),%eax
add    $0x1,%eax
xorps  %xmm4,%xmm4
cvtsi2sd %eax,%xmm4
movapd %xmm4,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movsd  0x12977(%rip),%xmm0
mulsd  %xmm4,%xmm0
divsd  0x12973(%rip),%xmm0
ucomisd %xmm5,%xmm0
jb     1769 <Meter+0x599>
sqrtsd %xmm0,%xmm0
jmp    179d <Meter+0x5cd>
movsd  %xmm2,0x30(%rsp)
movsd  %xmm4,0x70(%rsp)
movaps %xmm6,0x80(%rsp)
call   10b0 <sqrt@plt>
movapd 0x80(%rsp),%xmm6
movsd  0x70(%rsp),%xmm4
movsd  0x20(%rsp),%xmm1
movsd  0x30(%rsp),%xmm2
movsd  0x85b(%rip),%xmm7
addsd  %xmm7,%xmm0
addsd  %xmm6,%xmm0
cvttpd2dq %xmm0,%xmm0
cvtdq2pd %xmm0,%xmm0
movsd  0x40(%rsp),%xmm3
mulsd  %xmm1,%xmm3
movsd  0x50(%rsp),%xmm1
mulsd  (%rsp),%xmm1
addsd  %xmm3,%xmm1
movsd  0x10(%rsp),%xmm6
mulsd  %xmm4,%xmm6
addsd  %xmm1,%xmm6
movabs $0x4070200000000000,%rax
20 70 40
mulsd  0x81a(%rip),%xmm0
addsd  0x81a(%rip),%xmm0
xorps  %xmm4,%xmm4
cvtsi2sd %r14d,%xmm4
mov    %rax,0xd0(%rsp)
addsd  %xmm4,%xmm0
movsd  %xmm0,0xd8(%rsp)
movsd  0x7fd(%rip),%xmm1
mulsd  %xmm6,%xmm1
addsd  0x7f9(%rip),%xmm1
movapd %xmm4,%xmm3
movsd  0x80d(%rip),%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm4,%xmm5
addsd  0x805(%rip),%xmm5
mulsd  %xmm4,%xmm5
mulsd  %xmm4,%xmm4
movsd  0x7dc(%rip),%xmm8
mulsd  %xmm8,%xmm3
addsd  0x7d7(%rip),%xmm3
addsd  %xmm4,%xmm3
subsd  %xmm2,%xmm4
addsd  %xmm6,%xmm6
subsd  %xmm6,%xmm4
mulsd  0x7af(%rip),%xmm4
movsd  %xmm1,0xe0(%rsp)
mulsd  %xmm7,%xmm4
addsd  0x7c2(%rip),%xmm5
movsd  %xmm4,0xe8(%rsp)
lea    0x1(%r12),%eax
xorps  %xmm7,%xmm7
cvtsi2sd %eax,%xmm7
xorps  %xmm6,%xmm6
cvtsi2sd %r12d,%xmm6
addsd  0x7a5(%rip),%xmm6
subsd  %xmm2,%xmm3
movapd %xmm6,%xmm2
addsd  %xmm6,%xmm2
addsd  0x799(%rip),%xmm2
movsd  %xmm3,0xf0(%rsp)
mulsd  %xmm7,%xmm2
addsd  0x78c(%rip),%xmm2
mulsd  %xmm7,%xmm2
imul   %r14d,%eax
xorps  %xmm7,%xmm7
cvtsi2sd %eax,%xmm7
addsd  %xmm5,%xmm2
mulsd  0x779(%rip),%xmm6
addsd  %xmm8,%xmm6
mulsd  %xmm7,%xmm6
addsd  %xmm2,%xmm6
movsd  %xmm6,0xf8(%rsp)
mov    %r14d,%eax
shl    $0x4,%eax
lea    (%rax,%rax,2),%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  %xmm2,0x100(%rsp)
addsd  0x74a(%rip),%xmm0
addsd  %xmm1,%xmm0
addsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
addsd  %xmm6,%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x0(%r13)
lea    0x7ed(%rip),%rdi
xor    %ebx,%ebx
mov    %r14d,%esi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0x7e7(%rip),%rdi
xor    %eax,%eax
call   1070 <printf@plt>
movabs $0x3f50624dd2f1a9fc,%r12
62 50 3f
lea    0x726(%rip),%rbp
lea    0x76c(%rip),%r13
jmp    19d5 <Meter+0x805>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movslq (%rbx,%rbp,1),%rsi
add    %rbp,%rsi
movsd  0xd0(%rsp,%rbx,2),%xmm1
movapd %xmm1,%xmm2
divsd  %xmm0,%xmm2
mulsd  0x6d8(%rip),%xmm2
movapd %xmm0,%xmm3
mulsd  0x6d4(%rip),%xmm3
divsd  (%r15),%xmm3
mov    %r13,%rdi
mov    $0x4,%al
call   1070 <printf@plt>
add    $0x4,%rbx
cmp    $0x1c,%rbx
je     19fc <Meter+0x82c>
movsd  0x90(%rsp,%rbx,2),%xmm0
ucomisd 0x6b2(%rip),%xmm0
jne    1990 <Meter+0x7c0>
jp     1990 <Meter+0x7c0>
mov    %r12,0x90(%rsp,%rbx,2)
movsd  0x686(%rip),%xmm0
jmp    1990 <Meter+0x7c0>
movsd  (%r15),%xmm0
mov    0x68(%rsp),%rax
movsd  (%rax),%xmm1
movapd %xmm1,%xmm2
divsd  %xmm0,%xmm2
mulsd  0x66e(%rip),%xmm2
lea    0x6cc(%rip),%rdi
lea    0x75e(%rip),%rsi
movsd  0x660(%rip),%xmm3
mov    $0x4,%al
call   1070 <printf@plt>
lea    0x126a2(%rip),%rsi
lea    0x2001269b(%rip),%rdx
lea    0x200a27b4(%rip),%rcx
lea    0x2007271d(%rip),%r8
mov    %r14d,%edi
xor    %eax,%eax
call   10c0 <Verify@plt>
mov    $0x1,%ebp
mov    %ebp,%eax
add    $0x118,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@Meter.area = internal global [8192 x double] zeroinitializer
@Meter.box = internal global [7 x double] zeroinitializer
@Meter.coeff = internal global [8192 x [8192 x double]] zeroinitializer
@Meter.diag = internal global [3 x [8192 x double]] zeroinitializer
@Meter.emiss = internal global [6 x [3 x double]] zeroinitializer
@Meter.place = internal global [3 x [8192 x double]] zeroinitializer
@Meter.result = internal global [3 x [8192 x double]] zeroinitializer
@Meter.rho = internal global [6 x [3 x double]] zeroinitializer
@Meter.rhs = internal global [3 x [8192 x double]] zeroinitializer
@Meter.size = internal global [2 x [8192 x double]] zeroinitializer
@Meter.loop = internal global [6 x [2 x i32]] zeroinitializer
@Meter.tasks = internal global [7 x i8*] [i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i32 0, i32 0)]
@.str = [7 x i8] c"Reader\00"
@.str.1 = [7 x i8] c"Region\00"
@.str.2 = [7 x i8] c"SetUp1\00"
@.str.3 = [7 x i8] c"SetUp2\00"
@.str.4 = [7 x i8] c"SetUp3\00"
@.str.5 = [7 x i8] c"Solver\00"
@.str.6 = [7 x i8] c"Storer\00"
@Meter.format = internal global i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.7, i32 0, i32 0)
@.str.7 = [33 x i8] c"%6.6s%8.3f%17.0f%14.6f%10.1f %%\0A\00"
@.str.8 = [42 x i8] c"Must be at least 6, the number of faces.\0A\00"
@.str.9 = [39 x i8] c"Exceeds %d = maximum for this system.\0A\00"
@.str.10 = [7 x i8] c"answer\00"
@.str.11 = [13 x i8] c"%d patches:\0A\00"
@.str.12 = [61 x i8] c" Task Seconds Operations MFLOPS %% of Time\0A\00"
@.str.13 = [7 x i8] c"TOTALS\00"
define i32 @Meter(i32 %0, double* %1, double* %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca double*
%7 = alloca double*
%8 = alloca [8 x double]
%9 = alloca [6 x double]
%10 = alloca [8 x double]
%11 = alloca double
%12 = alloca double
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
store i32 %0, i32* %5
store double* %1, double** %6
store double* %2, double** %7
%16 = load i32, i32* %5
%17 = icmp slt i32 %16, 6
br i1 %17, label %18, label %20
18: ; preds = %3
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.8, i64 0, i64 0))
store i32 0, i32* %4
br label %331
20: ; preds = %3
%21 = load i32, i32* %5
%22 = icmp sgt i32 %21, 8192
br i1 %22, label %23, label %25
23: ; preds = %20
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.9, i64 0, i64 0), i32 8192)
store i32 0, i32* %4
br label %331
25: ; preds = %20
br label %26
26: ; preds = %25
%27 = call i32 (i8*, ...) bitcast (i32 (...)* @unlink to i32 (i8*, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i64 0, i64 0))
%28 = call i32 (...) @When()
%29 = sitofp i32 %28 to double
%30 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 0
store double %29, double* %30
%31 = call i32 (double*, [3 x double]*, [3 x double]*, ...) bitcast (i32 (...)* @Reader to i32 (double*, [3 x double]*, [3 x double]*, ...)*)(double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 0), [3 x double]* getelementptr inbounds ([6 x [3 x double]], [6 x [3 x double]]* @Meter.rho, i64 0, i64 0), [3 x double]* getelementptr inbounds ([6 x [3 x double]], [6 x [3 x double]]* @Meter.emiss, i64 0, i64 0))
%32 = icmp ne i32 %31, 0
br i1 %32, label %34, label %33
33: ; preds = %26
store i32 0, i32* %4
br label %331
34: ; preds = %26
%35 = call i32 (...) @When()
%36 = sitofp i32 %35 to double
%37 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 1
store double %36, double* %37
%38 = load i32, i32* %5
%39 = call i32 (i32, [2 x i32]*, double*, [8192 x double]*, [8192 x double]*, double*, ...) bitcast (i32 (...)* @Region to i32 (i32, [2 x i32]*, double*, [8192 x double]*, [8192 x double]*, double*, ...)*)(i32 %38, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.place, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([2 x [8192 x double]], [2 x [8192 x double]]* @Meter.size, i64 0, i64 0), double* getelementptr inbounds ([8192 x double], [8192 x double]* @Meter.area, i64 0, i64 0))
%40 = icmp ne i32 %39, 0
br i1 %40, label %42, label %41
41: ; preds = %34
store i32 0, i32* %4
br label %331
42: ; preds = %34
%43 = call i32 (...) @When()
%44 = sitofp i32 %43 to double
%45 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 2
store double %44, double* %45
%46 = load i32, i32* %5
%47 = call i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @SetUp1 to i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %46, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.place, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([2 x [8192 x double]], [2 x [8192 x double]]* @Meter.size, i64 0, i64 0))
%48 = call i32 (...) @When()
%49 = sitofp i32 %48 to double
%50 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 3
store double %49, double* %50
%51 = load i32, i32* %5
%52 = call i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @SetUp2 to i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %51, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.place, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([2 x [8192 x double]], [2 x [8192 x double]]* @Meter.size, i64 0, i64 0))
%53 = call i32 (...) @When()
%54 = sitofp i32 %53 to double
%55 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 4
store double %54, double* %55
%56 = load i32, i32* %5
%57 = call i32 (i32, [2 x i32]*, double*, [3 x double]*, [3 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @SetUp3 to i32 (i32, [2 x i32]*, double*, [3 x double]*, [3 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %56, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), double* getelementptr inbounds ([8192 x double], [8192 x double]* @Meter.area, i64 0, i64 0), [3 x double]* getelementptr inbounds ([6 x [3 x double]], [6 x [3 x double]]* @Meter.rho, i64 0, i64 0), [3 x double]* getelementptr inbounds ([6 x [3 x double]], [6 x [3 x double]]* @Meter.emiss, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.diag, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.rhs, i64 0, i64 0))
%58 = icmp ne i32 %57, 0
br i1 %58, label %60, label %59
59: ; preds = %42
store i32 0, i32* %4
br label %331
60: ; preds = %42
%61 = call i32 (...) @When()
%62 = sitofp i32 %61 to double
%63 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 5
store double %62, double* %63
%64 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 1, i64 0)
store i32 %64, i32* %15
%65 = load i32, i32* %5
%66 = load i32, i32* %15
%67 = call i32 (i32, i32, [8192 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @Solver to i32 (i32, i32, [8192 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %65, i32 %66, [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.diag, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.rhs, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.result, i64 0, i64 0))
%68 = call i32 (...) @When()
%69 = sitofp i32 %68 to double
%70 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 6
store double %69, double* %70
%71 = load i32, i32* %5
%72 = call i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @Storer to i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %71, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.place, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([2 x [8192 x double]], [2 x [8192 x double]]* @Meter.size, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.result, i64 0, i64 0))
%73 = call i32 (...) @When()
%74 = sitofp i32 %73 to double
%75 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 7
store double %74, double* %75
%76 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 7
%77 = load double, double* %76
%78 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 0
%79 = load double, double* %78
%80 = fsub double %77, %79
%81 = load double*, double** %6
store double %80, double* %81
store i32 0, i32* %13
br label %82
82: ; preds = %99, %60
%83 = load i32, i32* %13
%84 = icmp slt i32 %83, 7
br i1 %84, label %85, label %102
85: ; preds = %82
%86 = load i32, i32* %13
%87 = add nsw i32 %86, 1
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 %88
%90 = load double, double* %89
%91 = load i32, i32* %13
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 %92
%94 = load double, double* %93
%95 = fsub double %90, %94
%96 = load i32, i32* %13
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 %97
store double %95, double* %98
br label %99
99: ; preds = %85
%100 = load i32, i32* %13
%101 = add nsw i32 %100, 1
store i32 %101, i32* %13
br label %82
102: ; preds = %82
store i32 0, i32* %14
store double 0.000000e+00, double* %11
store i32 0, i32* %13
br label %103
103: ; preds = %154, %102
%104 = load i32, i32* %13
%105 = icmp slt i32 %104, 6
br i1 %105, label %106, label %157
106: ; preds = %103
%107 = load i32, i32* %13
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds [6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 %108
%110 = getelementptr inbounds [2 x i32], [2 x i32]* %109, i64 0, i64 1
%111 = load i32, i32* %110
%112 = load i32, i32* %13
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds [6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 %113
%115 = getelementptr inbounds [2 x i32], [2 x i32]* %114, i64 0, i64 0
%116 = load i32, i32* %115
%117 = sub nsw i32 %111, %116
%118 = add nsw i32 %117, 1
%119 = sitofp i32 %118 to double
%120 = load i32, i32* %13
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 %121
store double %119, double* %122
%123 = load i32, i32* %13
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 %124
%126 = load double, double* %125
%127 = load i32, i32* %13
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 %128
%130 = load double, double* %129
%131 = load double, double* %11
%132 = call double @llvm.fmuladd.f64(double %126, double %130, double %131)
store double %132, double* %11
%133 = load i32, i32* %13
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 %134
%136 = load double, double* %135
%137 = load i32, i32* %13
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds [7 x double], [7 x double]* @Meter.box, i64 0, i64 %138
%140 = load double, double* %139
%141 = fmul double %136, %140
%142 = load i32, i32* %13
%143 = add nsw i32 %142, 1
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds [7 x double], [7 x double]* @Meter.box, i64 0, i64 %144
%146 = load double, double* %145
%147 = fdiv double %141, %146
%148 = call double @sqrt(double %147)
%149 = fadd double %148, 5.000000e-01
%150 = load i32, i32* %14
%151 = sitofp i32 %150 to double
%152 = fadd double %151, %149
%153 = fptosi double %152 to i32
store i32 %153, i32* %14
br label %154
154: ; preds = %106
%155 = load i32, i32* %13
%156 = add nsw i32 %155, 1
store i32 %156, i32* %13
br label %103
157: ; preds = %103
%158 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 0
%159 = load double, double* %158
%160 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 3
%161 = load double, double* %160
%162 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 1
%163 = load double, double* %162
%164 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 4
%165 = load double, double* %164
%166 = fmul double %163, %165
%167 = call double @llvm.fmuladd.f64(double %159, double %161, double %166)
%168 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 2
%169 = load double, double* %168
%170 = getelementptr inbounds [6 x double], [6 x double]* %9, i64 0, i64 5
%171 = load double, double* %170
%172 = call double @llvm.fmuladd.f64(double %169, double %171, double %167)
store double %172, double* %12
%173 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 0
store double 2.580000e+02, double* %173
%174 = load i32, i32* %14
%175 = sitofp i32 %174 to double
%176 = call double @llvm.fmuladd.f64(double 8.000000e+00, double %175, double 1.540000e+02)
%177 = load i32, i32* %5
%178 = sitofp i32 %177 to double
%179 = fadd double %176, %178
%180 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 1
store double %179, double* %180
%181 = load double, double* %12
%182 = call double @llvm.fmuladd.f64(double 8.400000e+02, double %181, double 3.000000e+00)
%183 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 2
store double %182, double* %183
%184 = load i32, i32* %5
%185 = sitofp i32 %184 to double
%186 = load i32, i32* %5
%187 = sitofp i32 %186 to double
%188 = load double, double* %11
%189 = fneg double %188
%190 = call double @llvm.fmuladd.f64(double %185, double %187, double %189)
%191 = load double, double* %12
%192 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %191, double %190)
%193 = fmul double 4.300000e+02, %192
%194 = fdiv double %193, 2.000000e+00
%195 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 3
store double %194, double* %195
%196 = load i32, i32* %5
%197 = sitofp i32 %196 to double
%198 = call double @llvm.fmuladd.f64(double 9.000000e+00, double %197, double 7.200000e+01)
%199 = load i32, i32* %5
%200 = sitofp i32 %199 to double
%201 = load i32, i32* %5
%202 = sitofp i32 %201 to double
%203 = call double @llvm.fmuladd.f64(double %200, double %202, double %198)
%204 = load double, double* %11
%205 = fsub double %203, %204
%206 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 4
store double %205, double* %206
%207 = load i32, i32* %5
%208 = sitofp i32 %207 to double
%209 = load i32, i32* %5
%210 = sitofp i32 %209 to double
%211 = load i32, i32* %5
%212 = sitofp i32 %211 to double
%213 = fadd double %212, 7.500000e+00
%214 = call double @llvm.fmuladd.f64(double %210, double %213, double -2.500000e+00)
%215 = call double @llvm.fmuladd.f64(double %208, double %214, double -2.100000e+01)
%216 = load i32, i32* %15
%217 = add nsw i32 %216, 1
%218 = sitofp i32 %217 to double
%219 = load i32, i32* %15
%220 = add nsw i32 %219, 1
%221 = sitofp i32 %220 to double
%222 = load i32, i32* %15
%223 = sitofp i32 %222 to double
%224 = fadd double %223, 1.000000e+00
%225 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %224, double -1.650000e+01)
%226 = call double @llvm.fmuladd.f64(double %221, double %225, double 3.550000e+01)
%227 = call double @llvm.fmuladd.f64(double %218, double %226, double %215)
%228 = load i32, i32* %15
%229 = add nsw i32 %228, 1
%230 = load i32, i32* %5
%231 = mul nsw i32 %229, %230
%232 = sitofp i32 %231 to double
%233 = load i32, i32* %15
%234 = sitofp i32 %233 to double
%235 = fadd double %234, 1.000000e+00
%236 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %235, double 9.000000e+00)
%237 = call double @llvm.fmuladd.f64(double %232, double %236, double %227)
%238 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 5
store double %237, double* %238
%239 = load i32, i32* %5
%240 = mul nsw i32 48, %239
%241 = sitofp i32 %240 to double
%242 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 6
store double %241, double* %242
%243 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 0
%244 = load double, double* %243
%245 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 1
%246 = load double, double* %245
%247 = fadd double %244, %246
%248 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 2
%249 = load double, double* %248
%250 = fadd double %247, %249
%251 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 3
%252 = load double, double* %251
%253 = fadd double %250, %252
%254 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 4
%255 = load double, double* %254
%256 = fadd double %253, %255
%257 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 5
%258 = load double, double* %257
%259 = fadd double %256, %258
%260 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 6
%261 = load double, double* %260
%262 = fadd double %259, %261
%263 = load double*, double** %7
store double %262, double* %263
%264 = load i32, i32* %5
%265 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0), i32 %264)
%266 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.12, i64 0, i64 0))
store i32 0, i32* %13
br label %267
267: ; preds = %313, %157
%268 = load i32, i32* %13
%269 = icmp slt i32 %268, 7
br i1 %269, label %270, label %316
270: ; preds = %267
%271 = load i32, i32* %13
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 %272
%274 = load double, double* %273
%275 = fcmp oeq double %274, 0.000000e+00
br i1 %275, label %276, label %280
276: ; preds = %270
%277 = load i32, i32* %13
%278 = sext i32 %277 to i64
%279 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 %278
store double 1.000000e-03, double* %279
br label %280
280: ; preds = %276, %270
%281 = load i8*, i8** @Meter.format
%282 = load i32, i32* %13
%283 = sext i32 %282 to i64
%284 = getelementptr inbounds [7 x i8*], [7 x i8*]* @Meter.tasks, i64 0, i64 %283
%285 = load i8*, i8** %284
%286 = load i32, i32* %13
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 %287
%289 = load double, double* %288
%290 = load i32, i32* %13
%291 = sext i32 %290 to i64
%292 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 %291
%293 = load double, double* %292
%294 = load i32, i32* %13
%295 = sext i32 %294 to i64
%296 = getelementptr inbounds [8 x double], [8 x double]* %8, i64 0, i64 %295
%297 = load double, double* %296
%298 = load i32, i32* %13
%299 = sext i32 %298 to i64
%300 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 %299
%301 = load double, double* %300
%302 = fdiv double %297, %301
%303 = fmul double %302, 0x3EB0C6F7A0B5ED8D
%304 = load i32, i32* %13
%305 = sext i32 %304 to i64
%306 = getelementptr inbounds [8 x double], [8 x double]* %10, i64 0, i64 %305
%307 = load double, double* %306
%308 = fmul double 1.000000e+02, %307
%309 = load double*, double** %6
%310 = load double, double* %309
%311 = fdiv double %308, %310
%312 = call i32 (i8*, ...) @printf(i8* %281, i8* %285, double %289, double %293, double %303, double %311)
br label %313
313: ; preds = %280
%314 = load i32, i32* %13
%315 = add nsw i32 %314, 1
store i32 %315, i32* %13
br label %267
316: ; preds = %267
%317 = load i8*, i8** @Meter.format
%318 = load double*, double** %6
%319 = load double, double* %318
%320 = load double*, double** %7
%321 = load double, double* %320
%322 = load double*, double** %7
%323 = load double, double* %322
%324 = load double*, double** %6
%325 = load double, double* %324
%326 = fdiv double %323, %325
%327 = fmul double %326, 0x3EB0C6F7A0B5ED8D
%328 = call i32 (i8*, ...) @printf(i8* %317, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.13, i64 0, i64 0), double %319, double %321, double %327, double 1.000000e+02)
%329 = load i32, i32* %5
%330 = call i32 (i32, [8192 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @Verify to i32 (i32, [8192 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %329, [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.diag, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.rhs, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.result, i64 0, i64 0))
store i32 1, i32* %4
br label %331
331: ; preds = %316, %59, %41, %33, %23, %18
%332 = load i32, i32* %4
ret i32 %332
}

LLVM IR (-O2):
@Meter.area = internal global [8192 x double] zeroinitializer
@Meter.box = internal global [7 x double] zeroinitializer
@Meter.coeff = internal global [8192 x [8192 x double]] zeroinitializer
@Meter.diag = internal global [3 x [8192 x double]] zeroinitializer
@Meter.emiss = internal global [6 x [3 x double]] zeroinitializer
@Meter.place = internal global [3 x [8192 x double]] zeroinitializer
@Meter.result = internal global [3 x [8192 x double]] zeroinitializer
@Meter.rho = internal global [6 x [3 x double]] zeroinitializer
@Meter.rhs = internal global [3 x [8192 x double]] zeroinitializer
@Meter.size = internal global [2 x [8192 x double]] zeroinitializer
@Meter.loop = internal global [6 x [2 x i32]] zeroinitializer
@reltable.Meter = internal unnamed_addr constant [7 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str to i64), i64 ptrtoint ([7 x i32]* @reltable.Meter to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.1 to i64), i64 ptrtoint ([7 x i32]* @reltable.Meter to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.2 to i64), i64 ptrtoint ([7 x i32]* @reltable.Meter to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.3 to i64), i64 ptrtoint ([7 x i32]* @reltable.Meter to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.4 to i64), i64 ptrtoint ([7 x i32]* @reltable.Meter to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.5 to i64), i64 ptrtoint ([7 x i32]* @reltable.Meter to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.6 to i64), i64 ptrtoint ([7 x i32]* @reltable.Meter to i64)) to i32)]
@.str = [7 x i8] c"Reader\00"
@.str.1 = [7 x i8] c"Region\00"
@.str.2 = [7 x i8] c"SetUp1\00"
@.str.3 = [7 x i8] c"SetUp2\00"
@.str.4 = [7 x i8] c"SetUp3\00"
@.str.5 = [7 x i8] c"Solver\00"
@.str.6 = [7 x i8] c"Storer\00"
@.str.7 = [33 x i8] c"%6.6s%8.3f%17.0f%14.6f%10.1f %%\0A\00"
@.str.9 = [39 x i8] c"Exceeds %d = maximum for this system.\0A\00"
@.str.10 = [7 x i8] c"answer\00"
@.str.11 = [13 x i8] c"%d patches:\0A\00"
@.str.12 = [61 x i8] c" Task Seconds Operations MFLOPS %% of Time\0A\00"
@.str.13 = [7 x i8] c"TOTALS\00"
@str = [41 x i8] c"Must be at least 6, the number of faces.\00"
define i32 @Meter(i32 %0, double* nocapture %1, double* nocapture %2) {
%4 = alloca [8 x double]
%5 = alloca [8 x double]
%6 = bitcast [8 x double]* %4 to i8*
%7 = bitcast [8 x double]* %5 to i8*
%8 = icmp slt i32 %0, 6
br i1 %8, label %9, label %11
9: ; preds = %3
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str, i64 0, i64 0))
br label %232
11: ; preds = %3
%12 = icmp ugt i32 %0, 8192
br i1 %12, label %13, label %15
13: ; preds = %11
%14 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @.str.9, i64 0, i64 0), i32 8192)
br label %232
15: ; preds = %11
%16 = tail call i32 (i8*, ...) bitcast (i32 (...)* @unlink to i32 (i8*, ...)*)(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i64 0, i64 0))
%17 = tail call i32 (...) @When()
%18 = sitofp i32 %17 to double
%19 = tail call i32 (double*, [3 x double]*, [3 x double]*, ...) bitcast (i32 (...)* @Reader to i32 (double*, [3 x double]*, [3 x double]*, ...)*)(double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 0), [3 x double]* getelementptr inbounds ([6 x [3 x double]], [6 x [3 x double]]* @Meter.rho, i64 0, i64 0), [3 x double]* getelementptr inbounds ([6 x [3 x double]], [6 x [3 x double]]* @Meter.emiss, i64 0, i64 0))
%20 = icmp eq i32 %19, 0
br i1 %20, label %232, label %21
21: ; preds = %15
%22 = tail call i32 (...) @When()
%23 = sitofp i32 %22 to double
%24 = tail call i32 (i32, [2 x i32]*, double*, [8192 x double]*, [8192 x double]*, double*, ...) bitcast (i32 (...)* @Region to i32 (i32, [2 x i32]*, double*, [8192 x double]*, [8192 x double]*, double*, ...)*)(i32 %0, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.place, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([2 x [8192 x double]], [2 x [8192 x double]]* @Meter.size, i64 0, i64 0), double* getelementptr inbounds ([8192 x double], [8192 x double]* @Meter.area, i64 0, i64 0))
%25 = icmp eq i32 %24, 0
br i1 %25, label %232, label %26
26: ; preds = %21
%27 = tail call i32 (...) @When()
%28 = sitofp i32 %27 to double
%29 = tail call i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @SetUp1 to i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %0, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.place, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([2 x [8192 x double]], [2 x [8192 x double]]* @Meter.size, i64 0, i64 0))
%30 = tail call i32 (...) @When()
%31 = tail call i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @SetUp2 to i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %0, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.place, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([2 x [8192 x double]], [2 x [8192 x double]]* @Meter.size, i64 0, i64 0))
%32 = tail call i32 (...) @When()
%33 = insertelement <2 x i32> poison, i32 %30, i64 0
%34 = insertelement <2 x i32> %33, i32 %32, i64 1
%35 = sitofp <2 x i32> %34 to <2 x double>
%36 = tail call i32 (i32, [2 x i32]*, double*, [3 x double]*, [3 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @SetUp3 to i32 (i32, [2 x i32]*, double*, [3 x double]*, [3 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %0, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), double* getelementptr inbounds ([8192 x double], [8192 x double]* @Meter.area, i64 0, i64 0), [3 x double]* getelementptr inbounds ([6 x [3 x double]], [6 x [3 x double]]* @Meter.rho, i64 0, i64 0), [3 x double]* getelementptr inbounds ([6 x [3 x double]], [6 x [3 x double]]* @Meter.emiss, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.diag, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.rhs, i64 0, i64 0))
%37 = icmp eq i32 %36, 0
br i1 %37, label %232, label %38
38: ; preds = %26
%39 = getelementptr inbounds [8 x double], [8 x double]* %5, i64 0, i64 3
%40 = getelementptr inbounds [8 x double], [8 x double]* %5, i64 0, i64 2
%41 = tail call i32 (...) @When()
%42 = sitofp i32 %41 to double
%43 = getelementptr inbounds [8 x double], [8 x double]* %5, i64 0, i64 5
%44 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 1, i64 0)
%45 = tail call i32 (i32, i32, [8192 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @Solver to i32 (i32, i32, [8192 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %0, i32 %44, [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.diag, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.rhs, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.result, i64 0, i64 0))
%46 = tail call i32 (...) @When()
%47 = sitofp i32 %46 to double
%48 = getelementptr inbounds [8 x double], [8 x double]* %5, i64 0, i64 6
%49 = tail call i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @Storer to i32 (i32, [2 x i32]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %0, [2 x i32]* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.place, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([2 x [8192 x double]], [2 x [8192 x double]]* @Meter.size, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.result, i64 0, i64 0))
%50 = tail call i32 (...) @When()
%51 = sitofp i32 %50 to double
%52 = getelementptr inbounds [8 x double], [8 x double]* %5, i64 0, i64 7
store double %51, double* %52
%53 = fsub double %51, %18
store double %53, double* %1
%54 = insertelement <2 x double> poison, double %23, i64 0
%55 = insertelement <2 x double> %54, double %28, i64 1
%56 = insertelement <2 x double> poison, double %18, i64 0
%57 = insertelement <2 x double> %56, double %23, i64 1
%58 = fsub <2 x double> %55, %57
%59 = bitcast [8 x double]* %5 to <2 x double>*
store <2 x double> %58, <2 x double>* %59
%60 = extractelement <2 x double> %35, i64 0
%61 = fsub double %60, %28
store double %61, double* %40
%62 = extractelement <2 x double> %35, i64 1
%63 = insertelement <2 x double> poison, double %62, i64 0
%64 = insertelement <2 x double> %63, double %42, i64 1
%65 = fsub <2 x double> %64, %35
%66 = bitcast double* %39 to <2 x double>*
store <2 x double> %65, <2 x double>* %66
%67 = fsub double %47, %42
store double %67, double* %43
%68 = fsub double %51, %47
store double %68, double* %48
%69 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0, i64 1)
%70 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 0, i64 0)
%71 = add i32 %69, 1
%72 = sub i32 %71, %70
%73 = sitofp i32 %72 to double
%74 = tail call double @llvm.fmuladd.f64(double %73, double %73, double 0.000000e+00)
%75 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 0)
%76 = fmul double %75, %73
%77 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 1)
%78 = fdiv double %76, %77
%79 = tail call double @sqrt(double %78)
%80 = fadd double %79, 5.000000e-01
%81 = fadd double %80, 0.000000e+00
%82 = fptosi double %81 to i32
%83 = sitofp i32 %82 to double
%84 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 1, i64 1)
%85 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 1, i64 0)
%86 = add i32 %84, 1
%87 = sub i32 %86, %85
%88 = sitofp i32 %87 to double
%89 = tail call double @llvm.fmuladd.f64(double %88, double %88, double %74)
%90 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 1)
%91 = fmul double %90, %88
%92 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 2)
%93 = fdiv double %91, %92
%94 = tail call double @sqrt(double %93)
%95 = fadd double %94, 5.000000e-01
%96 = fadd double %95, %83
%97 = fptosi double %96 to i32
%98 = sitofp i32 %97 to double
%99 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 2, i64 1)
%100 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 2, i64 0)
%101 = add i32 %99, 1
%102 = sub i32 %101, %100
%103 = sitofp i32 %102 to double
%104 = tail call double @llvm.fmuladd.f64(double %103, double %103, double %89)
%105 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 2)
%106 = fmul double %105, %103
%107 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 3)
%108 = fdiv double %106, %107
%109 = tail call double @sqrt(double %108)
%110 = fadd double %109, 5.000000e-01
%111 = fadd double %110, %98
%112 = fptosi double %111 to i32
%113 = sitofp i32 %112 to double
%114 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 3, i64 1)
%115 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 3, i64 0)
%116 = add i32 %114, 1
%117 = sub i32 %116, %115
%118 = sitofp i32 %117 to double
%119 = tail call double @llvm.fmuladd.f64(double %118, double %118, double %104)
%120 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 3)
%121 = fmul double %120, %118
%122 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 4)
%123 = fdiv double %121, %122
%124 = tail call double @sqrt(double %123)
%125 = fadd double %124, 5.000000e-01
%126 = fadd double %125, %113
%127 = fptosi double %126 to i32
%128 = sitofp i32 %127 to double
%129 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 4, i64 1)
%130 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 4, i64 0)
%131 = add i32 %129, 1
%132 = sub i32 %131, %130
%133 = sitofp i32 %132 to double
%134 = tail call double @llvm.fmuladd.f64(double %133, double %133, double %119)
%135 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 4)
%136 = fmul double %135, %133
%137 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 5)
%138 = fdiv double %136, %137
%139 = tail call double @sqrt(double %138)
%140 = fadd double %139, 5.000000e-01
%141 = fadd double %140, %128
%142 = fptosi double %141 to i32
%143 = sitofp i32 %142 to double
%144 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 5, i64 1)
%145 = load i32, i32* getelementptr inbounds ([6 x [2 x i32]], [6 x [2 x i32]]* @Meter.loop, i64 0, i64 5, i64 0)
%146 = add i32 %144, 1
%147 = sub i32 %146, %145
%148 = sitofp i32 %147 to double
%149 = tail call double @llvm.fmuladd.f64(double %148, double %148, double %134)
%150 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 5)
%151 = fmul double %150, %148
%152 = load double, double* getelementptr inbounds ([7 x double], [7 x double]* @Meter.box, i64 0, i64 6)
%153 = fdiv double %151, %152
%154 = tail call double @sqrt(double %153)
%155 = fadd double %154, 5.000000e-01
%156 = fadd double %155, %143
%157 = fptosi double %156 to i32
%158 = sitofp i32 %157 to double
%159 = fmul double %88, %133
%160 = tail call double @llvm.fmuladd.f64(double %73, double %118, double %159)
%161 = tail call double @llvm.fmuladd.f64(double %103, double %148, double %160)
%162 = getelementptr inbounds [8 x double], [8 x double]* %4, i64 0, i64 0
store double 2.580000e+02, double* %162
%163 = tail call double @llvm.fmuladd.f64(double %158, double 8.000000e+00, double 1.540000e+02)
%164 = sitofp i32 %0 to double
%165 = fadd double %163, %164
%166 = getelementptr inbounds [8 x double], [8 x double]* %4, i64 0, i64 1
store double %165, double* %166
%167 = tail call double @llvm.fmuladd.f64(double %161, double 8.400000e+02, double 3.000000e+00)
%168 = getelementptr inbounds [8 x double], [8 x double]* %4, i64 0, i64 2
store double %167, double* %168
%169 = fneg double %149
%170 = tail call double @llvm.fmuladd.f64(double %164, double %164, double %169)
%171 = tail call double @llvm.fmuladd.f64(double %161, double -2.000000e+00, double %170)
%172 = fmul double %171, 4.300000e+02
%173 = fmul double %172, 5.000000e-01
%174 = getelementptr inbounds [8 x double], [8 x double]* %4, i64 0, i64 3
store double %173, double* %174
%175 = tail call double @llvm.fmuladd.f64(double %164, double 9.000000e+00, double 7.200000e+01)
%176 = tail call double @llvm.fmuladd.f64(double %164, double %164, double %175)
%177 = fsub double %176, %149
%178 = getelementptr inbounds [8 x double], [8 x double]* %4, i64 0, i64 4
store double %177, double* %178
%179 = fadd double %164, 7.500000e+00
%180 = tail call double @llvm.fmuladd.f64(double %164, double %179, double -2.500000e+00)
%181 = tail call double @llvm.fmuladd.f64(double %164, double %180, double -2.100000e+01)
%182 = add nsw i32 %44, 1
%183 = sitofp i32 %182 to double
%184 = sitofp i32 %44 to double
%185 = fadd double %184, 1.000000e+00
%186 = tail call double @llvm.fmuladd.f64(double %185, double 2.000000e+00, double -1.650000e+01)
%187 = tail call double @llvm.fmuladd.f64(double %183, double %186, double 3.550000e+01)
%188 = tail call double @llvm.fmuladd.f64(double %183, double %187, double %181)
%189 = mul nsw i32 %182, %0
%190 = sitofp i32 %189 to double
%191 = tail call double @llvm.fmuladd.f64(double %185, double -3.000000e+00, double 9.000000e+00)
%192 = tail call double @llvm.fmuladd.f64(double %190, double %191, double %188)
%193 = getelementptr inbounds [8 x double], [8 x double]* %4, i64 0, i64 5
store double %192, double* %193
%194 = mul nuw nsw i32 %0, 48
%195 = sitofp i32 %194 to double
%196 = getelementptr inbounds [8 x double], [8 x double]* %4, i64 0, i64 6
store double %195, double* %196
%197 = fadd double %165, 2.580000e+02
%198 = fadd double %197, %167
%199 = fadd double %198, %173
%200 = fadd double %177, %199
%201 = fadd double %192, %200
%202 = fadd double %201, %195
store double %202, double* %2
%203 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0), i32 %0)
%204 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([61 x i8], [61 x i8]* @.str.12, i64 0, i64 0))
br label %205
205: ; preds = %38, %211
%206 = phi i64 [ 0, %38 ], [ %223, %211 ]
%207 = getelementptr inbounds [8 x double], [8 x double]* %5, i64 0, i64 %206
%208 = load double, double* %207
%209 = fcmp oeq double %208, 0.000000e+00
br i1 %209, label %210, label %211
210: ; preds = %205
store double 1.000000e-03, double* %207
br label %211
211: ; preds = %210, %205
%212 = phi double [ 1.000000e-03, %210 ], [ %208, %205 ]
%213 = shl i64 %206, 2
%214 = call i8* @llvm.load.relative.i64(i8* bitcast ([7 x i32]* @reltable.Meter to i8*), i64 %213)
%215 = getelementptr inbounds [8 x double], [8 x double]* %4, i64 0, i64 %206
%216 = load double, double* %215
%217 = fdiv double %216, %212
%218 = fmul double %217, 0x3EB0C6F7A0B5ED8D
%219 = fmul double %212, 1.000000e+02
%220 = load double, double* %1
%221 = fdiv double %219, %220
%222 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.7, i64 0, i64 0), i8* %214, double %212, double %216, double %218, double %221)
%223 = add nuw nsw i64 %206, 1
%224 = icmp eq i64 %223, 7
br i1 %224, label %225, label %205
225: ; preds = %211
%226 = load double, double* %1
%227 = load double, double* %2
%228 = fdiv double %227, %226
%229 = fmul double %228, 0x3EB0C6F7A0B5ED8D
%230 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.13, i64 0, i64 0), double %226, double %227, double %229, double 1.000000e+02)
%231 = tail call i32 (i32, [8192 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...) bitcast (i32 (...)* @Verify to i32 (i32, [8192 x double]*, [8192 x double]*, [8192 x double]*, [8192 x double]*, ...)*)(i32 %0, [8192 x double]* getelementptr inbounds ([8192 x [8192 x double]], [8192 x [8192 x double]]* @Meter.coeff, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.diag, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.rhs, i64 0, i64 0), [8192 x double]* getelementptr inbounds ([3 x [8192 x double]], [3 x [8192 x double]]* @Meter.result, i64 0, i64 0))
br label %232
232: ; preds = %26, %21, %15, %225, %13, %9
%233 = phi i32 [ 0, %9 ], [ 0, %13 ], [ 1, %225 ], [ 0, %15 ], [ 0, %21 ], [ 0, %26 ]
ret i32 %233
}