#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*/ writeFastHLine(short, short, short, short);
void fillTriangle(short x0, short y0, short x1, short y1, short x2, short y2,
                  short color) {
  short a, b, y, last, dx01, dy01, dx02, dy02, dx12, dy12;
  int sa, sb;
  if (y0 > y1) {
    {
      short temp;
      temp = y0;
      y0 = y1;
      y1 = temp;
    };
    {
      short temp;
      temp = x0;
      x0 = x1;
      x1 = temp;
    };
  }
  if (y1 > y2) {
    {
      short temp;
      temp = y2;
      y2 = y1;
      y1 = temp;
    };
    {
      short temp;
      temp = x2;
      x2 = x1;
      x1 = temp;
    };
  }
  if (y0 > y1) {
    {
      short temp;
      temp = y0;
      y0 = y1;
      y1 = temp;
    };
    {
      short temp;
      temp = x0;
      x0 = x1;
      x1 = temp;
    };
  }
  if (y0 == y2) {
    a = b = x0;
    if (x1 < a)
      a = x1;
    else if (x1 > b)
      b = x1;
    if (x2 < a)
      a = x2;
    else if (x2 > b)
      b = x2;
    writeFastHLine(a, y0, b - a + 1, color);
    return;
  }
  dx01 = x1 - x0;
  dy01 = y1 - y0;
  dx02 = x2 - x0;
  dy02 = y2 - y0;
  dx12 = x2 - x1;
  dy12 = y2 - y1;
  sa = 0;
  sb = 0;
  if (y1 == y2)
    last = y1;
  else
    last = y1 - 1;
  for (y = y0; y <= last; y++) {
    a = x0 + sa / dy01;
    b = x0 + sb / dy02;
    sa += dx01;
    sb += dx02;
    if (a > b) {
      short temp;
      temp = a;
      a = b;
      b = temp;
    };
    writeFastHLine(a, y, b - a + 1, color);
  }
  sa = dx12 * (y - y1);
  sb = dx02 * (y - y0);
  for (; y <= y2; y++) {
    a = x1 + sa / dy12;
    b = x0 + sb / dy02;
    sa += dx12;
    sb += dx02;
    if (a > b) {
      short temp;
      temp = a;
      a = b;
      b = temp;
    };
    writeFastHLine(a, y, b - a + 1, color);
  }
}


x86 assembly (clang, -O0):
<fillTriangle>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %r8d,-0x48(%rbp)
mov    %ecx,%eax
mov    -0x48(%rbp),%ecx
mov    %eax,-0x44(%rbp)
mov    %edx,%eax
mov    -0x44(%rbp),%edx
mov    %eax,-0x40(%rbp)
mov    %esi,%eax
mov    -0x40(%rbp),%esi
mov    %eax,-0x3c(%rbp)
mov    %edi,%r8d
mov    -0x3c(%rbp),%edi
mov    %r9w,%ax
mov    0x10(%rbp),%r9w
mov    %r8w,-0x2(%rbp)
mov    %di,-0x4(%rbp)
mov    %si,-0x6(%rbp)
mov    %dx,-0x8(%rbp)
mov    %cx,-0xa(%rbp)
mov    %ax,-0xc(%rbp)
movswl -0x4(%rbp),%eax
movswl -0x8(%rbp),%ecx
cmp    %ecx,%eax
jle    119c <fillTriangle+0x8c>
mov    -0x4(%rbp),%ax
mov    %ax,-0x2a(%rbp)
mov    -0x8(%rbp),%ax
mov    %ax,-0x4(%rbp)
mov    -0x2a(%rbp),%ax
mov    %ax,-0x8(%rbp)
mov    -0x2(%rbp),%ax
mov    %ax,-0x2c(%rbp)
mov    -0x6(%rbp),%ax
mov    %ax,-0x2(%rbp)
mov    -0x2c(%rbp),%ax
mov    %ax,-0x6(%rbp)
movswl -0x8(%rbp),%eax
movswl -0xc(%rbp),%ecx
cmp    %ecx,%eax
jle    11dc <fillTriangle+0xcc>
mov    -0xc(%rbp),%ax
mov    %ax,-0x2e(%rbp)
mov    -0x8(%rbp),%ax
mov    %ax,-0xc(%rbp)
mov    -0x2e(%rbp),%ax
mov    %ax,-0x8(%rbp)
mov    -0xa(%rbp),%ax
mov    %ax,-0x30(%rbp)
mov    -0x6(%rbp),%ax
mov    %ax,-0xa(%rbp)
mov    -0x30(%rbp),%ax
mov    %ax,-0x6(%rbp)
movswl -0x4(%rbp),%eax
movswl -0x8(%rbp),%ecx
cmp    %ecx,%eax
jle    121c <fillTriangle+0x10c>
mov    -0x4(%rbp),%ax
mov    %ax,-0x32(%rbp)
mov    -0x8(%rbp),%ax
mov    %ax,-0x4(%rbp)
mov    -0x32(%rbp),%ax
mov    %ax,-0x8(%rbp)
mov    -0x2(%rbp),%ax
mov    %ax,-0x34(%rbp)
mov    -0x6(%rbp),%ax
mov    %ax,-0x2(%rbp)
mov    -0x34(%rbp),%ax
mov    %ax,-0x6(%rbp)
movswl -0x4(%rbp),%eax
movswl -0xc(%rbp),%ecx
cmp    %ecx,%eax
jne    12d8 <fillTriangle+0x1c8>
mov    -0x2(%rbp),%ax
mov    %ax,-0x10(%rbp)
mov    %ax,-0xe(%rbp)
movswl -0x6(%rbp),%eax
movswl -0xe(%rbp),%ecx
cmp    %ecx,%eax
jge    1255 <fillTriangle+0x145>
mov    -0x6(%rbp),%ax
mov    %ax,-0xe(%rbp)
jmp    1272 <fillTriangle+0x162>
movswl -0x6(%rbp),%eax
movswl -0x10(%rbp),%ecx
cmp    %ecx,%eax
jle    126d <fillTriangle+0x15d>
mov    -0x6(%rbp),%ax
mov    %ax,-0x10(%rbp)
jmp    1272 <fillTriangle+0x162>
movswl -0xa(%rbp),%eax
movswl -0xe(%rbp),%ecx
cmp    %ecx,%eax
jge    128f <fillTriangle+0x17f>
mov    -0xa(%rbp),%ax
mov    %ax,-0xe(%rbp)
jmp    12ac <fillTriangle+0x19c>
movswl -0xa(%rbp),%eax
movswl -0x10(%rbp),%ecx
cmp    %ecx,%eax
jle    12a7 <fillTriangle+0x197>
mov    -0xa(%rbp),%ax
mov    %ax,-0x10(%rbp)
jmp    12ac <fillTriangle+0x19c>
mov    -0xe(%rbp),%dx
mov    -0x4(%rbp),%cx
movswl -0x10(%rbp),%eax
movswl -0xe(%rbp),%esi
sub    %esi,%eax
add    $0x1,%eax
movswl %dx,%edi
movswl %cx,%esi
movswl %ax,%edx
movswl 0x10(%rbp),%ecx
call   1030 <writeFastHLine@plt>
jmp    150a <fillTriangle+0x3fa>
movswl -0x6(%rbp),%eax
movswl -0x2(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0x16(%rbp)
movswl -0x8(%rbp),%eax
movswl -0x4(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0x18(%rbp)
movswl -0xa(%rbp),%eax
movswl -0x2(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0x1a(%rbp)
movswl -0xc(%rbp),%eax
movswl -0x4(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0x1c(%rbp)
movswl -0xa(%rbp),%eax
movswl -0x6(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0x1e(%rbp)
movswl -0xc(%rbp),%eax
movswl -0x8(%rbp),%ecx
sub    %ecx,%eax
mov    %ax,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movswl -0x8(%rbp),%eax
movswl -0xc(%rbp),%ecx
cmp    %ecx,%eax
jne    1357 <fillTriangle+0x247>
mov    -0x8(%rbp),%ax
mov    %ax,-0x14(%rbp)
jmp    1362 <fillTriangle+0x252>
movswl -0x8(%rbp),%eax
sub    $0x1,%eax
mov    %ax,-0x14(%rbp)
mov    -0x4(%rbp),%ax
mov    %ax,-0x12(%rbp)
movswl -0x12(%rbp),%eax
movswl -0x14(%rbp),%ecx
cmp    %ecx,%eax
jg     1426 <fillTriangle+0x316>
movswl -0x2(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x24(%rbp),%eax
movswl -0x18(%rbp),%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x50(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0xe(%rbp)
movswl -0x2(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x28(%rbp),%eax
movswl -0x1c(%rbp),%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x4c(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0x10(%rbp)
movswl -0x16(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
movswl -0x1a(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
movswl -0xe(%rbp),%eax
movswl -0x10(%rbp),%ecx
cmp    %ecx,%eax
jle    13ee <fillTriangle+0x2de>
mov    -0xe(%rbp),%ax
mov    %ax,-0x36(%rbp)
mov    -0x10(%rbp),%ax
mov    %ax,-0xe(%rbp)
mov    -0x36(%rbp),%ax
mov    %ax,-0x10(%rbp)
mov    -0xe(%rbp),%dx
mov    -0x12(%rbp),%cx
movswl -0x10(%rbp),%eax
movswl -0xe(%rbp),%esi
sub    %esi,%eax
add    $0x1,%eax
movswl %dx,%edi
movswl %cx,%esi
movswl %ax,%edx
movswl 0x10(%rbp),%ecx
call   1030 <writeFastHLine@plt>
mov    -0x12(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x12(%rbp)
jmp    136a <fillTriangle+0x25a>
movswl -0x1e(%rbp),%eax
movswl -0x12(%rbp),%ecx
movswl -0x8(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
mov    %eax,-0x24(%rbp)
movswl -0x1a(%rbp),%eax
movswl -0x12(%rbp),%ecx
movswl -0x4(%rbp),%edx
sub    %edx,%ecx
imul   %ecx,%eax
mov    %eax,-0x28(%rbp)
movswl -0x12(%rbp),%eax
movswl -0xc(%rbp),%ecx
cmp    %ecx,%eax
jg     150a <fillTriangle+0x3fa>
movswl -0x6(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x24(%rbp),%eax
movswl -0x20(%rbp),%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x58(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0xe(%rbp)
movswl -0x2(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x28(%rbp),%eax
movswl -0x1c(%rbp),%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x54(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0x10(%rbp)
movswl -0x1e(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
movswl -0x1a(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
movswl -0xe(%rbp),%eax
movswl -0x10(%rbp),%ecx
cmp    %ecx,%eax
jle    14d2 <fillTriangle+0x3c2>
mov    -0xe(%rbp),%ax
mov    %ax,-0x38(%rbp)
mov    -0x10(%rbp),%ax
mov    %ax,-0xe(%rbp)
mov    -0x38(%rbp),%ax
mov    %ax,-0x10(%rbp)
mov    -0xe(%rbp),%dx
mov    -0x12(%rbp),%cx
movswl -0x10(%rbp),%eax
movswl -0xe(%rbp),%esi
sub    %esi,%eax
add    $0x1,%eax
movswl %dx,%edi
movswl %cx,%esi
movswl %ax,%edx
movswl 0x10(%rbp),%ecx
call   1030 <writeFastHLine@plt>
mov    -0x12(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x12(%rbp)
jmp    144e <fillTriangle+0x33e>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fillTriangle>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9d,%ebp
mov    %r8d,%r15d
cmp    %cx,%si
jle    114e <fillTriangle+0x3e>
mov    %esi,%eax
mov    %edi,%ebx
cmp    %bp,%ax
jg     115b <fillTriangle+0x4b>
mov    %ebp,%r8d
mov    %r15d,%r9d
mov    %eax,%ebp
mov    %ebx,%r15d
cmp    %bp,%cx
jg     1166 <fillTriangle+0x56>
mov    %ebp,%edi
mov    %r15d,%r10d
mov    %ecx,%ebp
mov    %edx,%r15d
jmp    116b <fillTriangle+0x5b>
mov    %ecx,%eax
mov    %edx,%ebx
mov    %esi,%ecx
mov    %edi,%edx
cmp    %bp,%ax
jle    1132 <fillTriangle+0x22>
mov    %eax,%r8d
mov    %ebx,%r9d
cmp    %bp,%cx
jle    1142 <fillTriangle+0x32>
mov    %ecx,%edi
mov    %edx,%r10d
movzwl 0x60(%rsp),%r11d
cmp    %bp,%r8w
jne    11c7 <fillTriangle+0xb7>
cmp    %r15w,%r10w
mov    %r15d,%ecx
cmovg  %r10d,%ecx
cmovl  %r15d,%ecx
cmovl  %r10d,%r15d
cmp    %cx,%r9w
mov    %ecx,%edx
cmovg  %r9d,%edx
cmp    %r15w,%r9w
cmovl  %ecx,%edx
cmovl  %r9d,%r15d
sub    %r15d,%edx
add    $0x1,%edx
movswl %dx,%edx
movswl %r15w,%edi
movswl %r8w,%esi
movswl %r11w,%ecx
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <writeFastHLine@plt>
movswl %bp,%r14d
mov    %r9d,%r12d
sub    %r15d,%r12d
mov    %r8d,%edx
sub    %ebp,%edx
xor    %esi,%esi
mov    %r8d,%eax
sub    %di,%ax
setne  %sil
mov    %edi,%r13d
sub    %esi,%r13d
movswl %dx,%esi
movswl %r11w,%ecx
cmp    %r13w,%bp
mov    %r10d,0xc(%rsp)
mov    %esi,0x14(%rsp)
mov    %ecx,0x10(%rsp)
jle    1218 <fillTriangle+0x108>
movswl %r12w,%r11d
mov    %r14d,%r12d
cmp    %r8w,%bp
jle    12cd <fillTriangle+0x1bd>
jmp    134e <fillTriangle+0x23e>
mov    %ax,0xa(%rsp)
mov    %r14d,0x18(%rsp)
mov    %r9d,0x20(%rsp)
mov    %r8d,0x24(%rsp)
mov    %edi,0x1c(%rsp)
mov    %edi,%eax
sub    %ebp,%eax
mov    %r10d,%edx
sub    %r15d,%edx
cwtl
mov    %eax,0x4(%rsp)
movswl %dx,%eax
mov    %eax,(%rsp)
movswl %r12w,%r11d
xor    %r12d,%r12d
xor    %ebx,%ebx
xchg   %ax,%ax
mov    %ebx,%eax
cltd
idivl  0x4(%rsp)
mov    %eax,%edi
mov    %r12d,%eax
cltd
idiv   %esi
add    %r15d,%edi
add    %r15d,%eax
add    (%rsp),%ebx
add    %r11d,%r12d
cmp    %ax,%di
mov    %eax,%edx
cmovg  %edi,%edx
cmovle %edi,%eax
sub    %eax,%edx
add    $0x1,%edx
movswl %ax,%edi
movswl %dx,%edx
movswl %bp,%ebp
mov    %ebp,%esi
mov    %r11d,%r14d
call   1030 <writeFastHLine@plt>
mov    %r14d,%r11d
mov    0x10(%rsp),%ecx
mov    0x14(%rsp),%esi
add    $0x1,%ebp
cmp    %r13w,%bp
jle    1250 <fillTriangle+0x140>
movswl %bp,%r12d
mov    0x24(%rsp),%r8d
mov    0xc(%rsp),%r10d
mov    0x20(%rsp),%r9d
mov    0x1c(%rsp),%edi
mov    0x18(%rsp),%r14d
movzwl 0xa(%rsp),%eax
cmp    %r8w,%bp
jg     134e <fillTriangle+0x23e>
sub    %r10d,%r9d
movswl %di,%edx
movswl %r9w,%edi
mov    %r12d,%ebx
sub    %r14d,%ebx
imul   %r11d,%ebx
sub    %edx,%r12d
mov    %edi,0x4(%rsp)
imul   %edi,%r12d
cwtl
mov    %eax,(%rsp)
mov    %r12d,%eax
cltd
idivl  (%rsp)
mov    %eax,%edi
mov    %ebx,%eax
cltd
idiv   %esi
add    %r10d,%edi
add    %r15d,%eax
add    0x4(%rsp),%r12d
add    %r11d,%ebx
cmp    %ax,%di
mov    %eax,%edx
cmovg  %edi,%edx
cmovle %edi,%eax
sub    %eax,%edx
add    $0x1,%edx
movswl %ax,%edi
movswl %dx,%edx
movswl %bp,%ebp
mov    %ebp,%esi
mov    %r8d,%r14d
mov    %r11d,%r13d
call   1030 <writeFastHLine@plt>
mov    %r13d,%r11d
mov    0x10(%rsp),%ecx
mov    0x14(%rsp),%esi
mov    0xc(%rsp),%r10d
mov    %r14d,%r8d
add    $0x1,%ebp
cmp    %r8w,%bp
jle    12f0 <fillTriangle+0x1e0>
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @fillTriangle(i16 signext %0, i16 signext %1, i16 signext %2, i16 signext %3, i16 signext %4, i16 signext %5, i16 signext %6) {
%8 = alloca i16
%9 = alloca i16
%10 = alloca i16
%11 = alloca i16
%12 = alloca i16
%13 = alloca i16
%14 = alloca i16
%15 = alloca i16
%16 = alloca i16
%17 = alloca i16
%18 = alloca i16
%19 = alloca i16
%20 = alloca i16
%21 = alloca i16
%22 = alloca i16
%23 = alloca i16
%24 = alloca i16
%25 = alloca i32
%26 = alloca i32
%27 = alloca i16
%28 = alloca i16
%29 = alloca i16
%30 = alloca i16
%31 = alloca i16
%32 = alloca i16
%33 = alloca i16
%34 = alloca i16
store i16 %0, i16* %8
store i16 %1, i16* %9
store i16 %2, i16* %10
store i16 %3, i16* %11
store i16 %4, i16* %12
store i16 %5, i16* %13
store i16 %6, i16* %14
%35 = load i16, i16* %9
%36 = sext i16 %35 to i32
%37 = load i16, i16* %11
%38 = sext i16 %37 to i32
%39 = icmp sgt i32 %36, %38
br i1 %39, label %40, label %47
40: ; preds = %7
%41 = load i16, i16* %9
store i16 %41, i16* %27
%42 = load i16, i16* %11
store i16 %42, i16* %9
%43 = load i16, i16* %27
store i16 %43, i16* %11
%44 = load i16, i16* %8
store i16 %44, i16* %28
%45 = load i16, i16* %10
store i16 %45, i16* %8
%46 = load i16, i16* %28
store i16 %46, i16* %10
br label %47
47: ; preds = %40, %7
%48 = load i16, i16* %11
%49 = sext i16 %48 to i32
%50 = load i16, i16* %13
%51 = sext i16 %50 to i32
%52 = icmp sgt i32 %49, %51
br i1 %52, label %53, label %60
53: ; preds = %47
%54 = load i16, i16* %13
store i16 %54, i16* %29
%55 = load i16, i16* %11
store i16 %55, i16* %13
%56 = load i16, i16* %29
store i16 %56, i16* %11
%57 = load i16, i16* %12
store i16 %57, i16* %30
%58 = load i16, i16* %10
store i16 %58, i16* %12
%59 = load i16, i16* %30
store i16 %59, i16* %10
br label %60
60: ; preds = %53, %47
%61 = load i16, i16* %9
%62 = sext i16 %61 to i32
%63 = load i16, i16* %11
%64 = sext i16 %63 to i32
%65 = icmp sgt i32 %62, %64
br i1 %65, label %66, label %73
66: ; preds = %60
%67 = load i16, i16* %9
store i16 %67, i16* %31
%68 = load i16, i16* %11
store i16 %68, i16* %9
%69 = load i16, i16* %31
store i16 %69, i16* %11
%70 = load i16, i16* %8
store i16 %70, i16* %32
%71 = load i16, i16* %10
store i16 %71, i16* %8
%72 = load i16, i16* %32
store i16 %72, i16* %10
br label %73
73: ; preds = %66, %60
%74 = load i16, i16* %9
%75 = sext i16 %74 to i32
%76 = load i16, i16* %13
%77 = sext i16 %76 to i32
%78 = icmp eq i32 %75, %77
br i1 %78, label %79, label %126
79: ; preds = %73
%80 = load i16, i16* %8
store i16 %80, i16* %16
store i16 %80, i16* %15
%81 = load i16, i16* %10
%82 = sext i16 %81 to i32
%83 = load i16, i16* %15
%84 = sext i16 %83 to i32
%85 = icmp slt i32 %82, %84
br i1 %85, label %86, label %88
86: ; preds = %79
%87 = load i16, i16* %10
store i16 %87, i16* %15
br label %97
88: ; preds = %79
%89 = load i16, i16* %10
%90 = sext i16 %89 to i32
%91 = load i16, i16* %16
%92 = sext i16 %91 to i32
%93 = icmp sgt i32 %90, %92
br i1 %93, label %94, label %96
94: ; preds = %88
%95 = load i16, i16* %10
store i16 %95, i16* %16
br label %96
96: ; preds = %94, %88
br label %97
97: ; preds = %96, %86
%98 = load i16, i16* %12
%99 = sext i16 %98 to i32
%100 = load i16, i16* %15
%101 = sext i16 %100 to i32
%102 = icmp slt i32 %99, %101
br i1 %102, label %103, label %105
103: ; preds = %97
%104 = load i16, i16* %12
store i16 %104, i16* %15
br label %114
105: ; preds = %97
%106 = load i16, i16* %12
%107 = sext i16 %106 to i32
%108 = load i16, i16* %16
%109 = sext i16 %108 to i32
%110 = icmp sgt i32 %107, %109
br i1 %110, label %111, label %113
111: ; preds = %105
%112 = load i16, i16* %12
store i16 %112, i16* %16
br label %113
113: ; preds = %111, %105
br label %114
114: ; preds = %113, %103
%115 = load i16, i16* %15
%116 = load i16, i16* %9
%117 = load i16, i16* %16
%118 = sext i16 %117 to i32
%119 = load i16, i16* %15
%120 = sext i16 %119 to i32
%121 = sub nsw i32 %118, %120
%122 = add nsw i32 %121, 1
%123 = trunc i32 %122 to i16
%124 = load i16, i16* %14
%125 = call i32 @writeFastHLine(i16 signext %115, i16 signext %116, i16 signext %123, i16 signext %124)
br label %304
126: ; preds = %73
%127 = load i16, i16* %10
%128 = sext i16 %127 to i32
%129 = load i16, i16* %8
%130 = sext i16 %129 to i32
%131 = sub nsw i32 %128, %130
%132 = trunc i32 %131 to i16
store i16 %132, i16* %19
%133 = load i16, i16* %11
%134 = sext i16 %133 to i32
%135 = load i16, i16* %9
%136 = sext i16 %135 to i32
%137 = sub nsw i32 %134, %136
%138 = trunc i32 %137 to i16
store i16 %138, i16* %20
%139 = load i16, i16* %12
%140 = sext i16 %139 to i32
%141 = load i16, i16* %8
%142 = sext i16 %141 to i32
%143 = sub nsw i32 %140, %142
%144 = trunc i32 %143 to i16
store i16 %144, i16* %21
%145 = load i16, i16* %13
%146 = sext i16 %145 to i32
%147 = load i16, i16* %9
%148 = sext i16 %147 to i32
%149 = sub nsw i32 %146, %148
%150 = trunc i32 %149 to i16
store i16 %150, i16* %22
%151 = load i16, i16* %12
%152 = sext i16 %151 to i32
%153 = load i16, i16* %10
%154 = sext i16 %153 to i32
%155 = sub nsw i32 %152, %154
%156 = trunc i32 %155 to i16
store i16 %156, i16* %23
%157 = load i16, i16* %13
%158 = sext i16 %157 to i32
%159 = load i16, i16* %11
%160 = sext i16 %159 to i32
%161 = sub nsw i32 %158, %160
%162 = trunc i32 %161 to i16
store i16 %162, i16* %24
store i32 0, i32* %25
store i32 0, i32* %26
%163 = load i16, i16* %11
%164 = sext i16 %163 to i32
%165 = load i16, i16* %13
%166 = sext i16 %165 to i32
%167 = icmp eq i32 %164, %166
br i1 %167, label %168, label %170
168: ; preds = %126
%169 = load i16, i16* %11
store i16 %169, i16* %18
br label %175
170: ; preds = %126
%171 = load i16, i16* %11
%172 = sext i16 %171 to i32
%173 = sub nsw i32 %172, 1
%174 = trunc i32 %173 to i16
store i16 %174, i16* %18
br label %175
175: ; preds = %170, %168
%176 = load i16, i16* %9
store i16 %176, i16* %17
br label %177
177: ; preds = %229, %175
%178 = load i16, i16* %17
%179 = sext i16 %178 to i32
%180 = load i16, i16* %18
%181 = sext i16 %180 to i32
%182 = icmp sle i32 %179, %181
br i1 %182, label %183, label %232
183: ; preds = %177
%184 = load i16, i16* %8
%185 = sext i16 %184 to i32
%186 = load i32, i32* %25
%187 = load i16, i16* %20
%188 = sext i16 %187 to i32
%189 = sdiv i32 %186, %188
%190 = add nsw i32 %185, %189
%191 = trunc i32 %190 to i16
store i16 %191, i16* %15
%192 = load i16, i16* %8
%193 = sext i16 %192 to i32
%194 = load i32, i32* %26
%195 = load i16, i16* %22
%196 = sext i16 %195 to i32
%197 = sdiv i32 %194, %196
%198 = add nsw i32 %193, %197
%199 = trunc i32 %198 to i16
store i16 %199, i16* %16
%200 = load i16, i16* %19
%201 = sext i16 %200 to i32
%202 = load i32, i32* %25
%203 = add nsw i32 %202, %201
store i32 %203, i32* %25
%204 = load i16, i16* %21
%205 = sext i16 %204 to i32
%206 = load i32, i32* %26
%207 = add nsw i32 %206, %205
store i32 %207, i32* %26
%208 = load i16, i16* %15
%209 = sext i16 %208 to i32
%210 = load i16, i16* %16
%211 = sext i16 %210 to i32
%212 = icmp sgt i32 %209, %211
br i1 %212, label %213, label %217
213: ; preds = %183
%214 = load i16, i16* %15
store i16 %214, i16* %33
%215 = load i16, i16* %16
store i16 %215, i16* %15
%216 = load i16, i16* %33
store i16 %216, i16* %16
br label %217
217: ; preds = %213, %183
%218 = load i16, i16* %15
%219 = load i16, i16* %17
%220 = load i16, i16* %16
%221 = sext i16 %220 to i32
%222 = load i16, i16* %15
%223 = sext i16 %222 to i32
%224 = sub nsw i32 %221, %223
%225 = add nsw i32 %224, 1
%226 = trunc i32 %225 to i16
%227 = load i16, i16* %14
%228 = call i32 @writeFastHLine(i16 signext %218, i16 signext %219, i16 signext %226, i16 signext %227)
br label %229
229: ; preds = %217
%230 = load i16, i16* %17
%231 = add i16 %230, 1
store i16 %231, i16* %17
br label %177
232: ; preds = %177
%233 = load i16, i16* %23
%234 = sext i16 %233 to i32
%235 = load i16, i16* %17
%236 = sext i16 %235 to i32
%237 = load i16, i16* %11
%238 = sext i16 %237 to i32
%239 = sub nsw i32 %236, %238
%240 = mul nsw i32 %234, %239
store i32 %240, i32* %25
%241 = load i16, i16* %21
%242 = sext i16 %241 to i32
%243 = load i16, i16* %17
%244 = sext i16 %243 to i32
%245 = load i16, i16* %9
%246 = sext i16 %245 to i32
%247 = sub nsw i32 %244, %246
%248 = mul nsw i32 %242, %247
store i32 %248, i32* %26
br label %249
249: ; preds = %301, %232
%250 = load i16, i16* %17
%251 = sext i16 %250 to i32
%252 = load i16, i16* %13
%253 = sext i16 %252 to i32
%254 = icmp sle i32 %251, %253
br i1 %254, label %255, label %304
255: ; preds = %249
%256 = load i16, i16* %10
%257 = sext i16 %256 to i32
%258 = load i32, i32* %25
%259 = load i16, i16* %24
%260 = sext i16 %259 to i32
%261 = sdiv i32 %258, %260
%262 = add nsw i32 %257, %261
%263 = trunc i32 %262 to i16
store i16 %263, i16* %15
%264 = load i16, i16* %8
%265 = sext i16 %264 to i32
%266 = load i32, i32* %26
%267 = load i16, i16* %22
%268 = sext i16 %267 to i32
%269 = sdiv i32 %266, %268
%270 = add nsw i32 %265, %269
%271 = trunc i32 %270 to i16
store i16 %271, i16* %16
%272 = load i16, i16* %23
%273 = sext i16 %272 to i32
%274 = load i32, i32* %25
%275 = add nsw i32 %274, %273
store i32 %275, i32* %25
%276 = load i16, i16* %21
%277 = sext i16 %276 to i32
%278 = load i32, i32* %26
%279 = add nsw i32 %278, %277
store i32 %279, i32* %26
%280 = load i16, i16* %15
%281 = sext i16 %280 to i32
%282 = load i16, i16* %16
%283 = sext i16 %282 to i32
%284 = icmp sgt i32 %281, %283
br i1 %284, label %285, label %289
285: ; preds = %255
%286 = load i16, i16* %15
store i16 %286, i16* %34
%287 = load i16, i16* %16
store i16 %287, i16* %15
%288 = load i16, i16* %34
store i16 %288, i16* %16
br label %289
289: ; preds = %285, %255
%290 = load i16, i16* %15
%291 = load i16, i16* %17
%292 = load i16, i16* %16
%293 = sext i16 %292 to i32
%294 = load i16, i16* %15
%295 = sext i16 %294 to i32
%296 = sub nsw i32 %293, %295
%297 = add nsw i32 %296, 1
%298 = trunc i32 %297 to i16
%299 = load i16, i16* %14
%300 = call i32 @writeFastHLine(i16 signext %290, i16 signext %291, i16 signext %298, i16 signext %299)
br label %301
301: ; preds = %289
%302 = load i16, i16* %17
%303 = add i16 %302, 1
store i16 %303, i16* %17
br label %249
304: ; preds = %114, %249
ret void
}

LLVM IR (-O2):
define void @fillTriangle(i16 signext %0, i16 signext %1, i16 signext %2, i16 signext %3, i16 signext %4, i16 signext %5, i16 signext %6) {
%8 = icmp sgt i16 %1, %3
br i1 %8, label %9, label %10
9: ; preds = %7
br label %10
10: ; preds = %9, %7
%11 = phi i16 [ %1, %9 ], [ %3, %7 ]
%12 = phi i16 [ %0, %9 ], [ %2, %7 ]
%13 = phi i16 [ %3, %9 ], [ %1, %7 ]
%14 = phi i16 [ %2, %9 ], [ %0, %7 ]
%15 = icmp sgt i16 %11, %5
br i1 %15, label %16, label %17
16: ; preds = %10
br label %17
17: ; preds = %16, %10
%18 = phi i16 [ %11, %16 ], [ %5, %10 ]
%19 = phi i16 [ %12, %16 ], [ %4, %10 ]
%20 = phi i16 [ %5, %16 ], [ %11, %10 ]
%21 = phi i16 [ %4, %16 ], [ %12, %10 ]
%22 = icmp sgt i16 %13, %20
br i1 %22, label %23, label %24
23: ; preds = %17
br label %24
24: ; preds = %23, %17
%25 = phi i16 [ %13, %23 ], [ %20, %17 ]
%26 = phi i16 [ %14, %23 ], [ %21, %17 ]
%27 = phi i16 [ %20, %23 ], [ %13, %17 ]
%28 = phi i16 [ %21, %23 ], [ %14, %17 ]
%29 = sext i16 %27 to i32
%30 = icmp eq i16 %18, %27
br i1 %30, label %31, label %45
31: ; preds = %24
%32 = icmp slt i16 %26, %28
%33 = icmp sgt i16 %26, %28
%34 = select i1 %33, i16 %26, i16 %28
%35 = select i1 %32, i16 %28, i16 %34
%36 = select i1 %32, i16 %26, i16 %28
%37 = icmp slt i16 %19, %36
%38 = icmp sgt i16 %19, %35
%39 = select i1 %38, i16 %19, i16 %35
%40 = select i1 %37, i16 %35, i16 %39
%41 = select i1 %37, i16 %19, i16 %36
%42 = sub i16 1, %41
%43 = add i16 %42, %40
%44 = tail call i32 @writeFastHLine(i16 signext %41, i16 signext %18, i16 signext %43, i16 signext %6)
br label %119
45: ; preds = %24
%46 = sext i16 %25 to i32
%47 = sub i16 %19, %28
%48 = sub i16 %18, %27
%49 = sub i16 %19, %26
%50 = sub i16 %18, %25
%51 = icmp ne i16 %18, %25
%52 = sext i1 %51 to i16
%53 = add i16 %25, %52
%54 = icmp sgt i16 %27, %53
br i1 %54, label %55, label %57
55: ; preds = %45
%56 = sext i16 %47 to i32
br label %86
57: ; preds = %45
%58 = sub i16 %25, %27
%59 = sub i16 %26, %28
%60 = sext i16 %58 to i32
%61 = sext i16 %48 to i32
%62 = sext i16 %59 to i32
%63 = sext i16 %47 to i32
br label %64
64: ; preds = %57, %64
%65 = phi i32 [ 0, %57 ], [ %75, %64 ]
%66 = phi i32 [ 0, %57 ], [ %74, %64 ]
%67 = phi i16 [ %27, %57 ], [ %82, %64 ]
%68 = sdiv i32 %66, %60
%69 = trunc i32 %68 to i16
%70 = add i16 %28, %69
%71 = sdiv i32 %65, %61
%72 = trunc i32 %71 to i16
%73 = add i16 %28, %72
%74 = add nsw i32 %66, %62
%75 = add nsw i32 %65, %63
%76 = icmp sgt i16 %70, %73
%77 = select i1 %76, i16 %70, i16 %73
%78 = select i1 %76, i16 %73, i16 %70
%79 = sub i16 1, %78
%80 = add i16 %79, %77
%81 = tail call i32 @writeFastHLine(i16 signext %78, i16 signext %67, i16 signext %80, i16 signext %6)
%82 = add i16 %67, 1
%83 = icmp sgt i16 %82, %53
br i1 %83, label %84, label %64
84: ; preds = %64
%85 = sext i16 %82 to i32
br label %86
86: ; preds = %55, %84
%87 = phi i32 [ %56, %55 ], [ %63, %84 ]
%88 = phi i32 [ %29, %55 ], [ %85, %84 ]
%89 = phi i16 [ %27, %55 ], [ %82, %84 ]
%90 = sext i16 %49 to i32
%91 = icmp sgt i16 %89, %18
br i1 %91, label %119, label %92
92: ; preds = %86
%93 = sub nsw i32 %88, %29
%94 = mul nsw i32 %93, %87
%95 = sub nsw i32 %88, %46
%96 = mul nsw i32 %95, %90
%97 = sext i16 %50 to i32
%98 = sext i16 %48 to i32
br label %99
99: ; preds = %92, %99
%100 = phi i32 [ %94, %92 ], [ %110, %99 ]
%101 = phi i32 [ %96, %92 ], [ %109, %99 ]
%102 = phi i16 [ %89, %92 ], [ %117, %99 ]
%103 = sdiv i32 %101, %97
%104 = trunc i32 %103 to i16
%105 = add i16 %26, %104
%106 = sdiv i32 %100, %98
%107 = trunc i32 %106 to i16
%108 = add i16 %28, %107
%109 = add nsw i32 %101, %90
%110 = add nsw i32 %100, %87
%111 = icmp sgt i16 %105, %108
%112 = select i1 %111, i16 %105, i16 %108
%113 = select i1 %111, i16 %108, i16 %105
%114 = sub i16 1, %113
%115 = add i16 %114, %112
%116 = tail call i32 @writeFastHLine(i16 signext %113, i16 signext %102, i16 signext %115, i16 signext %6)
%117 = add i16 %102, 1
%118 = icmp sgt i16 %117, %18
br i1 %118, label %119, label %99
119: ; preds = %99, %86, %31
ret void
}