int main(void) {
  {
    float x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_float_half(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      float expected = y[i] < 8 ? (float)0.5 - z[i] : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    float x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_float_one(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      float expected = y[i] < 8 ? (float)1.0 - z[i] : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    float x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_float_two(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      float expected = y[i] < 8 ? (float)2.0 - z[i] : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    double x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_double_half(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      double expected = y[i] < 8 ? (double)0.5 - z[i] : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    double x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_double_one(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      double expected = y[i] < 8 ? (double)1.0 - z[i] : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  {
    double x[99], y[99], z[99];
    for (int i = 0; i < 99; ++i) {
      y[i] = i % 13;
      z[i] = i * i;
    }
    test_double_two(x, y, z, 99);
    for (int i = 0; i < 99; ++i) {
      double expected = y[i] < 8 ? (double)2.0 - z[i] : y[i];
      if (x[i] != expected)
        __builtin_abort();
      asm volatile("" ::: "memory");
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2ac0,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x4b4(%rbp)
cmpl   $0x63,-0x4b4(%rbp)
jge    11f0 <main+0x80>
mov    -0x4b4(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cvtsi2ss %edx,%xmm0
movslq -0x4b4(%rbp),%rax
movss  %xmm0,-0x320(%rbp,%rax,4)
ff ff
mov    -0x4b4(%rbp),%eax
imul   -0x4b4(%rbp),%eax
cvtsi2ss %eax,%xmm0
movslq -0x4b4(%rbp),%rax
movss  %xmm0,-0x4b0(%rbp,%rax,4)
ff ff
mov    -0x4b4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4b4(%rbp)
jmp    118c <main+0x1c>
lea    -0x190(%rbp),%rdi
lea    -0x320(%rbp),%rsi
lea    -0x4b0(%rbp),%rdx
mov    $0x63,%ecx
mov    $0x0,%al
call   1080 <test_float_half@plt>
movl   $0x0,-0x4b8(%rbp)
cmpl   $0x63,-0x4b8(%rbp)
jge    12d3 <main+0x163>
movslq -0x4b8(%rbp),%rax
movss  0xde9(%rip),%xmm0
ucomiss -0x320(%rbp,%rax,4),%xmm0
ff
jbe    126a <main+0xfa>
movslq -0x4b8(%rbp),%rax
movss  0xdd8(%rip),%xmm0
subss  -0x4b0(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0x2a94(%rbp)
ff
jmp    1282 <main+0x112>
movslq -0x4b8(%rbp),%rax
movss  -0x320(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0x2a94(%rbp)
ff
movss  -0x2a94(%rbp),%xmm0
ff
movss  %xmm0,-0x4bc(%rbp)
ff
movslq -0x4b8(%rbp),%rax
movss  -0x190(%rbp,%rax,4),%xmm0
ff ff
ucomiss -0x4bc(%rbp),%xmm0
jne    12ba <main+0x14a>
jp     12ba <main+0x14a>
jmp    12bf <main+0x14f>
call   1040 <abort@plt>
mov    -0x4b8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4b8(%rbp)
jmp    121b <main+0xab>
movl   $0x0,-0x974(%rbp)
cmpl   $0x63,-0x974(%rbp)
jge    1341 <main+0x1d1>
mov    -0x974(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cvtsi2ss %edx,%xmm0
movslq -0x974(%rbp),%rax
movss  %xmm0,-0x7e0(%rbp,%rax,4)
ff ff
mov    -0x974(%rbp),%eax
imul   -0x974(%rbp),%eax
cvtsi2ss %eax,%xmm0
movslq -0x974(%rbp),%rax
movss  %xmm0,-0x970(%rbp,%rax,4)
ff ff
mov    -0x974(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x974(%rbp)
jmp    12dd <main+0x16d>
lea    -0x650(%rbp),%rdi
lea    -0x7e0(%rbp),%rsi
lea    -0x970(%rbp),%rdx
mov    $0x63,%ecx
mov    $0x0,%al
call   1050 <test_float_one@plt>
movl   $0x0,-0x978(%rbp)
cmpl   $0x63,-0x978(%rbp)
jge    1424 <main+0x2b4>
movslq -0x978(%rbp),%rax
movss  0xc98(%rip),%xmm0
ucomiss -0x7e0(%rbp,%rax,4),%xmm0
ff
jbe    13bb <main+0x24b>
movslq -0x978(%rbp),%rax
movss  0xc83(%rip),%xmm0
subss  -0x970(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0x2a98(%rbp)
ff
jmp    13d3 <main+0x263>
movslq -0x978(%rbp),%rax
movss  -0x7e0(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0x2a98(%rbp)
ff
movss  -0x2a98(%rbp),%xmm0
ff
movss  %xmm0,-0x97c(%rbp)
ff
movslq -0x978(%rbp),%rax
movss  -0x650(%rbp,%rax,4),%xmm0
ff ff
ucomiss -0x97c(%rbp),%xmm0
jne    140b <main+0x29b>
jp     140b <main+0x29b>
jmp    1410 <main+0x2a0>
call   1040 <abort@plt>
mov    -0x978(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x978(%rbp)
jmp    136c <main+0x1fc>
movl   $0x0,-0xe34(%rbp)
cmpl   $0x63,-0xe34(%rbp)
jge    1492 <main+0x322>
mov    -0xe34(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cvtsi2ss %edx,%xmm0
movslq -0xe34(%rbp),%rax
movss  %xmm0,-0xca0(%rbp,%rax,4)
ff ff
mov    -0xe34(%rbp),%eax
imul   -0xe34(%rbp),%eax
cvtsi2ss %eax,%xmm0
movslq -0xe34(%rbp),%rax
movss  %xmm0,-0xe30(%rbp,%rax,4)
ff ff
mov    -0xe34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe34(%rbp)
jmp    142e <main+0x2be>
lea    -0xb10(%rbp),%rdi
lea    -0xca0(%rbp),%rsi
lea    -0xe30(%rbp),%rdx
mov    $0x63,%ecx
mov    $0x0,%al
call   1070 <test_float_two@plt>
movl   $0x0,-0xe38(%rbp)
cmpl   $0x63,-0xe38(%rbp)
jge    1575 <main+0x405>
movslq -0xe38(%rbp),%rax
movss  0xb47(%rip),%xmm0
ucomiss -0xca0(%rbp,%rax,4),%xmm0
ff
jbe    150c <main+0x39c>
movslq -0xe38(%rbp),%rax
movss  0xb2e(%rip),%xmm0
subss  -0xe30(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0x2a9c(%rbp)
ff
jmp    1524 <main+0x3b4>
movslq -0xe38(%rbp),%rax
movss  -0xca0(%rbp,%rax,4),%xmm0
ff ff
movss  %xmm0,-0x2a9c(%rbp)
ff
movss  -0x2a9c(%rbp),%xmm0
ff
movss  %xmm0,-0xe3c(%rbp)
ff
movslq -0xe38(%rbp),%rax
movss  -0xb10(%rbp,%rax,4),%xmm0
ff ff
ucomiss -0xe3c(%rbp),%xmm0
jne    155c <main+0x3ec>
jp     155c <main+0x3ec>
jmp    1561 <main+0x3f1>
call   1040 <abort@plt>
mov    -0xe38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe38(%rbp)
jmp    14bd <main+0x34d>
movl   $0x0,-0x17a4(%rbp)
cmpl   $0x63,-0x17a4(%rbp)
jge    15e3 <main+0x473>
mov    -0x17a4(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm0
movslq -0x17a4(%rbp),%rax
movsd  %xmm0,-0x1480(%rbp,%rax,8)
ff ff
mov    -0x17a4(%rbp),%eax
imul   -0x17a4(%rbp),%eax
cvtsi2sd %eax,%xmm0
movslq -0x17a4(%rbp),%rax
movsd  %xmm0,-0x17a0(%rbp,%rax,8)
ff ff
mov    -0x17a4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x17a4(%rbp)
jmp    157f <main+0x40f>
lea    -0x1160(%rbp),%rdi
lea    -0x1480(%rbp),%rsi
lea    -0x17a0(%rbp),%rdx
mov    $0x63,%ecx
mov    $0x0,%al
call   1060 <test_double_half@plt>
movl   $0x0,-0x17a8(%rbp)
cmpl   $0x63,-0x17a8(%rbp)
jge    16c8 <main+0x558>
movslq -0x17a8(%rbp),%rax
movsd  0x9d6(%rip),%xmm0
ucomisd -0x1480(%rbp,%rax,8),%xmm0
ff ff
jbe    165e <main+0x4ee>
movslq -0x17a8(%rbp),%rax
movsd  0x9d0(%rip),%xmm0
subsd  -0x17a0(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x2aa8(%rbp)
ff
jmp    1676 <main+0x506>
movslq -0x17a8(%rbp),%rax
movsd  -0x1480(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x2aa8(%rbp)
ff
movsd  -0x2aa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x17b0(%rbp)
ff
movslq -0x17a8(%rbp),%rax
movsd  -0x1160(%rbp,%rax,8),%xmm0
ff ff
ucomisd -0x17b0(%rbp),%xmm0
ff
jne    16af <main+0x53f>
jp     16af <main+0x53f>
jmp    16b4 <main+0x544>
call   1040 <abort@plt>
mov    -0x17a8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x17a8(%rbp)
jmp    160e <main+0x49e>
movl   $0x0,-0x2114(%rbp)
cmpl   $0x63,-0x2114(%rbp)
jge    1736 <main+0x5c6>
mov    -0x2114(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm0
movslq -0x2114(%rbp),%rax
movsd  %xmm0,-0x1df0(%rbp,%rax,8)
ff ff
mov    -0x2114(%rbp),%eax
imul   -0x2114(%rbp),%eax
cvtsi2sd %eax,%xmm0
movslq -0x2114(%rbp),%rax
movsd  %xmm0,-0x2110(%rbp,%rax,8)
ff ff
mov    -0x2114(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2114(%rbp)
jmp    16d2 <main+0x562>
lea    -0x1ad0(%rbp),%rdi
lea    -0x1df0(%rbp),%rsi
lea    -0x2110(%rbp),%rdx
mov    $0x63,%ecx
mov    $0x0,%al
call   1030 <test_double_one@plt>
movl   $0x0,-0x2118(%rbp)
cmpl   $0x63,-0x2118(%rbp)
jge    181b <main+0x6ab>
movslq -0x2118(%rbp),%rax
movsd  0x883(%rip),%xmm0
ucomisd -0x1df0(%rbp,%rax,8),%xmm0
ff ff
jbe    17b1 <main+0x641>
movslq -0x2118(%rbp),%rax
movsd  0x875(%rip),%xmm0
subsd  -0x2110(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x2ab0(%rbp)
ff
jmp    17c9 <main+0x659>
movslq -0x2118(%rbp),%rax
movsd  -0x1df0(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x2ab0(%rbp)
ff
movsd  -0x2ab0(%rbp),%xmm0
ff
movsd  %xmm0,-0x2120(%rbp)
ff
movslq -0x2118(%rbp),%rax
movsd  -0x1ad0(%rbp,%rax,8),%xmm0
ff ff
ucomisd -0x2120(%rbp),%xmm0
ff
jne    1802 <main+0x692>
jp     1802 <main+0x692>
jmp    1807 <main+0x697>
call   1040 <abort@plt>
mov    -0x2118(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2118(%rbp)
jmp    1761 <main+0x5f1>
movl   $0x0,-0x2a84(%rbp)
cmpl   $0x63,-0x2a84(%rbp)
jge    1889 <main+0x719>
mov    -0x2a84(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cvtsi2sd %edx,%xmm0
movslq -0x2a84(%rbp),%rax
movsd  %xmm0,-0x2760(%rbp,%rax,8)
ff ff
mov    -0x2a84(%rbp),%eax
imul   -0x2a84(%rbp),%eax
cvtsi2sd %eax,%xmm0
movslq -0x2a84(%rbp),%rax
movsd  %xmm0,-0x2a80(%rbp,%rax,8)
ff ff
mov    -0x2a84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2a84(%rbp)
jmp    1825 <main+0x6b5>
lea    -0x2440(%rbp),%rdi
lea    -0x2760(%rbp),%rsi
lea    -0x2a80(%rbp),%rdx
mov    $0x63,%ecx
mov    $0x0,%al
call   1090 <test_double_two@plt>
movl   $0x0,-0x2a88(%rbp)
cmpl   $0x63,-0x2a88(%rbp)
jge    196e <main+0x7fe>
movslq -0x2a88(%rbp),%rax
movsd  0x730(%rip),%xmm0
ucomisd -0x2760(%rbp,%rax,8),%xmm0
ff ff
jbe    1904 <main+0x794>
movslq -0x2a88(%rbp),%rax
movsd  0x71a(%rip),%xmm0
subsd  -0x2a80(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x2ab8(%rbp)
ff
jmp    191c <main+0x7ac>
movslq -0x2a88(%rbp),%rax
movsd  -0x2760(%rbp,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x2ab8(%rbp)
ff
movsd  -0x2ab8(%rbp),%xmm0
ff
movsd  %xmm0,-0x2a90(%rbp)
ff
movslq -0x2a88(%rbp),%rax
movsd  -0x2440(%rbp,%rax,8),%xmm0
ff ff
ucomisd -0x2a90(%rbp),%xmm0
ff
jne    1955 <main+0x7e5>
jp     1955 <main+0x7e5>
jmp    195a <main+0x7ea>
call   1040 <abort@plt>
mov    -0x2a88(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2a88(%rbp)
jmp    18b4 <main+0x744>
xor    %eax,%eax
add    $0x2ac0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %rbx
sub    $0x960,%rsp
movdqa 0xe7c(%rip),%xmm0
movdqa 0xe84(%rip),%xmm1
movdqa 0xe8c(%rip),%xmm2
mov    $0x4,%eax
pxor   %xmm3,%xmm3
movdqa 0xe8a(%rip),%xmm8
movdqa 0xe91(%rip),%xmm9
movdqa 0xe98(%rip),%xmm10
movdqa 0xe9f(%rip),%xmm11
movdqa 0xea6(%rip),%xmm12
movdqa 0xebd(%rip),%xmm13
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqa %xmm2,%xmm4
punpcklbw %xmm3,%xmm4
pmullw %xmm8,%xmm4
psrlw  $0x8,%xmm4
packuswb %xmm4,%xmm4
psrlw  $0x2,%xmm4
pand   %xmm9,%xmm4
punpcklbw %xmm4,%xmm4
pmullw %xmm10,%xmm4
pand   %xmm11,%xmm4
packuswb %xmm4,%xmm4
movdqa %xmm2,%xmm5
psubb  %xmm4,%xmm5
punpcklbw %xmm3,%xmm5
punpcklwd %xmm3,%xmm5
cvtdq2ps %xmm5,%xmm4
movaps %xmm4,0x310(%rsp,%rax,4)
movdqa %xmm1,%xmm4
pmuludq %xmm1,%xmm4
movdqa %xmm0,%xmm5
pmuludq %xmm0,%xmm5
shufps $0x88,%xmm5,%xmm4
cvtdq2ps %xmm4,%xmm4
movaps %xmm4,-0x10(%rsp,%rax,4)
movdqa %xmm0,%xmm4
paddq  %xmm12,%xmm4
movdqa %xmm1,%xmm5
paddq  %xmm12,%xmm5
movdqa %xmm2,%xmm6
paddb  0xe19(%rip),%xmm6
movdqa %xmm6,%xmm7
punpcklbw %xmm3,%xmm7
pmullw %xmm8,%xmm7
psrlw  $0x8,%xmm7
packuswb %xmm7,%xmm7
psrlw  $0x2,%xmm7
pand   %xmm9,%xmm7
punpcklbw %xmm7,%xmm7
pmullw %xmm10,%xmm7
pand   %xmm11,%xmm7
packuswb %xmm7,%xmm7
psubb  %xmm7,%xmm6
punpcklbw %xmm3,%xmm6
punpcklwd %xmm3,%xmm6
cvtdq2ps %xmm6,%xmm6
movaps %xmm6,0x320(%rsp,%rax,4)
pmuludq %xmm5,%xmm5
pmuludq %xmm4,%xmm4
shufps $0x88,%xmm4,%xmm5
cvtdq2ps %xmm5,%xmm4
movaps %xmm4,(%rsp,%rax,4)
paddq  %xmm13,%xmm1
paddq  %xmm13,%xmm0
paddb  0xdcb(%rip),%xmm2
add    $0x8,%rax
cmp    $0x64,%rax
jne    11e0 <main+0x70>
movabs $0x40c0000040a00000,%r14
mov    %r14,0x4a0(%rsp)
movl   $0x46100000,0x180(%rsp)
movabs $0x4616100046130400,%r15
10 16 46
mov    %r15,0x184(%rsp)
movl   $0x40e00000,0x4a8(%rsp)
xor    %ebx,%ebx
lea    0x640(%rsp),%rdi
lea    0x320(%rsp),%rsi
mov    %rsp,%rdx
mov    $0x63,%ecx
xor    %eax,%eax
call   1080 <test_float_half@plt>
movss  0xd6a(%rip),%xmm3
movss  0xd66(%rip),%xmm0
xchg   %ax,%ax
movss  0x320(%rsp,%rbx,4),%xmm1
ucomiss %xmm1,%xmm3
jbe    1366 <main+0x1f6>
movaps %xmm0,%xmm1
subss  (%rsp,%rbx,4),%xmm1
movss  0x640(%rsp,%rbx,4),%xmm2
ucomiss %xmm1,%xmm2
jne    1a82 <main+0x912>
jp     1a82 <main+0x912>
add    $0x1,%rbx
cmp    $0x63,%rbx
jne    1350 <main+0x1e0>
movdqa 0xc70(%rip),%xmm0
movdqa 0xc78(%rip),%xmm1
movdqa 0xc80(%rip),%xmm2
mov    $0x4,%eax
xorps  %xmm3,%xmm3
movdqa 0xc7f(%rip),%xmm8
movdqa 0xc86(%rip),%xmm9
movdqa 0xc8d(%rip),%xmm10
movdqa 0xc94(%rip),%xmm11
movdqa 0xc9b(%rip),%xmm12
movdqa 0xca2(%rip),%xmm13
movdqa 0xca9(%rip),%xmm14
movdqa 0xcb0(%rip),%xmm15
movdqa %xmm2,%xmm4
punpcklbw %xmm3,%xmm4
pmullw %xmm8,%xmm4
psrlw  $0x8,%xmm4
packuswb %xmm4,%xmm4
psrlw  $0x2,%xmm4
pand   %xmm9,%xmm4
punpcklbw %xmm4,%xmm4
pmullw %xmm10,%xmm4
pand   %xmm11,%xmm4
packuswb %xmm4,%xmm4
movdqa %xmm2,%xmm5
psubb  %xmm4,%xmm5
punpcklbw %xmm3,%xmm5
punpcklwd %xmm3,%xmm5
cvtdq2ps %xmm5,%xmm4
movaps %xmm4,0x310(%rsp,%rax,4)
movdqa %xmm1,%xmm4
pmuludq %xmm1,%xmm4
movdqa %xmm0,%xmm5
pmuludq %xmm0,%xmm5
shufps $0x88,%xmm5,%xmm4
cvtdq2ps %xmm4,%xmm4
movaps %xmm4,-0x10(%rsp,%rax,4)
movdqa %xmm0,%xmm4
paddq  %xmm12,%xmm4
movdqa %xmm1,%xmm5
paddq  %xmm12,%xmm5
movdqa %xmm2,%xmm6
paddb  %xmm13,%xmm6
movdqa %xmm6,%xmm7
punpcklbw %xmm3,%xmm7
pmullw %xmm8,%xmm7
psrlw  $0x8,%xmm7
packuswb %xmm7,%xmm7
psrlw  $0x2,%xmm7
pand   %xmm9,%xmm7
punpcklbw %xmm7,%xmm7
pmullw %xmm10,%xmm7
pand   %xmm11,%xmm7
packuswb %xmm7,%xmm7
psubb  %xmm7,%xmm6
punpcklbw %xmm3,%xmm6
punpcklwd %xmm3,%xmm6
cvtdq2ps %xmm6,%xmm6
movaps %xmm6,0x320(%rsp,%rax,4)
pmuludq %xmm5,%xmm5
pmuludq %xmm4,%xmm4
shufps $0x88,%xmm4,%xmm5
cvtdq2ps %xmm5,%xmm4
movaps %xmm4,(%rsp,%rax,4)
paddq  %xmm14,%xmm1
paddq  %xmm14,%xmm0
paddb  %xmm15,%xmm2
add    $0x8,%rax
cmp    $0x64,%rax
jne    13f0 <main+0x280>
mov    %r14,0x4a0(%rsp)
movl   $0x46100000,0x180(%rsp)
mov    %r15,0x184(%rsp)
movl   $0x40e00000,0x4a8(%rsp)
xor    %ebx,%ebx
lea    0x640(%rsp),%rdi
lea    0x320(%rsp),%rsi
mov    %rsp,%rdx
mov    $0x63,%ecx
xor    %eax,%eax
call   1050 <test_float_one@plt>
movss  0xb7c(%rip),%xmm0
movss  0xb6c(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movss  0x320(%rsp,%rbx,4),%xmm1
ucomiss %xmm1,%xmm3
jbe    1566 <main+0x3f6>
movaps %xmm0,%xmm1
subss  (%rsp,%rbx,4),%xmm1
movss  0x640(%rsp,%rbx,4),%xmm2
ucomiss %xmm1,%xmm2
jne    1a82 <main+0x912>
jp     1a82 <main+0x912>
add    $0x1,%rbx
cmp    $0x63,%rbx
jne    1550 <main+0x3e0>
movdqa 0xa70(%rip),%xmm0
movdqa 0xa78(%rip),%xmm1
movdqa 0xa80(%rip),%xmm2
mov    $0x4,%eax
xorps  %xmm3,%xmm3
movdqa 0xa7f(%rip),%xmm8
movdqa 0xa86(%rip),%xmm9
movdqa 0xa8d(%rip),%xmm10
movdqa 0xa94(%rip),%xmm11
movdqa 0xa9b(%rip),%xmm12
movdqa 0xaa2(%rip),%xmm13
movdqa 0xaa9(%rip),%xmm14
movdqa 0xab0(%rip),%xmm15
movdqa %xmm2,%xmm4
punpcklbw %xmm3,%xmm4
pmullw %xmm8,%xmm4
psrlw  $0x8,%xmm4
packuswb %xmm4,%xmm4
psrlw  $0x2,%xmm4
pand   %xmm9,%xmm4
punpcklbw %xmm4,%xmm4
pmullw %xmm10,%xmm4
pand   %xmm11,%xmm4
packuswb %xmm4,%xmm4
movdqa %xmm2,%xmm5
psubb  %xmm4,%xmm5
punpcklbw %xmm3,%xmm5
punpcklwd %xmm3,%xmm5
cvtdq2ps %xmm5,%xmm4
movaps %xmm4,0x310(%rsp,%rax,4)
movdqa %xmm1,%xmm4
pmuludq %xmm1,%xmm4
movdqa %xmm0,%xmm5
pmuludq %xmm0,%xmm5
shufps $0x88,%xmm5,%xmm4
cvtdq2ps %xmm4,%xmm4
movaps %xmm4,-0x10(%rsp,%rax,4)
movdqa %xmm0,%xmm4
paddq  %xmm12,%xmm4
movdqa %xmm1,%xmm5
paddq  %xmm12,%xmm5
movdqa %xmm2,%xmm6
paddb  %xmm13,%xmm6
movdqa %xmm6,%xmm7
punpcklbw %xmm3,%xmm7
pmullw %xmm8,%xmm7
psrlw  $0x8,%xmm7
packuswb %xmm7,%xmm7
psrlw  $0x2,%xmm7
pand   %xmm9,%xmm7
punpcklbw %xmm7,%xmm7
pmullw %xmm10,%xmm7
pand   %xmm11,%xmm7
packuswb %xmm7,%xmm7
psubb  %xmm7,%xmm6
punpcklbw %xmm3,%xmm6
punpcklwd %xmm3,%xmm6
cvtdq2ps %xmm6,%xmm6
movaps %xmm6,0x320(%rsp,%rax,4)
pmuludq %xmm5,%xmm5
pmuludq %xmm4,%xmm4
shufps $0x88,%xmm4,%xmm5
cvtdq2ps %xmm5,%xmm4
movaps %xmm4,(%rsp,%rax,4)
paddq  %xmm14,%xmm1
paddq  %xmm14,%xmm0
paddb  %xmm15,%xmm2
add    $0x8,%rax
cmp    $0x64,%rax
jne    15f0 <main+0x480>
mov    %r14,0x4a0(%rsp)
movl   $0x46100000,0x180(%rsp)
mov    %r15,0x184(%rsp)
movl   $0x40e00000,0x4a8(%rsp)
xor    %ebx,%ebx
lea    0x640(%rsp),%rdi
lea    0x320(%rsp),%rsi
mov    %rsp,%rdx
mov    $0x63,%ecx
xor    %eax,%eax
call   1070 <test_float_two@plt>
movss  0x980(%rip),%xmm0
movss  0x96c(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movss  0x320(%rsp,%rbx,4),%xmm1
ucomiss %xmm1,%xmm3
jbe    1766 <main+0x5f6>
movaps %xmm0,%xmm1
subss  (%rsp,%rbx,4),%xmm1
movss  0x640(%rsp,%rbx,4),%xmm2
ucomiss %xmm1,%xmm2
jne    1a82 <main+0x912>
jp     1a82 <main+0x912>
add    $0x1,%rbx
cmp    $0x63,%rbx
jne    1750 <main+0x5e0>
mov    $0x1,%eax
xor    %ecx,%ecx
nop
movzbl %cl,%edx
imul   $0x4f,%edx,%edx
shr    $0xa,%edx
imul   $0xfffffff3,%edx,%edx
lea    -0x1(%rax),%esi
add    %eax,%edx
add    $0xff,%dl
movzbl %dl,%edx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
movsd  %xmm0,0x318(%rsp,%rax,8)
imul   %esi,%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
movsd  %xmm0,-0x8(%rsp,%rax,8)
cmp    $0x63,%rax
je     180b <main+0x69b>
movzbl %al,%edx
imul   $0x4f,%edx,%edx
shr    $0xa,%edx
imul   $0xfffffff3,%edx,%edx
movzbl %dl,%edx
add    %eax,%edx
movzbl %dl,%edx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
mov    %eax,%edx
imul   %eax,%edx
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
movsd  %xmm0,0x320(%rsp,%rax,8)
movsd  %xmm1,(%rsp,%rax,8)
add    $0x2,%rax
add    $0x2,%cl
jmp    1790 <main+0x620>
xor    %ebx,%ebx
lea    0x640(%rsp),%rdi
lea    0x320(%rsp),%rsi
mov    %rsp,%rdx
mov    $0x63,%ecx
xor    %eax,%eax
call   1060 <test_double_half@plt>
movsd  0x88c(%rip),%xmm3
movsd  0x88c(%rip),%xmm0
nopl   0x0(%rax)
movsd  0x320(%rsp,%rbx,8),%xmm1
ucomisd %xmm1,%xmm3
jbe    1858 <main+0x6e8>
movapd %xmm0,%xmm1
subsd  (%rsp,%rbx,8),%xmm1
movsd  0x640(%rsp,%rbx,8),%xmm2
ucomisd %xmm1,%xmm2
jne    1a82 <main+0x912>
jp     1a82 <main+0x912>
add    $0x1,%rbx
cmp    $0x63,%rbx
jne    1840 <main+0x6d0>
mov    $0x1,%eax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl %cl,%edx
imul   $0x4f,%edx,%edx
shr    $0xa,%edx
imul   $0xfffffff3,%edx,%edx
lea    -0x1(%rax),%esi
add    %eax,%edx
add    $0xff,%dl
movzbl %dl,%edx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
movsd  %xmm0,0x318(%rsp,%rax,8)
imul   %esi,%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
movsd  %xmm0,-0x8(%rsp,%rax,8)
cmp    $0x63,%rax
je     190b <main+0x79b>
movzbl %al,%edx
imul   $0x4f,%edx,%edx
shr    $0xa,%edx
imul   $0xfffffff3,%edx,%edx
movzbl %dl,%edx
add    %eax,%edx
movzbl %dl,%edx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
mov    %eax,%edx
imul   %eax,%edx
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
movsd  %xmm0,0x320(%rsp,%rax,8)
movsd  %xmm1,(%rsp,%rax,8)
add    $0x2,%rax
add    $0x2,%cl
jmp    1890 <main+0x720>
xor    %ebx,%ebx
lea    0x640(%rsp),%rdi
lea    0x320(%rsp),%rsi
mov    %rsp,%rdx
mov    $0x63,%ecx
xor    %eax,%eax
call   1030 <test_double_one@plt>
movsd  0x78c(%rip),%xmm3
movsd  0x794(%rip),%xmm0
nopl   0x0(%rax)
movsd  0x320(%rsp,%rbx,8),%xmm1
ucomisd %xmm1,%xmm3
jbe    1958 <main+0x7e8>
movapd %xmm0,%xmm1
subsd  (%rsp,%rbx,8),%xmm1
movsd  0x640(%rsp,%rbx,8),%xmm2
ucomisd %xmm1,%xmm2
jne    1a82 <main+0x912>
jp     1a82 <main+0x912>
add    $0x1,%rbx
cmp    $0x63,%rbx
jne    1940 <main+0x7d0>
mov    $0x1,%eax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl %cl,%edx
imul   $0x4f,%edx,%edx
shr    $0xa,%edx
imul   $0xfffffff3,%edx,%edx
lea    -0x1(%rax),%esi
add    %eax,%edx
add    $0xff,%dl
movzbl %dl,%edx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
movsd  %xmm0,0x318(%rsp,%rax,8)
imul   %esi,%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
movsd  %xmm0,-0x8(%rsp,%rax,8)
cmp    $0x63,%rax
je     1a0b <main+0x89b>
movzbl %al,%edx
imul   $0x4f,%edx,%edx
shr    $0xa,%edx
imul   $0xfffffff3,%edx,%edx
movzbl %dl,%edx
add    %eax,%edx
movzbl %dl,%edx
xorps  %xmm0,%xmm0
cvtsi2sd %edx,%xmm0
mov    %eax,%edx
imul   %eax,%edx
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
movsd  %xmm0,0x320(%rsp,%rax,8)
movsd  %xmm1,(%rsp,%rax,8)
add    $0x2,%rax
add    $0x2,%cl
jmp    1990 <main+0x820>
xor    %ebx,%ebx
lea    0x640(%rsp),%rdi
lea    0x320(%rsp),%rsi
mov    %rsp,%rdx
mov    $0x63,%ecx
xor    %eax,%eax
call   1090 <test_double_two@plt>
movsd  0x68c(%rip),%xmm3
movsd  0x69c(%rip),%xmm0
nopl   0x0(%rax)
movsd  0x320(%rsp,%rbx,8),%xmm1
ucomisd %xmm1,%xmm3
jbe    1a58 <main+0x8e8>
movapd %xmm0,%xmm1
subsd  (%rsp,%rbx,8),%xmm1
movsd  0x640(%rsp,%rbx,8),%xmm2
ucomisd %xmm1,%xmm2
jne    1a82 <main+0x912>
jp     1a82 <main+0x912>
add    $0x1,%rbx
cmp    $0x63,%rbx
jne    1a40 <main+0x8d0>
xor    %eax,%eax
add    $0x960,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret
call   1040 <abort@plt>

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

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