#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 fabs(double);
double parse_expression(char *);
int /*<<< orphan*/ printf(char *, ...);
void run_boolean_compound_tests() {
  int result = 1;
  printf("Testing boolean expressions:\n");
  {
    double c_value, p_value;
    c_value = (double)2.0 > 3.0 && 2.0 == 2.0;
    p_value = parse_expression("2.0 > 3.0 && 2.0 == 2.0");
    printf("  '%s'\n", "2.0 > 3.0 && 2.0 == 2.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 > 2.0 && 2.0 == 2.0;
    p_value = parse_expression("3.0 > 2.0 && 2.0 == 2.0");
    printf("  '%s'\n", "3.0 > 2.0 && 2.0 == 2.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 > 2.0 || 1.0 == 0.0;
    p_value = parse_expression("3.0 > 2.0 || 1.0 == 0.0");
    printf("  '%s'\n", "3.0 > 2.0 || 1.0 == 0.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 < 2.0 || 1.0 != 0.0;
    p_value = parse_expression("3.0 < 2.0 || 1.0 != 0.0");
    printf("  '%s'\n", "3.0 < 2.0 || 1.0 != 0.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 < 2.0 || 1.0 == 1.0 && 2.0 <= 3.0;
    p_value = parse_expression("3.0 < 2.0 || 1.0 == 1.0 && 2.0 <= 3.0");
    printf("  '%s'\n", "3.0 < 2.0 || 1.0 == 1.0 && 2.0 <= 3.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || 0.0;
    p_value = parse_expression("3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || 0.0");
    printf("  '%s'\n", "3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || 0.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || 1.0;
    p_value = parse_expression("3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || 1.0");
    printf("  '%s'\n", "3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || 1.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)(3.0 < 2.0) * 5.0 + (3.0 >= 2.0) * 6.0;
    p_value = parse_expression("(3.0<2.0)*5.0 + (3.0>=2.0)*6.0");
    printf("  '%s'\n", "(3.0<2.0)*5.0 + (3.0>=2.0)*6.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)(3.0 >= 2.0) * 5.0 + (3.0 < 2.0) * 6.0;
    p_value = parse_expression("(3.0>=2.0)*5.0 + (3.0<2.0)*6.0");
    printf("  '%s'\n", "(3.0>=2.0)*5.0 + (3.0<2.0)*6.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)!(2.0 > 3.0 && 2.0 == 2.0);
    p_value = parse_expression("!(2.0 > 3.0 && 2.0 == 2.0)");
    printf("  '%s'\n", "!(2.0 > 3.0 && 2.0 == 2.0)");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 > 2.0 && !(2.0 == 2.0);
    p_value = parse_expression("3.0 > 2.0 && !(2.0 == 2.0)");
    printf("  '%s'\n", "3.0 > 2.0 && !(2.0 == 2.0)");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 > !2.0 || 1.0 == 0.0;
    p_value = parse_expression("3.0 > !2.0 || 1.0 == 0.0");
    printf("  '%s'\n", "3.0 > !2.0 || 1.0 == 0.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 < 2.0 || 1.0 != !0.0;
    p_value = parse_expression("3.0 < 2.0 || 1.0 != !0.0");
    printf("  '%s'\n", "3.0 < 2.0 || 1.0 != !0.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)!(3.0 < 2.0) || 1.0 == 1.0 && 2.0 <= 3.0;
    p_value = parse_expression("!(3.0 < 2.0) || 1.0 == 1.0 && 2.0 <= 3.0");
    printf("  '%s'\n", "!(3.0 < 2.0) || 1.0 == 1.0 && 2.0 <= 3.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || !0.0;
    p_value =
        parse_expression("3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || ! 0.0");
    printf("  '%s'\n", "3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || ! 0.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || !1.0;
    p_value = parse_expression("3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || !1.0");
    printf("  '%s'\n", "3.0 < 2.0 || 1.0 != 1.0 && 2.0 <= 3.0 || !1.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)(3.0 < 2.0) * 5.0 + (3.0 >= 2.0) * 6.0;
    p_value = parse_expression("(3.0<2.0)*5.0 + (3.0>=2.0)*6.0");
    printf("  '%s'\n", "(3.0<2.0)*5.0 + (3.0>=2.0)*6.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)(3.0 >= 2.0) * 5.0 + (3.0 < 2.0) * 6.0;
    p_value = parse_expression("(3.0>=2.0)*5.0 + (3.0<2.0)*6.0");
    printf("  '%s'\n", "(3.0>=2.0)*5.0 + (3.0<2.0)*6.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)(1.0) * 5.0 + (!1.0) * 6.0;
    p_value = parse_expression("(1.0)*5.0 + (!1.0)*6.0");
    printf("  '%s'\n", "(1.0)*5.0 + (!1.0)*6.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  {
    double c_value, p_value;
    c_value = (double)(!1.0) * 5.0 + (1.0) * 6.0;
    p_value = parse_expression("(!1.0)*5.0 + (1.0)*6.0");
    printf("  '%s'\n", "(!1.0)*5.0 + (1.0)*6.0");
    if (fabs(c_value - p_value) > (1e-10)) {
      *&result = 0;
      printf("         C: %f\n", c_value);
      printf("    Parsed: %f\n", p_value);
    }
  };
  printf("%s\n\n", result ? "passed" : "failed");
}


x86 assembly (clang, -O0):
<run_boolean_compound_tests>:
push   %rbp
mov    %rsp,%rbp
sub    $0x150,%rsp
movl   $0x1,-0x4(%rbp)
lea    0xed7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x10(%rbp)
lea    0xedf(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x18(%rbp)
lea    0xee6(%rip),%rdi
lea    0xec7(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x10(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xe67(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11d0 <run_boolean_compound_tests+0xa0>
movl   $0x0,-0x4(%rbp)
movsd  -0x10(%rbp),%xmm0
lea    0xea8(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x18(%rbp),%xmm0
lea    0xea5(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0xe30(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
lea    0xe9a(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x28(%rbp)
lea    0xe61(%rip),%rdi
lea    0xe82(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x20(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xde2(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1255 <run_boolean_compound_tests+0x125>
movl   $0x0,-0x4(%rbp)
movsd  -0x20(%rbp),%xmm0
lea    0xe23(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x28(%rbp),%xmm0
lea    0xe20(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0xdab(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
lea    0xe2d(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x38(%rbp)
lea    0xddc(%rip),%rdi
lea    0xe15(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x30(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xd5d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12da <run_boolean_compound_tests+0x1aa>
movl   $0x0,-0x4(%rbp)
movsd  -0x30(%rbp),%xmm0
lea    0xd9e(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x38(%rbp),%xmm0
lea    0xd9b(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0xd26(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
lea    0xdc0(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x48(%rbp)
lea    0xd57(%rip),%rdi
lea    0xda8(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x40(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xcd8(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    135f <run_boolean_compound_tests+0x22f>
movl   $0x0,-0x4(%rbp)
movsd  -0x40(%rbp),%xmm0
lea    0xd19(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x48(%rbp),%xmm0
lea    0xd16(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0xca1(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
lea    0xd53(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x58(%rbp)
lea    0xcd2(%rip),%rdi
lea    0xd3b(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x50(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xc53(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    13e4 <run_boolean_compound_tests+0x2b4>
movl   $0x0,-0x4(%rbp)
movsd  -0x50(%rbp),%xmm0
lea    0xc94(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x58(%rbp),%xmm0
lea    0xc91(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
lea    0xcf9(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x68(%rbp)
lea    0xc52(%rip),%rdi
lea    0xce1(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x60(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xbd3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1464 <run_boolean_compound_tests+0x334>
movl   $0x0,-0x4(%rbp)
movsd  -0x60(%rbp),%xmm0
lea    0xc14(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x68(%rbp),%xmm0
lea    0xc11(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0xb9c(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
lea    0xca1(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x78(%rbp)
lea    0xbcd(%rip),%rdi
lea    0xc89(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x70(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xb4e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    14e9 <run_boolean_compound_tests+0x3b9>
movl   $0x0,-0x4(%rbp)
movsd  -0x70(%rbp),%xmm0
lea    0xb8f(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x78(%rbp),%xmm0
lea    0xb8c(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0xb1f(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
lea    0xc49(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x88(%rbp)
ff
lea    0xb45(%rip),%rdi
lea    0xc2e(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x80(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xac3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1577 <run_boolean_compound_tests+0x447>
movl   $0x0,-0x4(%rbp)
movsd  -0x80(%rbp),%xmm0
lea    0xb04(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x88(%rbp),%xmm0
ff
lea    0xafe(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0xa99(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
lea    0xbd7(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x98(%rbp)
ff
lea    0xab4(%rip),%rdi
lea    0xbbc(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x90(%rbp),%xmm0
ff
subsd  -0x98(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0xa2f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    160e <run_boolean_compound_tests+0x4de>
movl   $0x0,-0x4(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
lea    0xa6d(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x98(%rbp),%xmm0
ff
lea    0xa67(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0x9f2(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
lea    0xb5f(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
lea    0xa1d(%rip),%rdi
lea    0xb44(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0xa0(%rbp),%xmm0
ff
subsd  -0xa8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x998(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16a5 <run_boolean_compound_tests+0x575>
movl   $0x0,-0x4(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
lea    0x9d6(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xa8(%rbp),%xmm0
ff
lea    0x9d0(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
lea    0xae8(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
lea    0x98b(%rip),%rdi
lea    0xacd(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0xb0(%rbp),%xmm0
ff
subsd  -0xb8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x906(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1737 <run_boolean_compound_tests+0x607>
movl   $0x0,-0x4(%rbp)
movsd  -0xb0(%rbp),%xmm0
ff
lea    0x944(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xb8(%rbp),%xmm0
ff
lea    0x93e(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0x8c9(%rip),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
lea    0xa6c(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0xc8(%rbp)
ff
lea    0x8f4(%rip),%rdi
lea    0xa51(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0xc0(%rbp),%xmm0
ff
subsd  -0xc8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x86f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    17ce <run_boolean_compound_tests+0x69e>
movl   $0x0,-0x4(%rbp)
movsd  -0xc0(%rbp),%xmm0
ff
lea    0x8ad(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xc8(%rbp),%xmm0
ff
lea    0x8a7(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
lea    0x9f3(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
lea    0x862(%rip),%rdi
lea    0x9d8(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0xd0(%rbp),%xmm0
ff
subsd  -0xd8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x7dd(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1860 <run_boolean_compound_tests+0x730>
movl   $0x0,-0x4(%rbp)
movsd  -0xd0(%rbp),%xmm0
ff
lea    0x81b(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xd8(%rbp),%xmm0
ff
lea    0x815(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    $0x1,%al
test   $0x1,%al
mov    %al,-0x149(%rbp)
jne    1882 <run_boolean_compound_tests+0x752>
jmp    1875 <run_boolean_compound_tests+0x745>
mov    $0x1,%al
mov    %al,-0x149(%rbp)
jmp    1882 <run_boolean_compound_tests+0x752>
mov    -0x149(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
lea    0x94c(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0xe8(%rbp)
ff
lea    0x7a2(%rip),%rdi
lea    0x931(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0xe0(%rbp),%xmm0
ff
subsd  -0xe8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x71d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1920 <run_boolean_compound_tests+0x7f0>
movl   $0x0,-0x4(%rbp)
movsd  -0xe0(%rbp),%xmm0
ff
lea    0x75b(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xe8(%rbp),%xmm0
ff
lea    0x755(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0x6e0(%rip),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
lea    0x8de(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0xf8(%rbp)
ff
lea    0x70b(%rip),%rdi
lea    0x8c3(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0xf0(%rbp),%xmm0
ff
subsd  -0xf8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x686(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    19b7 <run_boolean_compound_tests+0x887>
movl   $0x0,-0x4(%rbp)
movsd  -0xf0(%rbp),%xmm0
ff
lea    0x6c4(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0xf8(%rbp),%xmm0
ff
lea    0x6be(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
lea    0x87b(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x108(%rbp)
ff
lea    0x679(%rip),%rdi
lea    0x860(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x100(%rbp),%xmm0
ff
subsd  -0x108(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x5f4(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1a49 <run_boolean_compound_tests+0x919>
movl   $0x0,-0x4(%rbp)
movsd  -0x100(%rbp),%xmm0
ff
lea    0x632(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x108(%rbp),%xmm0
ff
lea    0x62c(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0x5bf(%rip),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
lea    0x6e6(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x118(%rbp)
ff
lea    0x5e2(%rip),%rdi
lea    0x6cb(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x110(%rbp),%xmm0
ff
subsd  -0x118(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x55d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1ae0 <run_boolean_compound_tests+0x9b0>
movl   $0x0,-0x4(%rbp)
movsd  -0x110(%rbp),%xmm0
ff
lea    0x59b(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x118(%rbp),%xmm0
ff
lea    0x595(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0x530(%rip),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
lea    0x66e(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x128(%rbp)
ff
lea    0x54b(%rip),%rdi
lea    0x653(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x120(%rbp),%xmm0
ff
subsd  -0x128(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x4c6(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1b77 <run_boolean_compound_tests+0xa47>
movl   $0x0,-0x4(%rbp)
movsd  -0x120(%rbp),%xmm0
ff
lea    0x504(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x128(%rbp),%xmm0
ff
lea    0x4fe(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0x499(%rip),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
lea    0x6e4(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x138(%rbp)
ff
lea    0x4b4(%rip),%rdi
lea    0x6c9(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x130(%rbp),%xmm0
ff
subsd  -0x138(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x42f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1c0e <run_boolean_compound_tests+0xade>
movl   $0x0,-0x4(%rbp)
movsd  -0x130(%rbp),%xmm0
ff
lea    0x46d(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x138(%rbp),%xmm0
ff
lea    0x467(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  0x3fa(%rip),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
lea    0x664(%rip),%rdi
call   1050 <parse_expression@plt>
movsd  %xmm0,-0x148(%rbp)
ff
lea    0x41d(%rip),%rdi
lea    0x649(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x140(%rbp),%xmm0
ff
subsd  -0x148(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  0x398(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1ca5 <run_boolean_compound_tests+0xb75>
movl   $0x0,-0x4(%rbp)
movsd  -0x140(%rbp),%xmm0
ff
lea    0x3d6(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movsd  -0x148(%rbp),%xmm0
ff
lea    0x3d0(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x4(%rbp),%ecx
lea    0x5fd(%rip),%rsi
lea    0x5ef(%rip),%rax
cmp    $0x0,%ecx
cmovne %rax,%rsi
lea    0x5dc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
add    $0x150,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<run_boolean_compound_tests>:
push   %rbp
push   %rbx
push   %rax
lea    0x1143(%rip),%rdi
call   1030 <puts@plt>
lea    0xec2(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xec6(%rip),%rdi
xor    %ebp,%ebp
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
xorpd  %xmm0,%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    11af <run_boolean_compound_tests+0x6f>
lea    0xea9(%rip),%rdi
xorpd  %xmm0,%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xea7(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
jmp    11b4 <run_boolean_compound_tests+0x74>
mov    $0x1,%ebp
lea    0xe9d(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xe61(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0xe1f(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    121a <run_boolean_compound_tests+0xda>
lea    0xe42(%rip),%rdi
movsd  0xe02(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xe3c(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xe4f(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xdfb(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0xdb9(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    1280 <run_boolean_compound_tests+0x140>
lea    0xddc(%rip),%rdi
movsd  0xd9c(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xdd6(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xe01(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xd95(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0xd53(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    12e6 <run_boolean_compound_tests+0x1a6>
lea    0xd76(%rip),%rdi
movsd  0xd36(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xd70(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xdb3(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xd2f(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0xced(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    134c <run_boolean_compound_tests+0x20c>
lea    0xd10(%rip),%rdi
movsd  0xcd0(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xd0a(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xd73(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xcc9(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
xorpd  %xmm0,%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    13aa <run_boolean_compound_tests+0x26a>
lea    0xcae(%rip),%rdi
xorpd  %xmm0,%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xcac(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xd42(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xc6b(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0xc29(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    1410 <run_boolean_compound_tests+0x2d0>
lea    0xc4c(%rip),%rdi
movsd  0xc0c(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xc46(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xd09(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xc05(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0xbcb(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    1476 <run_boolean_compound_tests+0x336>
lea    0xbe6(%rip),%rdi
movsd  0xbae(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xbe0(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xcc2(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xb9f(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0xb6d(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    14dc <run_boolean_compound_tests+0x39c>
lea    0xb80(%rip),%rdi
movsd  0xb50(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xb7a(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xc7b(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xb39(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0xaf7(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    1542 <run_boolean_compound_tests+0x402>
lea    0xb1a(%rip),%rdi
movsd  0xada(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xb14(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xc30(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xad3(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
xorpd  %xmm0,%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    15a0 <run_boolean_compound_tests+0x460>
lea    0xab8(%rip),%rdi
xorpd  %xmm0,%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xab6(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xbed(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xa75(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0xa33(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    1606 <run_boolean_compound_tests+0x4c6>
lea    0xa56(%rip),%rdi
movsd  0xa16(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xa50(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xba0(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0xa0f(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
xorpd  %xmm0,%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    1664 <run_boolean_compound_tests+0x524>
lea    0x9f4(%rip),%rdi
xorpd  %xmm0,%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x9f2(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xb5b(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0x9b1(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0x96f(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    16ca <run_boolean_compound_tests+0x58a>
lea    0x992(%rip),%rdi
movsd  0x952(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x98c(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xb1e(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0x94b(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0x909(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    1730 <run_boolean_compound_tests+0x5f0>
lea    0x92c(%rip),%rdi
movsd  0x8ec(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x926(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0xae7(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0x8e5(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
xorpd  %xmm0,%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    178e <run_boolean_compound_tests+0x64e>
lea    0x8ca(%rip),%rdi
xorpd  %xmm0,%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x8c8(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0x98b(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0x887(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0x84d(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    17f4 <run_boolean_compound_tests+0x6b4>
lea    0x868(%rip),%rdi
movsd  0x830(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x862(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0x944(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0x821(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0x7ef(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    185a <run_boolean_compound_tests+0x71a>
lea    0x802(%rip),%rdi
movsd  0x7d2(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x7fc(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0x9eb(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0x7bb(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0x789(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    18c0 <run_boolean_compound_tests+0x780>
lea    0x79c(%rip),%rdi
movsd  0x76c(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x796(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
xor    %ebp,%ebp
lea    0x99c(%rip),%rbx
mov    %rbx,%rdi
call   1060 <parse_expression@plt>
movsd  %xmm0,(%rsp)
lea    0x755(%rip),%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  0x71b(%rip),%xmm0
subsd  (%rsp),%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    192d <run_boolean_compound_tests+0x7ed>
lea    0x736(%rip),%rdi
movsd  0x6fe(%rip),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x730(%rip),%rdi
movsd  (%rsp),%xmm0
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x95b(%rip),%rsi
jmp    1938 <run_boolean_compound_tests+0x7f8>
test   %ebp,%ebp
je     1924 <run_boolean_compound_tests+0x7e4>
lea    0x947(%rip),%rsi
lea    0x93b(%rip),%rdi
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
jmp    1040 <printf@plt>

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

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