#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 */
double _sqrt(double);
int /*<<< orphan*/ printf(char *, ...);
int main() {
  {
    printf("testing: %0.4f expecting %0.4f", 0.0, 0.0);
    if (_sqrt(0.0) - 0.0 > 0 ? _sqrt(0.0) - 0.0
                             : -_sqrt(0.0) - 0.0 <= 0.0000001)
      printf("\n PASSED!\n");
    else
      printf("\n FAIL %0.4f is not equal of %0.4f\n", _sqrt(0.0), 0.0);
  }
  {
    printf("testing: %0.4f expecting %0.4f", 1.0, 1.0);
    if (_sqrt(1.0) - 1.0 > 0 ? _sqrt(1.0) - 1.0
                             : -_sqrt(1.0) - 1.0 <= 0.0000001)
      printf("\n PASSED!\n");
    else
      printf("\n FAIL %0.4f is not equal of %0.4f\n", _sqrt(1.0), 1.0);
  }
  {
    printf("testing: %0.4f expecting %0.4f", 9.0, 3.0);
    if (_sqrt(9.0) - 3.0 > 0 ? _sqrt(9.0) - 3.0
                             : -_sqrt(9.0) - 3.0 <= 0.0000001)
      printf("\n PASSED!\n");
    else
      printf("\n FAIL %0.4f is not equal of %0.4f\n", _sqrt(9.0), 3.0);
  }
  {
    printf("testing: %0.4f expecting %0.4f", 16.0, 4.0);
    if (_sqrt(16.0) - 4.0 > 0 ? _sqrt(16.0) - 4.0
                              : -_sqrt(16.0) - 4.0 <= 0.0000001)
      printf("\n PASSED!\n");
    else
      printf("\n FAIL %0.4f is not equal of %0.4f\n", _sqrt(16.0), 4.0);
  }
  {
    printf("testing: %0.4f expecting %0.4f", 1.520, 1.2328828005937953);
    if (_sqrt(1.520) - 1.2328828005937953 > 0
            ? _sqrt(1.520) - 1.2328828005937953
            : -_sqrt(1.520) - 1.2328828005937953 <= 0.0000001)
      printf("\n PASSED!\n");
    else
      printf("\n FAIL %0.4f is not equal of %0.4f\n", _sqrt(1.520),
             1.2328828005937953);
  }
  {
    printf("testing: %0.4f expecting %0.4f", 3.0, 1.7320508075688772);
    if (_sqrt(3.0) - 1.7320508075688772 > 0
            ? _sqrt(3.0) - 1.7320508075688772
            : -_sqrt(3.0) - 1.7320508075688772 <= 0.0000001)
      printf("\n PASSED!\n");
    else
      printf("\n FAIL %0.4f is not equal of %0.4f\n", _sqrt(3.0),
             1.7320508075688772);
  };
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xf12(%rip),%rdi
xorps  %xmm1,%xmm1
movaps %xmm1,%xmm0
mov    $0x2,%al
call   1040 <printf@plt>
xorps  %xmm0,%xmm0
call   1030 <_sqrt@plt>
xorps  %xmm1,%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1186 <main+0x66>
xorps  %xmm0,%xmm0
call   1030 <_sqrt@plt>
xorps  %xmm1,%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11dc <main+0xbc>
jp     11dc <main+0xbc>
jmp    11ef <main+0xcf>
xorps  %xmm0,%xmm0
call   1030 <_sqrt@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
xorps  %xmm0,%xmm0
subsd  %xmm0,%xmm1
movsd  0xe4c(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2sd %eax,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11dc <main+0xbc>
jp     11dc <main+0xbc>
jmp    11ef <main+0xcf>
lea    0xe84(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1208 <main+0xe8>
xorps  %xmm0,%xmm0
call   1030 <_sqrt@plt>
lea    0xe74(%rip),%rdi
xorps  %xmm1,%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
lea    0xe39(%rip),%rdi
movsd  0xdf1(%rip),%xmm1
movaps %xmm1,%xmm0
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0xddf(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0xdd2(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1278 <main+0x158>
movsd  0xdb9(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0xdac(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12d8 <main+0x1b8>
jp     12d8 <main+0x1b8>
jmp    12eb <main+0x1cb>
movsd  0xd88(%rip),%xmm0
call   1030 <_sqrt@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xd64(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xd50(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2sd %eax,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12d8 <main+0x1b8>
jp     12d8 <main+0x1b8>
jmp    12eb <main+0x1cb>
lea    0xd88(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    130e <main+0x1ee>
movsd  0xd15(%rip),%xmm0
call   1030 <_sqrt@plt>
lea    0xd73(%rip),%rdi
movsd  0xd01(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
lea    0xd33(%rip),%rdi
movsd  0xcfb(%rip),%xmm0
movsd  0xceb(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0xce4(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0xccf(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1383 <main+0x263>
movsd  0xcbe(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0xca9(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13e3 <main+0x2c3>
jp     13e3 <main+0x2c3>
jmp    13f6 <main+0x2d6>
movsd  0xc8d(%rip),%xmm0
call   1030 <_sqrt@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xc61(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xc45(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2sd %eax,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13e3 <main+0x2c3>
jp     13e3 <main+0x2c3>
jmp    13f6 <main+0x2d6>
lea    0xc7d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1419 <main+0x2f9>
movsd  0xc1a(%rip),%xmm0
call   1030 <_sqrt@plt>
lea    0xc68(%rip),%rdi
movsd  0xbfe(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
lea    0xc28(%rip),%rdi
movsd  0xc00(%rip),%xmm0
movsd  0xbf0(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0xbe9(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0xbd4(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    148e <main+0x36e>
movsd  0xbc3(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0xbae(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    14ee <main+0x3ce>
jp     14ee <main+0x3ce>
jmp    1501 <main+0x3e1>
movsd  0xb92(%rip),%xmm0
call   1030 <_sqrt@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xb66(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xb3a(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2sd %eax,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    14ee <main+0x3ce>
jp     14ee <main+0x3ce>
jmp    1501 <main+0x3e1>
lea    0xb72(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1524 <main+0x404>
movsd  0xb1f(%rip),%xmm0
call   1030 <_sqrt@plt>
lea    0xb5d(%rip),%rdi
movsd  0xb03(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
lea    0xb1d(%rip),%rdi
movsd  0xb05(%rip),%xmm0
movsd  0xaf5(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0xaee(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0xad9(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1599 <main+0x479>
movsd  0xac8(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0xab3(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15f9 <main+0x4d9>
jp     15f9 <main+0x4d9>
jmp    160c <main+0x4ec>
movsd  0xa97(%rip),%xmm0
call   1030 <_sqrt@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xa6b(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xa2f(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2sd %eax,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15f9 <main+0x4d9>
jp     15f9 <main+0x4d9>
jmp    160c <main+0x4ec>
lea    0xa67(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    162f <main+0x50f>
movsd  0xa24(%rip),%xmm0
call   1030 <_sqrt@plt>
lea    0xa52(%rip),%rdi
movsd  0xa08(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
lea    0xa12(%rip),%rdi
movsd  0x9d2(%rip),%xmm0
movsd  0x9fa(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
movsd  0x9bb(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0x9de(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    16a4 <main+0x584>
movsd  0x995(%rip),%xmm0
call   1030 <_sqrt@plt>
movsd  0x9b8(%rip),%xmm1
subsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1704 <main+0x5e4>
jp     1704 <main+0x5e4>
jmp    1717 <main+0x5f7>
movsd  0x964(%rip),%xmm0
call   1030 <_sqrt@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x970(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0x924(%rip),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
and    $0x1,%al
movzbl %al,%eax
cvtsi2sd %eax,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1704 <main+0x5e4>
jp     1704 <main+0x5e4>
jmp    1717 <main+0x5f7>
lea    0x95c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    173a <main+0x61a>
movsd  0x8f1(%rip),%xmm0
call   1030 <_sqrt@plt>
lea    0x947(%rip),%rdi
movsd  0x90d(%rip),%xmm1
mov    $0x2,%al
call   1040 <printf@plt>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
lea    0xf40(%rip),%rdi
xorpd  %xmm0,%xmm0
xorpd  %xmm1,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
xorpd  %xmm0,%xmm0
call   1040 <_sqrt@plt>
movsd  %xmm0,(%rsp)
xorpd  %xmm0,%xmm0
call   1040 <_sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  (%rsp),%xmm2
ucomisd %xmm1,%xmm2
jbe    1183 <main+0x53>
ucomisd %xmm1,%xmm0
jne    1175 <main+0x45>
jnp    118d <main+0x5d>
lea    0xf3f(%rip),%rdi
call   1030 <puts@plt>
jmp    11a8 <main+0x78>
ucomisd 0xe75(%rip),%xmm0
jae    1175 <main+0x45>
xorpd  %xmm0,%xmm0
call   1040 <_sqrt@plt>
lea    0xefa(%rip),%rdi
xorpd  %xmm1,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0xec9(%rip),%rdi
movsd  0xe51(%rip),%xmm0
movapd %xmm0,%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xe3e(%rip),%xmm0
call   1040 <_sqrt@plt>
addsd  0xe39(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xe24(%rip),%xmm0
call   1040 <_sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  (%rsp),%xmm2
ucomisd %xmm1,%xmm2
jbe    1216 <main+0xe6>
addsd  0xe10(%rip),%xmm0
ucomisd %xmm1,%xmm0
jne    1208 <main+0xd8>
jnp    1230 <main+0x100>
lea    0xeac(%rip),%rdi
call   1030 <puts@plt>
jmp    1253 <main+0x123>
movsd  0xdf2(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xdee(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    1208 <main+0xd8>
movsd  0xdd0(%rip),%xmm0
call   1040 <_sqrt@plt>
lea    0xe53(%rip),%rdi
movsd  0xdbc(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0xe1e(%rip),%rdi
movsd  0xdbe(%rip),%xmm0
movsd  0xdbe(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xda7(%rip),%xmm0
call   1040 <_sqrt@plt>
addsd  0xdaa(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xd8d(%rip),%xmm0
call   1040 <_sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  (%rsp),%xmm2
ucomisd %xmm1,%xmm2
jbe    12c5 <main+0x195>
addsd  0xd81(%rip),%xmm0
ucomisd %xmm1,%xmm0
jne    12b7 <main+0x187>
jnp    12df <main+0x1af>
lea    0xdfd(%rip),%rdi
call   1030 <puts@plt>
jmp    1302 <main+0x1d2>
movsd  0xd63(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xd3f(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    12b7 <main+0x187>
movsd  0xd39(%rip),%xmm0
call   1040 <_sqrt@plt>
lea    0xda4(%rip),%rdi
movsd  0xd2d(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0xd6f(%rip),%rdi
movsd  0xd27(%rip),%xmm0
movsd  0xd27(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xd10(%rip),%xmm0
call   1040 <_sqrt@plt>
addsd  0xd13(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xcf6(%rip),%xmm0
call   1040 <_sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  (%rsp),%xmm2
ucomisd %xmm1,%xmm2
jbe    1374 <main+0x244>
addsd  0xcea(%rip),%xmm0
ucomisd %xmm1,%xmm0
jne    1366 <main+0x236>
jnp    138e <main+0x25e>
lea    0xd4e(%rip),%rdi
call   1030 <puts@plt>
jmp    13b1 <main+0x281>
movsd  0xccc(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xc90(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    1366 <main+0x236>
movsd  0xca2(%rip),%xmm0
call   1040 <_sqrt@plt>
lea    0xcf5(%rip),%rdi
movsd  0xc96(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0xcc0(%rip),%rdi
movsd  0xc90(%rip),%xmm0
movsd  0xc90(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xc79(%rip),%xmm0
call   1040 <_sqrt@plt>
addsd  0xc7c(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xc5f(%rip),%xmm0
call   1040 <_sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  (%rsp),%xmm2
ucomisd %xmm1,%xmm2
jbe    1423 <main+0x2f3>
addsd  0xc53(%rip),%xmm0
ucomisd %xmm1,%xmm0
jne    1415 <main+0x2e5>
jnp    143d <main+0x30d>
lea    0xc9f(%rip),%rdi
call   1030 <puts@plt>
jmp    1460 <main+0x330>
movsd  0xc35(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xbe1(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    1415 <main+0x2e5>
movsd  0xc0b(%rip),%xmm0
call   1040 <_sqrt@plt>
lea    0xc46(%rip),%rdi
movsd  0xbff(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
lea    0xc11(%rip),%rdi
movsd  0xbb9(%rip),%xmm0
movsd  0xbf1(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
movsd  0xba2(%rip),%xmm0
call   1040 <_sqrt@plt>
addsd  0xbdd(%rip),%xmm0
movsd  %xmm0,(%rsp)
movsd  0xb88(%rip),%xmm0
call   1040 <_sqrt@plt>
xorpd  %xmm1,%xmm1
movsd  (%rsp),%xmm2
ucomisd %xmm1,%xmm2
jbe    14d2 <main+0x3a2>
addsd  0xbb4(%rip),%xmm0
ucomisd %xmm1,%xmm0
jne    14c4 <main+0x394>
jnp    14ec <main+0x3bc>
lea    0xbf0(%rip),%rdi
call   1030 <puts@plt>
jmp    150f <main+0x3df>
movsd  0xb96(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xb32(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    14c4 <main+0x394>
movsd  0xb34(%rip),%xmm0
call   1040 <_sqrt@plt>
lea    0xb97(%rip),%rdi
movsd  0xb60(%rip),%xmm1
mov    $0x2,%al
call   1050 <printf@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [31 x i8] c"testing: %0.4f expecting %0.4f\00"
@.str.1 = [11 x i8] c"\0A PASSED!\0A\00"
@.str.2 = [36 x i8] c"\0A FAIL %0.4f is not equal of %0.4f\0A\00"
define i32 @main() {
%1 = alloca i32
store i32 0, i32* %1
%2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 0.000000e+00, double 0.000000e+00)
%3 = call double @_sqrt(double 0.000000e+00)
%4 = fsub double %3, 0.000000e+00
%5 = fcmp ogt double %4, 0.000000e+00
br i1 %5, label %6, label %10
6: ; preds = %0
%7 = call double @_sqrt(double 0.000000e+00)
%8 = fsub double %7, 0.000000e+00
%9 = fcmp une double %8, 0.000000e+00
br i1 %9, label %18, label %20
10: ; preds = %0
%11 = call double @_sqrt(double 0.000000e+00)
%12 = fneg double %11
%13 = fsub double %12, 0.000000e+00
%14 = fcmp ole double %13, 0x3E7AD7F29ABCAF48
%15 = zext i1 %14 to i32
%16 = sitofp i32 %15 to double
%17 = fcmp une double %16, 0.000000e+00
br i1 %17, label %18, label %20
18: ; preds = %10, %6
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i64 0, i64 0))
br label %23
20: ; preds = %10, %6
%21 = call double @_sqrt(double 0.000000e+00)
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %21, double 0.000000e+00)
br label %23
23: ; preds = %20, %18
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 1.000000e+00, double 1.000000e+00)
%25 = call double @_sqrt(double 1.000000e+00)
%26 = fsub double %25, 1.000000e+00
%27 = fcmp ogt double %26, 0.000000e+00
br i1 %27, label %28, label %32
28: ; preds = %23
%29 = call double @_sqrt(double 1.000000e+00)
%30 = fsub double %29, 1.000000e+00
%31 = fcmp une double %30, 0.000000e+00
br i1 %31, label %40, label %42
32: ; preds = %23
%33 = call double @_sqrt(double 1.000000e+00)
%34 = fneg double %33
%35 = fsub double %34, 1.000000e+00
%36 = fcmp ole double %35, 0x3E7AD7F29ABCAF48
%37 = zext i1 %36 to i32
%38 = sitofp i32 %37 to double
%39 = fcmp une double %38, 0.000000e+00
br i1 %39, label %40, label %42
40: ; preds = %32, %28
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i64 0, i64 0))
br label %45
42: ; preds = %32, %28
%43 = call double @_sqrt(double 1.000000e+00)
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %43, double 1.000000e+00)
br label %45
45: ; preds = %42, %40
%46 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 9.000000e+00, double 3.000000e+00)
%47 = call double @_sqrt(double 9.000000e+00)
%48 = fsub double %47, 3.000000e+00
%49 = fcmp ogt double %48, 0.000000e+00
br i1 %49, label %50, label %54
50: ; preds = %45
%51 = call double @_sqrt(double 9.000000e+00)
%52 = fsub double %51, 3.000000e+00
%53 = fcmp une double %52, 0.000000e+00
br i1 %53, label %62, label %64
54: ; preds = %45
%55 = call double @_sqrt(double 9.000000e+00)
%56 = fneg double %55
%57 = fsub double %56, 3.000000e+00
%58 = fcmp ole double %57, 0x3E7AD7F29ABCAF48
%59 = zext i1 %58 to i32
%60 = sitofp i32 %59 to double
%61 = fcmp une double %60, 0.000000e+00
br i1 %61, label %62, label %64
62: ; preds = %54, %50
%63 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i64 0, i64 0))
br label %67
64: ; preds = %54, %50
%65 = call double @_sqrt(double 9.000000e+00)
%66 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %65, double 3.000000e+00)
br label %67
67: ; preds = %64, %62
%68 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 1.600000e+01, double 4.000000e+00)
%69 = call double @_sqrt(double 1.600000e+01)
%70 = fsub double %69, 4.000000e+00
%71 = fcmp ogt double %70, 0.000000e+00
br i1 %71, label %72, label %76
72: ; preds = %67
%73 = call double @_sqrt(double 1.600000e+01)
%74 = fsub double %73, 4.000000e+00
%75 = fcmp une double %74, 0.000000e+00
br i1 %75, label %84, label %86
76: ; preds = %67
%77 = call double @_sqrt(double 1.600000e+01)
%78 = fneg double %77
%79 = fsub double %78, 4.000000e+00
%80 = fcmp ole double %79, 0x3E7AD7F29ABCAF48
%81 = zext i1 %80 to i32
%82 = sitofp i32 %81 to double
%83 = fcmp une double %82, 0.000000e+00
br i1 %83, label %84, label %86
84: ; preds = %76, %72
%85 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i64 0, i64 0))
br label %89
86: ; preds = %76, %72
%87 = call double @_sqrt(double 1.600000e+01)
%88 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %87, double 4.000000e+00)
br label %89
89: ; preds = %86, %84
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 1.520000e+00, double 0x3FF3B9E350C59EAE)
%91 = call double @_sqrt(double 1.520000e+00)
%92 = fsub double %91, 0x3FF3B9E350C59EAE
%93 = fcmp ogt double %92, 0.000000e+00
br i1 %93, label %94, label %98
94: ; preds = %89
%95 = call double @_sqrt(double 1.520000e+00)
%96 = fsub double %95, 0x3FF3B9E350C59EAE
%97 = fcmp une double %96, 0.000000e+00
br i1 %97, label %106, label %108
98: ; preds = %89
%99 = call double @_sqrt(double 1.520000e+00)
%100 = fneg double %99
%101 = fsub double %100, 0x3FF3B9E350C59EAE
%102 = fcmp ole double %101, 0x3E7AD7F29ABCAF48
%103 = zext i1 %102 to i32
%104 = sitofp i32 %103 to double
%105 = fcmp une double %104, 0.000000e+00
br i1 %105, label %106, label %108
106: ; preds = %98, %94
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i64 0, i64 0))
br label %111
108: ; preds = %98, %94
%109 = call double @_sqrt(double 1.520000e+00)
%110 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %109, double 0x3FF3B9E350C59EAE)
br label %111
111: ; preds = %108, %106
%112 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 3.000000e+00, double 0x3FFBB67AE8584CAA)
%113 = call double @_sqrt(double 3.000000e+00)
%114 = fsub double %113, 0x3FFBB67AE8584CAA
%115 = fcmp ogt double %114, 0.000000e+00
br i1 %115, label %116, label %120
116: ; preds = %111
%117 = call double @_sqrt(double 3.000000e+00)
%118 = fsub double %117, 0x3FFBB67AE8584CAA
%119 = fcmp une double %118, 0.000000e+00
br i1 %119, label %128, label %130
120: ; preds = %111
%121 = call double @_sqrt(double 3.000000e+00)
%122 = fneg double %121
%123 = fsub double %122, 0x3FFBB67AE8584CAA
%124 = fcmp ole double %123, 0x3E7AD7F29ABCAF48
%125 = zext i1 %124 to i32
%126 = sitofp i32 %125 to double
%127 = fcmp une double %126, 0.000000e+00
br i1 %127, label %128, label %130
128: ; preds = %120, %116
%129 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.1, i64 0, i64 0))
br label %133
130: ; preds = %120, %116
%131 = call double @_sqrt(double 3.000000e+00)
%132 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %131, double 0x3FFBB67AE8584CAA)
br label %133
133: ; preds = %130, %128
%134 = load i32, i32* %1
ret i32 %134
}

LLVM IR (-O2):
@.str = [31 x i8] c"testing: %0.4f expecting %0.4f\00"
@.str.2 = [36 x i8] c"\0A FAIL %0.4f is not equal of %0.4f\0A\00"
@str.7 = [10 x i8] c"\0A PASSED!\00"
define i32 @main() {
%1 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 0.000000e+00, double 0.000000e+00)
%2 = tail call double @_sqrt(double 0.000000e+00)
%3 = fcmp ogt double %2, 0.000000e+00
%4 = tail call double @_sqrt(double 0.000000e+00)
br i1 %3, label %5, label %7
5: ; preds = %0
%6 = fcmp une double %4, 0.000000e+00
br i1 %6, label %9, label %11
7: ; preds = %0
%8 = fcmp ult double %4, 0xBE7AD7F29ABCAF48
br i1 %8, label %11, label %9
9: ; preds = %7, %5
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.7, i64 0, i64 0))
br label %14
11: ; preds = %7, %5
%12 = tail call double @_sqrt(double 0.000000e+00)
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %12, double 0.000000e+00)
br label %14
14: ; preds = %11, %9
%15 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 1.000000e+00, double 1.000000e+00)
%16 = tail call double @_sqrt(double 1.000000e+00)
%17 = fadd double %16, -1.000000e+00
%18 = fcmp ogt double %17, 0.000000e+00
%19 = tail call double @_sqrt(double 1.000000e+00)
br i1 %18, label %20, label %23
20: ; preds = %14
%21 = fadd double %19, -1.000000e+00
%22 = fcmp une double %21, 0.000000e+00
br i1 %22, label %26, label %28
23: ; preds = %14
%24 = fsub double -1.000000e+00, %19
%25 = fcmp ugt double %24, 0x3E7AD7F29ABCAF48
br i1 %25, label %28, label %26
26: ; preds = %23, %20
%27 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.7, i64 0, i64 0))
br label %31
28: ; preds = %23, %20
%29 = tail call double @_sqrt(double 1.000000e+00)
%30 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %29, double 1.000000e+00)
br label %31
31: ; preds = %28, %26
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 9.000000e+00, double 3.000000e+00)
%33 = tail call double @_sqrt(double 9.000000e+00)
%34 = fadd double %33, -3.000000e+00
%35 = fcmp ogt double %34, 0.000000e+00
%36 = tail call double @_sqrt(double 9.000000e+00)
br i1 %35, label %37, label %40
37: ; preds = %31
%38 = fadd double %36, -3.000000e+00
%39 = fcmp une double %38, 0.000000e+00
br i1 %39, label %43, label %45
40: ; preds = %31
%41 = fsub double -3.000000e+00, %36
%42 = fcmp ugt double %41, 0x3E7AD7F29ABCAF48
br i1 %42, label %45, label %43
43: ; preds = %40, %37
%44 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.7, i64 0, i64 0))
br label %48
45: ; preds = %40, %37
%46 = tail call double @_sqrt(double 9.000000e+00)
%47 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %46, double 3.000000e+00)
br label %48
48: ; preds = %45, %43
%49 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 1.600000e+01, double 4.000000e+00)
%50 = tail call double @_sqrt(double 1.600000e+01)
%51 = fadd double %50, -4.000000e+00
%52 = fcmp ogt double %51, 0.000000e+00
%53 = tail call double @_sqrt(double 1.600000e+01)
br i1 %52, label %54, label %57
54: ; preds = %48
%55 = fadd double %53, -4.000000e+00
%56 = fcmp une double %55, 0.000000e+00
br i1 %56, label %60, label %62
57: ; preds = %48
%58 = fsub double -4.000000e+00, %53
%59 = fcmp ugt double %58, 0x3E7AD7F29ABCAF48
br i1 %59, label %62, label %60
60: ; preds = %57, %54
%61 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.7, i64 0, i64 0))
br label %65
62: ; preds = %57, %54
%63 = tail call double @_sqrt(double 1.600000e+01)
%64 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %63, double 4.000000e+00)
br label %65
65: ; preds = %62, %60
%66 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 1.520000e+00, double 0x3FF3B9E350C59EAE)
%67 = tail call double @_sqrt(double 1.520000e+00)
%68 = fadd double %67, 0xBFF3B9E350C59EAE
%69 = fcmp ogt double %68, 0.000000e+00
%70 = tail call double @_sqrt(double 1.520000e+00)
br i1 %69, label %71, label %74
71: ; preds = %65
%72 = fadd double %70, 0xBFF3B9E350C59EAE
%73 = fcmp une double %72, 0.000000e+00
br i1 %73, label %77, label %79
74: ; preds = %65
%75 = fsub double 0xBFF3B9E350C59EAE, %70
%76 = fcmp ugt double %75, 0x3E7AD7F29ABCAF48
br i1 %76, label %79, label %77
77: ; preds = %74, %71
%78 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.7, i64 0, i64 0))
br label %82
79: ; preds = %74, %71
%80 = tail call double @_sqrt(double 1.520000e+00)
%81 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %80, double 0x3FF3B9E350C59EAE)
br label %82
82: ; preds = %79, %77
%83 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @.str, i64 0, i64 0), double 3.000000e+00, double 0x3FFBB67AE8584CAA)
%84 = tail call double @_sqrt(double 3.000000e+00)
%85 = fadd double %84, 0xBFFBB67AE8584CAA
%86 = fcmp ogt double %85, 0.000000e+00
%87 = tail call double @_sqrt(double 3.000000e+00)
br i1 %86, label %88, label %91
88: ; preds = %82
%89 = fadd double %87, 0xBFFBB67AE8584CAA
%90 = fcmp une double %89, 0.000000e+00
br i1 %90, label %94, label %96
91: ; preds = %82
%92 = fsub double 0xBFFBB67AE8584CAA, %87
%93 = fcmp ugt double %92, 0x3E7AD7F29ABCAF48
br i1 %93, label %96, label %94
94: ; preds = %91, %88
%95 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.7, i64 0, i64 0))
br label %99
96: ; preds = %91, %88
%97 = tail call double @_sqrt(double 3.000000e+00)
%98 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.2, i64 0, i64 0), double %97, double 0x3FFBB67AE8584CAA)
br label %99
99: ; preds = %96, %94
ret i32 0
}