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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double between(double, int, int);
int /*<<< orphan*/ paintPoint(char *, int, int /*<<< orphan*/);
double readDbl(char *);
int /*<<< orphan*/ sleep_ms(int);
int /*<<< orphan*/ writeDbl(char *, double);
void loop() {
  double dt = 5.0;
  double px = readDbl("robot.px");
  double py = readDbl("robot.py");
  double vx = readDbl("robot.vx");
  double vy = readDbl("robot.vy");
  paintPoint("destine", +4, 0);
  while (px <= +4) {
    double ax = 2 * ((+4 - px) / (dt * dt) - vx / dt);
    ax = between(ax, -1, +1);
    double ay = 2 * ((0.0 - py) / (dt * dt) - vy / dt);
    ay = between(ay, -1, +1);
    writeDbl("ax", ax);
    writeDbl("ay", ay);
    sleep_ms(150);
    px = readDbl("robot.px");
    py = readDbl("robot.py");
    vx = readDbl("robot.vx");
    vy = readDbl("robot.vy");
  }
  paintPoint("destine", -4, 0);
  while (px >= -4) {
    double ax = 2 * ((-4 - px) / (dt * dt) - vx / dt);
    ax = between(ax, -1, +1);
    double ay = 2 * ((0.0 - py) / (dt * dt) - vy / dt);
    ay = between(ay, -1, +1);
    writeDbl("ax", ax);
    writeDbl("ay", ay);
    sleep_ms(150);
    px = readDbl("robot.px");
    py = readDbl("robot.py");
    vx = readDbl("robot.vx");
    vy = readDbl("robot.vy");
  }
}


x86 assembly (clang, -O0):
<loop>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movsd  0xea0(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
lea    0xeb4(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x10(%rbp)
lea    0xeac(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x18(%rbp)
lea    0xea4(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x20(%rbp)
lea    0xe9c(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x28(%rbp)
lea    0xe94(%rip),%rdi
mov    $0x4,%esi
xor    %edx,%edx
call   1030 <paintPoint@plt>
movsd  0xe44(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     12e5 <loop+0x195>
movsd  0xe31(%rip),%xmm1
subsd  -0x10(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  -0x20(%rbp),%xmm0
divsd  -0x8(%rbp),%xmm0
subsd  %xmm0,%xmm1
movsd  0xe18(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
mov    $0xffffffff,%edi
mov    $0x1,%esi
call   1070 <between@plt>
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm1,%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  -0x28(%rbp),%xmm0
divsd  -0x8(%rbp),%xmm0
subsd  %xmm0,%xmm1
movsd  0xdca(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    $0xffffffff,%edi
mov    $0x1,%esi
call   1070 <between@plt>
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
lea    0xdd0(%rip),%rdi
call   1040 <writeDbl@plt>
movsd  -0x38(%rbp),%xmm0
lea    0xdc2(%rip),%rdi
call   1040 <writeDbl@plt>
mov    $0x96,%edi
call   1050 <sleep_ms@plt>
lea    0xd7d(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x10(%rbp)
lea    0xd75(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x18(%rbp)
lea    0xd6d(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x20(%rbp)
lea    0xd65(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x28(%rbp)
jmp    11bc <loop+0x6c>
lea    0xd58(%rip),%rdi
mov    $0xfffffffc,%esi
xor    %edx,%edx
call   1030 <paintPoint@plt>
movsd  -0x10(%rbp),%xmm0
movsd  0xd0b(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1425 <loop+0x2d5>
movsd  0xcf9(%rip),%xmm1
subsd  -0x10(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  -0x20(%rbp),%xmm0
divsd  -0x8(%rbp),%xmm0
subsd  %xmm0,%xmm1
movsd  0xcd8(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    $0xffffffff,%edi
mov    $0x1,%esi
call   1070 <between@plt>
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm1,%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm0
mulsd  -0x8(%rbp),%xmm0
divsd  %xmm0,%xmm1
movsd  -0x28(%rbp),%xmm0
divsd  -0x8(%rbp),%xmm0
subsd  %xmm0,%xmm1
movsd  0xc8a(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
mov    $0xffffffff,%edi
mov    $0x1,%esi
call   1070 <between@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
lea    0xc90(%rip),%rdi
call   1040 <writeDbl@plt>
movsd  -0x48(%rbp),%xmm0
lea    0xc82(%rip),%rdi
call   1040 <writeDbl@plt>
mov    $0x96,%edi
call   1050 <sleep_ms@plt>
lea    0xc3d(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x10(%rbp)
lea    0xc35(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x18(%rbp)
lea    0xc2d(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x20(%rbp)
lea    0xc25(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,-0x28(%rbp)
jmp    12f8 <loop+0x1a8>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<loop>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
lea    0xebb(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,(%rsp)
lea    0xeb3(%rip),%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,0x8(%rsp)
lea    0xeaa(%rip),%rdi
call   1060 <readDbl@plt>
movaps %xmm0,0x10(%rsp)
lea    0xea2(%rip),%rdi
call   1060 <readDbl@plt>
movaps %xmm0,0x20(%rsp)
lea    0xe9a(%rip),%rdi
mov    $0x4,%esi
xor    %edx,%edx
call   1030 <paintPoint@plt>
movsd  (%rsp),%xmm1
movsd  0xe3d(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     12f0 <loop+0x1a0>
lea    0xe78(%rip),%r14
lea    0xe74(%rip),%r15
lea    0xe3e(%rip),%r12
lea    0xe40(%rip),%r13
lea    0xe42(%rip),%rbx
lea    0xe44(%rip),%rbp
nopw   0x0(%rax,%rax,1)
movsd  0xdf8(%rip),%xmm0
subsd  %xmm1,%xmm0
unpcklpd 0x10(%rsp),%xmm0
movapd 0xdf6(%rip),%xmm1
divpd  %xmm1,%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
subsd  %xmm1,%xmm0
addsd  %xmm0,%xmm0
mov    $0xffffffff,%edi
mov    $0x1,%esi
call   1070 <between@plt>
movsd  %xmm0,(%rsp)
xorpd  %xmm0,%xmm0
subsd  0x8(%rsp),%xmm0
unpcklpd 0x20(%rsp),%xmm0
divpd  0xdb6(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
subsd  %xmm1,%xmm0
addsd  %xmm0,%xmm0
mov    $0xffffffff,%edi
mov    $0x1,%esi
call   1070 <between@plt>
movsd  %xmm0,0x8(%rsp)
mov    %r14,%rdi
movsd  (%rsp),%xmm0
call   1040 <writeDbl@plt>
mov    %r15,%rdi
movsd  0x8(%rsp),%xmm0
call   1040 <writeDbl@plt>
mov    $0x96,%edi
call   1050 <sleep_ms@plt>
mov    %r12,%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,(%rsp)
mov    %r13,%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,0x8(%rsp)
mov    %rbx,%rdi
call   1060 <readDbl@plt>
movaps %xmm0,0x10(%rsp)
mov    %rbp,%rdi
call   1060 <readDbl@plt>
movsd  (%rsp),%xmm1
movaps %xmm0,0x20(%rsp)
movsd  0xd1a(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    1200 <loop+0xb0>
movsd  %xmm1,(%rsp)
lea    0xd48(%rip),%rdi
mov    $0xfffffffc,%esi
xor    %edx,%edx
call   1030 <paintPoint@plt>
movsd  (%rsp),%xmm1
ucomisd 0xcf3(%rip),%xmm1
jb     143e <loop+0x2ee>
lea    0xd2a(%rip),%r14
lea    0xd26(%rip),%r15
lea    0xcf0(%rip),%r12
lea    0xcf2(%rip),%r13
lea    0xcf4(%rip),%rbp
lea    0xcf6(%rip),%rbx
cs nopw 0x0(%rax,%rax,1)
nop
movsd  0xcb0(%rip),%xmm0
subsd  %xmm1,%xmm0
unpcklpd 0x10(%rsp),%xmm0
movapd 0xca6(%rip),%xmm1
divpd  %xmm1,%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
subsd  %xmm1,%xmm0
addsd  %xmm0,%xmm0
mov    $0xffffffff,%edi
mov    $0x1,%esi
call   1070 <between@plt>
movsd  %xmm0,(%rsp)
xorpd  %xmm0,%xmm0
subsd  0x8(%rsp),%xmm0
unpcklpd 0x20(%rsp),%xmm0
divpd  0xc66(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
subsd  %xmm1,%xmm0
addsd  %xmm0,%xmm0
mov    $0xffffffff,%edi
mov    $0x1,%esi
call   1070 <between@plt>
movsd  %xmm0,0x8(%rsp)
mov    %r14,%rdi
movsd  (%rsp),%xmm0
call   1040 <writeDbl@plt>
mov    %r15,%rdi
movsd  0x8(%rsp),%xmm0
call   1040 <writeDbl@plt>
mov    $0x96,%edi
call   1050 <sleep_ms@plt>
mov    %r12,%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,(%rsp)
mov    %r13,%rdi
call   1060 <readDbl@plt>
movsd  %xmm0,0x8(%rsp)
mov    %rbp,%rdi
call   1060 <readDbl@plt>
movapd %xmm0,0x10(%rsp)
mov    %rbx,%rdi
call   1060 <readDbl@plt>
movsd  (%rsp),%xmm1
movapd %xmm0,0x20(%rsp)
ucomisd 0xbd0(%rip),%xmm1
jae    1350 <loop+0x200>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [9 x i8] c"robot.px\00"
@.str.1 = [9 x i8] c"robot.py\00"
@.str.2 = [9 x i8] c"robot.vx\00"
@.str.3 = [9 x i8] c"robot.vy\00"
@.str.4 = [8 x i8] c"destine\00"
@.str.5 = [3 x i8] c"ax\00"
@.str.6 = [3 x i8] c"ay\00"
define void @loop() {
%1 = alloca double
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
store double 5.000000e+00, double* %1
%10 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
store double %10, double* %2
%11 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
store double %11, double* %3
%12 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0))
store double %12, double* %4
%13 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
store double %13, double* %5
%14 = call i32 @paintPoint(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0), i32 4, i32 0)
br label %15
15: ; preds = %18, %0
%16 = load double, double* %2
%17 = fcmp ole double %16, 4.000000e+00
br i1 %17, label %18, label %54
18: ; preds = %15
%19 = load double, double* %2
%20 = fsub double 4.000000e+00, %19
%21 = load double, double* %1
%22 = load double, double* %1
%23 = fmul double %21, %22
%24 = fdiv double %20, %23
%25 = load double, double* %4
%26 = load double, double* %1
%27 = fdiv double %25, %26
%28 = fsub double %24, %27
%29 = fmul double 2.000000e+00, %28
store double %29, double* %6
%30 = load double, double* %6
%31 = call double @between(double %30, i32 -1, i32 1)
store double %31, double* %6
%32 = load double, double* %3
%33 = fsub double 0.000000e+00, %32
%34 = load double, double* %1
%35 = load double, double* %1
%36 = fmul double %34, %35
%37 = fdiv double %33, %36
%38 = load double, double* %5
%39 = load double, double* %1
%40 = fdiv double %38, %39
%41 = fsub double %37, %40
%42 = fmul double 2.000000e+00, %41
store double %42, double* %7
%43 = load double, double* %7
%44 = call double @between(double %43, i32 -1, i32 1)
store double %44, double* %7
%45 = load double, double* %6
%46 = call i32 @writeDbl(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), double %45)
%47 = load double, double* %7
%48 = call i32 @writeDbl(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), double %47)
%49 = call i32 @sleep_ms(i32 150)
%50 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
store double %50, double* %2
%51 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
store double %51, double* %3
%52 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0))
store double %52, double* %4
%53 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
store double %53, double* %5
br label %15
54: ; preds = %15
%55 = call i32 @paintPoint(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0), i32 -4, i32 0)
br label %56
56: ; preds = %59, %54
%57 = load double, double* %2
%58 = fcmp oge double %57, -4.000000e+00
br i1 %58, label %59, label %95
59: ; preds = %56
%60 = load double, double* %2
%61 = fsub double -4.000000e+00, %60
%62 = load double, double* %1
%63 = load double, double* %1
%64 = fmul double %62, %63
%65 = fdiv double %61, %64
%66 = load double, double* %4
%67 = load double, double* %1
%68 = fdiv double %66, %67
%69 = fsub double %65, %68
%70 = fmul double 2.000000e+00, %69
store double %70, double* %8
%71 = load double, double* %8
%72 = call double @between(double %71, i32 -1, i32 1)
store double %72, double* %8
%73 = load double, double* %3
%74 = fsub double 0.000000e+00, %73
%75 = load double, double* %1
%76 = load double, double* %1
%77 = fmul double %75, %76
%78 = fdiv double %74, %77
%79 = load double, double* %5
%80 = load double, double* %1
%81 = fdiv double %79, %80
%82 = fsub double %78, %81
%83 = fmul double 2.000000e+00, %82
store double %83, double* %9
%84 = load double, double* %9
%85 = call double @between(double %84, i32 -1, i32 1)
store double %85, double* %9
%86 = load double, double* %8
%87 = call i32 @writeDbl(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), double %86)
%88 = load double, double* %9
%89 = call i32 @writeDbl(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), double %88)
%90 = call i32 @sleep_ms(i32 150)
%91 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
store double %91, double* %2
%92 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
store double %92, double* %3
%93 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0))
store double %93, double* %4
%94 = call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
store double %94, double* %5
br label %56
95: ; preds = %56
ret void
}

LLVM IR (-O2):
@.str = [9 x i8] c"robot.px\00"
@.str.1 = [9 x i8] c"robot.py\00"
@.str.2 = [9 x i8] c"robot.vx\00"
@.str.3 = [9 x i8] c"robot.vy\00"
@.str.4 = [8 x i8] c"destine\00"
@.str.5 = [3 x i8] c"ax\00"
@.str.6 = [3 x i8] c"ay\00"
define void @loop() {
%1 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%2 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0))
%4 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%5 = tail call i32 @paintPoint(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0), i32 4, i32 0)
%6 = fcmp ugt double %1, 4.000000e+00
br i1 %6, label %38, label %7
7: ; preds = %0, %7
%8 = phi double [ %33, %7 ], [ %1, %0 ]
%9 = phi double [ %34, %7 ], [ %2, %0 ]
%10 = phi double [ %35, %7 ], [ %3, %0 ]
%11 = phi double [ %36, %7 ], [ %4, %0 ]
%12 = fsub double 4.000000e+00, %8
%13 = insertelement <2 x double> poison, double %12, i64 0
%14 = insertelement <2 x double> %13, double %10, i64 1
%15 = fdiv <2 x double> %14, <double 2.500000e+01, double 5.000000e+00>
%16 = shufflevector <2 x double> %15, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%17 = fsub <2 x double> %15, %16
%18 = extractelement <2 x double> %17, i64 0
%19 = fmul double %18, 2.000000e+00
%20 = tail call double @between(double %19, i32 -1, i32 1)
%21 = fsub double 0.000000e+00, %9
%22 = insertelement <2 x double> poison, double %21, i64 0
%23 = insertelement <2 x double> %22, double %11, i64 1
%24 = fdiv <2 x double> %23, <double 2.500000e+01, double 5.000000e+00>
%25 = shufflevector <2 x double> %24, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%26 = fsub <2 x double> %24, %25
%27 = extractelement <2 x double> %26, i64 0
%28 = fmul double %27, 2.000000e+00
%29 = tail call double @between(double %28, i32 -1, i32 1)
%30 = tail call i32 @writeDbl(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), double %20)
%31 = tail call i32 @writeDbl(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), double %29)
%32 = tail call i32 @sleep_ms(i32 150)
%33 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%34 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%35 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0))
%36 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%37 = fcmp ugt double %33, 4.000000e+00
br i1 %37, label %38, label %7
38: ; preds = %7, %0
%39 = phi double [ %4, %0 ], [ %36, %7 ]
%40 = phi double [ %3, %0 ], [ %35, %7 ]
%41 = phi double [ %2, %0 ], [ %34, %7 ]
%42 = phi double [ %1, %0 ], [ %33, %7 ]
%43 = tail call i32 @paintPoint(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0), i32 -4, i32 0)
%44 = fcmp ult double %42, -4.000000e+00
br i1 %44, label %76, label %45
45: ; preds = %38, %45
%46 = phi double [ %71, %45 ], [ %42, %38 ]
%47 = phi double [ %72, %45 ], [ %41, %38 ]
%48 = phi double [ %73, %45 ], [ %40, %38 ]
%49 = phi double [ %74, %45 ], [ %39, %38 ]
%50 = fsub double -4.000000e+00, %46
%51 = insertelement <2 x double> poison, double %50, i64 0
%52 = insertelement <2 x double> %51, double %48, i64 1
%53 = fdiv <2 x double> %52, <double 2.500000e+01, double 5.000000e+00>
%54 = shufflevector <2 x double> %53, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%55 = fsub <2 x double> %53, %54
%56 = extractelement <2 x double> %55, i64 0
%57 = fmul double %56, 2.000000e+00
%58 = tail call double @between(double %57, i32 -1, i32 1)
%59 = fsub double 0.000000e+00, %47
%60 = insertelement <2 x double> poison, double %59, i64 0
%61 = insertelement <2 x double> %60, double %49, i64 1
%62 = fdiv <2 x double> %61, <double 2.500000e+01, double 5.000000e+00>
%63 = shufflevector <2 x double> %62, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%64 = fsub <2 x double> %62, %63
%65 = extractelement <2 x double> %64, i64 0
%66 = fmul double %65, 2.000000e+00
%67 = tail call double @between(double %66, i32 -1, i32 1)
%68 = tail call i32 @writeDbl(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), double %58)
%69 = tail call i32 @writeDbl(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), double %67)
%70 = tail call i32 @sleep_ms(i32 150)
%71 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%72 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%73 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0))
%74 = tail call double @readDbl(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0))
%75 = fcmp ult double %71, -4.000000e+00
br i1 %75, label %76, label %45
76: ; preds = %45, %38
ret void
}