#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 */
typedef int uint8_t;
typedef int /*<<< orphan*/ uint16_t;
typedef int int8_t;

/* Variables and functions */
int /*<<< orphan*/ set_led_8_8_12(int, int, int, int /*<<< orphan*/);
void line(uint8_t x1, uint8_t y1, uint8_t z1, uint8_t x2, uint8_t y2,
          uint8_t z2, uint16_t intensity) {
  uint8_t x, y, z, ax, ay, az;
  int8_t xd, yd, zd, dx, dy, dz, sx, sy, sz;
  dx = x2 - x1;
  dy = y2 - y1;
  dz = z2 - z1;
  ax = (((dx) < 0) ? -(dx) : (dx)) << 1;
  ay = (((dy) < 0) ? -(dy) : (dy)) << 1;
  az = (((dz) < 0) ? -(dz) : (dz)) << 1;
  sx = (((dx) < 0) ? -1 : (dx) > 0 ? 1 : 0);
  sy = (((dy) < 0) ? -1 : (dy) > 0 ? 1 : 0);
  sz = (((dz) < 0) ? -1 : (dz) > 0 ? 1 : 0);
  x = x1;
  y = y1;
  z = z1;
  if (ax >= (((ay) > (az)) ? (ay) : (az))) {
    yd = ay - (ax >> 1);
    zd = az - (ax >> 1);
    for (;;) {
      set_led_8_8_12(x, y, z, intensity);
      if (x == x2)
        return;
      if (yd >= 0) {
        y += sy;
        yd -= ax;
      }
      if (zd >= 0) {
        z += sz;
        zd -= ax;
      }
      x += sx;
      yd += ay;
      zd += az;
    }
  } else if (ay >= (((ax) > (az)) ? (ax) : (az))) {
    xd = ax - (ay >> 1);
    zd = az - (ay >> 1);
    for (;;) {
      set_led_8_8_12(x, y, z, intensity);
      if (y == y2)
        return;
      if (xd >= 0) {
        x += sx;
        xd -= ay;
      }
      if (zd >= 0) {
        z += sz;
        zd -= ay;
      }
      y += sy;
      xd += ax;
      zd += az;
    }
  } else if (az >= (((ax) > (ay)) ? (ax) : (ay))) {
    xd = ax - (az >> 1);
    yd = ay - (az >> 1);
    for (;;) {
      set_led_8_8_12(x, y, z, intensity);
      if (z == z2)
        return;
      if (xd >= 0) {
        x += sx;
        xd -= az;
      }
      if (yd >= 0) {
        y += sy;
        yd -= az;
      }
      z += sz;
      xd += ax;
      yd += ay;
    }
  }
}


x86 assembly (clang, -O0):
<line>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    0x10(%rbp),%eax
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    -0x10(%rbp),%eax
sub    -0x4(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x8(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x18(%rbp),%eax
sub    -0xc(%rbp),%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    1164 <line+0x54>
xor    %eax,%eax
sub    -0x40(%rbp),%eax
mov    %eax,-0x58(%rbp)
jmp    116a <line+0x5a>
mov    -0x40(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x44(%rbp)
jge    118a <line+0x7a>
xor    %eax,%eax
sub    -0x44(%rbp),%eax
mov    %eax,-0x5c(%rbp)
jmp    1190 <line+0x80>
mov    -0x44(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x48(%rbp)
jge    11b0 <line+0xa0>
xor    %eax,%eax
sub    -0x48(%rbp),%eax
mov    %eax,-0x60(%rbp)
jmp    11b6 <line+0xa6>
mov    -0x48(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x40(%rbp)
jge    11d6 <line+0xc6>
mov    $0xffffffff,%eax
mov    %eax,-0x64(%rbp)
jmp    11e9 <line+0xd9>
mov    -0x40(%rbp),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x0,%edx
cmovg  %ecx,%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x44(%rbp)
jge    1206 <line+0xf6>
mov    $0xffffffff,%eax
mov    %eax,-0x68(%rbp)
jmp    1219 <line+0x109>
mov    -0x44(%rbp),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x0,%edx
cmovg  %ecx,%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x50(%rbp)
cmpl   $0x0,-0x48(%rbp)
jge    1236 <line+0x126>
mov    $0xffffffff,%eax
mov    %eax,-0x6c(%rbp)
jmp    1249 <line+0x139>
mov    -0x48(%rbp),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x0,%edx
cmovg  %ecx,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jle    127e <line+0x16e>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x74(%rbp)
jmp    1284 <line+0x174>
mov    -0x30(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x70(%rbp),%eax
mov    -0x74(%rbp),%ecx
cmp    %ecx,%eax
jl     132c <line+0x21c>
mov    -0x2c(%rbp),%eax
mov    -0x28(%rbp),%ecx
sar    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x28(%rbp),%ecx
sar    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%edi
mov    -0x20(%rbp),%esi
mov    -0x24(%rbp),%edx
mov    0x10(%rbp),%ecx
call   1030 <set_led_8_8_12@plt>
mov    -0x1c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jne    12d0 <line+0x1c0>
jmp    14d5 <line+0x3c5>
cmpl   $0x0,-0x38(%rbp)
jl     12ee <line+0x1de>
mov    -0x50(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x28(%rbp),%ecx
mov    -0x38(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x3c(%rbp)
jl     130c <line+0x1fc>
mov    -0x54(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%ecx
mov    -0x3c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    12ae <line+0x19e>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x30(%rbp),%eax
jle    1349 <line+0x239>
mov    -0x28(%rbp),%eax
mov    %eax,-0x7c(%rbp)
jmp    134f <line+0x23f>
mov    -0x30(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x78(%rbp),%eax
mov    -0x7c(%rbp),%ecx
cmp    %ecx,%eax
jl     13f7 <line+0x2e7>
mov    -0x28(%rbp),%eax
mov    -0x2c(%rbp),%ecx
sar    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x2c(%rbp),%ecx
sar    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x1c(%rbp),%edi
mov    -0x20(%rbp),%esi
mov    -0x24(%rbp),%edx
mov    0x10(%rbp),%ecx
call   1030 <set_led_8_8_12@plt>
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    139b <line+0x28b>
jmp    14d5 <line+0x3c5>
cmpl   $0x0,-0x34(%rbp)
jl     13b9 <line+0x2a9>
mov    -0x4c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x34(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x3c(%rbp)
jl     13d7 <line+0x2c7>
mov    -0x54(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%ecx
mov    -0x3c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x50(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    1379 <line+0x269>
mov    -0x30(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jle    1417 <line+0x307>
mov    -0x28(%rbp),%eax
mov    %eax,-0x84(%rbp)
jmp    1420 <line+0x310>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    -0x80(%rbp),%eax
mov    -0x84(%rbp),%ecx
cmp    %ecx,%eax
jl     14cb <line+0x3bb>
mov    -0x28(%rbp),%eax
mov    -0x30(%rbp),%ecx
sar    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x30(%rbp),%ecx
sar    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x1c(%rbp),%edi
mov    -0x20(%rbp),%esi
mov    -0x24(%rbp),%edx
mov    0x10(%rbp),%ecx
call   1030 <set_led_8_8_12@plt>
mov    -0x24(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    146f <line+0x35f>
jmp    14d5 <line+0x3c5>
cmpl   $0x0,-0x34(%rbp)
jl     148d <line+0x37d>
mov    -0x4c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x34(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x38(%rbp)
jl     14ab <line+0x39b>
mov    -0x50(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x38(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x54(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    144d <line+0x33d>
jmp    14d0 <line+0x3c0>
jmp    14d5 <line+0x3c5>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<line>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %ecx,%r11d
mov    %edx,%r14d
mov    %esi,%r15d
mov    %edi,%r13d
mov    %ecx,%eax
sub    %edi,%eax
mov    %r8d,%ecx
sub    %esi,%ecx
mov    %r9d,%ebp
sub    %edx,%ebp
xor    %r10d,%r10d
mov    %eax,%esi
neg    %esi
setb   %r10b
xor    %r12d,%r12d
mov    %ecx,%edi
neg    %edi
setb   %r12b
xor    %ebx,%ebx
mov    %ebp,%edx
neg    %edx
setb   %bl
test   %ebp,%ebp
cmovns %ebp,%edx
mov    $0xffffffff,%ebp
cmovs  %ebp,%ebx
test   %ecx,%ecx
cmovns %ecx,%edi
cmovs  %ebp,%r12d
test   %eax,%eax
cmovns %eax,%esi
cmovs  %ebp,%r10d
mov    0x50(%rsp),%ecx
add    %esi,%esi
add    %edi,%edi
add    %edx,%edx
cmp    %edx,%edi
mov    %edx,%eax
cmovg  %edi,%eax
cmp    %eax,%esi
mov    %esi,0x14(%rsp)
mov    %edi,0x10(%rsp)
mov    %edx,0xc(%rsp)
jge    127f <line+0x16f>
cmp    %edx,%esi
mov    %edx,%eax
cmovg  %esi,%eax
cmp    %eax,%edi
jge    1337 <line+0x227>
cmp    %edi,%esi
mov    %edi,%eax
cmovg  %esi,%eax
cmp    %eax,%edx
jl     13e0 <line+0x2d0>
mov    %r13d,%edi
mov    %r15d,%esi
mov    %r14d,%edx
mov    %r9d,(%rsp)
mov    %r10d,0x8(%rsp)
mov    %ebx,0x4(%rsp)
call   1030 <set_led_8_8_12@plt>
mov    0x50(%rsp),%ecx
mov    0x4(%rsp),%r10d
mov    0x8(%rsp),%edi
mov    0xc(%rsp),%edx
mov    0x10(%rsp),%r8d
mov    0x14(%rsp),%r9d
cmp    %r14d,(%rsp)
je     13e0 <line+0x2d0>
mov    %r12d,%r11d
mov    %edx,%eax
sar    %eax
mov    %r8d,%ebp
sub    %eax,%ebp
mov    %r9d,%ebx
sub    %eax,%ebx
nopw   0x0(%rax,%rax,1)
test   %ebx,%ebx
mov    $0x0,%eax
cmovns %edx,%eax
mov    $0x0,%esi
cmovns %edi,%esi
add    %esi,%r13d
test   %ebp,%ebp
mov    $0x0,%esi
cmovns %edx,%esi
mov    $0x0,%edx
cmovns %r11d,%edx
add    %edx,%r15d
add    %r10d,%r14d
add    %r9d,%ebx
sub    %eax,%ebx
add    %r8d,%ebp
sub    %esi,%ebp
mov    %r13d,%edi
mov    %r15d,%esi
mov    %r14d,%edx
call   1030 <set_led_8_8_12@plt>
mov    0x50(%rsp),%ecx
mov    0x4(%rsp),%r10d
mov    %r12d,%r11d
mov    0x8(%rsp),%edi
mov    0xc(%rsp),%edx
mov    0x10(%rsp),%r8d
mov    0x14(%rsp),%r9d
cmp    %r14d,(%rsp)
jne    1210 <line+0x100>
jmp    13e0 <line+0x2d0>
mov    %r12d,(%rsp)
mov    %r13d,%edi
mov    %r10d,0x8(%rsp)
mov    %r15d,%esi
mov    %r14d,%edx
mov    %ebx,0x4(%rsp)
mov    %r11d,%ebx
call   1030 <set_led_8_8_12@plt>
mov    %ebx,%eax
mov    0xc(%rsp),%edi
mov    0x10(%rsp),%esi
mov    0x14(%rsp),%edx
cmp    %r13d,%ebx
je     13e0 <line+0x2d0>
mov    %edx,%eax
sar    %eax
mov    %edi,%r12d
sub    %eax,%r12d
mov    %esi,%ebp
sub    %eax,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
test   %ebp,%ebp
mov    $0x0,%eax
cmovns %edx,%eax
mov    $0x0,%ecx
cmovns (%rsp),%ecx
add    %ecx,%r15d
test   %r12d,%r12d
mov    $0x0,%ecx
cmovns %edx,%ecx
mov    $0x0,%edx
cmovns 0x4(%rsp),%edx
add    %edx,%r14d
add    0x8(%rsp),%r13d
add    %esi,%ebp
sub    %eax,%ebp
add    %edi,%r12d
sub    %ecx,%r12d
mov    %r13d,%edi
mov    %r15d,%esi
mov    %r14d,%edx
mov    0x50(%rsp),%ecx
call   1030 <set_led_8_8_12@plt>
mov    %ebx,%eax
mov    0xc(%rsp),%edi
mov    0x10(%rsp),%esi
mov    0x14(%rsp),%edx
cmp    %r13d,%ebx
jne    12d0 <line+0x1c0>
jmp    13e0 <line+0x2d0>
mov    %r12d,(%rsp)
mov    %r13d,%edi
mov    %r10d,0x8(%rsp)
mov    %r15d,%esi
mov    %r14d,%edx
mov    %ebx,0x4(%rsp)
mov    %r8d,%r12d
call   1030 <set_led_8_8_12@plt>
mov    %r12d,%eax
mov    0xc(%rsp),%edi
mov    0x10(%rsp),%edx
mov    0x14(%rsp),%esi
cmp    %r15d,%r12d
je     13e0 <line+0x2d0>
mov    %edx,%eax
sar    %eax
mov    %edi,%ebp
sub    %eax,%ebp
mov    %esi,%ebx
sub    %eax,%ebx
cs nopw 0x0(%rax,%rax,1)
nop
test   %ebx,%ebx
mov    $0x0,%eax
cmovns %edx,%eax
mov    $0x0,%ecx
cmovns 0x8(%rsp),%ecx
add    %ecx,%r13d
test   %ebp,%ebp
mov    $0x0,%ecx
cmovns %edx,%ecx
mov    $0x0,%edx
cmovns 0x4(%rsp),%edx
add    %edx,%r14d
add    (%rsp),%r15d
add    %esi,%ebx
sub    %eax,%ebx
add    %edi,%ebp
sub    %ecx,%ebp
mov    %r13d,%edi
mov    %r15d,%esi
mov    %r14d,%edx
mov    0x50(%rsp),%ecx
call   1030 <set_led_8_8_12@plt>
mov    %r12d,%eax
mov    0xc(%rsp),%edi
mov    0x10(%rsp),%edx
mov    0x14(%rsp),%esi
cmp    %r15d,%r12d
jne    1380 <line+0x270>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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