#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int ft_putchar(char);
scalar_t__ is_in(double);
scalar_t__ is_neg(double);
int a_preformat(double n, int fl[8], int len, char c) {
  int index;
  int ret;
  ret = 0;
  ret += (fl[3] && is_neg(n) && !is_in(n)) ? ft_putchar('-') : 0;
  ret += (fl[3] && fl[5] && !is_neg(n) && !is_in(n)) ? ft_putchar('+') : 0;
  ret += (fl[3] && fl[6] && !fl[5] && !is_neg(n) && !is_in(n)) ? ft_putchar(' ')
                                                               : 0;
  ret += (fl[3] && !is_in(n)) ? (ft_putchar('0') + ft_putchar(c + 23)) : 0;
  if (!fl[4] && len + (fl[1] > 0) < fl[0]) {
    index = ((n != n && is_neg(n)) || fl[5] || fl[6]) ? 0 : -1;
    index += (fl[2] && !fl[1] && !is_in(n)) ? 1 : 0;
    while (++index < fl[0] - len - (fl[1] > 0))
      ret += (!is_in(n) && fl[3]) ? ft_putchar('0') : ft_putchar(' ');
  }
  ret += (is_neg(n) && n == n && (!fl[3] || is_in(n))) ? ft_putchar('-') : 0;
  ret += (!is_neg(n) && n == n && fl[5] && (!fl[3] || is_in(n)))
             ? ft_putchar('+')
             : 0;
  ret += (!is_neg(n) && n == n && fl[6] && !fl[5] && (!fl[3] || is_in(n)))
             ? ft_putchar(' ')
             : 0;
  ret += (!fl[3] && !is_in(n)) ? (ft_putchar('0') + ft_putchar(c + 23)) : 0;
  return (ret);
}


x86 assembly (clang, -O0):
<a_preformat>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %dl,%al
movsd  %xmm0,-0x8(%rbp)
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %al,-0x15(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     1198 <a_preformat+0x68>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
je     1198 <a_preformat+0x68>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    1198 <a_preformat+0x68>
mov    $0x2d,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x24(%rbp)
jmp    11a2 <a_preformat+0x72>
xor    %eax,%eax
mov    %eax,-0x24(%rbp)
jmp    11a2 <a_preformat+0x72>
mov    -0x24(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     1201 <a_preformat+0xd1>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x14(%rax)
je     1201 <a_preformat+0xd1>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
jne    1201 <a_preformat+0xd1>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    1201 <a_preformat+0xd1>
mov    $0x2b,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x28(%rbp)
jmp    120b <a_preformat+0xdb>
xor    %eax,%eax
mov    %eax,-0x28(%rbp)
jmp    120b <a_preformat+0xdb>
mov    -0x28(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     1278 <a_preformat+0x148>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x18(%rax)
je     1278 <a_preformat+0x148>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x14(%rax)
jne    1278 <a_preformat+0x148>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
jne    1278 <a_preformat+0x148>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    1278 <a_preformat+0x148>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x2c(%rbp)
jmp    1282 <a_preformat+0x152>
xor    %eax,%eax
mov    %eax,-0x2c(%rbp)
jmp    1282 <a_preformat+0x152>
mov    -0x2c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     12d8 <a_preformat+0x1a8>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    12d8 <a_preformat+0x1a8>
mov    $0x30,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x34(%rbp)
movsbl -0x15(%rbp),%eax
add    $0x17,%eax
movsbl %al,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%ecx
mov    -0x34(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x30(%rbp)
jmp    12e2 <a_preformat+0x1b2>
xor    %eax,%eax
mov    %eax,-0x30(%rbp)
jmp    12e2 <a_preformat+0x1b2>
mov    -0x30(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x10(%rax)
jne    1459 <a_preformat+0x329>
mov    -0x14(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmpl   $0x0,0x4(%rcx)
setg   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
jge    1459 <a_preformat+0x329>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    1336 <a_preformat+0x206>
jp     1336 <a_preformat+0x206>
jmp    1352 <a_preformat+0x222>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x35(%rbp)
jne    1373 <a_preformat+0x243>
mov    -0x10(%rbp),%rcx
mov    $0x1,%al
cmpl   $0x0,0x14(%rcx)
mov    %al,-0x35(%rbp)
jne    1373 <a_preformat+0x243>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x18(%rax)
setne  %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%dl
mov    $0xffffffff,%eax
xor    %ecx,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rcx
xor    %eax,%eax
cmpl   $0x0,0x8(%rcx)
mov    %al,-0x36(%rbp)
je     13c2 <a_preformat+0x292>
mov    -0x10(%rbp),%rcx
xor    %eax,%eax
cmpl   $0x0,0x4(%rcx)
mov    %al,-0x36(%rbp)
jne    13c2 <a_preformat+0x292>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
setne  %al
xor    $0xff,%al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%dl
xor    %eax,%eax
mov    $0x1,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rcx
mov    (%rcx),%ecx
sub    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rdx
cmpl   $0x0,0x4(%rdx)
setg   %dl
and    $0x1,%dl
movzbl %dl,%edx
sub    %edx,%ecx
cmp    %ecx,%eax
jge    1454 <a_preformat+0x324>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    1439 <a_preformat+0x309>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     1439 <a_preformat+0x309>
mov    $0x30,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x3c(%rbp)
jmp    1446 <a_preformat+0x316>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    13d8 <a_preformat+0x2a8>
jmp    1459 <a_preformat+0x329>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
je     14b7 <a_preformat+0x387>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    14b7 <a_preformat+0x387>
jp     14b7 <a_preformat+0x387>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     14a5 <a_preformat+0x375>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
je     14b7 <a_preformat+0x387>
mov    $0x2d,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x40(%rbp)
jmp    14c1 <a_preformat+0x391>
xor    %eax,%eax
mov    %eax,-0x40(%rbp)
jmp    14c1 <a_preformat+0x391>
mov    -0x40(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
jne    1536 <a_preformat+0x406>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    1536 <a_preformat+0x406>
jp     1536 <a_preformat+0x406>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x14(%rax)
je     1536 <a_preformat+0x406>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     1524 <a_preformat+0x3f4>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
je     1536 <a_preformat+0x406>
mov    $0x2b,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x44(%rbp)
jmp    1540 <a_preformat+0x410>
xor    %eax,%eax
mov    %eax,-0x44(%rbp)
jmp    1540 <a_preformat+0x410>
mov    -0x44(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
jne    15c3 <a_preformat+0x493>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    15c3 <a_preformat+0x493>
jp     15c3 <a_preformat+0x493>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x18(%rax)
je     15c3 <a_preformat+0x493>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x14(%rax)
jne    15c3 <a_preformat+0x493>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     15b1 <a_preformat+0x481>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
je     15c3 <a_preformat+0x493>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x48(%rbp)
jmp    15cd <a_preformat+0x49d>
xor    %eax,%eax
mov    %eax,-0x48(%rbp)
jmp    15cd <a_preformat+0x49d>
mov    -0x48(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
jne    1623 <a_preformat+0x4f3>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    1623 <a_preformat+0x4f3>
mov    $0x30,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x50(%rbp)
movsbl -0x15(%rbp),%eax
add    $0x17,%eax
movsbl %al,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%ecx
mov    -0x50(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x4c(%rbp)
jmp    162d <a_preformat+0x4fd>
xor    %eax,%eax
mov    %eax,-0x4c(%rbp)
jmp    162d <a_preformat+0x4fd>
mov    -0x4c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<a_preformat>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %edx,%r14d
mov    %esi,%r15d
mov    %rdi,%r12
cmpl   $0x0,0xc(%rdi)
movsd  %xmm0,0x8(%rsp)
je     1281 <a_preformat+0x151>
call   1040 <is_neg@plt>
xor    %r13d,%r13d
mov    $0x0,%ebp
test   %rax,%rax
je     1182 <a_preformat+0x52>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
mov    $0x0,%ebp
test   %rax,%rax
je     1288 <a_preformat+0x158>
cmpl   $0x0,0xc(%r12)
je     12a0 <a_preformat+0x170>
xor    %r13d,%r13d
cmpl   $0x0,0x14(%r12)
mov    $0x0,%ebx
je     11d4 <a_preformat+0xa4>
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
mov    $0x0,%ebx
test   %rax,%rax
jne    11d4 <a_preformat+0xa4>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
mov    $0x0,%ebx
test   %rax,%rax
jne    11d4 <a_preformat+0xa4>
mov    $0x2b,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%ebx
add    %ebp,%ebx
cmpl   $0x0,0xc(%r12)
movsd  0x8(%rsp),%xmm0
je     12a8 <a_preformat+0x178>
xor    %r13d,%r13d
cmpl   $0x0,0x18(%r12)
mov    $0x0,%ebp
je     124d <a_preformat+0x11d>
cmpl   $0x0,0x14(%r12)
mov    $0x0,%ebp
jne    124d <a_preformat+0x11d>
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
movsd  0x8(%rsp),%xmm0
mov    $0x0,%ebp
test   %rax,%rax
jne    124d <a_preformat+0x11d>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
movsd  0x8(%rsp),%xmm0
mov    $0x0,%ebp
test   %rax,%rax
jne    124d <a_preformat+0x11d>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
movsd  0x8(%rsp),%xmm0
mov    %eax,%ebp
add    %ebx,%ebp
cmpl   $0x0,0xc(%r12)
je     12aa <a_preformat+0x17a>
call   1030 <is_in@plt>
test   %rax,%rax
jne    12a0 <a_preformat+0x170>
mov    $0x30,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%ebx
lea    0x17(%r14),%eax
movsbl %al,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%r13d
add    %ebx,%r13d
jmp    12a0 <a_preformat+0x170>
xor    %ebp,%ebp
xor    %r13d,%r13d
jmp    12aa <a_preformat+0x17a>
mov    $0x2d,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%ebp
cmpl   $0x0,0xc(%r12)
jne    118e <a_preformat+0x5e>
movsd  0x8(%rsp),%xmm0
jmp    12aa <a_preformat+0x17a>
mov    %ebx,%ebp
add    %r13d,%ebp
cmpl   $0x0,0x10(%r12)
jne    1330 <a_preformat+0x200>
xor    %eax,%eax
cmpl   $0x0,0x4(%r12)
setg   %al
add    %r15d,%eax
cmp    (%r12),%eax
jge    1330 <a_preformat+0x200>
ucomisd %xmm0,%xmm0
jp     14e7 <a_preformat+0x3b7>
xor    %ebx,%ebx
cmpl   $0x0,0x14(%r12)
jne    12e5 <a_preformat+0x1b5>
cmpl   $0x1,0x18(%r12)
sbb    %ebx,%ebx
xor    %ecx,%ecx
cmpl   $0x0,0x8(%r12)
je     1310 <a_preformat+0x1e0>
cmpl   $0x0,0x4(%r12)
jne    1310 <a_preformat+0x1e0>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
movsd  0x8(%rsp),%xmm0
xor    %ecx,%ecx
test   %rax,%rax
sete   %cl
mov    (%r12),%eax
sub    %r15d,%eax
xor    %edx,%edx
cmpl   $0x0,0x4(%r12)
lea    0x1(%rcx,%rbx,1),%ebx
setg   %dl
sub    %edx,%eax
cmp    %eax,%ebx
jl     14d1 <a_preformat+0x3a1>
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
xor    %r15d,%r15d
movsd  0x8(%rsp),%xmm0
ucomisd %xmm0,%xmm0
mov    $0x0,%ebx
jp     1382 <a_preformat+0x252>
mov    $0x0,%ebx
test   %rax,%rax
je     1382 <a_preformat+0x252>
cmpl   $0x0,0xc(%r12)
je     1376 <a_preformat+0x246>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
mov    $0x0,%ebx
test   %rax,%rax
je     1382 <a_preformat+0x252>
mov    $0x2d,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%ebx
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
movsd  0x8(%rsp),%xmm0
ucomisd %xmm0,%xmm0
mov    %r14,0x10(%rsp)
jp     13d0 <a_preformat+0x2a0>
test   %rax,%rax
jne    13d0 <a_preformat+0x2a0>
cmpl   $0x0,0x14(%r12)
je     13d0 <a_preformat+0x2a0>
cmpl   $0x0,0xc(%r12)
je     13c3 <a_preformat+0x293>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
test   %rax,%rax
je     13d0 <a_preformat+0x2a0>
mov    $0x2b,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%r15d
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
movsd  0x8(%rsp),%xmm0
xor    %r13d,%r13d
ucomisd %xmm0,%xmm0
mov    $0x0,%r14d
jp     144e <a_preformat+0x31e>
mov    $0x0,%r14d
test   %rax,%rax
jne    144e <a_preformat+0x31e>
cmpl   $0x0,0x18(%r12)
mov    $0x0,%r14d
je     144e <a_preformat+0x31e>
cmpl   $0x0,0x14(%r12)
mov    $0x0,%r14d
jne    144e <a_preformat+0x31e>
cmpl   $0x0,0xc(%r12)
je     143b <a_preformat+0x30b>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
movsd  0x8(%rsp),%xmm0
mov    $0x0,%r14d
test   %rax,%rax
je     144e <a_preformat+0x31e>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
movsd  0x8(%rsp),%xmm0
mov    %eax,%r14d
cmpl   $0x0,0xc(%r12)
jne    1482 <a_preformat+0x352>
call   1030 <is_in@plt>
test   %rax,%rax
jne    1482 <a_preformat+0x352>
mov    $0x30,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%r12d
mov    0x10(%rsp),%rax
add    $0x17,%al
movsbl %al,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%r13d
add    %r12d,%r13d
add    %ebp,%ebx
add    %r15d,%ebx
add    %r14d,%ebx
add    %r13d,%ebx
mov    %ebx,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xchg   %ax,%ax
mov    $0x20,%al
movzbl %al,%edi
call   1050 <ft_putchar@plt>
add    %eax,%ebp
add    $0x1,%ebx
mov    (%r12),%eax
sub    %r15d,%eax
xor    %ecx,%ecx
cmpl   $0x0,0x4(%r12)
setg   %cl
sub    %ecx,%eax
cmp    %eax,%ebx
movsd  0x8(%rsp),%xmm0
jge    1330 <a_preformat+0x200>
call   1030 <is_in@plt>
test   %rax,%rax
jne    14a0 <a_preformat+0x370>
mov    $0x30,%al
cmpl   $0x0,0xc(%r12)
jne    14a2 <a_preformat+0x372>
jmp    14a0 <a_preformat+0x370>
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
movsd  0x8(%rsp),%xmm0
xor    %ebx,%ebx
test   %rax,%rax
jne    12e5 <a_preformat+0x1b5>
jmp    12d3 <a_preformat+0x1a3>

LLVM IR (-O0):
define i32 @a_preformat(double %0, i32* %1, i32 %2, i8 signext %3) {
%5 = alloca double
%6 = alloca i32*
%7 = alloca i32
%8 = alloca i8
%9 = alloca i32
%10 = alloca i32
store double %0, double* %5
store i32* %1, i32** %6
store i32 %2, i32* %7
store i8 %3, i8* %8
store i32 0, i32* %10
%11 = load i32*, i32** %6
%12 = getelementptr inbounds i32, i32* %11, i64 3
%13 = load i32, i32* %12
%14 = icmp ne i32 %13, 0
br i1 %14, label %15, label %25
15: ; preds = %4
%16 = load double, double* %5
%17 = call i64 @is_neg(double %16)
%18 = icmp ne i64 %17, 0
br i1 %18, label %19, label %25
19: ; preds = %15
%20 = load double, double* %5
%21 = call i64 @is_in(double %20)
%22 = icmp ne i64 %21, 0
br i1 %22, label %25, label %23
23: ; preds = %19
%24 = call i32 @ft_putchar(i8 signext 45)
br label %26
25: ; preds = %19, %15, %4
br label %26
26: ; preds = %25, %23
%27 = phi i32 [ %24, %23 ], [ 0, %25 ]
%28 = load i32, i32* %10
%29 = add nsw i32 %28, %27
store i32 %29, i32* %10
%30 = load i32*, i32** %6
%31 = getelementptr inbounds i32, i32* %30, i64 3
%32 = load i32, i32* %31
%33 = icmp ne i32 %32, 0
br i1 %33, label %34, label %49
34: ; preds = %26
%35 = load i32*, i32** %6
%36 = getelementptr inbounds i32, i32* %35, i64 5
%37 = load i32, i32* %36
%38 = icmp ne i32 %37, 0
br i1 %38, label %39, label %49
39: ; preds = %34
%40 = load double, double* %5
%41 = call i64 @is_neg(double %40)
%42 = icmp ne i64 %41, 0
br i1 %42, label %49, label %43
43: ; preds = %39
%44 = load double, double* %5
%45 = call i64 @is_in(double %44)
%46 = icmp ne i64 %45, 0
br i1 %46, label %49, label %47
47: ; preds = %43
%48 = call i32 @ft_putchar(i8 signext 43)
br label %50
49: ; preds = %43, %39, %34, %26
br label %50
50: ; preds = %49, %47
%51 = phi i32 [ %48, %47 ], [ 0, %49 ]
%52 = load i32, i32* %10
%53 = add nsw i32 %52, %51
store i32 %53, i32* %10
%54 = load i32*, i32** %6
%55 = getelementptr inbounds i32, i32* %54, i64 3
%56 = load i32, i32* %55
%57 = icmp ne i32 %56, 0
br i1 %57, label %58, label %78
58: ; preds = %50
%59 = load i32*, i32** %6
%60 = getelementptr inbounds i32, i32* %59, i64 6
%61 = load i32, i32* %60
%62 = icmp ne i32 %61, 0
br i1 %62, label %63, label %78
63: ; preds = %58
%64 = load i32*, i32** %6
%65 = getelementptr inbounds i32, i32* %64, i64 5
%66 = load i32, i32* %65
%67 = icmp ne i32 %66, 0
br i1 %67, label %78, label %68
68: ; preds = %63
%69 = load double, double* %5
%70 = call i64 @is_neg(double %69)
%71 = icmp ne i64 %70, 0
br i1 %71, label %78, label %72
72: ; preds = %68
%73 = load double, double* %5
%74 = call i64 @is_in(double %73)
%75 = icmp ne i64 %74, 0
br i1 %75, label %78, label %76
76: ; preds = %72
%77 = call i32 @ft_putchar(i8 signext 32)
br label %79
78: ; preds = %72, %68, %63, %58, %50
br label %79
79: ; preds = %78, %76
%80 = phi i32 [ %77, %76 ], [ 0, %78 ]
%81 = load i32, i32* %10
%82 = add nsw i32 %81, %80
store i32 %82, i32* %10
%83 = load i32*, i32** %6
%84 = getelementptr inbounds i32, i32* %83, i64 3
%85 = load i32, i32* %84
%86 = icmp ne i32 %85, 0
br i1 %86, label %87, label %99
87: ; preds = %79
%88 = load double, double* %5
%89 = call i64 @is_in(double %88)
%90 = icmp ne i64 %89, 0
br i1 %90, label %99, label %91
91: ; preds = %87
%92 = call i32 @ft_putchar(i8 signext 48)
%93 = load i8, i8* %8
%94 = sext i8 %93 to i32
%95 = add nsw i32 %94, 23
%96 = trunc i32 %95 to i8
%97 = call i32 @ft_putchar(i8 signext %96)
%98 = add nsw i32 %92, %97
br label %100
99: ; preds = %87, %79
br label %100
100: ; preds = %99, %91
%101 = phi i32 [ %98, %91 ], [ 0, %99 ]
%102 = load i32, i32* %10
%103 = add nsw i32 %102, %101
store i32 %103, i32* %10
%104 = load i32*, i32** %6
%105 = getelementptr inbounds i32, i32* %104, i64 4
%106 = load i32, i32* %105
%107 = icmp ne i32 %106, 0
br i1 %107, label %195, label %108
108: ; preds = %100
%109 = load i32, i32* %7
%110 = load i32*, i32** %6
%111 = getelementptr inbounds i32, i32* %110, i64 1
%112 = load i32, i32* %111
%113 = icmp sgt i32 %112, 0
%114 = zext i1 %113 to i32
%115 = add nsw i32 %109, %114
%116 = load i32*, i32** %6
%117 = getelementptr inbounds i32, i32* %116, i64 0
%118 = load i32, i32* %117
%119 = icmp slt i32 %115, %118
br i1 %119, label %120, label %195
120: ; preds = %108
%121 = load double, double* %5
%122 = load double, double* %5
%123 = fcmp une double %121, %122
br i1 %123, label %124, label %128
124: ; preds = %120
%125 = load double, double* %5
%126 = call i64 @is_neg(double %125)
%127 = icmp ne i64 %126, 0
br i1 %127, label %138, label %128
128: ; preds = %124, %120
%129 = load i32*, i32** %6
%130 = getelementptr inbounds i32, i32* %129, i64 5
%131 = load i32, i32* %130
%132 = icmp ne i32 %131, 0
br i1 %132, label %138, label %133
133: ; preds = %128
%134 = load i32*, i32** %6
%135 = getelementptr inbounds i32, i32* %134, i64 6
%136 = load i32, i32* %135
%137 = icmp ne i32 %136, 0
br label %138
138: ; preds = %133, %128, %124
%139 = phi i1 [ true, %128 ], [ true, %124 ], [ %137, %133 ]
%140 = zext i1 %139 to i64
%141 = select i1 %139, i32 0, i32 -1
store i32 %141, i32* %9
%142 = load i32*, i32** %6
%143 = getelementptr inbounds i32, i32* %142, i64 2
%144 = load i32, i32* %143
%145 = icmp ne i32 %144, 0
br i1 %145, label %146, label %156
146: ; preds = %138
%147 = load i32*, i32** %6
%148 = getelementptr inbounds i32, i32* %147, i64 1
%149 = load i32, i32* %148
%150 = icmp ne i32 %149, 0
br i1 %150, label %156, label %151
151: ; preds = %146
%152 = load double, double* %5
%153 = call i64 @is_in(double %152)
%154 = icmp ne i64 %153, 0
%155 = xor i1 %154, true
br label %156
156: ; preds = %151, %146, %138
%157 = phi i1 [ false, %146 ], [ false, %138 ], [ %155, %151 ]
%158 = zext i1 %157 to i64
%159 = select i1 %157, i32 1, i32 0
%160 = load i32, i32* %9
%161 = add nsw i32 %160, %159
store i32 %161, i32* %9
br label %162
162: ; preds = %190, %156
%163 = load i32, i32* %9
%164 = add nsw i32 %163, 1
store i32 %164, i32* %9
%165 = load i32*, i32** %6
%166 = getelementptr inbounds i32, i32* %165, i64 0
%167 = load i32, i32* %166
%168 = load i32, i32* %7
%169 = sub nsw i32 %167, %168
%170 = load i32*, i32** %6
%171 = getelementptr inbounds i32, i32* %170, i64 1
%172 = load i32, i32* %171
%173 = icmp sgt i32 %172, 0
%174 = zext i1 %173 to i32
%175 = sub nsw i32 %169, %174
%176 = icmp slt i32 %164, %175
br i1 %176, label %177, label %194
177: ; preds = %162
%178 = load double, double* %5
%179 = call i64 @is_in(double %178)
%180 = icmp ne i64 %179, 0
br i1 %180, label %188, label %181
181: ; preds = %177
%182 = load i32*, i32** %6
%183 = getelementptr inbounds i32, i32* %182, i64 3
%184 = load i32, i32* %183
%185 = icmp ne i32 %184, 0
br i1 %185, label %186, label %188
186: ; preds = %181
%187 = call i32 @ft_putchar(i8 signext 48)
br label %190
188: ; preds = %181, %177
%189 = call i32 @ft_putchar(i8 signext 32)
br label %190
190: ; preds = %188, %186
%191 = phi i32 [ %187, %186 ], [ %189, %188 ]
%192 = load i32, i32* %10
%193 = add nsw i32 %192, %191
store i32 %193, i32* %10
br label %162
194: ; preds = %162
br label %195
195: ; preds = %194, %108, %100
%196 = load double, double* %5
%197 = call i64 @is_neg(double %196)
%198 = icmp ne i64 %197, 0
br i1 %198, label %199, label %214
199: ; preds = %195
%200 = load double, double* %5
%201 = load double, double* %5
%202 = fcmp oeq double %200, %201
br i1 %202, label %203, label %214
203: ; preds = %199
%204 = load i32*, i32** %6
%205 = getelementptr inbounds i32, i32* %204, i64 3
%206 = load i32, i32* %205
%207 = icmp ne i32 %206, 0
br i1 %207, label %208, label %212
208: ; preds = %203
%209 = load double, double* %5
%210 = call i64 @is_in(double %209)
%211 = icmp ne i64 %210, 0
br i1 %211, label %212, label %214
212: ; preds = %208, %203
%213 = call i32 @ft_putchar(i8 signext 45)
br label %215
214: ; preds = %208, %199, %195
br label %215
215: ; preds = %214, %212
%216 = phi i32 [ %213, %212 ], [ 0, %214 ]
%217 = load i32, i32* %10
%218 = add nsw i32 %217, %216
store i32 %218, i32* %10
%219 = load double, double* %5
%220 = call i64 @is_neg(double %219)
%221 = icmp ne i64 %220, 0
br i1 %221, label %242, label %222
222: ; preds = %215
%223 = load double, double* %5
%224 = load double, double* %5
%225 = fcmp oeq double %223, %224
br i1 %225, label %226, label %242
226: ; preds = %222
%227 = load i32*, i32** %6
%228 = getelementptr inbounds i32, i32* %227, i64 5
%229 = load i32, i32* %228
%230 = icmp ne i32 %229, 0
br i1 %230, label %231, label %242
231: ; preds = %226
%232 = load i32*, i32** %6
%233 = getelementptr inbounds i32, i32* %232, i64 3
%234 = load i32, i32* %233
%235 = icmp ne i32 %234, 0
br i1 %235, label %236, label %240
236: ; preds = %231
%237 = load double, double* %5
%238 = call i64 @is_in(double %237)
%239 = icmp ne i64 %238, 0
br i1 %239, label %240, label %242
240: ; preds = %236, %231
%241 = call i32 @ft_putchar(i8 signext 43)
br label %243
242: ; preds = %236, %226, %222, %215
br label %243
243: ; preds = %242, %240
%244 = phi i32 [ %241, %240 ], [ 0, %242 ]
%245 = load i32, i32* %10
%246 = add nsw i32 %245, %244
store i32 %246, i32* %10
%247 = load double, double* %5
%248 = call i64 @is_neg(double %247)
%249 = icmp ne i64 %248, 0
br i1 %249, label %275, label %250
250: ; preds = %243
%251 = load double, double* %5
%252 = load double, double* %5
%253 = fcmp oeq double %251, %252
br i1 %253, label %254, label %275
254: ; preds = %250
%255 = load i32*, i32** %6
%256 = getelementptr inbounds i32, i32* %255, i64 6
%257 = load i32, i32* %256
%258 = icmp ne i32 %257, 0
br i1 %258, label %259, label %275
259: ; preds = %254
%260 = load i32*, i32** %6
%261 = getelementptr inbounds i32, i32* %260, i64 5
%262 = load i32, i32* %261
%263 = icmp ne i32 %262, 0
br i1 %263, label %275, label %264
264: ; preds = %259
%265 = load i32*, i32** %6
%266 = getelementptr inbounds i32, i32* %265, i64 3
%267 = load i32, i32* %266
%268 = icmp ne i32 %267, 0
br i1 %268, label %269, label %273
269: ; preds = %264
%270 = load double, double* %5
%271 = call i64 @is_in(double %270)
%272 = icmp ne i64 %271, 0
br i1 %272, label %273, label %275
273: ; preds = %269, %264
%274 = call i32 @ft_putchar(i8 signext 32)
br label %276
275: ; preds = %269, %259, %254, %250, %243
br label %276
276: ; preds = %275, %273
%277 = phi i32 [ %274, %273 ], [ 0, %275 ]
%278 = load i32, i32* %10
%279 = add nsw i32 %278, %277
store i32 %279, i32* %10
%280 = load i32*, i32** %6
%281 = getelementptr inbounds i32, i32* %280, i64 3
%282 = load i32, i32* %281
%283 = icmp ne i32 %282, 0
br i1 %283, label %296, label %284
284: ; preds = %276
%285 = load double, double* %5
%286 = call i64 @is_in(double %285)
%287 = icmp ne i64 %286, 0
br i1 %287, label %296, label %288
288: ; preds = %284
%289 = call i32 @ft_putchar(i8 signext 48)
%290 = load i8, i8* %8
%291 = sext i8 %290 to i32
%292 = add nsw i32 %291, 23
%293 = trunc i32 %292 to i8
%294 = call i32 @ft_putchar(i8 signext %293)
%295 = add nsw i32 %289, %294
br label %297
296: ; preds = %284, %276
br label %297
297: ; preds = %296, %288
%298 = phi i32 [ %295, %288 ], [ 0, %296 ]
%299 = load i32, i32* %10
%300 = add nsw i32 %299, %298
store i32 %300, i32* %10
%301 = load i32, i32* %10
ret i32 %301
}

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