#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 /*<<< orphan*/ fzz_addRule(char *);
int /*<<< orphan*/ fzz_calculateOutput();
int /*<<< orphan*/ fzz_deinit();
double fzz_getOutput(int /*<<< orphan*/);
int /*<<< orphan*/ fzz_init(int, int);
int /*<<< orphan*/ fzz_initInputFcns(int, int, char *);
int /*<<< orphan*/ fzz_initOutputFcns(int /*<<< orphan*/, int, char *);
int /*<<< orphan*/ fzz_printSystem();
int /*<<< orphan*/ fzz_setInput(int, double);
int /*<<< orphan*/ fzz_setInputFcn(int, int, double, double, double, char *);
int /*<<< orphan*/ fzz_setOutputFcn(int, int /*<<< orphan*/, double, double,
                                    double, char *);
int /*<<< orphan*/ printf(char *, ...);
void fzz_test3() {
  double x1 = 0;
  double x2 = 0;
  fzz_init(2, 1);
  fzz_initInputFcns(0, 3, "input1");
  fzz_initInputFcns(1, 3, "input2");
  fzz_initOutputFcns(0, 3, "output");
  fzz_setInputFcn(0, 0, -2.0, -1.0, 0.0, "negative");
  fzz_setInputFcn(1, 0, -1.0, 0.0, 1.0, "zero");
  fzz_setInputFcn(2, 0, 0.0, 1.0, 2.0, "pozitive");
  fzz_setInputFcn(0, 1, -2.0, -1.0, 0.0, "negative");
  fzz_setInputFcn(1, 1, -1.0, 0.0, 1.0, "zero");
  fzz_setInputFcn(2, 1, 0.0, 1.0, 2.0, "pozitive");
  fzz_setOutputFcn(0, 0, -2.0, -1.0, 0.0, "negative");
  fzz_setOutputFcn(1, 0, -1.0, 0.0, 1.0, "zero");
  fzz_setOutputFcn(2, 0, 0.0, 1.0, 2.0, "pozitive");
  fzz_addRule(
      "if input1 is negative and input2 is negative then output is negative");
  fzz_addRule(
      "if input1 is negative and input2 is zero then output is negative");
  fzz_addRule(
      "if input1 is negative and input2 is pozitive then output is zero");
  fzz_addRule(
      "if input1 is zero and input2 is negative then output is negative");
  fzz_addRule("if input1 is zero and input2 is zero then output is zero");
  fzz_addRule(
      "if input1 is zero and input2 is pozitive then output is pozitive");
  fzz_addRule(
      "if input1 is pozitive and input2 is negative then output is zero");
  fzz_addRule(
      "if input1 is pozitive and input2 is zero then output is pozitive");
  fzz_addRule(
      "if input1 is pozitive and input2 is pozitive then output is pozitive");
  fzz_printSystem();
  printf("\nCalculated outputs:\n x1\\x2 |");
  for (x2 = -1; x2 < 1.1; x2 += 0.25) {
    printf(" %+1.2f |", x2);
  }
  printf("\n-------------------------------------------------------------------"
         "-------------\n");
  for (x1 = -1; x1 < 1.1; x1 += 0.25) {
    printf(" %+1.2f |", x1);
    for (x2 = -1; x2 < 1.1; x2 += 0.25) {
      fzz_setInput(0, x1);
      fzz_setInput(1, x2);
      fzz_calculateOutput();
      printf(" %+1.2f |", fzz_getOutput(0));
    }
    printf("\n");
  }
  printf("---------------------------------------------------------------------"
         "-----------\n");
  fzz_deinit();
}


x86 assembly (clang, -O0):
<fzz_test3>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    $0x2,%edi
mov    $0x1,%esi
call   1050 <fzz_init@plt>
xor    %edi,%edi
mov    $0x3,%esi
lea    0xe3b(%rip),%rdx
call   10a0 <fzz_initInputFcns@plt>
mov    $0x1,%edi
mov    $0x3,%esi
lea    0xe2c(%rip),%rdx
call   10a0 <fzz_initInputFcns@plt>
xor    %edi,%edi
mov    $0x3,%esi
lea    0xe20(%rip),%rdx
call   1060 <fzz_initOutputFcns@plt>
xor    %esi,%esi
movsd  0xdeb(%rip),%xmm0
movsd  0xdcb(%rip),%xmm1
xorps  %xmm2,%xmm2
lea    0xe42(%rip),%rdx
mov    %esi,%edi
call   10d0 <fzz_setInputFcn@plt>
mov    $0x1,%edi
xor    %esi,%esi
movsd  0xdab(%rip),%xmm0
xorps  %xmm1,%xmm1
movsd  0xda8(%rip),%xmm2
lea    0xf9c(%rip),%rdx
call   10d0 <fzz_setInputFcn@plt>
mov    $0x2,%edi
xor    %esi,%esi
xorps  %xmm0,%xmm0
movsd  0xd8a(%rip),%xmm1
movsd  0xd8a(%rip),%xmm2
lea    0xff8(%rip),%rdx
call   10d0 <fzz_setInputFcn@plt>
xor    %edi,%edi
mov    $0x1,%esi
movsd  0xd77(%rip),%xmm0
movsd  0xd57(%rip),%xmm1
xorps  %xmm2,%xmm2
lea    0xdce(%rip),%rdx
call   10d0 <fzz_setInputFcn@plt>
mov    $0x1,%esi
movsd  0xd3b(%rip),%xmm0
xorps  %xmm1,%xmm1
movsd  0xd38(%rip),%xmm2
lea    0xf2c(%rip),%rdx
mov    %esi,%edi
call   10d0 <fzz_setInputFcn@plt>
mov    $0x2,%edi
mov    $0x1,%esi
xorps  %xmm0,%xmm0
movsd  0xd15(%rip),%xmm1
movsd  0xd15(%rip),%xmm2
lea    0xf83(%rip),%rdx
call   10d0 <fzz_setInputFcn@plt>
xor    %esi,%esi
movsd  0xd07(%rip),%xmm0
movsd  0xce7(%rip),%xmm1
xorps  %xmm2,%xmm2
lea    0xd5e(%rip),%rdx
mov    %esi,%edi
call   10e0 <fzz_setOutputFcn@plt>
mov    $0x1,%edi
xor    %esi,%esi
movsd  0xcc7(%rip),%xmm0
xorps  %xmm1,%xmm1
movsd  0xcc4(%rip),%xmm2
lea    0xeb8(%rip),%rdx
call   10e0 <fzz_setOutputFcn@plt>
mov    $0x2,%edi
xor    %esi,%esi
xorps  %xmm0,%xmm0
movsd  0xca6(%rip),%xmm1
movsd  0xca6(%rip),%xmm2
lea    0xf14(%rip),%rdx
call   10e0 <fzz_setOutputFcn@plt>
lea    0xcc8(%rip),%rdi
call   1040 <fzz_addRule@plt>
lea    0xd01(%rip),%rdi
call   1040 <fzz_addRule@plt>
lea    0xd36(%rip),%rdi
call   1040 <fzz_addRule@plt>
lea    0xd6b(%rip),%rdi
call   1040 <fzz_addRule@plt>
lea    0xda0(%rip),%rdi
call   1040 <fzz_addRule@plt>
lea    0xdcd(%rip),%rdi
call   1040 <fzz_addRule@plt>
lea    0xe02(%rip),%rdi
call   1040 <fzz_addRule@plt>
lea    0xe37(%rip),%rdi
call   1040 <fzz_addRule@plt>
lea    0xe6c(%rip),%rdi
call   1040 <fzz_addRule@plt>
mov    $0x0,%al
call   1030 <fzz_printSystem@plt>
lea    0xe9e(%rip),%rdi
mov    $0x0,%al
call   1080 <printf@plt>
movsd  0xc01(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xc14(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    1441 <fzz_test3+0x281>
movsd  -0x10(%rbp),%xmm0
lea    0xe89(%rip),%rdi
mov    $0x1,%al
call   1080 <printf@plt>
movsd  0xbf6(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    1404 <fzz_test3+0x244>
lea    0xe6e(%rip),%rdi
mov    $0x0,%al
call   1080 <printf@plt>
movsd  0xba9(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  0xbbc(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    1515 <fzz_test3+0x355>
movsd  -0x8(%rbp),%xmm0
lea    0xe31(%rip),%rdi
mov    $0x1,%al
call   1080 <printf@plt>
movsd  0xb76(%rip),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xb89(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    14f0 <fzz_test3+0x330>
movsd  -0x8(%rbp),%xmm0
xor    %edi,%edi
call   1070 <fzz_setInput@plt>
movsd  -0x10(%rbp),%xmm0
mov    $0x1,%edi
call   1070 <fzz_setInput@plt>
mov    $0x0,%al
call   1090 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10b0 <fzz_getOutput@plt>
lea    0xdda(%rip),%rdi
mov    $0x1,%al
call   1080 <printf@plt>
movsd  0xb47(%rip),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    148f <fzz_test3+0x2cf>
lea    0xe10(%rip),%rdi
mov    $0x0,%al
call   1080 <printf@plt>
movsd  0xb22(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    145c <fzz_test3+0x29c>
lea    0xd9b(%rip),%rdi
mov    $0x0,%al
call   1080 <printf@plt>
mov    $0x0,%al
call   10c0 <fzz_deinit@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fzz_test3>:
push   %r15
push   %r14
push   %rbx
sub    $0x10,%rsp
mov    $0x2,%edi
mov    $0x1,%esi
call   1070 <fzz_init@plt>
lea    0xe59(%rip),%rdx
xor    %edi,%edi
mov    $0x3,%esi
call   10c0 <fzz_initInputFcns@plt>
lea    0xe4d(%rip),%rdx
mov    $0x1,%edi
mov    $0x3,%esi
call   10c0 <fzz_initInputFcns@plt>
lea    0xe3e(%rip),%rdx
xor    %edi,%edi
mov    $0x3,%esi
call   1080 <fzz_initOutputFcns@plt>
lea    0xe6e(%rip),%r14
movsd  0xdbd(%rip),%xmm0
movsd  0xdbd(%rip),%xmm1
xorps  %xmm2,%xmm2
xor    %edi,%edi
xor    %esi,%esi
mov    %r14,%rdx
call   10f0 <fzz_setInputFcn@plt>
lea    0xfca(%rip),%r15
movsd  0xda7(%rip),%xmm2
xorps  %xmm1,%xmm1
mov    $0x1,%edi
xor    %esi,%esi
movsd  0xd8d(%rip),%xmm0
mov    %r15,%rdx
call   10f0 <fzz_setInputFcn@plt>
lea    0x1023(%rip),%rbx
movsd  0xd86(%rip),%xmm2
xorps  %xmm0,%xmm0
mov    $0x2,%edi
xor    %esi,%esi
movsd  0xd6c(%rip),%xmm1
mov    %rbx,%rdx
call   10f0 <fzz_setInputFcn@plt>
xorps  %xmm2,%xmm2
xor    %edi,%edi
mov    $0x1,%esi
movsd  0xd42(%rip),%xmm0
movsd  0xd42(%rip),%xmm1
mov    %r14,%rdx
call   10f0 <fzz_setInputFcn@plt>
xorps  %xmm1,%xmm1
mov    $0x1,%edi
mov    $0x1,%esi
movsd  0xd25(%rip),%xmm0
movsd  0xd25(%rip),%xmm2
mov    %r15,%rdx
call   10f0 <fzz_setInputFcn@plt>
xorps  %xmm0,%xmm0
mov    $0x2,%edi
mov    $0x1,%esi
movsd  0xd08(%rip),%xmm1
movsd  0xd08(%rip),%xmm2
mov    %rbx,%rdx
call   10f0 <fzz_setInputFcn@plt>
xorps  %xmm2,%xmm2
xor    %edi,%edi
xor    %esi,%esi
movsd  0xcd9(%rip),%xmm0
movsd  0xcd9(%rip),%xmm1
mov    %r14,%rdx
call   1100 <fzz_setOutputFcn@plt>
xorps  %xmm1,%xmm1
mov    $0x1,%edi
xor    %esi,%esi
movsd  0xcbf(%rip),%xmm0
movsd  0xcbf(%rip),%xmm2
mov    %r15,%rdx
call   1100 <fzz_setOutputFcn@plt>
xorps  %xmm0,%xmm0
mov    $0x2,%edi
xor    %esi,%esi
movsd  0xca5(%rip),%xmm1
movsd  0xca5(%rip),%xmm2
mov    %rbx,%rdx
call   1100 <fzz_setOutputFcn@plt>
lea    0xceb(%rip),%rdi
call   1050 <fzz_addRule@plt>
lea    0xd24(%rip),%rdi
call   1050 <fzz_addRule@plt>
lea    0xd59(%rip),%rdi
call   1050 <fzz_addRule@plt>
lea    0xd8e(%rip),%rdi
call   1050 <fzz_addRule@plt>
lea    0xdc3(%rip),%rdi
call   1050 <fzz_addRule@plt>
lea    0xdf0(%rip),%rdi
call   1050 <fzz_addRule@plt>
lea    0xe25(%rip),%rdi
call   1050 <fzz_addRule@plt>
lea    0xe5a(%rip),%rdi
call   1050 <fzz_addRule@plt>
lea    0xe8f(%rip),%rdi
call   1050 <fzz_addRule@plt>
xor    %eax,%eax
call   1030 <fzz_printSystem@plt>
lea    0xec1(%rip),%rdi
xor    %eax,%eax
call   10a0 <printf@plt>
lea    0xed1(%rip),%rbx
mov    %rbx,%rdi
movsd  0xbfa(%rip),%xmm0
mov    $0x1,%al
call   10a0 <printf@plt>
movsd  0xc03(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
movsd  0xbf9(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
movsd  0xbef(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
xorps  %xmm0,%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
movsd  0xbd8(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
movsd  0xbce(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
movsd  0xbc4(%rip),%xmm0
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
mov    %rbx,%rdi
movsd  0xb77(%rip),%xmm0
mov    $0x1,%al
call   10a0 <printf@plt>
lea    0xe37(%rip),%rdi
call   1060 <puts@plt>
movsd  0xb54(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  %xmm0,0x8(%rsp)
mov    %rbx,%rdi
movsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   10a0 <printf@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
call   1090 <fzz_setInput@plt>
mov    $0x1,%edi
movsd  0xb18(%rip),%xmm0
call   1090 <fzz_setInput@plt>
xor    %eax,%eax
call   10b0 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10d0 <fzz_getOutput@plt>
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
call   1090 <fzz_setInput@plt>
mov    $0x1,%edi
movsd  0xaf9(%rip),%xmm0
call   1090 <fzz_setInput@plt>
xor    %eax,%eax
call   10b0 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10d0 <fzz_getOutput@plt>
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
call   1090 <fzz_setInput@plt>
mov    $0x1,%edi
movsd  0xaca(%rip),%xmm0
call   1090 <fzz_setInput@plt>
xor    %eax,%eax
call   10b0 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10d0 <fzz_getOutput@plt>
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
call   1090 <fzz_setInput@plt>
mov    $0x1,%edi
movsd  0xa9b(%rip),%xmm0
call   1090 <fzz_setInput@plt>
xor    %eax,%eax
call   10b0 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10d0 <fzz_getOutput@plt>
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
call   1090 <fzz_setInput@plt>
xorps  %xmm0,%xmm0
mov    $0x1,%edi
call   1090 <fzz_setInput@plt>
xor    %eax,%eax
call   10b0 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10d0 <fzz_getOutput@plt>
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
call   1090 <fzz_setInput@plt>
mov    $0x1,%edi
movsd  0xa3a(%rip),%xmm0
call   1090 <fzz_setInput@plt>
xor    %eax,%eax
call   10b0 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10d0 <fzz_getOutput@plt>
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
call   1090 <fzz_setInput@plt>
mov    $0x1,%edi
movsd  0xa0b(%rip),%xmm0
call   1090 <fzz_setInput@plt>
xor    %eax,%eax
call   10b0 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10d0 <fzz_getOutput@plt>
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
call   1090 <fzz_setInput@plt>
mov    $0x1,%edi
movsd  0x9dc(%rip),%xmm0
call   1090 <fzz_setInput@plt>
xor    %eax,%eax
call   10b0 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10d0 <fzz_getOutput@plt>
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
xor    %edi,%edi
movsd  0x8(%rsp),%xmm0
call   1090 <fzz_setInput@plt>
mov    $0x1,%edi
movsd  0x96d(%rip),%xmm0
call   1090 <fzz_setInput@plt>
xor    %eax,%eax
call   10b0 <fzz_calculateOutput@plt>
xor    %edi,%edi
call   10d0 <fzz_getOutput@plt>
mov    %rbx,%rdi
mov    $0x1,%al
call   10a0 <printf@plt>
mov    $0xa,%edi
call   1040 <putchar@plt>
movsd  0x8(%rsp),%xmm0
addsd  0x960(%rip),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x96a(%rip),%xmm0
ucomisd 0x8(%rsp),%xmm0
movsd  0x8(%rsp),%xmm0
ja     14c0 <fzz_test3+0x2e0>
lea    0xbe0(%rip),%rdi
call   1060 <puts@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbx
pop    %r14
pop    %r15
jmp    10e0 <fzz_deinit@plt>

LLVM IR (-O0):
@.str = [7 x i8] c"input1\00"
@.str.1 = [7 x i8] c"input2\00"
@.str.2 = [7 x i8] c"output\00"
@.str.3 = [9 x i8] c"negative\00"
@.str.4 = [5 x i8] c"zero\00"
@.str.5 = [9 x i8] c"pozitive\00"
@.str.6 = [69 x i8] c"if input1 is negative and input2 is negative then output is negative\00"
@.str.7 = [65 x i8] c"if input1 is negative and input2 is zero then output is negative\00"
@.str.8 = [65 x i8] c"if input1 is negative and input2 is pozitive then output is zero\00"
@.str.9 = [65 x i8] c"if input1 is zero and input2 is negative then output is negative\00"
@.str.10 = [57 x i8] c"if input1 is zero and input2 is zero then output is zero\00"
@.str.11 = [65 x i8] c"if input1 is zero and input2 is pozitive then output is pozitive\00"
@.str.12 = [65 x i8] c"if input1 is pozitive and input2 is negative then output is zero\00"
@.str.13 = [65 x i8] c"if input1 is pozitive and input2 is zero then output is pozitive\00"
@.str.14 = [69 x i8] c"if input1 is pozitive and input2 is pozitive then output is pozitive\00"
@.str.15 = [30 x i8] c"\0ACalculated outputs:\0A x1\\x2 |\00"
@.str.16 = [10 x i8] c" %+1.2f |\00"
@.str.17 = [83 x i8] c"\0A--------------------------------------------------------------------------------\0A\00"
@.str.18 = [2 x i8] c"\0A\00"
@.str.19 = [82 x i8] c"--------------------------------------------------------------------------------\0A\00"
define void @fzz_test3() {
%1 = alloca double
%2 = alloca double
store double 0.000000e+00, double* %1
store double 0.000000e+00, double* %2
%3 = call i32 @fzz_init(i32 2, i32 1)
%4 = call i32 @fzz_initInputFcns(i32 0, i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%5 = call i32 @fzz_initInputFcns(i32 1, i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
%6 = call i32 @fzz_initOutputFcns(i32 0, i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%7 = call i32 @fzz_setInputFcn(i32 0, i32 0, double -2.000000e+00, double -1.000000e+00, double 0.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%8 = call i32 @fzz_setInputFcn(i32 1, i32 0, double -1.000000e+00, double 0.000000e+00, double 1.000000e+00, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%9 = call i32 @fzz_setInputFcn(i32 2, i32 0, double 0.000000e+00, double 1.000000e+00, double 2.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0))
%10 = call i32 @fzz_setInputFcn(i32 0, i32 1, double -2.000000e+00, double -1.000000e+00, double 0.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%11 = call i32 @fzz_setInputFcn(i32 1, i32 1, double -1.000000e+00, double 0.000000e+00, double 1.000000e+00, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%12 = call i32 @fzz_setInputFcn(i32 2, i32 1, double 0.000000e+00, double 1.000000e+00, double 2.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0))
%13 = call i32 @fzz_setOutputFcn(i32 0, i32 0, double -2.000000e+00, double -1.000000e+00, double 0.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%14 = call i32 @fzz_setOutputFcn(i32 1, i32 0, double -1.000000e+00, double 0.000000e+00, double 1.000000e+00, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%15 = call i32 @fzz_setOutputFcn(i32 2, i32 0, double 0.000000e+00, double 1.000000e+00, double 2.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0))
%16 = call i32 @fzz_addRule(i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.6, i64 0, i64 0))
%17 = call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.7, i64 0, i64 0))
%18 = call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.8, i64 0, i64 0))
%19 = call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.9, i64 0, i64 0))
%20 = call i32 @fzz_addRule(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.10, i64 0, i64 0))
%21 = call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.11, i64 0, i64 0))
%22 = call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i64 0, i64 0))
%23 = call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.13, i64 0, i64 0))
%24 = call i32 @fzz_addRule(i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.14, i64 0, i64 0))
%25 = call i32 (...) @fzz_printSystem()
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.15, i64 0, i64 0))
store double -1.000000e+00, double* %2
br label %27
27: ; preds = %33, %0
%28 = load double, double* %2
%29 = fcmp olt double %28, 1.100000e+00
br i1 %29, label %30, label %36
30: ; preds = %27
%31 = load double, double* %2
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %31)
br label %33
33: ; preds = %30
%34 = load double, double* %2
%35 = fadd double %34, 2.500000e-01
store double %35, double* %2
br label %27
36: ; preds = %27
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([83 x i8], [83 x i8]* @.str.17, i64 0, i64 0))
store double -1.000000e+00, double* %1
br label %38
38: ; preds = %60, %36
%39 = load double, double* %1
%40 = fcmp olt double %39, 1.100000e+00
br i1 %40, label %41, label %63
41: ; preds = %38
%42 = load double, double* %1
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %42)
store double -1.000000e+00, double* %2
br label %44
44: ; preds = %55, %41
%45 = load double, double* %2
%46 = fcmp olt double %45, 1.100000e+00
br i1 %46, label %47, label %58
47: ; preds = %44
%48 = load double, double* %1
%49 = call i32 @fzz_setInput(i32 0, double %48)
%50 = load double, double* %2
%51 = call i32 @fzz_setInput(i32 1, double %50)
%52 = call i32 (...) @fzz_calculateOutput()
%53 = call double @fzz_getOutput(i32 0)
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %53)
br label %55
55: ; preds = %47
%56 = load double, double* %2
%57 = fadd double %56, 2.500000e-01
store double %57, double* %2
br label %44
58: ; preds = %44
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.18, i64 0, i64 0))
br label %60
60: ; preds = %58
%61 = load double, double* %1
%62 = fadd double %61, 2.500000e-01
store double %62, double* %1
br label %38
63: ; preds = %38
%64 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.19, i64 0, i64 0))
%65 = call i32 (...) @fzz_deinit()
ret void
}

LLVM IR (-O2):
@.str = [7 x i8] c"input1\00"
@.str.1 = [7 x i8] c"input2\00"
@.str.2 = [7 x i8] c"output\00"
@.str.3 = [9 x i8] c"negative\00"
@.str.4 = [5 x i8] c"zero\00"
@.str.5 = [9 x i8] c"pozitive\00"
@.str.6 = [69 x i8] c"if input1 is negative and input2 is negative then output is negative\00"
@.str.7 = [65 x i8] c"if input1 is negative and input2 is zero then output is negative\00"
@.str.8 = [65 x i8] c"if input1 is negative and input2 is pozitive then output is zero\00"
@.str.9 = [65 x i8] c"if input1 is zero and input2 is negative then output is negative\00"
@.str.10 = [57 x i8] c"if input1 is zero and input2 is zero then output is zero\00"
@.str.11 = [65 x i8] c"if input1 is zero and input2 is pozitive then output is pozitive\00"
@.str.12 = [65 x i8] c"if input1 is pozitive and input2 is negative then output is zero\00"
@.str.13 = [65 x i8] c"if input1 is pozitive and input2 is zero then output is pozitive\00"
@.str.14 = [69 x i8] c"if input1 is pozitive and input2 is pozitive then output is pozitive\00"
@.str.15 = [30 x i8] c"\0ACalculated outputs:\0A x1\\x2 |\00"
@.str.16 = [10 x i8] c" %+1.2f |\00"
@str = [82 x i8] c"\0A--------------------------------------------------------------------------------\00"
@str.20 = [81 x i8] c"--------------------------------------------------------------------------------\00"
define void @fzz_test3() {
%1 = tail call i32 @fzz_init(i32 2, i32 1)
%2 = tail call i32 @fzz_initInputFcns(i32 0, i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%3 = tail call i32 @fzz_initInputFcns(i32 1, i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
%4 = tail call i32 @fzz_initOutputFcns(i32 0, i32 3, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
%5 = tail call i32 @fzz_setInputFcn(i32 0, i32 0, double -2.000000e+00, double -1.000000e+00, double 0.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%6 = tail call i32 @fzz_setInputFcn(i32 1, i32 0, double -1.000000e+00, double 0.000000e+00, double 1.000000e+00, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%7 = tail call i32 @fzz_setInputFcn(i32 2, i32 0, double 0.000000e+00, double 1.000000e+00, double 2.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0))
%8 = tail call i32 @fzz_setInputFcn(i32 0, i32 1, double -2.000000e+00, double -1.000000e+00, double 0.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%9 = tail call i32 @fzz_setInputFcn(i32 1, i32 1, double -1.000000e+00, double 0.000000e+00, double 1.000000e+00, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%10 = tail call i32 @fzz_setInputFcn(i32 2, i32 1, double 0.000000e+00, double 1.000000e+00, double 2.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0))
%11 = tail call i32 @fzz_setOutputFcn(i32 0, i32 0, double -2.000000e+00, double -1.000000e+00, double 0.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%12 = tail call i32 @fzz_setOutputFcn(i32 1, i32 0, double -1.000000e+00, double 0.000000e+00, double 1.000000e+00, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0))
%13 = tail call i32 @fzz_setOutputFcn(i32 2, i32 0, double 0.000000e+00, double 1.000000e+00, double 2.000000e+00, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0))
%14 = tail call i32 @fzz_addRule(i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.6, i64 0, i64 0))
%15 = tail call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.7, i64 0, i64 0))
%16 = tail call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.8, i64 0, i64 0))
%17 = tail call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.9, i64 0, i64 0))
%18 = tail call i32 @fzz_addRule(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.10, i64 0, i64 0))
%19 = tail call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.11, i64 0, i64 0))
%20 = tail call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.12, i64 0, i64 0))
%21 = tail call i32 @fzz_addRule(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.13, i64 0, i64 0))
%22 = tail call i32 @fzz_addRule(i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.14, i64 0, i64 0))
%23 = tail call i32 (...) @fzz_printSystem()
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @.str.15, i64 0, i64 0))
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double -1.000000e+00)
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double -7.500000e-01)
%27 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double -5.000000e-01)
%28 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double -2.500000e-01)
%29 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double 0.000000e+00)
%30 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double 2.500000e-01)
%31 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double 5.000000e-01)
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double 7.500000e-01)
%33 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double 1.000000e+00)
%34 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([82 x i8], [82 x i8]* @str, i64 0, i64 0))
br label %35
35: ; preds = %0, %35
%36 = phi double [ -1.000000e+00, %0 ], [ %84, %35 ]
%37 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %36)
%38 = tail call i32 @fzz_setInput(i32 0, double %36)
%39 = tail call i32 @fzz_setInput(i32 1, double -1.000000e+00)
%40 = tail call i32 (...) @fzz_calculateOutput()
%41 = tail call double @fzz_getOutput(i32 0)
%42 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %41)
%43 = tail call i32 @fzz_setInput(i32 0, double %36)
%44 = tail call i32 @fzz_setInput(i32 1, double -7.500000e-01)
%45 = tail call i32 (...) @fzz_calculateOutput()
%46 = tail call double @fzz_getOutput(i32 0)
%47 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %46)
%48 = tail call i32 @fzz_setInput(i32 0, double %36)
%49 = tail call i32 @fzz_setInput(i32 1, double -5.000000e-01)
%50 = tail call i32 (...) @fzz_calculateOutput()
%51 = tail call double @fzz_getOutput(i32 0)
%52 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %51)
%53 = tail call i32 @fzz_setInput(i32 0, double %36)
%54 = tail call i32 @fzz_setInput(i32 1, double -2.500000e-01)
%55 = tail call i32 (...) @fzz_calculateOutput()
%56 = tail call double @fzz_getOutput(i32 0)
%57 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %56)
%58 = tail call i32 @fzz_setInput(i32 0, double %36)
%59 = tail call i32 @fzz_setInput(i32 1, double 0.000000e+00)
%60 = tail call i32 (...) @fzz_calculateOutput()
%61 = tail call double @fzz_getOutput(i32 0)
%62 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %61)
%63 = tail call i32 @fzz_setInput(i32 0, double %36)
%64 = tail call i32 @fzz_setInput(i32 1, double 2.500000e-01)
%65 = tail call i32 (...) @fzz_calculateOutput()
%66 = tail call double @fzz_getOutput(i32 0)
%67 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %66)
%68 = tail call i32 @fzz_setInput(i32 0, double %36)
%69 = tail call i32 @fzz_setInput(i32 1, double 5.000000e-01)
%70 = tail call i32 (...) @fzz_calculateOutput()
%71 = tail call double @fzz_getOutput(i32 0)
%72 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %71)
%73 = tail call i32 @fzz_setInput(i32 0, double %36)
%74 = tail call i32 @fzz_setInput(i32 1, double 7.500000e-01)
%75 = tail call i32 (...) @fzz_calculateOutput()
%76 = tail call double @fzz_getOutput(i32 0)
%77 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %76)
%78 = tail call i32 @fzz_setInput(i32 0, double %36)
%79 = tail call i32 @fzz_setInput(i32 1, double 1.000000e+00)
%80 = tail call i32 (...) @fzz_calculateOutput()
%81 = tail call double @fzz_getOutput(i32 0)
%82 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), double %81)
%83 = tail call i32 @putchar(i32 10)
%84 = fadd double %36, 2.500000e-01
%85 = fcmp olt double %84, 1.100000e+00
br i1 %85, label %35, label %86
86: ; preds = %35
%87 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.20, i64 0, i64 0))
%88 = tail call i32 (...) @fzz_deinit()
ret void
}