int dqform(int m, int n, double *q, int ldq, double *wa) {
  int i, j, k, l, minmn;
  double sum;
  minmn = ((m) <= (n) ? (m) : (n));
  if (minmn >= 2) {
    for (j = 1; j < minmn; ++j) {
      for (i = 0; i < j; ++i)
        q[i + j * ldq] = 0.0;
    }
  }
  if (m > n) {
    for (j = n; j < m; ++j) {
      for (i = 0; i < m; ++i) {
        q[i + j * ldq] = 0.0;
      }
      q[j + j * ldq] = 1.0;
    }
  }
  for (l = 0; l < minmn; ++l) {
    k = minmn - l - 1;
    for (i = k; i < m; ++i) {
      wa[i] = q[i + k * ldq];
      q[i + k * ldq] = 0.0;
    }
    q[k + k * ldq] = 1.0;
    if (wa[k] != 0.0) {
      for (j = k; j < m; ++j) {
        double temp;
        sum = 0.0;
        for (i = k; i < m; ++i)
          sum += q[i + j * ldq] * wa[i];
        temp = sum / wa[k];
        for (i = k; i < m; ++i)
          q[i + j * ldq] -= temp * wa[i];
      }
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<dqform>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8,-0x20(%rbp)
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jg     112c <dqform+0x2c>
mov    -0x4(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    1132 <dqform+0x32>
mov    -0x8(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x2,-0x34(%rbp)
jl     11a9 <dqform+0xa9>
movl   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    11a4 <dqform+0xa4>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    1191 <dqform+0x91>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    115c <dqform+0x5c>
jmp    1196 <dqform+0x96>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1149 <dqform+0x49>
jmp    11a9 <dqform+0xa9>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    1236 <dqform+0x136>
mov    -0x8(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1231 <dqform+0x131>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1203 <dqform+0x103>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11ce <dqform+0xce>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  0xde2(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11bb <dqform+0xbb>
jmp    1236 <dqform+0x136>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    141b <dqform+0x31b>
mov    -0x34(%rbp),%eax
sub    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    12b5 <dqform+0x1b5>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x2c(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x2c(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    125b <dqform+0x15b>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
mov    -0x2c(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  0xd30(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12fa <dqform+0x1fa>
jp     12fa <dqform+0x1fa>
jmp    1408 <dqform+0x308>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1403 <dqform+0x303>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    136b <dqform+0x26b>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    131a <dqform+0x21a>
movsd  -0x40(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    13f0 <dqform+0x2f0>
movsd  -0x48(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm0,%rdx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rdx
movq   %rdx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1388 <dqform+0x288>
jmp    13f5 <dqform+0x2f5>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1300 <dqform+0x200>
jmp    1408 <dqform+0x308>
jmp    140d <dqform+0x30d>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    123d <dqform+0x13d>
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<dqform>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xf8,%rsp
mov    %r8,%rbx
mov    %rdx,%r12
cmp    %esi,%edi
mov    %edi,0xc(%rsp)
mov    %edi,%eax
mov    %rsi,0x38(%rsp)
cmovg  %esi,%eax
mov    %ecx,0x24(%rsp)
movslq %ecx,%rcx
mov    %rcx,0x30(%rsp)
mov    %rax,0x58(%rsp)
cmp    $0x2,%eax
jl     126a <dqform+0x15a>
mov    0x58(%rsp),%rax
lea    -0x1(%rax),%r14d
lea    -0x1(%r14),%rax
mov    %r14,0x10(%rsp)
and    $0x3,%r14d
cmp    $0x3,%rax
jae    1175 <dqform+0x65>
xor    %r15d,%r15d
jmp    121d <dqform+0x10d>
mov    0x10(%rsp),%rax
and    $0xfffffffc,%eax
mov    %rax,0x10(%rsp)
mov    0x30(%rsp),%rax
lea    0x0(,%rax,8),%rcx
mov    %rcx,0x18(%rsp)
lea    (%rcx,%rcx,2),%rcx
mov    %rcx,0x28(%rsp)
mov    %rax,%rcx
shl    $0x5,%rcx
mov    %rcx,0x48(%rsp)
shl    $0x4,%rax
mov    %rax,0x40(%rsp)
mov    $0x10,%r13d
xor    %r15d,%r15d
mov    %r12,%rbp
xchg   %ax,%ax
mov    0x18(%rsp),%rax
lea    (%rax,%rbp,1),%rdi
lea    -0x8(%r13),%rdx
xor    %esi,%esi
call   1030 <memset@plt>
mov    0x40(%rsp),%rax
lea    (%rax,%rbp,1),%rdi
xor    %esi,%esi
mov    %r13,%rdx
call   1030 <memset@plt>
mov    0x28(%rsp),%rax
lea    (%rax,%rbp,1),%rdi
lea    0x8(%r13),%rdx
xor    %esi,%esi
call   1030 <memset@plt>
add    0x48(%rsp),%rbp
lea    0x10(%r13),%rdx
mov    %rbp,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
add    $0x4,%r15
add    $0x20,%r13
cmp    %r15,0x10(%rsp)
jne    11c0 <dqform+0xb0>
test   %r14,%r14
je     126a <dqform+0x15a>
lea    0x8(,%r15,8),%rbp
add    $0x1,%r15
mov    0x30(%rsp),%rax
imul   %rax,%r15
lea    (%r12,%r15,8),%r13
lea    0x0(,%rax,8),%r15
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r13,%rdi
xor    %esi,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
add    $0x8,%rbp
add    %r15,%r13
add    $0xffffffffffffffff,%r14
jne    1250 <dqform+0x140>
mov    0xc(%rsp),%eax
mov    %eax,%edi
mov    %eax,%r13d
mov    0x38(%rsp),%rsi
sub    %esi,%edi
mov    0x24(%rsp),%r15d
jle    1401 <dqform+0x2f1>
lea    0x0(,%r13,8),%rax
mov    %rax,0x18(%rsp)
movslq %esi,%rbp
mov    %esi,%eax
not    %eax
xor    %ecx,%ecx
add    0xc(%rsp),%eax
je     13c1 <dqform+0x2b1>
mov    0x30(%rsp),%rdx
lea    0x1(%rdx),%rax
imul   %rbp,%rax
mov    %rax,0x28(%rsp)
mov    %rdx,%rax
shl    $0x4,%rax
add    $0x10,%rax
mov    %rax,0x48(%rsp)
lea    0x1(%rbp),%rax
imul   %rdx,%rax
mov    %rbp,0x68(%rsp)
lea    0x0(,%rbp,8),%rcx
lea    (%rcx,%rax,8),%rax
mov    %rax,0x40(%rsp)
mov    %r15d,%ebp
lea    0x1(%rsi),%r15d
imul   %ebp,%r15d
lea    (%rdx,%rdx,1),%eax
mov    %eax,0x80(%rsp)
imul   %esi,%ebp
mov    %rdi,0x60(%rsp)
and    $0xfffffffe,%edi
mov    %rdi,0x70(%rsp)
xor    %eax,%eax
mov    %rax,0x10(%rsp)
mov    %r12,%r14
jmp    1359 <dqform+0x249>
cs nopw 0x0(%rax,%rax,1)
mov    0x40(%rsp),%rax
movabs $0x3ff0000000000000,%rcx
mov    %rcx,0x8(%r14,%rax,1)
mov    0x10(%rsp),%rax
add    $0x2,%rax
add    0x48(%rsp),%r14
mov    0x80(%rsp),%ecx
add    %ecx,%r15d
add    %ecx,%ebp
mov    %rax,0x10(%rsp)
cmp    %eax,0x70(%rsp)
je     13a5 <dqform+0x295>
cmpl   $0x0,0xc(%rsp)
jle    1373 <dqform+0x263>
movslq %ebp,%rax
lea    (%r12,%rax,8),%rdi
xor    %esi,%esi
mov    0x18(%rsp),%rdx
call   1030 <memset@plt>
mov    0x28(%rsp),%rax
movabs $0x3ff0000000000000,%rcx
mov    %rcx,(%r14,%rax,8)
cmpl   $0x0,0xc(%rsp)
jle    1320 <dqform+0x210>
movslq %r15d,%rax
lea    (%r12,%rax,8),%rdi
xor    %esi,%esi
mov    0x18(%rsp),%rdx
call   1030 <memset@plt>
jmp    1320 <dqform+0x210>
mov    0x68(%rsp),%rbp
mov    0x10(%rsp),%rcx
add    %rcx,%rbp
mov    0x24(%rsp),%r15d
mov    0x38(%rsp),%rsi
mov    0x60(%rsp),%rdi
test   $0x1,%dil
je     1401 <dqform+0x2f1>
cmpl   $0x0,0xc(%rsp)
jle    13e7 <dqform+0x2d7>
add    %esi,%ecx
imul   %r15d,%ecx
movslq %ecx,%rax
lea    (%r12,%rax,8),%rdi
xor    %esi,%esi
mov    0x18(%rsp),%rdx
call   1030 <memset@plt>
mov    %rbp,%rax
imul   0x30(%rsp),%rax
add    %rbp,%rax
movabs $0x3ff0000000000000,%rcx
mov    %rcx,(%r12,%rax,8)
cmpl   $0x0,0x58(%rsp)
jle    1ab2 <dqform+0x9a2>
mov    0x58(%rsp),%rcx
mov    %ecx,%eax
mov    %rax,0xd0(%rsp)
mov    0x30(%rsp),%rdx
lea    0x1(%rdx),%rax
mov    %rax,0xb0(%rsp)
lea    -0x1(%rcx),%esi
mov    0xc(%rsp),%eax
mov    %eax,%edi
sub    %ecx,%edi
lea    0x8(%rbx),%rbp
mov    %rbp,0xc0(%rsp)
lea    0x8(%r12),%rbp
mov    %rbp,0x78(%rsp)
neg    %eax
mov    %eax,0x70(%rsp)
lea    0x30(%rbx),%rax
mov    %rax,0xb8(%rsp)
lea    0x30(%r12),%rax
mov    %rax,0xa8(%rsp)
mov    %r15d,%eax
imul   %esi,%eax
mov    %eax,0x54(%rsp)
lea    0x0(,%rdx,8),%rax
mov    %rax,0x80(%rsp)
lea    0x1(%rdi),%r9d
xor    %ebp,%ebp
xorps  %xmm9,%xmm9
xorpd  %xmm8,%xmm8
movapd 0xb63(%rip),%xmm2
mov    %rdi,0xc8(%rsp)
mov    %edi,%edx
mov    %esi,0x88(%rsp)
mov    %ecx,%edi
jmp    1503 <dqform+0x3f3>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0xd8(%rsp),%rbp
add    $0x1,%rbp
mov    0x90(%rsp),%esi
add    $0xffffffff,%esi
mov    0x24(%rsp),%r15d
sub    %r15d,0x54(%rsp)
mov    0x94(%rsp),%edx
add    $0x1,%edx
add    $0x1,%r9
cmp    0xd0(%rsp),%rbp
mov    0x8c(%rsp),%edi
je     1ab2 <dqform+0x9a2>
mov    %esi,0x90(%rsp)
movslq %esi,%r11
mov    0xb8(%rsp),%rax
lea    (%rax,%r11,8),%rax
mov    %edx,0x94(%rsp)
mov    %edx,%ecx
add    $0x1,%rcx
and    $0xfffffffffffffffc,%rcx
add    $0xfffffffffffffffc,%rcx
shr    $0x2,%rcx
add    $0x1,%rcx
and    $0xfffffffffffffffe,%rcx
mov    %rcx,0x98(%rsp)
mov    0xc8(%rsp),%rcx
lea    (%rcx,%rbp,1),%edx
lea    0x1(%rdx),%r14
mov    %r14,%r8
movabs $0x1fffffffc,%rcx
and    %rcx,%r8
lea    -0x4(%r8),%rcx
mov    %rcx,0x60(%rsp)
shr    $0x2,%rcx
add    $0x1,%rcx
mov    %rcx,0xa0(%rsp)
mov    0x88(%rsp),%ecx
sub    %ebp,%ecx
movslq %ecx,%rcx
lea    (%rbx,%rcx,8),%rsi
mov    %rsi,0x68(%rsp)
mov    %rdx,0x18(%rsp)
mov    %rcx,%r10
add    %rdx,%rcx
mov    0xc0(%rsp),%rdx
lea    (%rdx,%rcx,8),%rcx
mov    %rcx,0x38(%rsp)
add    $0xffffffff,%edi
mov    %edi,0x8c(%rsp)
movslq %edi,%rcx
mov    %rcx,0x10(%rsp)
mov    %rbp,0xd8(%rsp)
mov    %ebp,%esi
not    %esi
add    0x58(%rsp),%esi
mov    %esi,%ebp
imul   %r15d,%ebp
cmp    0xc(%rsp),%esi
jge    1780 <dqform+0x670>
movslq 0x54(%rsp),%rdi
movslq %ebp,%r15
mov    0x10(%rsp),%rdx
cmpl   $0x3,0x18(%rsp)
jb     1710 <dqform+0x600>
mov    %r10,%rdx
mov    %edx,%ecx
imul   0x24(%rsp),%ecx
movslq %ecx,%rcx
add    %r10,%rcx
mov    0x18(%rsp),%rdx
add    %rcx,%rdx
mov    %rdi,0x28(%rsp)
mov    0x78(%rsp),%rdi
lea    (%rdi,%rdx,8),%rdx
mov    0x28(%rsp),%rdi
cmp    %rdx,0x68(%rsp)
jae    163b <dqform+0x52b>
lea    (%r12,%rcx,8),%rcx
mov    0x10(%rsp),%rdx
cmp    0x38(%rsp),%rcx
jb     1710 <dqform+0x600>
cmpq   $0x0,0x60(%rsp)
je     1a9d <dqform+0x98d>
lea    (%rdi,%r11,1),%rcx
mov    0xa8(%rsp),%rdx
lea    (%rdx,%rcx,8),%rcx
mov    0x98(%rsp),%rdi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movups -0x30(%rcx,%rdx,8),%xmm3
movups -0x20(%rcx,%rdx,8),%xmm4
movups %xmm3,-0x30(%rax,%rdx,8)
movups %xmm4,-0x20(%rax,%rdx,8)
movups %xmm9,-0x30(%rcx,%rdx,8)
movups %xmm9,-0x20(%rcx,%rdx,8)
movupd -0x10(%rcx,%rdx,8),%xmm3
movupd (%rcx,%rdx,8),%xmm4
movupd %xmm3,-0x10(%rax,%rdx,8)
movupd %xmm4,(%rax,%rdx,8)
movups %xmm9,-0x10(%rcx,%rdx,8)
movups %xmm9,(%rcx,%rdx,8)
add    $0x8,%rdx
add    $0xfffffffffffffffe,%rdi
jne    1670 <dqform+0x560>
testb  $0x1,0xa0(%rsp)
01
je     16f1 <dqform+0x5e1>
add    0x10(%rsp),%rdx
lea    (%rdx,%r15,1),%rcx
movupd (%r12,%rcx,8),%xmm3
movupd 0x10(%r12,%rcx,8),%xmm4
movupd %xmm3,(%rbx,%rdx,8)
movupd %xmm4,0x10(%rbx,%rdx,8)
movups %xmm9,(%r12,%rcx,8)
movups %xmm9,0x10(%r12,%rcx,8)
cmp    %r8,%r14
mov    0x28(%rsp),%rdi
je     1780 <dqform+0x670>
add    0x10(%rsp),%r8
mov    %r8,%rdx
nopw   0x0(%rax,%rax,1)
mov    0xc(%rsp),%ecx
sub    %edx,%ecx
test   $0x1,%cl
jne    1720 <dqform+0x610>
mov    %rdx,%rcx
jmp    173d <dqform+0x62d>
add    %rdx,%r15
movsd  (%r12,%r15,8),%xmm3
movsd  %xmm3,(%rbx,%rdx,8)
movq   $0x0,(%r12,%r15,8)
mov    %rdx,%rcx
add    $0x1,%rcx
not    %edx
cmp    0x70(%rsp),%edx
je     1780 <dqform+0x670>
mov    0x78(%rsp),%rdx
lea    (%rdx,%rdi,8),%rdx
xchg   %ax,%ax
movsd  -0x8(%rdx,%rcx,8),%xmm3
movsd  %xmm3,(%rbx,%rcx,8)
movq   $0x0,-0x8(%rdx,%rcx,8)
movsd  (%rdx,%rcx,8),%xmm3
movsd  %xmm3,0x8(%rbx,%rcx,8)
movq   $0x0,(%rdx,%rcx,8)
add    $0x2,%rcx
cmp    %ecx,%r13d
jne    1750 <dqform+0x640>
add    %esi,%ebp
movslq %ebp,%rcx
movabs $0x3ff0000000000000,%rdx
mov    %rdx,(%r12,%rcx,8)
movslq %esi,%rcx
mov    %rcx,0x28(%rsp)
movsd  (%rbx,%rcx,8),%xmm3
ucomisd %xmm8,%xmm3
jne    17ad <dqform+0x69d>
jnp    14c0 <dqform+0x3b0>
cmp    0xc(%rsp),%esi
jge    14c0 <dqform+0x3b0>
mov    0x30(%rsp),%rcx
imul   %r11,%rcx
mov    0xb0(%rsp),%rsi
mov    %rsi,%rdx
imul   %r11,%rdx
imul   %rsi,%r10
mov    0x78(%rsp),%rsi
lea    (%rsi,%rcx,8),%rsi
lea    (%rbx,%r11,8),%rcx
lea    (%r12,%rdx,8),%rdi
mov    0x18(%rsp),%rdx
mov    %r10,0x48(%rsp)
lea    0x1(%r10,%rdx,1),%rbp
mov    %rbp,0x40(%rsp)
add    $0x1,%rdx
mov    %rdx,0xf0(%rsp)
mov    %rdx,%rbp
movabs $0x1fffffffc,%rdx
and    %rdx,%rbp
mov    0x10(%rsp),%r10
mov    %rbp,0xe8(%rsp)
lea    (%r10,%rbp,1),%rdx
mov    %rdx,0xe0(%rsp)
xor    %r15d,%r15d
jmp    1861 <dqform+0x751>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r10
add    $0x1,%r15
mov    0x80(%rsp),%rdx
add    %rdx,%rdi
add    %rdx,%rsi
cmp    0xc(%rsp),%r10d
je     14c0 <dqform+0x3b0>
mov    %r15,%rbp
imul   0x30(%rsp),%rbp
mov    0x48(%rsp),%rdx
add    %rbp,%rdx
lea    (%r12,%rdx,8),%rdx
add    0x40(%rsp),%rbp
lea    (%r12,%rbp,8),%r8
xorpd  %xmm3,%xmm3
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%rdi,%rbp,8),%xmm4
mulsd  (%rcx,%rbp,8),%xmm4
addsd  %xmm4,%xmm3
add    $0x1,%rbp
cmp    %ebp,%r9d
jne    1890 <dqform+0x780>
mov    %r10,%r11
imul   0x30(%rsp),%r11
xorpd  %xmm2,%xmm3
mov    0x28(%rsp),%rbp
divsd  (%rbx,%rbp,8),%xmm3
mov    0x10(%rsp),%r14
cmpl   $0x3,0x18(%rsp)
jb     1a00 <dqform+0x8f0>
cmp    0x38(%rsp),%rdx
jae    18e5 <dqform+0x7d5>
mov    0x10(%rsp),%r14
cmp    %r8,0x68(%rsp)
jb     1a00 <dqform+0x8f0>
movapd %xmm3,%xmm4
unpcklpd %xmm3,%xmm4
cmpq   $0x0,0x60(%rsp)
je     1a87 <dqform+0x977>
mov    0x98(%rsp),%rdx
xor    %r8d,%r8d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd -0x30(%rax,%r8,8),%xmm5
movupd -0x20(%rax,%r8,8),%xmm6
mulpd  %xmm4,%xmm5
movupd (%rdi,%r8,8),%xmm7
addpd  %xmm5,%xmm7
movupd 0x10(%rdi,%r8,8),%xmm5
movupd 0x20(%rdi,%r8,8),%xmm1
movupd 0x30(%rdi,%r8,8),%xmm0
mulpd  %xmm4,%xmm6
addpd  %xmm5,%xmm6
movupd %xmm7,(%rdi,%r8,8)
movupd %xmm6,0x10(%rdi,%r8,8)
movupd -0x10(%rax,%r8,8),%xmm5
movupd (%rax,%r8,8),%xmm6
mulpd  %xmm4,%xmm5
addpd  %xmm1,%xmm5
mulpd  %xmm4,%xmm6
addpd  %xmm0,%xmm6
movupd %xmm5,0x20(%rdi,%r8,8)
movupd %xmm6,0x30(%rdi,%r8,8)
add    $0x8,%r8
add    $0xfffffffffffffffe,%rdx
jne    1910 <dqform+0x800>
testb  $0x1,0xa0(%rsp)
01
je     19d4 <dqform+0x8c4>
add    0x10(%rsp),%r8
movupd (%rbx,%r8,8),%xmm0
movupd 0x10(%rbx,%r8,8),%xmm1
add    %r11,%r8
movupd (%r12,%r8,8),%xmm5
movupd 0x10(%r12,%r8,8),%xmm6
mulpd  %xmm4,%xmm0
addpd  %xmm5,%xmm0
mulpd  %xmm4,%xmm1
addpd  %xmm6,%xmm1
movupd %xmm0,(%r12,%r8,8)
movupd %xmm1,0x10(%r12,%r8,8)
mov    0xe0(%rsp),%r14
mov    0xe8(%rsp),%rdx
cmp    %rdx,0xf0(%rsp)
je     1840 <dqform+0x730>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0xc(%rsp),%edx
sub    %r14d,%edx
test   $0x1,%dl
jne    1a20 <dqform+0x910>
mov    %r14,%rdx
jmp    1a40 <dqform+0x930>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    %r14,%r11
movsd  (%rbx,%r14,8),%xmm0
mulsd  %xmm3,%xmm0
addsd  (%r12,%r11,8),%xmm0
movsd  %xmm0,(%r12,%r11,8)
mov    %r14,%rdx
add    $0x1,%rdx
not    %r14d
cmp    0x70(%rsp),%r14d
je     1840 <dqform+0x730>
xchg   %ax,%ax
movsd  (%rbx,%rdx,8),%xmm0
mulsd  %xmm3,%xmm0
addsd  -0x8(%rsi,%rdx,8),%xmm0
movsd  %xmm0,-0x8(%rsi,%rdx,8)
movsd  0x8(%rbx,%rdx,8),%xmm0
mulsd  %xmm3,%xmm0
addsd  (%rsi,%rdx,8),%xmm0
movsd  %xmm0,(%rsi,%rdx,8)
add    $0x2,%rdx
cmp    %edx,%r13d
jne    1a50 <dqform+0x940>
jmp    1840 <dqform+0x730>
xor    %r8d,%r8d
testb  $0x1,0xa0(%rsp)
01
jne    1995 <dqform+0x885>
jmp    19d4 <dqform+0x8c4>
xor    %edx,%edx
testb  $0x1,0xa0(%rsp)
01
jne    16c5 <dqform+0x5b5>
jmp    16f1 <dqform+0x5e1>
xor    %eax,%eax
add    $0xf8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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