#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*/ addstr(char *);
int /*<<< orphan*/ endwin();
int /*<<< orphan*/ initscr();
int /*<<< orphan*/ move(float, float);
int /*<<< orphan*/ pow(float, int);
int /*<<< orphan*/ refresh();
int /*<<< orphan*/ sleep(int);
scalar_t__ sqrt(int /*<<< orphan*/);
void drawThis(float e1, float ye1, float e2, float ye2) {
  float x1 = e1, y1 = ye1, x2 = e2, y2 = ye2;
  initscr();
  int i;
  float step;
  float yDiff = y2 - y1, xDiff = x2 - x1;
  if (yDiff > xDiff) {
    if ((xDiff) != 0) {
      if (sqrt(pow(yDiff, 2)) > sqrt(pow(xDiff, 2))) {
        step = (xDiff) / (yDiff);
      } else {
        step = (yDiff) / (xDiff);
      }
    } else {
      step = 0;
    }
  } else {
    if ((yDiff) != 0) {
      if (sqrt(pow(yDiff, 2)) > sqrt(pow(xDiff, 2))) {
        step = (xDiff) / (yDiff);
      } else {
        step = (yDiff) / (xDiff);
      }
    } else {
      step = 0;
    }
  }
  if (sqrt(pow(yDiff, 2)) > sqrt(pow(xDiff, 2))) {
    if (y1 > y2) {
      for (i = 0; i >= (yDiff); i--) {
        move(y1 + i, x1 + (step * i));
        addstr("o");
      }
    } else {
      for (i = 0; i <= (yDiff); i++) {
        move(y1 + i, x1 + (step * i));
        addstr("o");
      }
    }
  } else {
    if (x1 > x2) {
      for (i = 0; i >= (xDiff); i--) {
        move(y1 + (step * i), x1 + i);
        addstr("o");
      }
    } else {
      for (i = 0; i <= (xDiff); i++) {
        move(y1 + (step * i), x1 + i);
        addstr("o");
      }
    }
  }
  refresh();
  sleep(1);
  endwin();
}


x86 assembly (clang, -O0):
<drawThis>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm3,-0x10(%rbp)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
mov    $0x0,%al
call   1030 <initscr@plt>
movss  -0x20(%rbp),%xmm0
subss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x1c(%rbp),%xmm0
subss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x2c(%rbp),%xmm0
ucomiss -0x30(%rbp),%xmm0
jbe    1289 <drawThis+0x109>
movss  -0x30(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    1214 <drawThis+0x94>
jp     1214 <drawThis+0x94>
jmp    127c <drawThis+0xfc>
movss  -0x2c(%rbp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
mov    %rax,-0x38(%rbp)
movss  -0x30(%rbp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
mov    %rax,%rcx
mov    -0x38(%rbp),%rax
cmp    %rcx,%rax
jle    1268 <drawThis+0xe8>
movss  -0x30(%rbp),%xmm0
divss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    1277 <drawThis+0xf7>
movss  -0x2c(%rbp),%xmm0
divss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    1284 <drawThis+0x104>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    131a <drawThis+0x19a>
movss  -0x2c(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    12a5 <drawThis+0x125>
jp     12a5 <drawThis+0x125>
jmp    130d <drawThis+0x18d>
movss  -0x2c(%rbp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
mov    %rax,-0x40(%rbp)
movss  -0x30(%rbp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
mov    %rax,%rcx
mov    -0x40(%rbp),%rax
cmp    %rcx,%rax
jle    12f9 <drawThis+0x179>
movss  -0x30(%rbp),%xmm0
divss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    1308 <drawThis+0x188>
movss  -0x2c(%rbp),%xmm0
divss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    1315 <drawThis+0x195>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    131a <drawThis+0x19a>
movss  -0x2c(%rbp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
mov    %rax,-0x48(%rbp)
movss  -0x30(%rbp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
mov    %rax,%rcx
mov    -0x48(%rbp),%rax
cmp    %rcx,%rax
jle    1430 <drawThis+0x2b0>
movss  -0x18(%rbp),%xmm0
ucomiss -0x20(%rbp),%xmm0
jbe    13c8 <drawThis+0x248>
movl   $0x0,-0x24(%rbp)
cvtsi2ssl -0x24(%rbp),%xmm0
ucomiss -0x2c(%rbp),%xmm0
jb     13c3 <drawThis+0x243>
movss  -0x18(%rbp),%xmm0
cvtsi2ssl -0x24(%rbp),%xmm1
addss  %xmm1,%xmm0
movss  -0x14(%rbp),%xmm2
movss  -0x28(%rbp),%xmm1
cvtsi2ssl -0x24(%rbp),%xmm3
mulss  %xmm3,%xmm1
addss  %xmm2,%xmm1
call   10a0 <move@plt>
lea    0xc50(%rip),%rdi
call   1080 <addstr@plt>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1370 <drawThis+0x1f0>
jmp    142b <drawThis+0x2ab>
movl   $0x0,-0x24(%rbp)
cvtsi2ssl -0x24(%rbp),%xmm1
movss  -0x2c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     1426 <drawThis+0x2a6>
movss  -0x18(%rbp),%xmm0
cvtsi2ssl -0x24(%rbp),%xmm1
addss  %xmm1,%xmm0
movss  -0x14(%rbp),%xmm2
movss  -0x28(%rbp),%xmm1
cvtsi2ssl -0x24(%rbp),%xmm3
mulss  %xmm3,%xmm1
addss  %xmm2,%xmm1
call   10a0 <move@plt>
lea    0xbed(%rip),%rdi
call   1080 <addstr@plt>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    13cf <drawThis+0x24f>
jmp    142b <drawThis+0x2ab>
jmp    1506 <drawThis+0x386>
movss  -0x14(%rbp),%xmm0
ucomiss -0x1c(%rbp),%xmm0
jbe    149e <drawThis+0x31e>
movl   $0x0,-0x24(%rbp)
cvtsi2ssl -0x24(%rbp),%xmm0
ucomiss -0x30(%rbp),%xmm0
jb     1499 <drawThis+0x319>
movss  -0x18(%rbp),%xmm1
movss  -0x28(%rbp),%xmm0
cvtsi2ssl -0x24(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x14(%rbp),%xmm1
cvtsi2ssl -0x24(%rbp),%xmm2
addss  %xmm2,%xmm1
call   10a0 <move@plt>
lea    0xb7a(%rip),%rdi
call   1080 <addstr@plt>
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1446 <drawThis+0x2c6>
jmp    1501 <drawThis+0x381>
movl   $0x0,-0x24(%rbp)
cvtsi2ssl -0x24(%rbp),%xmm1
movss  -0x30(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     14fc <drawThis+0x37c>
movss  -0x18(%rbp),%xmm1
movss  -0x28(%rbp),%xmm0
cvtsi2ssl -0x24(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  -0x14(%rbp),%xmm1
cvtsi2ssl -0x24(%rbp),%xmm2
addss  %xmm2,%xmm1
call   10a0 <move@plt>
lea    0xb17(%rip),%rdi
call   1080 <addstr@plt>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    14a5 <drawThis+0x325>
jmp    1501 <drawThis+0x381>
jmp    1506 <drawThis+0x386>
mov    $0x0,%al
call   1040 <refresh@plt>
mov    $0x1,%edi
call   1090 <sleep@plt>
mov    $0x0,%al
call   1050 <endwin@plt>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<drawThis>:
push   %rbp
push   %rbx
sub    $0x28,%rsp
movss  %xmm3,0x24(%rsp)
movss  %xmm2,0x20(%rsp)
movss  %xmm1,0x14(%rsp)
movss  %xmm0,0x10(%rsp)
xor    %eax,%eax
call   1030 <initscr@plt>
movss  0x10(%rsp),%xmm1
movss  0x14(%rsp),%xmm2
movss  0x24(%rsp),%xmm0
subss  %xmm2,%xmm0
movss  0x20(%rsp),%xmm3
subss  %xmm1,%xmm3
ucomiss %xmm3,%xmm0
movss  %xmm0,0x18(%rsp)
movss  %xmm3,0xc(%rsp)
xorps  %xmm1,%xmm1
jbe    11e2 <drawThis+0x62>
ucomiss %xmm1,%xmm3
jne    11e9 <drawThis+0x69>
jp     11e9 <drawThis+0x69>
jmp    123a <drawThis+0xba>
ucomiss %xmm1,%xmm0
jne    11e9 <drawThis+0x69>
jnp    123a <drawThis+0xba>
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
mov    %rax,%rbx
movss  0xc(%rsp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
cmp    %rax,%rbx
jle    122b <drawThis+0xab>
movss  0xc(%rsp),%xmm1
movss  0x18(%rsp),%xmm0
divss  %xmm0,%xmm1
jmp    123a <drawThis+0xba>
movss  0x18(%rsp),%xmm0
movaps %xmm0,%xmm1
divss  0xc(%rsp),%xmm1
movss  %xmm1,0x1c(%rsp)
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
mov    %rax,%rbx
movss  0xc(%rsp),%xmm0
mov    $0x2,%edi
call   1060 <pow@plt>
mov    %eax,%edi
call   1070 <sqrt@plt>
cmp    %rax,%rbx
jle    12f1 <drawThis+0x171>
movss  0x14(%rsp),%xmm0
ucomiss 0x24(%rsp),%xmm0
jbe    1371 <drawThis+0x1f1>
xorps  %xmm0,%xmm0
ucomiss 0x18(%rsp),%xmm0
movss  0x14(%rsp),%xmm2
movss  0x10(%rsp),%xmm3
jb     1450 <drawThis+0x2d0>
mov    $0xffffffff,%ebp
lea    0xd55(%rip),%rbx
nopl   0x0(%rax,%rax,1)
movss  0x1c(%rsp),%xmm1
mulss  %xmm0,%xmm1
addss  %xmm2,%xmm0
addss  %xmm3,%xmm1
call   10a0 <move@plt>
mov    %rbx,%rdi
call   1080 <addstr@plt>
movss  0x10(%rsp),%xmm3
movss  0x14(%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
add    $0xffffffff,%ebp
ucomiss 0x18(%rsp),%xmm0
jae    12b0 <drawThis+0x130>
jmp    1450 <drawThis+0x2d0>
movss  0x10(%rsp),%xmm0
ucomiss 0x20(%rsp),%xmm0
jbe    13e2 <drawThis+0x262>
xorps  %xmm1,%xmm1
ucomiss 0xc(%rsp),%xmm1
movss  0x14(%rsp),%xmm2
movss  0x10(%rsp),%xmm3
jb     1450 <drawThis+0x2d0>
mov    $0xffffffff,%ebp
lea    0xcd8(%rip),%rbx
nopl   0x0(%rax,%rax,1)
movss  0x1c(%rsp),%xmm0
mulss  %xmm1,%xmm0
addss  %xmm2,%xmm0
addss  %xmm3,%xmm1
call   10a0 <move@plt>
mov    %rbx,%rdi
call   1080 <addstr@plt>
movss  0x10(%rsp),%xmm3
movss  0x14(%rsp),%xmm2
xorps  %xmm1,%xmm1
cvtsi2ss %ebp,%xmm1
add    $0xffffffff,%ebp
ucomiss 0xc(%rsp),%xmm1
jae    1330 <drawThis+0x1b0>
jmp    1450 <drawThis+0x2d0>
xorps  %xmm0,%xmm0
movss  0x18(%rsp),%xmm1
ucomiss %xmm0,%xmm1
movss  0x14(%rsp),%xmm2
movss  0x10(%rsp),%xmm3
jb     1450 <drawThis+0x2d0>
mov    $0x1,%ebp
lea    0xc65(%rip),%rbx
nopl   0x0(%rax,%rax,1)
movss  0x1c(%rsp),%xmm1
mulss  %xmm0,%xmm1
addss  %xmm2,%xmm0
addss  %xmm3,%xmm1
call   10a0 <move@plt>
mov    %rbx,%rdi
call   1080 <addstr@plt>
movss  0x10(%rsp),%xmm3
movss  0x14(%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
add    $0x1,%ebp
movss  0x18(%rsp),%xmm1
ucomiss %xmm0,%xmm1
jae    13a0 <drawThis+0x220>
jmp    1450 <drawThis+0x2d0>
xorps  %xmm1,%xmm1
movss  0xc(%rsp),%xmm0
ucomiss %xmm1,%xmm0
movss  0x14(%rsp),%xmm2
movss  0x10(%rsp),%xmm3
jb     1450 <drawThis+0x2d0>
mov    $0x1,%ebp
lea    0xbf8(%rip),%rbx
nopl   0x0(%rax,%rax,1)
movss  0x1c(%rsp),%xmm0
mulss  %xmm1,%xmm0
addss  %xmm2,%xmm0
addss  %xmm3,%xmm1
call   10a0 <move@plt>
mov    %rbx,%rdi
call   1080 <addstr@plt>
movss  0x10(%rsp),%xmm3
movss  0x14(%rsp),%xmm2
xorps  %xmm1,%xmm1
cvtsi2ss %ebp,%xmm1
add    $0x1,%ebp
movss  0xc(%rsp),%xmm0
ucomiss %xmm1,%xmm0
jae    1410 <drawThis+0x290>
xor    %eax,%eax
call   1040 <refresh@plt>
mov    $0x1,%edi
call   1090 <sleep@plt>
xor    %eax,%eax
add    $0x28,%rsp
pop    %rbx
pop    %rbp
jmp    1050 <endwin@plt>

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

LLVM IR (-O2):
@.str = [2 x i8] c"o\00"
define void @drawThis(float %0, float %1, float %2, float %3) {
%5 = tail call i32 (...) @initscr()
%6 = fsub float %3, %1
%7 = fsub float %2, %0
%8 = fcmp ogt float %6, %7
br i1 %8, label %9, label %21
9: ; preds = %4
%10 = fcmp une float %7, 0.000000e+00
br i1 %10, label %11, label %33
11: ; preds = %9
%12 = tail call i32 @pow(float %6, i32 2)
%13 = tail call i64 @sqrt(i32 %12)
%14 = tail call i32 @pow(float %7, i32 2)
%15 = tail call i64 @sqrt(i32 %14)
%16 = icmp sgt i64 %13, %15
br i1 %16, label %17, label %19
17: ; preds = %11
%18 = fdiv float %7, %6
br label %33
19: ; preds = %11
%20 = fdiv float %6, %7
br label %33
21: ; preds = %4
%22 = fcmp une float %6, 0.000000e+00
br i1 %22, label %23, label %33
23: ; preds = %21
%24 = tail call i32 @pow(float %6, i32 2)
%25 = tail call i64 @sqrt(i32 %24)
%26 = tail call i32 @pow(float %7, i32 2)
%27 = tail call i64 @sqrt(i32 %26)
%28 = icmp sgt i64 %25, %27
br i1 %28, label %29, label %31
29: ; preds = %23
%30 = fdiv float %7, %6
br label %33
31: ; preds = %23
%32 = fdiv float %6, %7
br label %33
33: ; preds = %21, %9, %31, %29, %19, %17
%34 = phi float [ %18, %17 ], [ %20, %19 ], [ %30, %29 ], [ %32, %31 ], [ 0.000000e+00, %9 ], [ 0.000000e+00, %21 ]
%35 = tail call i32 @pow(float %6, i32 2)
%36 = tail call i64 @sqrt(i32 %35)
%37 = tail call i32 @pow(float %7, i32 2)
%38 = tail call i64 @sqrt(i32 %37)
%39 = icmp sgt i64 %36, %38
br i1 %39, label %40, label %66
40: ; preds = %33
%41 = fcmp ogt float %1, %3
br i1 %41, label %44, label %42
42: ; preds = %40
%43 = fcmp ult float %6, 0.000000e+00
br i1 %43, label %92, label %56
44: ; preds = %40
%45 = fcmp ugt float %6, 0.000000e+00
br i1 %45, label %92, label %46
46: ; preds = %44, %46
%47 = phi float [ %54, %46 ], [ 0.000000e+00, %44 ]
%48 = phi i32 [ %53, %46 ], [ 0, %44 ]
%49 = fadd float %47, %1
%50 = tail call float @llvm.fmuladd.f32(float %34, float %47, float %0)
%51 = tail call i32 @move(float %49, float %50)
%52 = tail call i32 @addstr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%53 = add nsw i32 %48, -1
%54 = sitofp i32 %53 to float
%55 = fcmp ugt float %6, %54
br i1 %55, label %92, label %46
56: ; preds = %42, %56
%57 = phi float [ %64, %56 ], [ 0.000000e+00, %42 ]
%58 = phi i32 [ %63, %56 ], [ 0, %42 ]
%59 = fadd float %57, %1
%60 = tail call float @llvm.fmuladd.f32(float %34, float %57, float %0)
%61 = tail call i32 @move(float %59, float %60)
%62 = tail call i32 @addstr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%63 = add nuw nsw i32 %58, 1
%64 = sitofp i32 %63 to float
%65 = fcmp ult float %6, %64
br i1 %65, label %92, label %56
66: ; preds = %33
%67 = fcmp ogt float %0, %2
br i1 %67, label %70, label %68
68: ; preds = %66
%69 = fcmp ult float %7, 0.000000e+00
br i1 %69, label %92, label %82
70: ; preds = %66
%71 = fcmp ugt float %7, 0.000000e+00
br i1 %71, label %92, label %72
72: ; preds = %70, %72
%73 = phi float [ %80, %72 ], [ 0.000000e+00, %70 ]
%74 = phi i32 [ %79, %72 ], [ 0, %70 ]
%75 = tail call float @llvm.fmuladd.f32(float %34, float %73, float %1)
%76 = fadd float %73, %0
%77 = tail call i32 @move(float %75, float %76)
%78 = tail call i32 @addstr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%79 = add nsw i32 %74, -1
%80 = sitofp i32 %79 to float
%81 = fcmp ugt float %7, %80
br i1 %81, label %92, label %72
82: ; preds = %68, %82
%83 = phi float [ %90, %82 ], [ 0.000000e+00, %68 ]
%84 = phi i32 [ %89, %82 ], [ 0, %68 ]
%85 = tail call float @llvm.fmuladd.f32(float %34, float %83, float %1)
%86 = fadd float %83, %0
%87 = tail call i32 @move(float %85, float %86)
%88 = tail call i32 @addstr(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%89 = add nuw nsw i32 %84, 1
%90 = sitofp i32 %89 to float
%91 = fcmp ult float %7, %90
br i1 %91, label %92, label %82
92: ; preds = %82, %72, %56, %46, %68, %70, %42, %44
%93 = tail call i32 (...) @refresh()
%94 = tail call i32 @sleep(i32 1)
%95 = tail call i32 (...) @endwin()
ret void
}