void prop4(int l, double r, double v, double p[5][5]) {
  int lp1, lm1, lp2, lm2, lp3, lm3, l2, i, j;
  int rl, rlp1, rlm1, rlp2, rlm2, rlp3, rlm3, rl2;
  double c[5][5], rlambda[5][5], b[5][5], x[5][5];
  lp1 = l + 1;
  lm1 = l - 1;
  lp2 = l + 2;
  lm2 = l - 2;
  lp3 = l + 3;
  lm3 = l - 3;
  l2 = l * l;
  rl = l;
  rlp1 = l + 1;
  rlm1 = l - 1;
  rlp2 = l + 2;
  rlm2 = l - 2;
  rlp3 = l + 3;
  rlm3 = l - 3;
  rl2 = l * l;
  c[1][1] = l * lp1;
  c[1][2] = l * lp1;
  c[1][3] = l * lp1;
  c[1][4] = l * lp1;
  c[2][1] = lp3;
  c[2][2] = lp1;
  c[2][3] = -lm2;
  c[2][4] = -l;
  c[3][1] = 2 * v * lp1 * (l2 - lp3);
  c[3][2] = 2 * v * l * lm1 * lp1;
  c[3][3] = -2 * v * l * (l2 + 3 * l - 1);
  c[3][4] = -2 * v * l * lp2 * lp1;
  c[4][1] = 2 * v * l * lp2;
  c[4][2] = 2 * v * lm1 * lp1;
  c[4][3] = 2 * v * lm1 * lp1;
  c[4][4] = 2 * v * l * (lp2);
  for (i = 1; i <= 4; i++) {
    for (j = 1; j <= 4; j++) {
      rlambda[i][j] = 0.0;
    }
  }
  rlambda[1][1] = pow(r, lp1);
  rlambda[2][2] = pow(r, lm1);
  rlambda[3][3] = pow(r, (-l));
  rlambda[4][4] = pow(r, (-lp2));
  b[1][1] = -rlp2;
  b[1][2] = rl * rlp2;
  b[1][3] = -1.0 / (2.0 * v);
  b[1][4] = rl / (2.0 * v);
  b[2][1] = (rl2 + 3 * rl - 1.0) / rlp1;
  b[2][2] = -rlm1 * rlp1;
  b[2][3] = 1.0 / (2.0 * v);
  b[2][4] = -rlm2 / (2.0 * v);
  b[3][1] = rlm1;
  b[3][2] = rlm1 * rlp1;
  b[3][3] = -1.0 / (2.0 * v);
  b[3][4] = -rlp1 / (2.0 * v);
  b[4][1] = (3.0 + rl - rl2) / rl;
  b[4][2] = -rl * rlp2;
  b[4][3] = 1.0 / (2.0 * v);
  b[4][4] = rlp3 / (2.0 * v);
  for (i = 1; i <= 4; i++) {
    b[1][i] = b[1][i] / (2.0 * rl + 3.0);
    b[4][i] = b[4][i] / (2.0 * rl + 3.0);
  }
  for (i = 1; i <= 4; i++) {
    b[2][i] = b[2][i] / (2.0 * rl - 1.0);
    b[3][i] = b[3][i] / (2.0 * rl - 1.0);
  }
  for (i = 1; i <= 4; i++) {
    for (j = 1; j <= 4; j++) {
      b[i][j] = b[i][j] / (2.0 * rl + 1.0);
    }
  }
  mamlt4(c, rlambda, x);
  mamlt4(x, b, p);
}


x86 assembly (clang, -O0):
<prop4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x3a0,%rsp
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x4(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x30(%rbp)
mov    -0x4(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x34(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x38(%rbp)
mov    -0x4(%rbp),%eax
imul   -0x4(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x4(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x54(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x58(%rbp)
mov    -0x4(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x60(%rbp)
mov    -0x4(%rbp),%eax
imul   -0x4(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x4(%rbp),%eax
imul   -0x24(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x4(%rbp),%eax
imul   -0x24(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x4(%rbp),%eax
imul   -0x24(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x4(%rbp),%eax
imul   -0x24(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
cvtsi2sdl -0x34(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
cvtsi2sdl -0x24(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
xor    %eax,%eax
sub    -0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xor    %eax,%eax
sub    -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xdae(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x3c(%rbp),%eax
sub    -0x34(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xd82(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xd5a(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x3c(%rbp),%eax
imul   $0x3,-0x4(%rbp),%ecx
add    %ecx,%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0xd28(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x2c(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xcf0(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x2c(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xcc9(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xca5(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xc81(%rip),%xmm0
mulsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x4(%rbp),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2sdl -0x2c(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movl   $0x1,-0x40(%rbp)
cmpl   $0x4,-0x40(%rbp)
jg     13fc <prop4+0x2dc>
movl   $0x1,-0x44(%rbp)
cmpl   $0x4,-0x44(%rbp)
jg     13e9 <prop4+0x2c9>
movslq -0x40(%rbp),%rcx
lea    -0x200(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x44(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    13b3 <prop4+0x293>
jmp    13ee <prop4+0x2ce>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    13a2 <prop4+0x282>
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x24(%rbp),%xmm1
call   1040 <pow@plt>
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
cvtsi2sdl -0x28(%rbp),%xmm1
call   1040 <pow@plt>
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
xor    %eax,%eax
sub    -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm1
call   1040 <pow@plt>
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x10(%rbp),%xmm0
xor    %eax,%eax
sub    -0x2c(%rbp),%eax
cvtsi2sd %eax,%xmm1
call   1040 <pow@plt>
movsd  %xmm0,-0x140(%rbp)
ff
xor    %eax,%eax
sub    -0x54(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x2a0(%rbp)
ff
mov    -0x48(%rbp),%eax
imul   -0x54(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x298(%rbp)
ff
movsd  0xb74(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
movsd  0xb87(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x290(%rbp)
ff
cvtsi2sdl -0x48(%rbp),%xmm0
movsd  0xb4e(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x288(%rbp)
ff
mov    -0x64(%rbp),%eax
imul   $0x3,-0x48(%rbp),%ecx
add    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  0xb38(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsi2sdl -0x4c(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x278(%rbp)
ff
xor    %eax,%eax
sub    -0x50(%rbp),%eax
imul   -0x4c(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x270(%rbp)
ff
movsd  0xaf6(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
movsd  0xaf9(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x268(%rbp)
ff
xor    %eax,%eax
sub    -0x58(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xacc(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x260(%rbp)
ff
cvtsi2sdl -0x50(%rbp),%xmm0
movsd  %xmm0,-0x250(%rbp)
ff
mov    -0x50(%rbp),%eax
imul   -0x4c(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x248(%rbp)
ff
movsd  0xa93(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
movsd  0xaa6(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x240(%rbp)
ff
xor    %eax,%eax
sub    -0x4c(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  0xa69(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x238(%rbp)
ff
cvtsi2sdl -0x48(%rbp),%xmm1
movsd  0xa63(%rip),%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
subsd  %xmm1,%xmm0
cvtsi2sdl -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x228(%rbp)
ff
xor    %eax,%eax
sub    -0x48(%rbp),%eax
imul   -0x54(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x220(%rbp)
ff
movsd  0xa10(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
movsd  0xa13(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x218(%rbp)
ff
cvtsi2sdl -0x5c(%rbp),%xmm0
movsd  0x9ea(%rip),%xmm1
mulsd  -0x18(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x210(%rbp)
ff
movl   $0x1,-0x40(%rbp)
cmpl   $0x4,-0x40(%rbp)
jg     16ac <prop4+0x58c>
movslq -0x40(%rbp),%rax
movsd  -0x2a8(%rbp,%rax,8),%xmm0
ff ff
cvtsi2sdl -0x48(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x9c2(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movslq -0x40(%rbp),%rax
movsd  %xmm0,-0x2a8(%rbp,%rax,8)
ff ff
movslq -0x40(%rbp),%rax
movsd  -0x230(%rbp,%rax,8),%xmm0
ff ff
cvtsi2sdl -0x48(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x98f(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movslq -0x40(%rbp),%rax
movsd  %xmm0,-0x230(%rbp,%rax,8)
ff ff
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    162e <prop4+0x50e>
movl   $0x1,-0x40(%rbp)
cmpl   $0x4,-0x40(%rbp)
jg     1731 <prop4+0x611>
movslq -0x40(%rbp),%rax
movsd  -0x280(%rbp,%rax,8),%xmm0
ff ff
cvtsi2sdl -0x48(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x945(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movslq -0x40(%rbp),%rax
movsd  %xmm0,-0x280(%rbp,%rax,8)
ff ff
movslq -0x40(%rbp),%rax
movsd  -0x258(%rbp,%rax,8),%xmm0
ff ff
cvtsi2sdl -0x48(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x912(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movslq -0x40(%rbp),%rax
movsd  %xmm0,-0x258(%rbp,%rax,8)
ff ff
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    16b3 <prop4+0x593>
movl   $0x1,-0x40(%rbp)
cmpl   $0x4,-0x40(%rbp)
jg     17c3 <prop4+0x6a3>
movl   $0x1,-0x44(%rbp)
cmpl   $0x4,-0x44(%rbp)
jg     17b0 <prop4+0x690>
movslq -0x40(%rbp),%rcx
lea    -0x2d0(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
cvtsi2sdl -0x48(%rbp),%xmm1
addsd  %xmm1,%xmm1
movsd  0x891(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movslq -0x40(%rbp),%rcx
lea    -0x2d0(%rbp),%rax
imul   $0x28,%rcx,%rcx
add    %rcx,%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1749 <prop4+0x629>
jmp    17b5 <prop4+0x695>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1738 <prop4+0x618>
lea    -0x130(%rbp),%rdi
lea    -0x200(%rbp),%rsi
lea    -0x3a0(%rbp),%rdx
mov    $0x0,%al
call   1030 <mamlt4@plt>
lea    -0x3a0(%rbp),%rdi
lea    -0x2d0(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    $0x0,%al
call   1030 <mamlt4@plt>
add    $0x3a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<prop4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x3e8,%rsp
mov    %edi,%ebx
movd   %edi,%xmm2
movdqa %xmm2,0x10(%rsp)
pshufd $0x50,%xmm2,%xmm2
paddd  0xeb6(%rip),%xmm2
mov    %rsi,0x28(%rsp)
movsd  %xmm0,0x8(%rsp)
lea    0x2(%rbx),%r15d
lea    0x3(%rbx),%eax
mov    %edi,%r13d
imul   %r13d,%r13d
movd   %xmm2,%r12d
movdqa %xmm2,0x90(%rsp)
mov    %r12d,%ecx
imul   %edi,%ecx
cvtsi2sd %ecx,%xmm3
movsd  %xmm3,0x1b0(%rsp)
movsd  %xmm3,0x1b8(%rsp)
movsd  %xmm3,0x1c0(%rsp)
movsd  %xmm3,0x1c8(%rsp)
xorps  %xmm3,%xmm3
cvtsi2sd %eax,%xmm3
movapd %xmm3,0xa0(%rsp)
cvtdq2pd %xmm2,%xmm5
movsd  %xmm3,0x1d8(%rsp)
movlpd %xmm5,0x1e0(%rsp)
mov    $0x2,%ecx
sub    %edi,%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
movapd %xmm2,0x80(%rsp)
movsd  %xmm2,0x1e8(%rsp)
mov    %edi,%ebp
neg    %ebp
xorps  %xmm2,%xmm2
cvtsi2sd %ebp,%xmm2
movsd  %xmm2,0x20(%rsp)
movsd  %xmm2,0x1f0(%rsp)
movapd %xmm1,%xmm4
mov    %r13d,%ecx
sub    %eax,%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
cvtsi2sd %edi,%xmm7
movapd %xmm7,0x50(%rsp)
addsd  %xmm1,%xmm4
movapd %xmm4,0x70(%rsp)
movapd %xmm5,%xmm3
unpckhpd %xmm5,%xmm3
movapd %xmm3,0x40(%rsp)
movapd %xmm4,%xmm3
movapd %xmm5,%xmm6
cvtsi2sd %edi,%xmm6
unpcklpd %xmm4,%xmm3
movapd %xmm3,0x60(%rsp)
mulpd  %xmm3,%xmm6
movapd %xmm4,%xmm3
unpcklpd %xmm6,%xmm3
mulpd  %xmm5,%xmm3
unpcklpd %xmm5,%xmm2
mulpd  %xmm3,%xmm2
mulsd  0xdc9(%rip),%xmm1
movapd %xmm2,0x200(%rsp)
mulsd  %xmm7,%xmm1
lea    (%rbx,%rbx,2),%eax
lea    -0x1(%r13,%rax,1),%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
xorps  %xmm3,%xmm3
cvtsi2sd %r15d,%xmm3
lea    0x0(%r13,%rax,1),%r14d
movapd %xmm1,%xmm4
mulsd  %xmm3,%xmm4
unpcklpd %xmm4,%xmm1
unpcklpd %xmm5,%xmm2
mulpd  %xmm1,%xmm2
movapd %xmm2,0x210(%rsp)
unpcklpd %xmm5,%xmm3
movapd %xmm5,%xmm1
movapd %xmm5,0x30(%rsp)
mulpd  %xmm6,%xmm3
movupd %xmm3,0x228(%rsp)
shufpd $0x1,%xmm3,%xmm3
movupd %xmm3,0x238(%rsp)
xorpd  %xmm2,%xmm2
movapd %xmm2,0xe0(%rsp)
movapd %xmm2,0xf0(%rsp)
movupd %xmm2,0x108(%rsp)
movupd %xmm2,0x118(%rsp)
movapd %xmm2,0x140(%rsp)
movapd %xmm2,0x130(%rsp)
movupd %xmm2,0x158(%rsp)
movq   $0x0,0x168(%rsp)
call   1040 <pow@plt>
movsd  %xmm0,0xe0(%rsp)
movsd  0x8(%rsp),%xmm0
movaps 0x40(%rsp),%xmm1
call   1040 <pow@plt>
movsd  %xmm0,0x110(%rsp)
movsd  0x8(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
call   1040 <pow@plt>
movsd  %xmm0,0x140(%rsp)
movd   %r15d,%xmm0
mov    $0xfffffffe,%eax
movd   %eax,%xmm1
movdqa 0x10(%rsp),%xmm2
psubd  %xmm2,%xmm1
pmuludq %xmm2,%xmm0
punpckldq %xmm0,%xmm1
cvtdq2pd %xmm1,%xmm1
movaps %xmm1,0x10(%rsp)
movsd  0x8(%rsp),%xmm0
call   1040 <pow@plt>
movsd  %xmm0,0x170(%rsp)
movapd 0xc64(%rip),%xmm14
movapd 0x50(%rsp),%xmm0
unpcklpd %xmm0,%xmm14
xorps  %xmm1,%xmm1
cvtsi2sd %r14d,%xmm1
movapd 0x60(%rsp),%xmm3
divpd  %xmm3,%xmm14
movsd  0xc65(%rip),%xmm11
addsd  %xmm11,%xmm1
mov    $0x1,%eax
sub    %ebx,%eax
imul   %r12d,%eax
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movapd 0x30(%rsp),%xmm13
divsd  %xmm13,%xmm1
unpcklpd %xmm2,%xmm1
movapd 0xc1e(%rip),%xmm2
pshufd $0x55,0x90(%rsp),%xmm4
movd   %xmm4,%eax
imul   %r12d,%eax
cvtsi2sd %eax,%xmm8
unpcklpd 0x80(%rsp),%xmm2
not    %ebx
cvtsi2sd %ebx,%xmm9
divpd  %xmm3,%xmm2
movapd 0x70(%rsp),%xmm12
divsd  %xmm12,%xmm9
movsd  0xbff(%rip),%xmm7
movapd %xmm0,%xmm4
addsd  %xmm7,%xmm4
cvtsi2sd %r13d,%xmm6
subsd  %xmm6,%xmm4
divsd  %xmm0,%xmm4
movapd %xmm0,%xmm10
imul   %r15d,%ebp
xorps  %xmm6,%xmm6
cvtsi2sd %ebp,%xmm6
unpcklpd %xmm6,%xmm4
movapd 0xa0(%rsp),%xmm3
divsd  %xmm12,%xmm3
addsd  %xmm0,%xmm10
addsd  %xmm10,%xmm7
unpcklpd %xmm7,%xmm7
movapd 0x10(%rsp),%xmm5
divpd  %xmm7,%xmm5
divpd  %xmm7,%xmm4
movapd %xmm14,%xmm0
divpd  %xmm7,%xmm0
movapd %xmm2,%xmm6
unpcklpd %xmm3,%xmm6
divpd  %xmm7,%xmm6
addsd  %xmm10,%xmm11
unpcklpd %xmm11,%xmm11
divpd  %xmm11,%xmm1
movapd %xmm13,%xmm7
shufpd $0x1,%xmm8,%xmm7
divpd  %xmm11,%xmm7
divpd  %xmm11,%xmm2
unpcklpd %xmm9,%xmm14
divpd  %xmm11,%xmm14
movapd %xmm10,%xmm3
addsd  0xb64(%rip),%xmm3
unpcklpd %xmm3,%xmm3
divpd  %xmm3,%xmm5
movapd %xmm5,0x280(%rsp)
divpd  %xmm3,%xmm0
movapd %xmm0,0x290(%rsp)
divpd  %xmm3,%xmm1
movupd %xmm1,0x2a8(%rsp)
divpd  %xmm3,%xmm2
movupd %xmm2,0x2b8(%rsp)
divpd  %xmm3,%xmm7
movapd %xmm7,0x2d0(%rsp)
divpd  %xmm3,%xmm14
movapd %xmm14,0x2e0(%rsp)
divpd  %xmm3,%xmm4
movupd %xmm4,0x2f8(%rsp)
divpd  %xmm3,%xmm6
movupd %xmm6,0x308(%rsp)
lea    0x180(%rsp),%rdi
lea    0xb0(%rsp),%rsi
lea    0x320(%rsp),%rbx
mov    %rbx,%rdx
xor    %eax,%eax
call   1030 <mamlt4@plt>
lea    0x250(%rsp),%rsi
mov    %rbx,%rdi
mov    0x28(%rsp),%rdx
xor    %eax,%eax
call   1030 <mamlt4@plt>
add    $0x3e8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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