#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*/ assert(int);
int /*<<< orphan*/ plotLine(int, int, int, int);
int /*<<< orphan*/ setPixel(int, int);
void plotQuadBezierSeg(int x0, int y0, int x1, int y1, int x2, int y2) {
  int sx = x2 - x1, sy = y2 - y1;
  long xx = x0 - x1, yy = y0 - y1, xy;
  double dx, dy, err, cur = xx * sy - yy * sx;
  assert(xx * sx <= 0 && yy * sy <= 0);
  if (sx * (long)sx + sy * (long)sy > xx * xx + yy * yy) {
    x2 = x0;
    x0 = sx + x1;
    y2 = y0;
    y0 = sy + y1;
    cur = -cur;
  }
  if (cur != 0) {
    xx += sx;
    xx *= sx = x0 < x2 ? 1 : -1;
    yy += sy;
    yy *= sy = y0 < y2 ? 1 : -1;
    xy = 2 * xx * yy;
    xx *= xx;
    yy *= yy;
    if (cur * sx * sy < 0) {
      xx = -xx;
      yy = -yy;
      xy = -xy;
      cur = -cur;
    }
    dx = 4.0 * sy * cur * (x1 - x0) + xx - xy;
    dy = 4.0 * sx * cur * (y0 - y1) + yy - xy;
    xx += xx;
    yy += yy;
    err = dx + dy + xy;
    do {
      setPixel(x0, y0);
      if (x0 == x2 && y0 == y2)
        return;
      y1 = 2 * err < dx;
      if (2 * err > dy) {
        x0 += sx;
        dx -= xy;
        err += dy += yy;
      }
      if (y1) {
        y0 += sy;
        dy -= xy;
        err += dx += xx;
      }
    } while (dy < 0 && dx > 0);
  }
  plotLine(x0, y0, x2, y2);
}


x86 assembly (clang, -O0):
<plotQuadBezierSeg>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
mov    -0x14(%rbp),%eax
sub    -0xc(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x10(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x4(%rbp),%eax
sub    -0xc(%rbp),%eax
cltq
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%eax
sub    -0x10(%rbp),%eax
cltq
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   %rcx,%rax
mov    -0x30(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
imul   %rdx,%rcx
sub    %rcx,%rax
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rcx
movslq -0x1c(%rbp),%rax
imul   %rax,%rcx
xor    %eax,%eax
cmp    $0x0,%rcx
mov    %al,-0x59(%rbp)
jg     11cc <plotQuadBezierSeg+0x9c>
mov    -0x30(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   %rcx,%rax
cmp    $0x0,%rax
setle  %al
mov    %al,-0x59(%rbp)
mov    -0x59(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1040 <assert@plt>
movslq -0x1c(%rbp),%rax
movslq -0x1c(%rbp),%rcx
imul   %rcx,%rax
movslq -0x20(%rbp),%rcx
movslq -0x20(%rbp),%rdx
imul   %rdx,%rcx
add    %rcx,%rax
mov    -0x28(%rbp),%rcx
imul   -0x28(%rbp),%rcx
mov    -0x30(%rbp),%rdx
imul   -0x30(%rbp),%rdx
add    %rdx,%rcx
cmp    %rcx,%rax
jle    1251 <plotQuadBezierSeg+0x121>
mov    -0x4(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x8(%rbp)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    126e <plotQuadBezierSeg+0x13e>
jp     126e <plotQuadBezierSeg+0x13e>
jmp    1518 <plotQuadBezierSeg+0x3e8>
movslq -0x1c(%rbp),%rax
add    -0x28(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x4(%rbp),%edx
mov    -0x14(%rbp),%esi
mov    $0xffffffff,%eax
mov    $0x1,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x1c(%rbp)
cltq
imul   -0x28(%rbp),%rax
mov    %rax,-0x28(%rbp)
movslq -0x20(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%edx
mov    -0x18(%rbp),%esi
mov    $0xffffffff,%eax
mov    $0x1,%ecx
cmp    %esi,%edx
cmovl  %ecx,%eax
mov    %eax,-0x20(%rbp)
cltq
imul   -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
shl    $0x1,%rax
imul   -0x30(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
imul   -0x28(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
imul   -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
movsd  -0x58(%rbp),%xmm1
cvtsi2sdl -0x1c(%rbp),%xmm0
mulsd  %xmm0,%xmm1
cvtsi2sdl -0x20(%rbp),%xmm0
mulsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    135a <plotQuadBezierSeg+0x22a>
xor    %eax,%eax
sub    -0x28(%rbp),%rax
mov    %rax,-0x28(%rbp)
xor    %eax,%eax
sub    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
xor    %eax,%eax
sub    -0x38(%rbp),%rax
mov    %rax,-0x38(%rbp)
movsd  -0x58(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvtsi2sdl -0x20(%rbp),%xmm1
movsd  0xc99(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
mov    -0xc(%rbp),%eax
sub    -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm2
cvtsi2sdq -0x28(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdq -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
cvtsi2sdl -0x1c(%rbp),%xmm1
movsd  0xc5c(%rip),%xmm0
mulsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
mov    -0x8(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm2
cvtsi2sdq -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsi2sdq -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
add    -0x28(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
cvtsi2sdq -0x38(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
call   1030 <setPixel@plt>
mov    -0x4(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    142d <plotQuadBezierSeg+0x2fd>
mov    -0x8(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    142d <plotQuadBezierSeg+0x2fd>
jmp    1529 <plotQuadBezierSeg+0x3f9>
movsd  0xbd3(%rip),%xmm1
mulsd  -0x50(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x10(%rbp)
movsd  0xbb2(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    149d <plotQuadBezierSeg+0x36d>
mov    -0x1c(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4(%rbp)
cvtsi2sdq -0x38(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
cvtsi2sdq -0x30(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
cmpl   $0x0,-0x10(%rbp)
je     14de <plotQuadBezierSeg+0x3ae>
mov    -0x20(%rbp),%eax
add    -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
cvtsi2sdq -0x38(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
cvtsi2sdq -0x28(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    14e3 <plotQuadBezierSeg+0x3b3>
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomisd -0x48(%rbp),%xmm0
mov    %al,-0x5a(%rbp)
jbe    1508 <plotQuadBezierSeg+0x3d8>
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
seta   %al
mov    %al,-0x5a(%rbp)
mov    -0x5a(%rbp),%al
test   $0x1,%al
jne    1405 <plotQuadBezierSeg+0x2d5>
jmp    1518 <plotQuadBezierSeg+0x3e8>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
mov    -0x14(%rbp),%edx
mov    -0x18(%rbp),%ecx
call   1050 <plotLine@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<plotQuadBezierSeg>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %esi,%r15d
mov    %edi,%ebx
mov    %r8d,0x8(%rsp)
mov    %r8d,%eax
sub    %edx,%eax
mov    %r9d,0x10(%rsp)
mov    %r9d,%esi
sub    %ecx,%esi
mov    %edx,0x18(%rsp)
sub    %edx,%edi
movslq %edi,%r12
mov    %r15d,%edx
mov    %ecx,(%rsp)
sub    %ecx,%edx
movslq %edx,%rbp
movslq %esi,%r13
mov    %r13,%rcx
imul   %r12,%rcx
movslq %eax,%r14
mov    %r14,%rax
imul   %rbp,%rax
sub    %rax,%rcx
cvtsi2sd %rcx,%xmm0
movapd %xmm0,0x20(%rsp)
mov    %r14,%rax
imul   %r12,%rax
test   %rax,%rax
setle  %al
mov    %r13,%rcx
imul   %rbp,%rcx
test   %rcx,%rcx
setle  %cl
and    %al,%cl
movzbl %cl,%edi
call   1040 <assert@plt>
mov    %rbp,%rdi
mov    %r14,%rax
imul   %r14,%rax
mov    %r13,%rcx
imul   %r13,%rcx
add    %rax,%rcx
mov    %r12,%rax
imul   %r12,%rax
mov    %rbp,%rdx
imul   %rbp,%rdx
add    %rax,%rdx
cmp    %rdx,%rcx
jbe    11f5 <plotQuadBezierSeg+0xc5>
mov    %ebx,%esi
movapd 0x20(%rsp),%xmm4
xorpd  0xe15(%rip),%xmm4
mov    0x10(%rsp),%ebp
mov    0x8(%rsp),%ebx
jmp    1207 <plotQuadBezierSeg+0xd7>
mov    %r15d,%ebp
mov    0x8(%rsp),%esi
mov    0x10(%rsp),%r15d
movapd 0x20(%rsp),%xmm4
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm4
jne    1217 <plotQuadBezierSeg+0xe7>
jnp    13dc <plotQuadBezierSeg+0x2ac>
add    %r12,%r14
xor    %eax,%eax
cmp    %esi,%ebx
setl   %al
lea    (%rax,%rax,1),%edx
add    $0xffffffff,%edx
add    %rax,%rax
add    $0xffffffffffffffff,%rax
imul   %r14,%rax
add    %rdi,%r13
xor    %ecx,%ecx
cmp    %r15d,%ebp
setl   %cl
lea    (%rcx,%rcx,1),%r12d
add    $0xffffffff,%r12d
add    %rcx,%rcx
add    $0xffffffffffffffff,%rcx
imul   %r13,%rcx
mov    %edx,%r13d
mov    %rax,%rdx
imul   %rcx,%rdx
add    %rdx,%rdx
imul   %rax,%rax
imul   %rcx,%rcx
xorps  %xmm0,%xmm0
cvtsi2sd %r13d,%xmm0
movapd %xmm4,%xmm3
cvtsi2sd %r12d,%xmm2
mulsd  %xmm0,%xmm3
mulsd  %xmm2,%xmm3
ucomisd %xmm3,%xmm1
jbe    1295 <plotQuadBezierSeg+0x165>
neg    %rax
neg    %rcx
neg    %rdx
xorpd  0xd6b(%rip),%xmm4
movsd  0xd73(%rip),%xmm1
mulsd  %xmm1,%xmm2
mulsd  %xmm4,%xmm2
mov    0x18(%rsp),%edi
sub    %ebx,%edi
xorps  %xmm3,%xmm3
cvtsi2sd %edi,%xmm3
cvtsi2sd %rax,%xmm5
mulsd  %xmm2,%xmm3
addsd  %xmm3,%xmm5
xorps  %xmm2,%xmm2
cvtsi2sd %rdx,%xmm2
subsd  %xmm2,%xmm5
mulsd  %xmm1,%xmm0
mulsd  %xmm4,%xmm0
mov    %ebp,%edx
sub    (%rsp),%edx
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
xorps  %xmm3,%xmm3
cvtsi2sd %rcx,%xmm3
mulsd  %xmm0,%xmm1
addsd  %xmm1,%xmm3
subsd  %xmm2,%xmm3
add    %rax,%rax
add    %rcx,%rcx
movapd %xmm5,%xmm4
addsd  %xmm3,%xmm4
xorps  %xmm0,%xmm0
cvtsi2sd %rcx,%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  %xmm2,(%rsp)
addsd  %xmm2,%xmm4
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,0x30(%rsp)
mov    %esi,%r14d
nopl   0x0(%rax)
movsd  %xmm4,0x8(%rsp)
movsd  %xmm3,0x10(%rsp)
movsd  %xmm5,0x20(%rsp)
mov    %ebx,%edi
mov    %ebp,%esi
call   1030 <setPixel@plt>
cmp    %r15d,%ebp
jne    1359 <plotQuadBezierSeg+0x229>
cmp    %r14d,%ebx
je     13fc <plotQuadBezierSeg+0x2cc>
movsd  0x8(%rsp),%xmm4
movapd %xmm4,%xmm1
addsd  %xmm4,%xmm1
movsd  0x10(%rsp),%xmm3
ucomisd %xmm3,%xmm1
jbe    13a0 <plotQuadBezierSeg+0x270>
add    %r13d,%ebx
movsd  0x20(%rsp),%xmm2
movapd %xmm2,%xmm0
subsd  (%rsp),%xmm0
addsd  0x18(%rsp),%xmm3
addsd  %xmm3,%xmm4
ucomisd %xmm1,%xmm2
ja     13b0 <plotQuadBezierSeg+0x280>
jmp    13c2 <plotQuadBezierSeg+0x292>
nopw   0x0(%rax,%rax,1)
movsd  0x20(%rsp),%xmm2
movapd %xmm2,%xmm0
ucomisd %xmm1,%xmm2
jbe    13c2 <plotQuadBezierSeg+0x292>
add    %r12d,%ebp
subsd  (%rsp),%xmm3
addsd  0x30(%rsp),%xmm0
addsd  %xmm0,%xmm4
movapd %xmm0,%xmm5
xorpd  %xmm0,%xmm0
ucomisd %xmm3,%xmm0
jbe    13df <plotQuadBezierSeg+0x2af>
ucomisd %xmm0,%xmm5
ja     1330 <plotQuadBezierSeg+0x200>
jmp    13df <plotQuadBezierSeg+0x2af>
mov    %esi,%r14d
mov    %ebx,%edi
mov    %ebp,%esi
mov    %r14d,%edx
mov    %r15d,%ecx
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <plotLine@plt>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @plotQuadBezierSeg(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i64
%16 = alloca i64
%17 = alloca i64
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
store i32 %0, i32* %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store i32 %3, i32* %10
store i32 %4, i32* %11
store i32 %5, i32* %12
%22 = load i32, i32* %11
%23 = load i32, i32* %9
%24 = sub nsw i32 %22, %23
store i32 %24, i32* %13
%25 = load i32, i32* %12
%26 = load i32, i32* %10
%27 = sub nsw i32 %25, %26
store i32 %27, i32* %14
%28 = load i32, i32* %7
%29 = load i32, i32* %9
%30 = sub nsw i32 %28, %29
%31 = sext i32 %30 to i64
store i64 %31, i64* %15
%32 = load i32, i32* %8
%33 = load i32, i32* %10
%34 = sub nsw i32 %32, %33
%35 = sext i32 %34 to i64
store i64 %35, i64* %16
%36 = load i64, i64* %15
%37 = load i32, i32* %14
%38 = sext i32 %37 to i64
%39 = mul nsw i64 %36, %38
%40 = load i64, i64* %16
%41 = load i32, i32* %13
%42 = sext i32 %41 to i64
%43 = mul nsw i64 %40, %42
%44 = sub nsw i64 %39, %43
%45 = sitofp i64 %44 to double
store double %45, double* %21
%46 = load i64, i64* %15
%47 = load i32, i32* %13
%48 = sext i32 %47 to i64
%49 = mul nsw i64 %46, %48
%50 = icmp sle i64 %49, 0
br i1 %50, label %51, label %57
51: ; preds = %6
%52 = load i64, i64* %16
%53 = load i32, i32* %14
%54 = sext i32 %53 to i64
%55 = mul nsw i64 %52, %54
%56 = icmp sle i64 %55, 0
br label %57
57: ; preds = %51, %6
%58 = phi i1 [ false, %6 ], [ %56, %51 ]
%59 = zext i1 %58 to i32
%60 = call i32 @assert(i32 %59)
%61 = load i32, i32* %13
%62 = sext i32 %61 to i64
%63 = load i32, i32* %13
%64 = sext i32 %63 to i64
%65 = mul nsw i64 %62, %64
%66 = load i32, i32* %14
%67 = sext i32 %66 to i64
%68 = load i32, i32* %14
%69 = sext i32 %68 to i64
%70 = mul nsw i64 %67, %69
%71 = add nsw i64 %65, %70
%72 = load i64, i64* %15
%73 = load i64, i64* %15
%74 = mul nsw i64 %72, %73
%75 = load i64, i64* %16
%76 = load i64, i64* %16
%77 = mul nsw i64 %75, %76
%78 = add nsw i64 %74, %77
%79 = icmp sgt i64 %71, %78
br i1 %79, label %80, label %91
80: ; preds = %57
%81 = load i32, i32* %7
store i32 %81, i32* %11
%82 = load i32, i32* %13
%83 = load i32, i32* %9
%84 = add nsw i32 %82, %83
store i32 %84, i32* %7
%85 = load i32, i32* %8
store i32 %85, i32* %12
%86 = load i32, i32* %14
%87 = load i32, i32* %10
%88 = add nsw i32 %86, %87
store i32 %88, i32* %8
%89 = load double, double* %21
%90 = fneg double %89
store double %90, double* %21
br label %91
91: ; preds = %80, %57
%92 = load double, double* %21
%93 = fcmp une double %92, 0.000000e+00
br i1 %93, label %94, label %252
94: ; preds = %91
%95 = load i32, i32* %13
%96 = sext i32 %95 to i64
%97 = load i64, i64* %15
%98 = add nsw i64 %97, %96
store i64 %98, i64* %15
%99 = load i32, i32* %7
%100 = load i32, i32* %11
%101 = icmp slt i32 %99, %100
%102 = zext i1 %101 to i64
%103 = select i1 %101, i32 1, i32 -1
store i32 %103, i32* %13
%104 = sext i32 %103 to i64
%105 = load i64, i64* %15
%106 = mul nsw i64 %105, %104
store i64 %106, i64* %15
%107 = load i32, i32* %14
%108 = sext i32 %107 to i64
%109 = load i64, i64* %16
%110 = add nsw i64 %109, %108
store i64 %110, i64* %16
%111 = load i32, i32* %8
%112 = load i32, i32* %12
%113 = icmp slt i32 %111, %112
%114 = zext i1 %113 to i64
%115 = select i1 %113, i32 1, i32 -1
store i32 %115, i32* %14
%116 = sext i32 %115 to i64
%117 = load i64, i64* %16
%118 = mul nsw i64 %117, %116
store i64 %118, i64* %16
%119 = load i64, i64* %15
%120 = mul nsw i64 2, %119
%121 = load i64, i64* %16
%122 = mul nsw i64 %120, %121
store i64 %122, i64* %17
%123 = load i64, i64* %15
%124 = load i64, i64* %15
%125 = mul nsw i64 %124, %123
store i64 %125, i64* %15
%126 = load i64, i64* %16
%127 = load i64, i64* %16
%128 = mul nsw i64 %127, %126
store i64 %128, i64* %16
%129 = load double, double* %21
%130 = load i32, i32* %13
%131 = sitofp i32 %130 to double
%132 = fmul double %129, %131
%133 = load i32, i32* %14
%134 = sitofp i32 %133 to double
%135 = fmul double %132, %134
%136 = fcmp olt double %135, 0.000000e+00
br i1 %136, label %137, label %146
137: ; preds = %94
%138 = load i64, i64* %15
%139 = sub nsw i64 0, %138
store i64 %139, i64* %15
%140 = load i64, i64* %16
%141 = sub nsw i64 0, %140
store i64 %141, i64* %16
%142 = load i64, i64* %17
%143 = sub nsw i64 0, %142
store i64 %143, i64* %17
%144 = load double, double* %21
%145 = fneg double %144
store double %145, double* %21
br label %146
146: ; preds = %137, %94
%147 = load i32, i32* %14
%148 = sitofp i32 %147 to double
%149 = fmul double 4.000000e+00, %148
%150 = load double, double* %21
%151 = fmul double %149, %150
%152 = load i32, i32* %9
%153 = load i32, i32* %7
%154 = sub nsw i32 %152, %153
%155 = sitofp i32 %154 to double
%156 = load i64, i64* %15
%157 = sitofp i64 %156 to double
%158 = call double @llvm.fmuladd.f64(double %151, double %155, double %157)
%159 = load i64, i64* %17
%160 = sitofp i64 %159 to double
%161 = fsub double %158, %160
store double %161, double* %18
%162 = load i32, i32* %13
%163 = sitofp i32 %162 to double
%164 = fmul double 4.000000e+00, %163
%165 = load double, double* %21
%166 = fmul double %164, %165
%167 = load i32, i32* %8
%168 = load i32, i32* %10
%169 = sub nsw i32 %167, %168
%170 = sitofp i32 %169 to double
%171 = load i64, i64* %16
%172 = sitofp i64 %171 to double
%173 = call double @llvm.fmuladd.f64(double %166, double %170, double %172)
%174 = load i64, i64* %17
%175 = sitofp i64 %174 to double
%176 = fsub double %173, %175
store double %176, double* %19
%177 = load i64, i64* %15
%178 = load i64, i64* %15
%179 = add nsw i64 %178, %177
store i64 %179, i64* %15
%180 = load i64, i64* %16
%181 = load i64, i64* %16
%182 = add nsw i64 %181, %180
store i64 %182, i64* %16
%183 = load double, double* %18
%184 = load double, double* %19
%185 = fadd double %183, %184
%186 = load i64, i64* %17
%187 = sitofp i64 %186 to double
%188 = fadd double %185, %187
store double %188, double* %20
br label %189
189: ; preds = %249, %146
%190 = load i32, i32* %7
%191 = load i32, i32* %8
%192 = call i32 @setPixel(i32 %190, i32 %191)
%193 = load i32, i32* %7
%194 = load i32, i32* %11
%195 = icmp eq i32 %193, %194
br i1 %195, label %196, label %201
196: ; preds = %189
%197 = load i32, i32* %8
%198 = load i32, i32* %12
%199 = icmp eq i32 %197, %198
br i1 %199, label %200, label %201
200: ; preds = %196
br label %258
201: ; preds = %196, %189
%202 = load double, double* %20
%203 = fmul double 2.000000e+00, %202
%204 = load double, double* %18
%205 = fcmp olt double %203, %204
%206 = zext i1 %205 to i32
store i32 %206, i32* %10
%207 = load double, double* %20
%208 = fmul double 2.000000e+00, %207
%209 = load double, double* %19
%210 = fcmp ogt double %208, %209
br i1 %210, label %211, label %225
211: ; preds = %201
%212 = load i32, i32* %13
%213 = load i32, i32* %7
%214 = add nsw i32 %213, %212
store i32 %214, i32* %7
%215 = load i64, i64* %17
%216 = sitofp i64 %215 to double
%217 = load double, double* %18
%218 = fsub double %217, %216
store double %218, double* %18
%219 = load i64, i64* %16
%220 = sitofp i64 %219 to double
%221 = load double, double* %19
%222 = fadd double %221, %220
store double %222, double* %19
%223 = load double, double* %20
%224 = fadd double %223, %222
store double %224, double* %20
br label %225
225: ; preds = %211, %201
%226 = load i32, i32* %10
%227 = icmp ne i32 %226, 0
br i1 %227, label %228, label %242
228: ; preds = %225
%229 = load i32, i32* %14
%230 = load i32, i32* %8
%231 = add nsw i32 %230, %229
store i32 %231, i32* %8
%232 = load i64, i64* %17
%233 = sitofp i64 %232 to double
%234 = load double, double* %19
%235 = fsub double %234, %233
store double %235, double* %19
%236 = load i64, i64* %15
%237 = sitofp i64 %236 to double
%238 = load double, double* %18
%239 = fadd double %238, %237
store double %239, double* %18
%240 = load double, double* %20
%241 = fadd double %240, %239
store double %241, double* %20
br label %242
242: ; preds = %228, %225
br label %243
243: ; preds = %242
%244 = load double, double* %19
%245 = fcmp olt double %244, 0.000000e+00
br i1 %245, label %246, label %249
246: ; preds = %243
%247 = load double, double* %18
%248 = fcmp ogt double %247, 0.000000e+00
br label %249
249: ; preds = %246, %243
%250 = phi i1 [ false, %243 ], [ %248, %246 ]
br i1 %250, label %189, label %251
251: ; preds = %249
br label %252
252: ; preds = %251, %91
%253 = load i32, i32* %7
%254 = load i32, i32* %8
%255 = load i32, i32* %11
%256 = load i32, i32* %12
%257 = call i32 @plotLine(i32 %253, i32 %254, i32 %255, i32 %256)
br label %258
258: ; preds = %252, %200
ret void
}

LLVM IR (-O2):
define void @plotQuadBezierSeg(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = sub nsw i32 %4, %2
%8 = sub nsw i32 %5, %3
%9 = sub nsw i32 %0, %2
%10 = sext i32 %9 to i64
%11 = sub nsw i32 %1, %3
%12 = sext i32 %11 to i64
%13 = sext i32 %8 to i64
%14 = mul nsw i64 %13, %10
%15 = sext i32 %7 to i64
%16 = mul nsw i64 %15, %12
%17 = sub nsw i64 %14, %16
%18 = sitofp i64 %17 to double
%19 = mul nsw i64 %15, %10
%20 = icmp slt i64 %19, 1
%21 = mul nsw i64 %13, %12
%22 = icmp slt i64 %21, 1
%23 = select i1 %20, i1 %22, i1 false
%24 = zext i1 %23 to i32
%25 = tail call i32 @assert(i32 %24)
%26 = mul nsw i64 %15, %15
%27 = mul nsw i64 %13, %13
%28 = add nuw nsw i64 %27, %26
%29 = mul nsw i64 %10, %10
%30 = mul nsw i64 %12, %12
%31 = add nuw nsw i64 %30, %29
%32 = icmp ugt i64 %28, %31
br i1 %32, label %33, label %35
33: ; preds = %6
%34 = fneg double %18
br label %35
35: ; preds = %33, %6
%36 = phi i32 [ %5, %33 ], [ %1, %6 ]
%37 = phi i32 [ %4, %33 ], [ %0, %6 ]
%38 = phi i32 [ %0, %33 ], [ %4, %6 ]
%39 = phi i32 [ %1, %33 ], [ %5, %6 ]
%40 = phi double [ %34, %33 ], [ %18, %6 ]
%41 = fcmp une double %40, 0.000000e+00
br i1 %41, label %42, label %130
42: ; preds = %35
%43 = add nsw i64 %15, %10
%44 = icmp slt i32 %37, %38
%45 = select i1 %44, i32 1, i32 -1
%46 = sext i32 %45 to i64
%47 = mul nsw i64 %43, %46
%48 = add nsw i64 %13, %12
%49 = icmp slt i32 %36, %39
%50 = select i1 %49, i32 1, i32 -1
%51 = sext i32 %50 to i64
%52 = mul nsw i64 %48, %51
%53 = shl nsw i64 %47, 1
%54 = mul nsw i64 %53, %52
%55 = mul nsw i64 %47, %47
%56 = mul nsw i64 %52, %52
%57 = sitofp i32 %45 to double
%58 = fmul double %40, %57
%59 = sitofp i32 %50 to double
%60 = fmul double %58, %59
%61 = fcmp olt double %60, 0.000000e+00
br i1 %61, label %62, label %67
62: ; preds = %42
%63 = sub nsw i64 0, %55
%64 = sub nsw i64 0, %56
%65 = sub nsw i64 0, %54
%66 = fneg double %40
br label %67
67: ; preds = %62, %42
%68 = phi i64 [ %63, %62 ], [ %55, %42 ]
%69 = phi i64 [ %64, %62 ], [ %56, %42 ]
%70 = phi i64 [ %65, %62 ], [ %54, %42 ]
%71 = phi double [ %66, %62 ], [ %40, %42 ]
%72 = fmul double %59, 4.000000e+00
%73 = fmul double %72, %71
%74 = sub nsw i32 %2, %37
%75 = sitofp i32 %74 to double
%76 = sitofp i64 %68 to double
%77 = tail call double @llvm.fmuladd.f64(double %73, double %75, double %76)
%78 = sitofp i64 %70 to double
%79 = fsub double %77, %78
%80 = fmul double %57, 4.000000e+00
%81 = fmul double %80, %71
%82 = sub nsw i32 %36, %3
%83 = sitofp i32 %82 to double
%84 = sitofp i64 %69 to double
%85 = tail call double @llvm.fmuladd.f64(double %81, double %83, double %84)
%86 = fsub double %85, %78
%87 = shl nsw i64 %68, 1
%88 = shl nsw i64 %69, 1
%89 = fadd double %79, %86
%90 = fadd double %89, %78
%91 = sitofp i64 %88 to double
%92 = sitofp i64 %87 to double
br label %93
93: ; preds = %122, %67
%94 = phi i32 [ %36, %67 ], [ %123, %122 ]
%95 = phi i32 [ %37, %67 ], [ %113, %122 ]
%96 = phi double [ %79, %67 ], [ %124, %122 ]
%97 = phi double [ %86, %67 ], [ %125, %122 ]
%98 = phi double [ %90, %67 ], [ %126, %122 ]
%99 = tail call i32 @setPixel(i32 %95, i32 %94)
%100 = icmp eq i32 %95, %38
%101 = icmp eq i32 %94, %39
%102 = and i1 %101, %100
br i1 %102, label %134, label %103
103: ; preds = %93
%104 = fmul double %98, 2.000000e+00
%105 = fcmp olt double %104, %96
%106 = fcmp ogt double %104, %97
br i1 %106, label %107, label %112
107: ; preds = %103
%108 = add nsw i32 %95, %45
%109 = fsub double %96, %78
%110 = fadd double %97, %91
%111 = fadd double %98, %110
br label %112
112: ; preds = %107, %103
%113 = phi i32 [ %108, %107 ], [ %95, %103 ]
%114 = phi double [ %109, %107 ], [ %96, %103 ]
%115 = phi double [ %110, %107 ], [ %97, %103 ]
%116 = phi double [ %111, %107 ], [ %98, %103 ]
br i1 %105, label %117, label %122
117: ; preds = %112
%118 = add nsw i32 %94, %50
%119 = fsub double %115, %78
%120 = fadd double %114, %92
%121 = fadd double %120, %116
br label %122
122: ; preds = %112, %117
%123 = phi i32 [ %118, %117 ], [ %94, %112 ]
%124 = phi double [ %120, %117 ], [ %114, %112 ]
%125 = phi double [ %119, %117 ], [ %115, %112 ]
%126 = phi double [ %121, %117 ], [ %116, %112 ]
%127 = fcmp olt double %125, 0.000000e+00
%128 = fcmp ogt double %124, 0.000000e+00
%129 = select i1 %127, i1 %128, i1 false
br i1 %129, label %93, label %130
130: ; preds = %122, %35
%131 = phi i32 [ %36, %35 ], [ %123, %122 ]
%132 = phi i32 [ %37, %35 ], [ %113, %122 ]
%133 = tail call i32 @plotLine(i32 %132, i32 %131, i32 %38, i32 %39)
br label %134
134: ; preds = %93, %130
ret void
}