#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 e_preformat(double n, int fl[8], int ex) {
  int index;
  int ret;
  ex = (ex > 0) ? ex : 0;
  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;
  if (!fl[4] && fl[1] + 6 + ex < fl[0] + (fl[1] == 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] + (fl[1] == 0) - fl[1] - 6 - ex)
      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;
  return (ret);
}


x86 assembly (clang, -O0):
<e_preformat>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movsd  %xmm0,-0x8(%rbp)
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jle    1159 <e_preformat+0x29>
mov    -0x14(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    1163 <e_preformat+0x33>
xor    %eax,%eax
mov    %eax,-0x20(%rbp)
jmp    1163 <e_preformat+0x33>
mov    -0x20(%rbp),%eax
mov    %eax,-0x14(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     11b8 <e_preformat+0x88>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
je     11b8 <e_preformat+0x88>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    11b8 <e_preformat+0x88>
mov    $0x2d,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x24(%rbp)
jmp    11c2 <e_preformat+0x92>
xor    %eax,%eax
mov    %eax,-0x24(%rbp)
jmp    11c2 <e_preformat+0x92>
mov    -0x24(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     1221 <e_preformat+0xf1>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x14(%rax)
je     1221 <e_preformat+0xf1>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
jne    1221 <e_preformat+0xf1>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    1221 <e_preformat+0xf1>
mov    $0x2b,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x28(%rbp)
jmp    122b <e_preformat+0xfb>
xor    %eax,%eax
mov    %eax,-0x28(%rbp)
jmp    122b <e_preformat+0xfb>
mov    -0x28(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     1298 <e_preformat+0x168>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x18(%rax)
je     1298 <e_preformat+0x168>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x14(%rax)
jne    1298 <e_preformat+0x168>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
jne    1298 <e_preformat+0x168>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    1298 <e_preformat+0x168>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x2c(%rbp)
jmp    12a2 <e_preformat+0x172>
xor    %eax,%eax
mov    %eax,-0x2c(%rbp)
jmp    12a2 <e_preformat+0x172>
mov    -0x2c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x10(%rax)
jne    142f <e_preformat+0x2ff>
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
add    $0x6,%eax
add    -0x14(%rbp),%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%ecx
mov    -0x10(%rbp),%rdx
cmpl   $0x0,0x4(%rdx)
sete   %dl
and    $0x1,%dl
movzbl %dl,%edx
add    %edx,%ecx
cmp    %ecx,%eax
jge    142f <e_preformat+0x2ff>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    1302 <e_preformat+0x1d2>
jp     1302 <e_preformat+0x1d2>
jmp    131e <e_preformat+0x1ee>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x2d(%rbp)
jne    133f <e_preformat+0x20f>
mov    -0x10(%rbp),%rcx
mov    $0x1,%al
cmpl   $0x0,0x14(%rcx)
mov    %al,-0x2d(%rbp)
jne    133f <e_preformat+0x20f>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x18(%rax)
setne  %al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%dl
mov    $0xffffffff,%eax
xor    %ecx,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rcx
xor    %eax,%eax
cmpl   $0x0,0x8(%rcx)
mov    %al,-0x2e(%rbp)
je     138e <e_preformat+0x25e>
mov    -0x10(%rbp),%rcx
xor    %eax,%eax
cmpl   $0x0,0x4(%rcx)
mov    %al,-0x2e(%rbp)
jne    138e <e_preformat+0x25e>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
setne  %al
xor    $0xff,%al
mov    %al,-0x2e(%rbp)
mov    -0x2e(%rbp),%dl
xor    %eax,%eax
mov    $0x1,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rcx
mov    (%rcx),%ecx
mov    -0x10(%rbp),%rdx
cmpl   $0x0,0x4(%rdx)
sete   %dl
and    $0x1,%dl
movzbl %dl,%edx
add    %edx,%ecx
mov    -0x10(%rbp),%rdx
sub    0x4(%rdx),%ecx
sub    $0x6,%ecx
sub    -0x14(%rbp),%ecx
cmp    %ecx,%eax
jge    142a <e_preformat+0x2fa>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
jne    140f <e_preformat+0x2df>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     140f <e_preformat+0x2df>
mov    $0x30,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x34(%rbp)
jmp    141c <e_preformat+0x2ec>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    13a4 <e_preformat+0x274>
jmp    142f <e_preformat+0x2ff>
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
je     148d <e_preformat+0x35d>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    148d <e_preformat+0x35d>
jp     148d <e_preformat+0x35d>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     147b <e_preformat+0x34b>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
je     148d <e_preformat+0x35d>
mov    $0x2d,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x38(%rbp)
jmp    1497 <e_preformat+0x367>
xor    %eax,%eax
mov    %eax,-0x38(%rbp)
jmp    1497 <e_preformat+0x367>
mov    -0x38(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
jne    150c <e_preformat+0x3dc>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    150c <e_preformat+0x3dc>
jp     150c <e_preformat+0x3dc>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x14(%rax)
je     150c <e_preformat+0x3dc>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     14fa <e_preformat+0x3ca>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
je     150c <e_preformat+0x3dc>
mov    $0x2b,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x3c(%rbp)
jmp    1516 <e_preformat+0x3e6>
xor    %eax,%eax
mov    %eax,-0x3c(%rbp)
jmp    1516 <e_preformat+0x3e6>
mov    -0x3c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movsd  -0x8(%rbp),%xmm0
call   1040 <is_neg@plt>
cmp    $0x0,%rax
jne    1599 <e_preformat+0x469>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    1599 <e_preformat+0x469>
jp     1599 <e_preformat+0x469>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x18(%rax)
je     1599 <e_preformat+0x469>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x14(%rax)
jne    1599 <e_preformat+0x469>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0xc(%rax)
je     1587 <e_preformat+0x457>
movsd  -0x8(%rbp),%xmm0
call   1030 <is_in@plt>
cmp    $0x0,%rax
je     1599 <e_preformat+0x469>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
mov    %eax,-0x40(%rbp)
jmp    15a3 <e_preformat+0x473>
xor    %eax,%eax
mov    %eax,-0x40(%rbp)
jmp    15a3 <e_preformat+0x473>
mov    -0x40(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<e_preformat>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x10,%rsp
mov    %esi,%r14d
xor    %ebp,%ebp
test   %esi,%esi
cmovs  %ebp,%r14d
mov    %rdi,%r12
cmpl   $0x0,0xc(%rdi)
mov    $0x0,%r15d
movsd  %xmm0,0x8(%rsp)
je     1246 <e_preformat+0x116>
call   1040 <is_neg@plt>
xor    %r15d,%r15d
mov    $0x0,%ebx
test   %rax,%rax
je     118b <e_preformat+0x5b>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
mov    $0x0,%ebx
test   %rax,%rax
je     1226 <e_preformat+0xf6>
cmpl   $0x0,0xc(%r12)
je     123e <e_preformat+0x10e>
xor    %r15d,%r15d
cmpl   $0x0,0x14(%r12)
mov    $0x0,%ebp
je     11dd <e_preformat+0xad>
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
mov    $0x0,%ebp
test   %rax,%rax
jne    11dd <e_preformat+0xad>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
mov    $0x0,%ebp
test   %rax,%rax
jne    11dd <e_preformat+0xad>
mov    $0x2b,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%ebp
add    %ebx,%ebp
cmpl   $0x0,0xc(%r12)
movsd  0x8(%rsp),%xmm0
je     1246 <e_preformat+0x116>
cmpl   $0x0,0x18(%r12)
je     1246 <e_preformat+0x116>
cmpl   $0x0,0x14(%r12)
jne    1246 <e_preformat+0x116>
call   1040 <is_neg@plt>
test   %rax,%rax
jne    1240 <e_preformat+0x110>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
test   %rax,%rax
jne    1240 <e_preformat+0x110>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%r15d
jmp    1240 <e_preformat+0x110>
mov    $0x2d,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%ebx
cmpl   $0x0,0xc(%r12)
jne    1197 <e_preformat+0x67>
mov    %ebx,%ebp
movsd  0x8(%rsp),%xmm0
add    %r15d,%ebp
cmpl   $0x0,0x10(%r12)
jne    12e0 <e_preformat+0x1b0>
mov    (%r12),%eax
mov    0x4(%r12),%ecx
lea    (%r14,%rcx,1),%edx
add    $0x6,%edx
cmp    $0x1,%ecx
adc    $0x0,%eax
cmp    %eax,%edx
jge    12e0 <e_preformat+0x1b0>
ucomisd %xmm0,%xmm0
jp     1427 <e_preformat+0x2f7>
xor    %ebx,%ebx
cmpl   $0x0,0x14(%r12)
jne    128b <e_preformat+0x15b>
cmpl   $0x1,0x18(%r12)
sbb    %ebx,%ebx
xor    %ecx,%ecx
cmpl   $0x0,0x8(%r12)
je     12b6 <e_preformat+0x186>
cmpl   $0x0,0x4(%r12)
jne    12b6 <e_preformat+0x186>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
movsd  0x8(%rsp),%xmm0
xor    %ecx,%ecx
test   %rax,%rax
sete   %cl
mov    $0xfffffffa,%r15d
sub    %r14d,%r15d
add    %ecx,%ebx
add    $0x1,%ebx
mov    0x4(%r12),%eax
mov    (%r12),%ecx
add    %r15d,%ecx
sub    %eax,%ecx
cmp    $0x1,%eax
adc    $0x0,%ecx
cmp    %ecx,%ebx
jl     1411 <e_preformat+0x2e1>
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
xor    %r14d,%r14d
movsd  0x8(%rsp),%xmm0
ucomisd %xmm0,%xmm0
mov    $0x0,%ebx
jp     1332 <e_preformat+0x202>
mov    $0x0,%ebx
test   %rax,%rax
je     1332 <e_preformat+0x202>
cmpl   $0x0,0xc(%r12)
je     1326 <e_preformat+0x1f6>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
mov    $0x0,%ebx
test   %rax,%rax
je     1332 <e_preformat+0x202>
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
jp     137b <e_preformat+0x24b>
test   %rax,%rax
jne    137b <e_preformat+0x24b>
cmpl   $0x0,0x14(%r12)
je     137b <e_preformat+0x24b>
cmpl   $0x0,0xc(%r12)
je     136e <e_preformat+0x23e>
movsd  0x8(%rsp),%xmm0
call   1030 <is_in@plt>
test   %rax,%rax
je     137b <e_preformat+0x24b>
mov    $0x2b,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%r14d
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
movsd  0x8(%rsp),%xmm0
xor    %r15d,%r15d
ucomisd %xmm0,%xmm0
jp     13c9 <e_preformat+0x299>
test   %rax,%rax
jne    13c9 <e_preformat+0x299>
cmpl   $0x0,0x18(%r12)
je     13c9 <e_preformat+0x299>
cmpl   $0x0,0x14(%r12)
jne    13c9 <e_preformat+0x299>
cmpl   $0x0,0xc(%r12)
je     13bc <e_preformat+0x28c>
call   1030 <is_in@plt>
test   %rax,%rax
je     13c9 <e_preformat+0x299>
mov    $0x20,%edi
call   1050 <ft_putchar@plt>
mov    %eax,%r15d
add    %ebp,%ebx
add    %r14d,%ebx
add    %r15d,%ebx
mov    %ebx,%eax
add    $0x10,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x20,%al
movzbl %al,%edi
call   1050 <ft_putchar@plt>
add    %eax,%ebp
add    $0x1,%ebx
mov    0x4(%r12),%eax
mov    (%r12),%ecx
add    %r15d,%ecx
sub    %eax,%ecx
cmp    $0x1,%eax
adc    $0x0,%ecx
cmp    %ecx,%ebx
movsd  0x8(%rsp),%xmm0
jge    12e0 <e_preformat+0x1b0>
call   1030 <is_in@plt>
test   %rax,%rax
jne    13e0 <e_preformat+0x2b0>
mov    $0x30,%al
cmpl   $0x0,0xc(%r12)
jne    13e2 <e_preformat+0x2b2>
jmp    13e0 <e_preformat+0x2b0>
movsd  0x8(%rsp),%xmm0
call   1040 <is_neg@plt>
movsd  0x8(%rsp),%xmm0
xor    %ebx,%ebx
test   %rax,%rax
jne    128b <e_preformat+0x15b>
jmp    1279 <e_preformat+0x149>

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

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