void baseline(s, nt, dt, order) float *s, *dt;
int nt, order;
{
  float y;
  double t0[11], ts[6];
  double x0[6], c0[36];
  int i, j, it;
  for (i = 0; i < 36; i++)
    c0[i] = 0.0;
  for (i = 0; i < 6; i++)
    x0[i] = 0.0;
  t0[0] = 1;
  for (it = 0; it < nt; it++) {
    t0[1] = it * (*dt);
    for (i = 2; i < 2 * order + 1; i++)
      t0[i] = t0[i - 1] * t0[1];
    ts[0] = s[it];
    for (i = 1; i < order + 1; i++)
      ts[i] = t0[i] * s[it];
    for (j = 0; j < order + 1; j++) {
      for (i = 0; i < order + 1; i++)
        c0[i + j * (order + 1)] = c0[i + j * (order + 1)] + t0[i + j];
      x0[j] = x0[j] + ts[j];
    }
  }
  gelim_double(c0, order + 1, x0);
  for (it = 0; it < nt; it++) {
    t0[1] = it * (*dt);
    for (i = 2; i < order + 1; i++)
      t0[i] = t0[i - 1] * t0[1];
    y = x0[0];
    for (i = 1; i < order + 1; i++)
      y = y + x0[i] * t0[i];
    s[it] = s[it] - y;
  }
}


x86 assembly (clang, -O0):
<baseline>:
push   %rbp
mov    %rsp,%rbp
sub    $0x210,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movl   $0x0,-0x204(%rbp)
cmpl   $0x24,-0x204(%rbp)
jge    1167 <baseline+0x57>
movslq -0x204(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x200(%rbp,%rax,8)
ff ff
mov    -0x204(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x204(%rbp)
jmp    1133 <baseline+0x23>
movl   $0x0,-0x204(%rbp)
cmpl   $0x6,-0x204(%rbp)
jge    11a5 <baseline+0x95>
movslq -0x204(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe0(%rbp,%rax,8)
ff ff
mov    -0x204(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x204(%rbp)
jmp    1171 <baseline+0x61>
movsd  0xe53(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movl   $0x0,-0x20c(%rbp)
mov    -0x20c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    13c4 <baseline+0x2b4>
cvtsi2ssl -0x20c(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mulss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x2,-0x204(%rbp)
mov    -0x204(%rbp),%eax
mov    -0x1c(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    123c <baseline+0x12c>
mov    -0x204(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  -0x80(%rbp,%rax,8),%xmm0
mulsd  -0x78(%rbp),%xmm0
movslq -0x204(%rbp),%rax
movsd  %xmm0,-0x80(%rbp,%rax,8)
mov    -0x204(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x204(%rbp)
jmp    11ee <baseline+0xde>
mov    -0x8(%rbp),%rax
movslq -0x20c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movl   $0x1,-0x204(%rbp)
mov    -0x204(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    12bf <baseline+0x1af>
movslq -0x204(%rbp),%rax
movsd  -0x80(%rbp,%rax,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
movslq -0x204(%rbp),%rax
movsd  %xmm0,-0xb0(%rbp,%rax,8)
ff ff
mov    -0x204(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x204(%rbp)
jmp    1262 <baseline+0x152>
movl   $0x0,-0x208(%rbp)
mov    -0x208(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    13ab <baseline+0x29b>
movl   $0x0,-0x204(%rbp)
mov    -0x204(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1367 <baseline+0x257>
mov    -0x204(%rbp),%eax
mov    -0x208(%rbp),%ecx
mov    -0x1c(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
add    %ecx,%eax
cltq
movsd  -0x200(%rbp,%rax,8),%xmm0
ff ff
mov    -0x204(%rbp),%eax
add    -0x208(%rbp),%eax
cltq
addsd  -0x80(%rbp,%rax,8),%xmm0
mov    -0x204(%rbp),%eax
mov    -0x208(%rbp),%ecx
mov    -0x1c(%rbp),%edx
add    $0x1,%edx
imul   %edx,%ecx
add    %ecx,%eax
cltq
movsd  %xmm0,-0x200(%rbp,%rax,8)
ff ff
mov    -0x204(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x204(%rbp)
jmp    12e7 <baseline+0x1d7>
movslq -0x208(%rbp),%rax
movsd  -0xe0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x208(%rbp),%rax
addsd  -0xb0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x208(%rbp),%rax
movsd  %xmm0,-0xe0(%rbp,%rax,8)
ff ff
mov    -0x208(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x208(%rbp)
jmp    12c9 <baseline+0x1b9>
jmp    13b0 <baseline+0x2a0>
mov    -0x20c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20c(%rbp)
jmp    11bc <baseline+0xac>
lea    -0x200(%rbp),%rdi
mov    -0x1c(%rbp),%esi
add    $0x1,%esi
lea    -0xe0(%rbp),%rdx
mov    $0x0,%al
call   1030 <gelim_double@plt>
movl   $0x0,-0x20c(%rbp)
mov    -0x20c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1519 <baseline+0x409>
cvtsi2ssl -0x20c(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mulss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x2,-0x204(%rbp)
mov    -0x204(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    1466 <baseline+0x356>
mov    -0x204(%rbp),%eax
sub    $0x1,%eax
cltq
movsd  -0x80(%rbp,%rax,8),%xmm0
mulsd  -0x78(%rbp),%xmm0
movslq -0x204(%rbp),%rax
movsd  %xmm0,-0x80(%rbp,%rax,8)
mov    -0x204(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x204(%rbp)
jmp    141b <baseline+0x30b>
movsd  -0xe0(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x1,-0x204(%rbp)
mov    -0x204(%rbp),%eax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    14e0 <baseline+0x3d0>
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movslq -0x204(%rbp),%rax
movsd  -0xe0(%rbp,%rax,8),%xmm0
ff ff
movslq -0x204(%rbp),%rax
movsd  -0x80(%rbp,%rax,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x20(%rbp)
mov    -0x204(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x204(%rbp)
jmp    1481 <baseline+0x371>
mov    -0x8(%rbp),%rax
movslq -0x20c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20c(%rbp)
jmp    13e9 <baseline+0x2d9>
add    $0x210,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<baseline>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x268,%rsp
mov    %ecx,%r14d
mov    %rdx,%rbx
mov    %esi,%ebp
mov    %rdi,0x70(%rsp)
lea    0x140(%rsp),%rdi
mov    $0x120,%edx
xor    %esi,%esi
call   1040 <memset@plt>
xorps  %xmm0,%xmm0
movaps %xmm0,0xe0(%rsp)
movaps %xmm0,0xf0(%rsp)
movaps %xmm0,0x100(%rsp)
movabs $0x3ff0000000000000,%rax
mov    %rax,0x10(%rsp)
test   %ebp,%ebp
jle    182b <baseline+0x70b>
mov    %rbx,0x78(%rsp)
movss  (%rbx),%xmm0
lea    (%r14,%r14,1),%r8d
add    $0x1,%r8d
lea    0x1(%r14),%ebx
movslq %ebx,%r11
mov    %ebp,0xc(%rsp)
mov    %ebp,%eax
mov    %rax,0x68(%rsp)
lea    -0x1(%rbx),%r10
lea    -0x3(%r8),%rdx
lea    -0x5(%rbx),%rax
mov    %rax,0xa8(%rsp)
mov    %rax,%rcx
shr    $0x2,%rcx
add    $0x1,%rcx
mov    %ebx,%esi
and    $0xfffffffc,%esi
lea    -0x4(%rsi),%r9
mov    %r9,0xd8(%rsp)
shr    $0x2,%r9
add    $0x1,%r9
mov    %edx,%ebp
and    $0x2,%ebp
mov    %r10,%rax
mov    %r10,(%rsp)
and    $0xfffffffffffffffc,%r10
mov    %rcx,%rax
mov    %rcx,0xa0(%rsp)
and    $0xfffffffffffffffe,%rcx
mov    %rcx,0x80(%rsp)
mov    %r9,%rax
and    $0xfffffffffffffffe,%rax
mov    %rax,0xb0(%rsp)
and    $0xfffffffffffffffc,%rdx
neg    %rdx
mov    %r8,0xc0(%rsp)
lea    -0x4(%r8),%rax
mov    %rax,0x88(%rsp)
mov    %r10,0x98(%rsp)
lea    0x1(%r10),%rax
mov    %rax,0x90(%rsp)
mov    %r11,0xd0(%rsp)
lea    0x0(,%r11,8),%r11
xor    %edi,%edi
mov    %r14,0xc8(%rsp)
mov    %rdx,0xb8(%rsp)
jmp    128f <baseline+0x16f>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rdi
cmp    0x68(%rsp),%rdi
mov    0xc8(%rsp),%r14
mov    0xb8(%rsp),%rdx
je     162e <baseline+0x50e>
xorps  %xmm1,%xmm1
cvtsi2ss %edi,%xmm1
mulss  %xmm0,%xmm1
cvtss2sd %xmm1,%xmm1
movsd  %xmm1,0x18(%rsp)
cmpl   $0x3,0xc0(%rsp)
03
jl     1360 <baseline+0x240>
mulsd  %xmm1,%xmm1
movsd  %xmm1,0x20(%rsp)
je     1360 <baseline+0x240>
mov    $0x3,%eax
cmpq   $0x3,0x88(%rsp)
jb     1324 <baseline+0x204>
mov    $0x3,%eax
nopw   0x0(%rax,%rax,1)
mulsd  0x18(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp,%rax,8)
movsd  0x18(%rsp),%xmm2
mulsd  %xmm2,%xmm1
movsd  %xmm1,0x18(%rsp,%rax,8)
mulsd  %xmm2,%xmm1
movsd  %xmm1,0x20(%rsp,%rax,8)
mulsd  0x18(%rsp),%xmm1
movsd  %xmm1,0x28(%rsp,%rax,8)
lea    (%rdx,%rax,1),%rcx
add    $0x4,%rcx
add    $0x4,%rax
cmp    $0x3,%rcx
jne    12e0 <baseline+0x1c0>
test   %rbp,%rbp
je     1360 <baseline+0x240>
lea    (%rsp,%rax,8),%rax
add    $0x10,%rax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mulsd  0x18(%rsp),%xmm1
movsd  %xmm1,(%rax,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rbp
jne    1340 <baseline+0x220>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    0x70(%rsp),%rax
movss  (%rax,%rdi,4),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  %xmm1,0x110(%rsp)
test   %r14d,%r14d
mov    0xb0(%rsp),%rdx
jle    148c <baseline+0x36c>
mov    $0x1,%eax
cmpq   $0x4,(%rsp)
jb     1470 <baseline+0x350>
movaps %xmm1,%xmm2
movlhps %xmm1,%xmm2
cmpq   $0x4,0xa8(%rsp)
jae    13ad <baseline+0x28d>
xor    %eax,%eax
jmp    1416 <baseline+0x2f6>
mov    0x80(%rsp),%rcx
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movupd 0x18(%rsp,%rax,8),%xmm3
movupd 0x28(%rsp,%rax,8),%xmm4
movupd 0x38(%rsp,%rax,8),%xmm5
movupd 0x48(%rsp,%rax,8),%xmm6
mulpd  %xmm2,%xmm3
mulpd  %xmm2,%xmm4
movupd %xmm3,0x118(%rsp,%rax,8)
movupd %xmm4,0x128(%rsp,%rax,8)
mulpd  %xmm2,%xmm5
mulpd  %xmm2,%xmm6
movupd %xmm5,0x138(%rsp,%rax,8)
movupd %xmm6,0x148(%rsp,%rax,8)
add    $0x8,%rax
add    $0xfffffffffffffffe,%rcx
jne    13c0 <baseline+0x2a0>
testb  $0x1,0xa0(%rsp)
01
je     144e <baseline+0x32e>
shl    $0x3,%rax
or     $0x8,%rax
movupd 0x10(%rsp,%rax,1),%xmm3
movupd 0x20(%rsp,%rax,1),%xmm4
mulpd  %xmm2,%xmm3
mulpd  %xmm2,%xmm4
movupd %xmm3,0x110(%rsp,%rax,1)
movupd %xmm4,0x120(%rsp,%rax,1)
mov    0x90(%rsp),%rax
mov    0x98(%rsp),%rcx
cmp    %rcx,(%rsp)
je     148c <baseline+0x36c>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  0x10(%rsp,%rax,8),%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x110(%rsp,%rax,8)
add    $0x1,%rax
cmp    %rax,%rbx
jne    1470 <baseline+0x350>
test   %r14d,%r14d
js     1270 <baseline+0x150>
lea    0x140(%rsp),%r14
lea    0x10(%rsp),%r10
lea    0x40(%rsp),%r13
lea    0x170(%rsp),%r15
xor    %r12d,%r12d
jmp    14f9 <baseline+0x3d9>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  0xe0(%rsp,%r12,8),%xmm1
addsd  0x110(%rsp,%r12,8),%xmm1
movsd  %xmm1,0xe0(%rsp,%r12,8)
add    $0x1,%r12
add    %r11,%r15
add    $0x8,%r13
add    $0x8,%r10
add    %r11,%r14
cmp    %rbx,%r12
je     1270 <baseline+0x150>
cmp    $0x4,%ebx
jae    1510 <baseline+0x3f0>
xor    %eax,%eax
jmp    1600 <baseline+0x4e0>
cs nopw 0x0(%rax,%rax,1)
nop
cmpq   $0x0,0xd8(%rsp)
je     1620 <baseline+0x500>
mov    %rdx,%r8
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movupd -0x30(%r13,%rax,8),%xmm1
movupd -0x20(%r13,%rax,8),%xmm2
movupd -0x30(%r15,%rax,8),%xmm3
addpd  %xmm1,%xmm3
movupd -0x20(%r15,%rax,8),%xmm1
addpd  %xmm2,%xmm1
movupd -0x10(%r15,%rax,8),%xmm2
movupd (%r15,%rax,8),%xmm4
movupd %xmm3,-0x30(%r15,%rax,8)
movupd %xmm1,-0x20(%r15,%rax,8)
movupd -0x10(%r13,%rax,8),%xmm1
addpd  %xmm2,%xmm1
movupd 0x0(%r13,%rax,8),%xmm2
addpd  %xmm4,%xmm2
movupd %xmm1,-0x10(%r15,%rax,8)
movupd %xmm2,(%r15,%rax,8)
add    $0x8,%rax
add    $0xfffffffffffffffe,%r8
jne    1530 <baseline+0x410>
test   $0x1,%r9b
je     15ec <baseline+0x4cc>
mov    %r12,%rcx
imul   0xd0(%rsp),%rcx
add    %rax,%rcx
movupd 0x140(%rsp,%rcx,8),%xmm1
movupd 0x150(%rsp,%rcx,8),%xmm2
add    %r12,%rax
movupd 0x10(%rsp,%rax,8),%xmm3
addpd  %xmm1,%xmm3
movupd 0x20(%rsp,%rax,8),%xmm1
addpd  %xmm2,%xmm1
movupd %xmm3,0x140(%rsp,%rcx,8)
movupd %xmm1,0x150(%rsp,%rcx,8)
mov    %rsi,%rax
cmp    %rbx,%rsi
je     14c0 <baseline+0x3a0>
nopl   0x0(%rax,%rax,1)
movsd  (%r14,%rax,8),%xmm1
addsd  (%r10,%rax,8),%xmm1
movsd  %xmm1,(%r14,%rax,8)
add    $0x1,%rax
cmp    %rax,%rbx
jne    1600 <baseline+0x4e0>
jmp    14c0 <baseline+0x3a0>
xor    %eax,%eax
test   $0x1,%r9b
jne    15a2 <baseline+0x482>
jmp    15ec <baseline+0x4cc>
lea    0x140(%rsp),%rdi
lea    0xe0(%rsp),%rdx
mov    %ebx,%esi
xor    %eax,%eax
call   1030 <gelim_double@plt>
cmpl   $0x0,0xc(%rsp)
mov    0x78(%rsp),%r9
jle    1849 <baseline+0x729>
movsd  0xe0(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
lea    -0x3(%rbx),%rax
lea    -0x4(%rbx),%r8
mov    %eax,%edx
and    $0x3,%edx
and    $0xfffffffffffffffc,%rax
neg    %rax
mov    (%rsp),%rsi
and    $0xfffffffffffffffe,%rsi
neg    %rsi
xor    %edi,%edi
jmp    16b2 <baseline+0x592>
nopw   0x0(%rax,%rax,1)
mov    0x70(%rsp),%rcx
movss  (%rcx,%rdi,4),%xmm2
subss  %xmm1,%xmm2
movss  %xmm2,(%rcx,%rdi,4)
add    $0x1,%rdi
cmp    0x68(%rsp),%rdi
je     1849 <baseline+0x729>
xorps  %xmm1,%xmm1
cvtsi2ss %edi,%xmm1
mulss  (%r9),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  %xmm1,0x18(%rsp)
cmp    $0x2,%r14d
jl     1780 <baseline+0x660>
mulsd  %xmm1,%xmm1
movsd  %xmm1,0x20(%rsp)
cmp    $0x3,%ebx
je     1780 <baseline+0x660>
mov    $0x3,%ebp
cmp    $0x3,%r8
jb     1744 <baseline+0x624>
mov    $0x3,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
mulsd  0x18(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp,%rbp,8)
movsd  0x18(%rsp),%xmm2
mulsd  %xmm2,%xmm1
movsd  %xmm1,0x18(%rsp,%rbp,8)
mulsd  %xmm2,%xmm1
movsd  %xmm1,0x20(%rsp,%rbp,8)
mulsd  0x18(%rsp),%xmm1
movsd  %xmm1,0x28(%rsp,%rbp,8)
lea    (%rax,%rbp,1),%rcx
add    $0x4,%rcx
add    $0x4,%rbp
cmp    $0x3,%rcx
jne    1700 <baseline+0x5e0>
test   %rdx,%rdx
je     1780 <baseline+0x660>
lea    (%rsp,%rbp,8),%rbp
add    $0x10,%rbp
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mulsd  0x18(%rsp),%xmm1
movsd  %xmm1,0x0(%rbp,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rdx
jne    1760 <baseline+0x640>
cs nopw 0x0(%rax,%rax,1)
nop
movaps %xmm0,%xmm1
test   %r14d,%r14d
jle    1690 <baseline+0x570>
mov    $0x1,%ebp
movaps %xmm0,%xmm1
cmp    $0x2,%ebx
je     17fe <baseline+0x6de>
mov    $0x1,%ebp
movaps %xmm0,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cvtss2sd %xmm1,%xmm1
movsd  0xe0(%rsp,%rbp,8),%xmm2
movsd  0xe8(%rsp,%rbp,8),%xmm3
mulsd  0x10(%rsp,%rbp,8),%xmm2
addsd  %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtsd2ss %xmm2,%xmm1
mulsd  0x18(%rsp,%rbp,8),%xmm3
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm3
xorps  %xmm1,%xmm1
cvtsd2ss %xmm3,%xmm1
lea    (%rsi,%rbp,1),%rcx
add    $0x2,%rcx
add    $0x2,%rbp
cmp    $0x1,%rcx
jne    17b0 <baseline+0x690>
testb  $0x1,(%rsp)
je     1690 <baseline+0x570>
movsd  0xe0(%rsp,%rbp,8),%xmm2
mulsd  0x10(%rsp,%rbp,8),%xmm2
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtsd2ss %xmm2,%xmm1
jmp    1690 <baseline+0x570>
add    $0x1,%r14d
lea    0x140(%rsp),%rdi
lea    0xe0(%rsp),%rdx
mov    %r14d,%esi
xor    %eax,%eax
call   1030 <gelim_double@plt>
add    $0x268,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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