void render_line_3D_BLA(float *mat, int wz, int wy, int wx, int x1, int y1,
                        int z1, int x2, int y2, int z2, float val) {
  int x, y, z;
  int dx, dy, dz;
  int xinc, yinc, zinc;
  int balance1, balance2;
  int step = wx * wy;
  dx = x2 - x1;
  dy = y2 - y1;
  dz = z2 - z1;
  if (dx < 0) {
    xinc = -1;
    dx = -dx;
  } else {
    xinc = 1;
  }
  if (dy < 0) {
    yinc = -1;
    dy = -dy;
  } else {
    yinc = 1;
  }
  if (dz < 0) {
    zinc = -1;
    dz = -dz;
  } else {
    zinc = 1;
  }
  x = x1;
  y = y1;
  z = z1;
  if (dx >= dy && dx >= dz) {
    dy <<= 1;
    dz <<= 1;
    balance1 = dy - dx;
    balance2 = dz - dx;
    dx <<= 1;
    while (x != x2) {
      mat[z * step + y * wx + x] += val;
      if (balance1 >= 0) {
        y = y + yinc;
        balance1 = balance1 - dx;
      }
      if (balance2 >= 0) {
        z = z + zinc;
        balance2 = balance2 - dx;
      }
      balance1 = balance1 + dy;
      balance2 = balance2 + dz;
      x = x + xinc;
    }
    mat[z * step + y * wx + x] += val;
  } else {
    if (dy >= dx && dy >= dz) {
      dx <<= 1;
      dz <<= 1;
      balance1 = dx - dy;
      balance2 = dz - dy;
      dy <<= 1;
      while (y != y2) {
        mat[z * step + y * wx + x] += val;
        if (balance1 >= 0) {
          x = x + xinc;
          balance1 = balance1 - dy;
        }
        if (balance2 >= 0) {
          z = z + zinc;
          balance2 = balance2 - dy;
        }
        balance1 = balance1 + dx;
        balance2 = balance2 + dz;
        y = y + yinc;
      }
      mat[z * step + y * wx + x] += val;
    } else {
      dx <<= 1;
      dy <<= 1;
      balance1 = dx - dz;
      balance2 = dy - dz;
      dz <<= 1;
      while (z != z2) {
        mat[z * step + y * wx + x] += val;
        if (balance1 >= 0) {
          x = x + xinc;
          balance1 = balance1 - dz;
        }
        if (balance2 >= 0) {
          y = y + yinc;
          balance2 = balance2 - dz;
        }
        balance1 = balance1 + dx;
        balance2 = balance2 + dy;
        z = z + zinc;
      }
      mat[z * step + y * wx + x] += val;
    }
  }
}


x86 assembly (clang, -O0):
<render_line_3D_BLA>:
push   %rbp
mov    %rsp,%rbp
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
movss  %xmm0,-0x20(%rbp)
mov    -0x14(%rbp),%eax
imul   -0x10(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    0x18(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    0x20(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    0x28(%rbp),%eax
sub    0x10(%rbp),%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x30(%rbp)
jge    116d <render_line_3D_BLA+0x6d>
movl   $0xffffffff,-0x3c(%rbp)
xor    %eax,%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    1174 <render_line_3D_BLA+0x74>
movl   $0x1,-0x3c(%rbp)
cmpl   $0x0,-0x34(%rbp)
jge    1192 <render_line_3D_BLA+0x92>
movl   $0xffffffff,-0x40(%rbp)
xor    %eax,%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    1199 <render_line_3D_BLA+0x99>
movl   $0x1,-0x40(%rbp)
cmpl   $0x0,-0x38(%rbp)
jge    11b7 <render_line_3D_BLA+0xb7>
movl   $0xffffffff,-0x44(%rbp)
xor    %eax,%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    11be <render_line_3D_BLA+0xbe>
movl   $0x1,-0x44(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    0x10(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jl     12d0 <render_line_3D_BLA+0x1d0>
mov    -0x30(%rbp),%eax
cmp    -0x38(%rbp),%eax
jl     12d0 <render_line_3D_BLA+0x1d0>
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x38(%rbp),%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x30(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
cmp    0x18(%rbp),%eax
je     12a2 <render_line_3D_BLA+0x1a2>
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x50(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
cmpl   $0x0,-0x48(%rbp)
jl     1266 <render_line_3D_BLA+0x166>
mov    -0x28(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x48(%rbp),%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jl     1282 <render_line_3D_BLA+0x182>
mov    -0x2c(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x4c(%rbp),%eax
sub    -0x30(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x24(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    1215 <render_line_3D_BLA+0x115>
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x50(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    14b8 <render_line_3D_BLA+0x3b8>
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jl     13d0 <render_line_3D_BLA+0x2d0>
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jl     13d0 <render_line_3D_BLA+0x2d0>
mov    -0x30(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x38(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x38(%rbp),%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x28(%rbp),%eax
cmp    0x20(%rbp),%eax
je     13a2 <render_line_3D_BLA+0x2a2>
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x50(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
cmpl   $0x0,-0x48(%rbp)
jl     1366 <render_line_3D_BLA+0x266>
mov    -0x24(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x48(%rbp),%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jl     1382 <render_line_3D_BLA+0x282>
mov    -0x2c(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x4c(%rbp),%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x28(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x28(%rbp)
jmp    1315 <render_line_3D_BLA+0x215>
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x50(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    14b3 <render_line_3D_BLA+0x3b3>
mov    -0x30(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x34(%rbp),%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x38(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
cmp    0x28(%rbp),%eax
je     148a <render_line_3D_BLA+0x38a>
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x50(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
cmpl   $0x0,-0x48(%rbp)
jl     144e <render_line_3D_BLA+0x34e>
mov    -0x24(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x48(%rbp),%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x48(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jl     146a <render_line_3D_BLA+0x36a>
mov    -0x28(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x4c(%rbp),%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    13fd <render_line_3D_BLA+0x2fd>
movss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x2c(%rbp),%ecx
imul   -0x50(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x14(%rbp),%edx
add    %edx,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    14b8 <render_line_3D_BLA+0x3b8>
pop    %rbp
ret

x86 assembly (clang, -O2):
<render_line_3D_BLA>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x50(%rsp),%ebx
mov    0x48(%rsp),%r15d
mov    0x40(%rsp),%eax
mov    0x38(%rsp),%r11d
mov    %ecx,-0x28(%rsp)
mov    %ecx,%ebp
mov    %edx,-0x20(%rsp)
imul   %edx,%ebp
mov    %eax,%edx
sub    %r8d,%edx
mov    %r15d,%esi
sub    %r9d,%esi
mov    %ebx,%ecx
sub    %r11d,%ecx
mov    %edx,%ebx
neg    %ebx
cmovs  %edx,%ebx
not    %edx
shr    $0x1f,%edx
lea    (%rdx,%rdx,1),%r12d
add    $0xffffffff,%r12d
mov    %esi,%r13d
neg    %r13d
mov    %esi,%edx
cmovns %r13d,%edx
not    %esi
shr    $0x1f,%esi
lea    (%rsi,%rsi,1),%r10d
add    $0xffffffff,%r10d
mov    %ecx,%r14d
neg    %r14d
mov    %ecx,%esi
cmovns %r14d,%esi
not    %ecx
shr    $0x1f,%ecx
lea    (%rcx,%rcx,1),%eax
add    $0xffffffff,%eax
cmp    %edx,%ebx
jl     11a0 <render_line_3D_BLA+0xa0>
cmp    %esi,%ebx
jl     11a0 <render_line_3D_BLA+0xa0>
mov    0x40(%rsp),%r14d
cmp    %r8d,%r14d
jne    1295 <render_line_3D_BLA+0x195>
mov    -0x28(%rsp),%r12d
mov    %ebp,%r10d
jmp    133a <render_line_3D_BLA+0x23a>
lea    (%rbx,%rbx,1),%ecx
cmp    %ebx,%edx
jl     127c <render_line_3D_BLA+0x17c>
cmp    %esi,%edx
jl     127c <render_line_3D_BLA+0x17c>
cmp    %r9d,%r15d
je     126e <render_line_3D_BLA+0x16e>
add    %esi,%esi
mov    %rsi,-0x20(%rsp)
lea    (%rdx,%rdx,1),%r14d
mov    %ecx,%ebx
mov    %rdx,%rcx
mov    %esi,%edx
sub    %ecx,%edx
mov    %ebx,-0x10(%rsp)
mov    %ebx,%esi
sub    %ecx,%esi
mov    %eax,-0x8(%rsp)
mov    -0x28(%rsp),%eax
imul   %eax,%r9d
mov    %r10d,%ecx
imul   %eax,%ecx
mov    %ecx,-0x14(%rsp)
mov    %r12d,-0x24(%rsp)
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r11d,%eax
imul   %ebp,%eax
add    %r8d,%eax
add    %r9d,%eax
cltq
movss  (%rdi,%rax,4),%xmm1
test   %esi,%esi
mov    $0x0,%ebx
cmovns %r14d,%ebx
mov    %r10d,%r12d
mov    %ebp,%r10d
mov    $0x0,%ebp
cmovns -0x24(%rsp),%ebp
add    %ebp,%r8d
test   %edx,%edx
mov    $0x0,%ebp
cmovns -0x8(%rsp),%ebp
addss  %xmm0,%xmm1
mov    $0x0,%ecx
cmovns %r14d,%ecx
movss  %xmm1,(%rdi,%rax,4)
add    %ebp,%r11d
mov    %r10d,%ebp
mov    %r12d,%r10d
add    -0x10(%rsp),%esi
sub    %ebx,%esi
add    -0x20(%rsp),%edx
sub    %ecx,%edx
add    -0x14(%rsp),%r9d
add    %r12d,%r13d
jne    1200 <render_line_3D_BLA+0x100>
imul   %ebp,%r11d
mov    -0x28(%rsp),%r12d
jmp    1406 <render_line_3D_BLA+0x306>
mov    %ebp,-0x14(%rsp)
cmp    %r11d,0x50(%rsp)
jne    134b <render_line_3D_BLA+0x24b>
mov    -0x28(%rsp),%r12d
jmp    13f8 <render_line_3D_BLA+0x2f8>
add    %edx,%edx
add    %esi,%esi
lea    (%rbx,%rbx,1),%r13d
mov    %rsi,%rcx
mov    %rsi,-0x20(%rsp)
sub    %ebx,%esi
mov    %rdx,%rcx
mov    %rdx,-0x8(%rsp)
sub    %ebx,%edx
mov    %r14d,%ecx
mov    %rcx,-0x10(%rsp)
mov    %r10d,-0x24(%rsp)
mov    %ebp,%r10d
movslq %r8d,%rbp
movslq %r12d,%r8
mov    -0x28(%rsp),%r12d
mov    %eax,%r14d
nop
mov    %r11d,%eax
imul   %r10d,%eax
mov    %r9d,%ebx
imul   %r12d,%ebx
add    %eax,%ebx
movslq %ebx,%rax
add    %rbp,%rax
movss  (%rdi,%rax,4),%xmm1
test   %edx,%edx
mov    $0x0,%ebx
cmovns -0x24(%rsp),%ebx
mov    $0x0,%ecx
cmovns %r13d,%ecx
add    %ebx,%r9d
test   %esi,%esi
mov    $0x0,%ebx
cmovns %r14d,%ebx
addss  %xmm0,%xmm1
mov    $0x0,%r15d
cmovns %r13d,%r15d
movss  %xmm1,(%rdi,%rax,4)
add    %ebx,%r11d
add    -0x8(%rsp),%edx
sub    %ecx,%edx
add    -0x20(%rsp),%esi
sub    %r15d,%esi
add    %r8,%rbp
cmp    %ebp,-0x10(%rsp)
jne    12d0 <render_line_3D_BLA+0x1d0>
imul   %r10d,%r11d
mov    %r9d,%r15d
mov    0x40(%rsp),%r8d
jmp    1406 <render_line_3D_BLA+0x306>
add    %edx,%edx
mov    %rdx,-0x8(%rsp)
lea    (%rsi,%rsi,1),%r13d
mov    %rsi,%rbx
mov    %edx,%esi
sub    %ebx,%esi
mov    %ecx,-0x10(%rsp)
sub    %ebx,%ecx
mov    %r12d,-0x24(%rsp)
mov    -0x28(%rsp),%r12d
imul   %r12d,%r11d
mov    -0x20(%rsp),%ebx
imul   %ebx,%r11d
mov    %eax,%ebp
imul   %r12d,%ebp
imul   %ebx,%ebp
mov    %ebp,-0x20(%rsp)
cs nopw 0x0(%rax,%rax,1)
mov    %eax,%r15d
mov    %r9d,%eax
imul   %r12d,%eax
add    %r8d,%eax
add    %r11d,%eax
cltq
movss  (%rdi,%rax,4),%xmm1
test   %ecx,%ecx
mov    $0x0,%ebp
cmovns %r13d,%ebp
mov    $0x0,%ebx
cmovns -0x24(%rsp),%ebx
add    %ebx,%r8d
test   %esi,%esi
mov    $0x0,%ebx
cmovns %r10d,%ebx
addss  %xmm0,%xmm1
mov    $0x0,%edx
cmovns %r13d,%edx
movss  %xmm1,(%rdi,%rax,4)
mov    %r15d,%eax
add    %ebx,%r9d
add    -0x10(%rsp),%ecx
sub    %ebp,%ecx
add    -0x8(%rsp),%esi
sub    %edx,%esi
add    -0x20(%rsp),%r11d
add    %eax,%r14d
jne    1390 <render_line_3D_BLA+0x290>
mov    -0x14(%rsp),%r11d
imul   0x50(%rsp),%r11d
mov    %r9d,%r15d
imul   %r12d,%r15d
add    %r11d,%r15d
add    %r8d,%r15d
movslq %r15d,%rax
addss  (%rdi,%rax,4),%xmm0
movss  %xmm0,(%rdi,%rax,4)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @render_line_3D_BLA(float* nocapture %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, float %10) {
%12 = mul nsw i32 %3, %2
%13 = sub nsw i32 %7, %4
%14 = sub nsw i32 %8, %5
%15 = sub nsw i32 %9, %6
%16 = icmp slt i32 %13, 0
%17 = sub nsw i32 0, %13
%18 = select i1 %16, i32 %17, i32 %13
%19 = select i1 %16, i32 -1, i32 1
%20 = icmp slt i32 %14, 0
%21 = sub nsw i32 0, %14
%22 = select i1 %20, i32 %21, i32 %14
%23 = select i1 %20, i32 -1, i32 1
%24 = icmp slt i32 %15, 0
%25 = sub nsw i32 0, %15
%26 = select i1 %24, i32 %25, i32 %15
%27 = select i1 %24, i32 -1, i32 1
%28 = icmp slt i32 %18, %22
%29 = icmp slt i32 %18, %26
%30 = select i1 %28, i1 true, i1 %29
br i1 %30, label %71, label %31
31: ; preds = %11
%32 = shl nuw i32 %22, 1
%33 = shl nuw i32 %26, 1
%34 = shl nuw i32 %18, 1
%35 = icmp eq i32 %7, %4
br i1 %35, label %67, label %36
36: ; preds = %31
%37 = sub nsw i32 %33, %18
%38 = sub nsw i32 %32, %18
br label %39
39: ; preds = %36, %39
%40 = phi i32 [ %65, %39 ], [ %4, %36 ]
%41 = phi i32 [ %64, %39 ], [ %37, %36 ]
%42 = phi i32 [ %62, %39 ], [ %38, %36 ]
%43 = phi i32 [ %59, %39 ], [ %6, %36 ]
%44 = phi i32 [ %55, %39 ], [ %5, %36 ]
%45 = mul nsw i32 %43, %12
%46 = mul nsw i32 %44, %3
%47 = add nsw i32 %45, %46
%48 = add nsw i32 %47, %40
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds float, float* %0, i64 %49
%51 = load float, float* %50
%52 = fadd float %51, %10
store float %52, float* %50
%53 = icmp sgt i32 %42, -1
%54 = select i1 %53, i32 %23, i32 0
%55 = add nsw i32 %54, %44
%56 = select i1 %53, i32 %34, i32 0
%57 = icmp sgt i32 %41, -1
%58 = select i1 %57, i32 %27, i32 0
%59 = add nsw i32 %58, %43
%60 = select i1 %57, i32 %34, i32 0
%61 = add i32 %42, %32
%62 = sub i32 %61, %56
%63 = add i32 %41, %33
%64 = sub i32 %63, %60
%65 = add nsw i32 %40, %19
%66 = icmp eq i32 %65, %7
br i1 %66, label %67, label %39
67: ; preds = %39, %31
%68 = phi i32 [ %5, %31 ], [ %55, %39 ]
%69 = phi i32 [ %6, %31 ], [ %59, %39 ]
%70 = mul nsw i32 %69, %12
br label %154
71: ; preds = %11
%72 = icmp slt i32 %22, %18
%73 = icmp slt i32 %22, %26
%74 = select i1 %72, i1 true, i1 %73
%75 = shl nuw i32 %18, 1
br i1 %74, label %115, label %76
76: ; preds = %71
%77 = shl nuw i32 %26, 1
%78 = shl nuw i32 %22, 1
%79 = icmp eq i32 %8, %5
br i1 %79, label %111, label %80
80: ; preds = %76
%81 = sub nsw i32 %77, %22
%82 = sub nsw i32 %75, %22
br label %83
83: ; preds = %80, %83
%84 = phi i32 [ %100, %83 ], [ %4, %80 ]
%85 = phi i32 [ %108, %83 ], [ %81, %80 ]
%86 = phi i32 [ %106, %83 ], [ %82, %80 ]
%87 = phi i32 [ %103, %83 ], [ %6, %80 ]
%88 = phi i32 [ %109, %83 ], [ %5, %80 ]
%89 = mul nsw i32 %87, %12
%90 = mul nsw i32 %88, %3
%91 = add nsw i32 %89, %90
%92 = add nsw i32 %91, %84
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds float, float* %0, i64 %93
%95 = load float, float* %94
%96 = fadd float %95, %10
store float %96, float* %94
%97 = icmp sgt i32 %86, -1
%98 = select i1 %97, i32 %78, i32 0
%99 = select i1 %97, i32 %19, i32 0
%100 = add nsw i32 %84, %99
%101 = icmp sgt i32 %85, -1
%102 = select i1 %101, i32 %27, i32 0
%103 = add nsw i32 %102, %87
%104 = select i1 %101, i32 %78, i32 0
%105 = add i32 %86, %75
%106 = sub i32 %105, %98
%107 = add i32 %85, %77
%108 = sub i32 %107, %104
%109 = add nsw i32 %88, %23
%110 = icmp eq i32 %109, %8
br i1 %110, label %111, label %83
111: ; preds = %83, %76
%112 = phi i32 [ %6, %76 ], [ %103, %83 ]
%113 = phi i32 [ %4, %76 ], [ %100, %83 ]
%114 = mul nsw i32 %112, %12
br label %154
115: ; preds = %71
%116 = shl nuw i32 %22, 1
%117 = shl nuw i32 %26, 1
%118 = icmp eq i32 %9, %6
br i1 %118, label %150, label %119
119: ; preds = %115
%120 = sub nsw i32 %116, %26
%121 = sub nsw i32 %75, %26
br label %122
122: ; preds = %119, %122
%123 = phi i32 [ %139, %122 ], [ %4, %119 ]
%124 = phi i32 [ %147, %122 ], [ %120, %119 ]
%125 = phi i32 [ %145, %122 ], [ %121, %119 ]
%126 = phi i32 [ %148, %122 ], [ %6, %119 ]
%127 = phi i32 [ %142, %122 ], [ %5, %119 ]
%128 = mul nsw i32 %126, %12
%129 = mul nsw i32 %127, %3
%130 = add nsw i32 %128, %129
%131 = add nsw i32 %130, %123
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds float, float* %0, i64 %132
%134 = load float, float* %133
%135 = fadd float %134, %10
store float %135, float* %133
%136 = icmp sgt i32 %125, -1
%137 = select i1 %136, i32 %117, i32 0
%138 = select i1 %136, i32 %19, i32 0
%139 = add nsw i32 %123, %138
%140 = icmp sgt i32 %124, -1
%141 = select i1 %140, i32 %23, i32 0
%142 = add nsw i32 %141, %127
%143 = select i1 %140, i32 %117, i32 0
%144 = add i32 %125, %75
%145 = sub i32 %144, %137
%146 = add i32 %124, %116
%147 = sub i32 %146, %143
%148 = add nsw i32 %126, %27
%149 = icmp eq i32 %148, %9
br i1 %149, label %150, label %122
150: ; preds = %122, %115
%151 = phi i32 [ %5, %115 ], [ %142, %122 ]
%152 = phi i32 [ %4, %115 ], [ %139, %122 ]
%153 = mul nsw i32 %12, %9
br label %154
154: ; preds = %111, %150, %67
%155 = phi i32 [ %8, %111 ], [ %151, %150 ], [ %68, %67 ]
%156 = phi i32 [ %114, %111 ], [ %153, %150 ], [ %70, %67 ]
%157 = phi i32 [ %113, %111 ], [ %152, %150 ], [ %7, %67 ]
%158 = mul nsw i32 %155, %3
%159 = add nsw i32 %156, %158
%160 = add nsw i32 %159, %157
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds float, float* %0, i64 %161
%163 = load float, float* %162
%164 = fadd float %163, %10
store float %164, float* %162
ret void
}