void render_lines_2D_WALA(float *mat, int wy, int wx, int *X1, int nx1, int *Y1,
                          int ny1, int *X2, int nx2, int *Y2, int ny2) {
  double dx, dy, gradient, xend, yend, xgap, ygap, intery, interx;
  int xpxl1, ypxl1, xpxl2, ypxl2, x, y, n;
  float x1, y1, x2, y2;
  float val = 1.0f;
  for (n = 0; n < nx1; ++n) {
    x1 = X1[n];
    y1 = Y1[n];
    x2 = X2[n];
    y2 = Y2[n];
    dx = (double)x2 - (double)x1;
    dy = (double)y2 - (double)y1;
    if (fabs(dx) > fabs(dy)) {
      if (x2 < x1) {
        do {
          __typeof__(x1) tmp;
          tmp = x1;
          x1 = x2;
          x2 = tmp;
        } while (0);
        do {
          __typeof__(y1) tmp;
          tmp = y1;
          y1 = y2;
          y2 = tmp;
        } while (0);
      }
      gradient = dy / dx;
      xend = ((int)(((double)(x1)) + 0.5));
      yend = y1 + gradient * (xend - x1);
      xgap = (1.0 - ((double)(x1 + 0.5) - (double)((int)x1 + 0.5)));
      xpxl1 = xend;
      ypxl1 = ((int)yend);
      mat[ypxl1 * wx + xpxl1] +=
          ((1.0 - ((double)(yend) - (double)((int)yend))) * xgap * val);
      mat[(ypxl1 + 1) * wx + xpxl1] +=
          (((double)(yend) - (double)((int)yend)) * xgap * val);
      intery = yend + gradient;
      xend = ((int)(((double)(x2)) + 0.5));
      yend = y2 + gradient * (xend - x2);
      xgap = ((double)(x2 + 0.5) - (double)((int)x2 + 0.5));
      xpxl2 = xend;
      ypxl2 = ((int)yend);
      mat[ypxl2 * wx + xpxl2] +=
          ((1.0 - ((double)(yend) - (double)((int)yend))) * xgap * val);
      mat[(ypxl2 + 1) * wx + xpxl2] +=
          (((double)(yend) - (double)((int)yend)) * xgap * val);
      for (x = xpxl1 + 1; x <= (xpxl2 - 1); x++) {
        mat[((int)intery) * wx + x] +=
            ((1.0 - ((double)(intery) - (double)((int)intery))) * val);
        mat[(((int)intery) + 1) * wx + x] +=
            (((double)(intery) - (double)((int)intery)) * val);
        intery += gradient;
      }
    } else {
      if (y2 < y1) {
        do {
          __typeof__(x1) tmp;
          tmp = x1;
          x1 = x2;
          x2 = tmp;
        } while (0);
        do {
          __typeof__(y1) tmp;
          tmp = y1;
          y1 = y2;
          y2 = tmp;
        } while (0);
      }
      gradient = dx / dy;
      yend = ((int)(((double)(y1)) + 0.5));
      xend = x1 + gradient * (yend - y1);
      ygap = (1.0 - ((double)(y1 + 0.5) - (double)((int)y1 + 0.5)));
      ypxl1 = yend;
      xpxl1 = ((int)xend);
      mat[ypxl1 * wx + xpxl1] +=
          ((1.0 - ((double)(xend) - (double)((int)xend))) * ygap * val);
      mat[(ypxl1 + 1) * wx + xpxl1] +=
          (((double)(xend) - (double)((int)xend)) * ygap * val);
      interx = xend + gradient;
      yend = ((int)(((double)(y2)) + 0.5));
      xend = x2 + gradient * (yend - y2);
      ygap = ((double)(y2 + 0.5) - (double)((int)y2 + 0.5));
      ypxl2 = yend;
      xpxl2 = ((int)xend);
      mat[ypxl2 * wx + xpxl2] +=
          ((1.0 - ((double)(xend) - (double)((int)xend))) * ygap * val);
      mat[(ypxl2 + 1) * wx + xpxl2] +=
          (((double)(xend) - (double)((int)xend)) * ygap * val);
      for (y = ypxl1 + 1; y <= (ypxl2 - 1); y++) {
        mat[y * wx + ((int)interx)] +=
            ((1.0 - ((double)(interx) - (double)((int)interx))) * val);
        mat[y * wx + ((int)interx) + 1] +=
            (((double)(interx) - (double)((int)interx)) * val);
        interx += gradient;
      }
    }
  }
}


x86 assembly (clang, -O0):
<render_lines_2D_WALA>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9,-0x28(%rbp)
movss  0xec9(%rip),%xmm0
movss  %xmm0,-0xa0(%rbp)
ff
movl   $0x0,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1abb <render_lines_2D_WALA+0x9bb>
mov    -0x18(%rbp),%rax
movslq -0x8c(%rbp),%rcx
cvtsi2ssl (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x90(%rbp)
ff
mov    -0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
cvtsi2ssl (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x94(%rbp)
ff
mov    0x18(%rbp),%rax
movslq -0x8c(%rbp),%rcx
cvtsi2ssl (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x98(%rbp)
ff
mov    0x28(%rbp),%rax
movslq -0x8c(%rbp),%rcx
cvtsi2ssl (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x9c(%rbp)
ff
movss  -0x98(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movss  -0x90(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movss  -0x9c(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movss  -0x94(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
movaps 0xe0a(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  -0x38(%rbp),%xmm1
movaps 0xdfa(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    1661 <render_lines_2D_WALA+0x561>
movss  -0x98(%rbp),%xmm1
ff
movss  -0x90(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jbe    12ac <render_lines_2D_WALA+0x1ac>
jmp    1242 <render_lines_2D_WALA+0x142>
movss  -0x90(%rbp),%xmm0
ff
movss  %xmm0,-0xa4(%rbp)
ff
movss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0x90(%rbp)
ff
movss  -0xa4(%rbp),%xmm0
ff
movss  %xmm0,-0x98(%rbp)
ff
jmp    1277 <render_lines_2D_WALA+0x177>
movss  -0x94(%rbp),%xmm0
ff
movss  %xmm0,-0xa8(%rbp)
ff
movss  -0x9c(%rbp),%xmm0
ff
movss  %xmm0,-0x94(%rbp)
ff
movss  -0xa8(%rbp),%xmm0
ff
movss  %xmm0,-0x9c(%rbp)
ff
jmp    12ac <render_lines_2D_WALA+0x1ac>
movsd  -0x38(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movss  -0x90(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0xd59(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x48(%rbp)
movss  -0x94(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movss  -0x90(%rbp),%xmm3
ff
cvtss2sd %xmm3,%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movss  -0x90(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  0xd01(%rip),%xmm0
addsd  %xmm0,%xmm1
cvttss2si -0x90(%rbp),%eax
ff
cvtsi2sd %eax,%xmm0
movsd  0xce9(%rip),%xmm2
addsd  %xmm2,%xmm0
subsd  %xmm0,%xmm1
movsd  0xcd1(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvttsd2si -0x48(%rbp),%eax
mov    %eax,-0x74(%rbp)
cvttsd2si -0x50(%rbp),%eax
mov    %eax,-0x78(%rbp)
movsd  -0x50(%rbp),%xmm1
cvttsd2si -0x50(%rbp),%eax
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0xc9e(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x78(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x74(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x50(%rbp),%xmm0
cvttsd2si -0x50(%rbp),%eax
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x78(%rbp),%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    -0x74(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x50(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movss  -0x98(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0xbf2(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x48(%rbp)
movss  -0x9c(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movss  -0x98(%rbp),%xmm3
ff
cvtss2sd %xmm3,%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movss  -0x98(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0xb9a(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttss2si -0x98(%rbp),%eax
ff
cvtsi2sd %eax,%xmm1
movsd  0xb82(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvttsd2si -0x48(%rbp),%eax
mov    %eax,-0x7c(%rbp)
cvttsd2si -0x50(%rbp),%eax
mov    %eax,-0x80(%rbp)
movsd  -0x50(%rbp),%xmm1
cvttsd2si -0x50(%rbp),%eax
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0xb43(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x80(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x7c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x50(%rbp),%xmm0
cvttsd2si -0x50(%rbp),%eax
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x80(%rbp),%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    -0x7c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
mov    -0x7c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     165c <render_lines_2D_WALA+0x55c>
movsd  -0x68(%rbp),%xmm1
cvttsd2si -0x68(%rbp),%eax
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0xa78(%rip),%xmm0
subsd  %xmm1,%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
cvttsd2si -0x68(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x84(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x68(%rbp),%xmm0
cvttsd2si -0x68(%rbp),%eax
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
cvttsd2si -0x68(%rbp),%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    -0x84(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x40(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    157a <render_lines_2D_WALA+0x47a>
jmp    1aa2 <render_lines_2D_WALA+0x9a2>
movss  -0x9c(%rbp),%xmm1
ff
movss  -0x94(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jbe    16e9 <render_lines_2D_WALA+0x5e9>
jmp    167f <render_lines_2D_WALA+0x57f>
movss  -0x90(%rbp),%xmm0
ff
movss  %xmm0,-0xac(%rbp)
ff
movss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0x90(%rbp)
ff
movss  -0xac(%rbp),%xmm0
ff
movss  %xmm0,-0x98(%rbp)
ff
jmp    16b4 <render_lines_2D_WALA+0x5b4>
movss  -0x94(%rbp),%xmm0
ff
movss  %xmm0,-0xb0(%rbp)
ff
movss  -0x9c(%rbp),%xmm0
ff
movss  %xmm0,-0x94(%rbp)
ff
movss  -0xb0(%rbp),%xmm0
ff
movss  %xmm0,-0x9c(%rbp)
ff
jmp    16e9 <render_lines_2D_WALA+0x5e9>
movsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movss  -0x94(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0x91c(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x50(%rbp)
movss  -0x90(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movss  -0x94(%rbp),%xmm3
ff
cvtss2sd %xmm3,%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movss  -0x94(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  0x8c4(%rip),%xmm0
addsd  %xmm0,%xmm1
cvttss2si -0x94(%rbp),%eax
ff
cvtsi2sd %eax,%xmm0
movsd  0x8ac(%rip),%xmm2
addsd  %xmm2,%xmm0
subsd  %xmm0,%xmm1
movsd  0x894(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
cvttsd2si -0x50(%rbp),%eax
mov    %eax,-0x78(%rbp)
cvttsd2si -0x48(%rbp),%eax
mov    %eax,-0x74(%rbp)
movsd  -0x48(%rbp),%xmm1
cvttsd2si -0x48(%rbp),%eax
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0x861(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0x60(%rbp),%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x78(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x74(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x48(%rbp),%xmm0
cvttsd2si -0x48(%rbp),%eax
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
mulsd  -0x60(%rbp),%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x78(%rbp),%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    -0x74(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x48(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movss  -0x9c(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0x7b5(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x50(%rbp)
movss  -0x98(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movss  -0x9c(%rbp),%xmm3
ff
cvtss2sd %xmm3,%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movss  -0x9c(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0x75d(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttss2si -0x9c(%rbp),%eax
ff
cvtsi2sd %eax,%xmm1
movsd  0x745(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
cvttsd2si -0x50(%rbp),%eax
mov    %eax,-0x80(%rbp)
cvttsd2si -0x48(%rbp),%eax
mov    %eax,-0x7c(%rbp)
movsd  -0x48(%rbp),%xmm1
cvttsd2si -0x48(%rbp),%eax
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0x706(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0x60(%rbp),%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x80(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x7c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x48(%rbp),%xmm0
cvttsd2si -0x48(%rbp),%eax
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
mulsd  -0x60(%rbp),%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x80(%rbp),%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    -0x7c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x78(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
mov    -0x88(%rbp),%eax
mov    -0x80(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     1a9d <render_lines_2D_WALA+0x99d>
movsd  -0x70(%rbp),%xmm1
cvttsd2si -0x70(%rbp),%eax
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0x63b(%rip),%xmm0
subsd  %xmm1,%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x88(%rbp),%ecx
imul   -0x10(%rbp),%ecx
cvttsd2si -0x70(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x70(%rbp),%xmm0
cvttsd2si -0x70(%rbp),%eax
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x88(%rbp),%ecx
imul   -0x10(%rbp),%ecx
cvttsd2si -0x70(%rbp),%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x40(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x88(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x88(%rbp)
jmp    19b7 <render_lines_2D_WALA+0x8b7>
jmp    1aa2 <render_lines_2D_WALA+0x9a2>
jmp    1aa7 <render_lines_2D_WALA+0x9a7>
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    1149 <render_lines_2D_WALA+0x49>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<render_lines_2D_WALA>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %r8d,%r8d
jle    15d9 <render_lines_2D_WALA+0x4d9>
mov    0x50(%rsp),%r10
mov    0x40(%rsp),%r11
mov    %r8d,%r8d
movslq %edx,%r15
xor    %r12d,%r12d
movapd 0xed1(%rip),%xmm8
movsd  0xed8(%rip),%xmm9
movsd  0xed7(%rip),%xmm12
jmp    115d <render_lines_2D_WALA+0x5d>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r12
cmp    %r8,%r12
je     15d9 <render_lines_2D_WALA+0x4d9>
cvtsi2ssl (%rcx,%r12,4),%xmm13
cvtsi2ssl (%r9,%r12,4),%xmm14
xorps  %xmm5,%xmm5
cvtsi2ssl (%r11,%r12,4),%xmm5
xorps  %xmm2,%xmm2
cvtsi2ssl (%r10,%r12,4),%xmm2
cvtss2sd %xmm5,%xmm15
xorps  %xmm7,%xmm7
cvtss2sd %xmm13,%xmm7
movaps %xmm15,%xmm0
subsd  %xmm7,%xmm0
cvtss2sd %xmm2,%xmm10
xorps  %xmm6,%xmm6
cvtss2sd %xmm14,%xmm6
movaps %xmm10,%xmm1
subsd  %xmm6,%xmm1
movapd %xmm0,%xmm4
andpd  %xmm8,%xmm4
movapd %xmm1,%xmm3
andpd  %xmm8,%xmm3
ucomisd %xmm3,%xmm4
jbe    11e0 <render_lines_2D_WALA+0xe0>
ucomiss %xmm5,%xmm13
jbe    1200 <render_lines_2D_WALA+0x100>
movapd %xmm6,%xmm3
movapd %xmm7,%xmm11
movaps %xmm5,%xmm2
jmp    121a <render_lines_2D_WALA+0x11a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
ucomiss %xmm2,%xmm14
jbe    1400 <render_lines_2D_WALA+0x300>
movaps %xmm7,%xmm4
movaps %xmm6,%xmm11
movaps %xmm2,%xmm6
jmp    1418 <render_lines_2D_WALA+0x318>
nopl   0x0(%rax)
movapd %xmm10,%xmm3
movapd %xmm15,%xmm11
movaps %xmm6,%xmm10
movaps %xmm7,%xmm15
movaps %xmm13,%xmm2
movaps %xmm5,%xmm13
divsd  %xmm0,%xmm1
movapd %xmm15,%xmm0
addsd  %xmm9,%xmm0
cvttsd2si %xmm0,%r14d
cvttpd2dq %xmm0,%xmm4
cvtdq2pd %xmm4,%xmm4
subsd  %xmm15,%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm10,%xmm4
cvttps2dq %xmm2,%xmm2
cvtdq2pd %xmm2,%xmm2
addsd  %xmm9,%xmm2
subsd  %xmm0,%xmm2
cvttsd2si %xmm4,%esi
cvttpd2dq %xmm4,%xmm0
cvtdq2pd %xmm0,%xmm0
addsd  %xmm12,%xmm2
movapd %xmm4,%xmm5
subsd  %xmm0,%xmm5
movapd %xmm12,%xmm0
subsd  %xmm5,%xmm0
mulsd  %xmm2,%xmm0
mov    %esi,%ebp
imul   %edx,%ebp
add    %r14d,%ebp
movslq %ebp,%rbp
movss  (%rdi,%rbp,4),%xmm6
cvtss2sd %xmm6,%xmm6
addsd  %xmm0,%xmm6
xorps  %xmm0,%xmm0
cvtsd2ss %xmm6,%xmm0
movss  %xmm0,(%rdi,%rbp,4)
mulsd  %xmm2,%xmm5
add    $0x1,%esi
imul   %edx,%esi
add    %r14d,%esi
movslq %esi,%rbp
movss  (%rdi,%rbp,4),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm5,%xmm0
cvtsd2ss %xmm0,%xmm0
movapd %xmm11,%xmm7
addsd  %xmm9,%xmm7
cvttsd2si %xmm7,%esi
cvttpd2dq %xmm7,%xmm2
movss  %xmm0,(%rdi,%rbp,4)
cvtdq2pd %xmm2,%xmm6
subsd  %xmm11,%xmm6
mulsd  %xmm1,%xmm6
cvttps2dq %xmm13,%xmm0
cvtdq2pd %xmm0,%xmm0
addsd  %xmm3,%xmm6
addsd  %xmm9,%xmm0
cvttsd2si %xmm6,%ebx
cvttpd2dq %xmm6,%xmm2
cvtdq2pd %xmm2,%xmm2
subsd  %xmm0,%xmm7
subsd  %xmm2,%xmm6
movapd %xmm12,%xmm0
subsd  %xmm6,%xmm0
mulsd  %xmm7,%xmm0
mov    %ebx,%ebp
imul   %edx,%ebp
add    %esi,%ebp
movslq %ebp,%rbp
movss  (%rdi,%rbp,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm0,%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  %xmm0,(%rdi,%rbp,4)
mulsd  %xmm7,%xmm6
add    $0x1,%ebx
imul   %edx,%ebx
add    %esi,%ebx
movslq %ebx,%rbx
movss  (%rdi,%rbx,4),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm6,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rdi,%rbx,4)
lea    -0x1(%rsi),%ebx
cmp    %r14d,%ebx
jle    1150 <render_lines_2D_WALA+0x50>
mov    %esi,%esi
movslq %r14d,%rbx
add    $0x1,%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
addsd  %xmm1,%xmm4
cvttsd2si %xmm4,%eax
cvttpd2dq %xmm4,%xmm0
cvtdq2pd %xmm0,%xmm0
movapd %xmm4,%xmm2
subsd  %xmm0,%xmm2
movapd %xmm12,%xmm0
subsd  %xmm2,%xmm0
mov    %eax,%ebp
imul   %edx,%ebp
movslq %ebp,%rbp
add    %rbx,%rbp
movss  (%rdi,%rbp,4),%xmm3
cvtss2sd %xmm3,%xmm3
addsd  %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtsd2ss %xmm3,%xmm0
movss  %xmm0,(%rdi,%rbp,4)
add    $0x1,%eax
imul   %edx,%eax
cltq
add    %rbx,%rax
movss  (%rdi,%rax,4),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm2,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%rdi,%rax,4)
add    $0x1,%rbx
cmp    %ebx,%esi
jne    1380 <render_lines_2D_WALA+0x280>
jmp    1150 <render_lines_2D_WALA+0x50>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movaps %xmm15,%xmm4
movaps %xmm10,%xmm11
movaps %xmm7,%xmm15
movaps %xmm6,%xmm10
movaps %xmm14,%xmm6
movaps %xmm2,%xmm14
movaps %xmm10,%xmm2
addsd  %xmm9,%xmm2
cvttsd2si %xmm2,%ebx
cvttpd2dq %xmm2,%xmm3
cvtdq2pd %xmm3,%xmm5
divsd  %xmm1,%xmm0
subsd  %xmm10,%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm15,%xmm5
cvttps2dq %xmm6,%xmm1
cvtdq2pd %xmm1,%xmm1
addsd  %xmm9,%xmm1
subsd  %xmm2,%xmm1
addsd  %xmm12,%xmm1
cvttsd2si %xmm5,%eax
cvttpd2dq %xmm5,%xmm2
cvtdq2pd %xmm2,%xmm2
movapd %xmm5,%xmm3
subsd  %xmm2,%xmm3
movapd %xmm12,%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm1,%xmm2
mov    %ebx,%esi
imul   %edx,%esi
add    %eax,%esi
movslq %esi,%rsi
movss  (%rdi,%rsi,4),%xmm6
cvtss2sd %xmm6,%xmm6
addsd  %xmm2,%xmm6
xorps  %xmm2,%xmm2
cvtsd2ss %xmm6,%xmm2
movss  %xmm2,(%rdi,%rsi,4)
mulsd  %xmm1,%xmm3
lea    0x1(%rbx),%r14d
mov    %r14d,%r13d
imul   %edx,%r13d
add    %r13d,%eax
cltq
movss  (%rdi,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm3,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,(%rdi,%rax,4)
movaps %xmm11,%xmm6
addsd  %xmm9,%xmm6
cvttsd2si %xmm6,%esi
cvttpd2dq %xmm6,%xmm1
cvtdq2pd %xmm1,%xmm3
subsd  %xmm11,%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm4,%xmm3
cvttps2dq %xmm14,%xmm1
cvtdq2pd %xmm1,%xmm1
addsd  %xmm9,%xmm1
subsd  %xmm1,%xmm6
cvttsd2si %xmm3,%eax
cvttpd2dq %xmm3,%xmm1
cvtdq2pd %xmm1,%xmm1
subsd  %xmm1,%xmm3
movapd %xmm12,%xmm1
subsd  %xmm3,%xmm1
mulsd  %xmm6,%xmm1
mov    %esi,%ebp
imul   %edx,%ebp
add    %eax,%ebp
movslq %ebp,%rbp
movss  (%rdi,%rbp,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtsd2ss %xmm2,%xmm1
movss  %xmm1,(%rdi,%rbp,4)
mulsd  %xmm6,%xmm3
lea    0x1(%rsi),%ebp
imul   %edx,%ebp
add    %eax,%ebp
movslq %ebp,%rax
movss  (%rdi,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm3,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,(%rdi,%rax,4)
cmp    %esi,%r14d
jge    1150 <render_lines_2D_WALA+0x50>
not    %ebx
add    %esi,%ebx
movslq %r13d,%rsi
nopl   0x0(%rax)
addsd  %xmm0,%xmm5
cvttsd2si %xmm5,%eax
cvttpd2dq %xmm5,%xmm1
cvtdq2pd %xmm1,%xmm1
movapd %xmm5,%xmm2
subsd  %xmm1,%xmm2
movapd %xmm12,%xmm1
subsd  %xmm2,%xmm1
cltq
lea    (%rsi,%rax,1),%rbp
movss  (%rdi,%rbp,4),%xmm3
cvtss2sd %xmm3,%xmm3
addsd  %xmm1,%xmm3
xorps  %xmm1,%xmm1
cvtsd2ss %xmm3,%xmm1
movss  %xmm1,(%rdi,%rbp,4)
lea    0x1(%rsi,%rax,1),%eax
cltq
movss  (%rdi,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm2,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,(%rdi,%rax,4)
add    %r15,%rsi
add    $0xffffffff,%ebx
jne    1570 <render_lines_2D_WALA+0x470>
jmp    1150 <render_lines_2D_WALA+0x50>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @render_lines_2D_WALA(float* %0, i32 %1, i32 %2, i32* %3, i32 %4, i32* %5, i32 %6, i32* %7, i32 %8, i32* %9, i32 %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 i32
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
%38 = alloca i32
%39 = alloca float
%40 = alloca float
%41 = alloca float
%42 = alloca float
%43 = alloca float
%44 = alloca float
%45 = alloca float
%46 = alloca float
%47 = alloca float
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 i32 %10, i32* %22
store float 1.000000e+00, float* %43
store i32 0, i32* %38
br label %48
48: ; preds = %529, %11
%49 = load i32, i32* %38
%50 = load i32, i32* %16
%51 = icmp slt i32 %49, %50
br i1 %51, label %52, label %532
52: ; preds = %48
%53 = load i32*, i32** %15
%54 = load i32, i32* %38
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i32, i32* %53, i64 %55
%57 = load i32, i32* %56
%58 = sitofp i32 %57 to float
store float %58, float* %39
%59 = load i32*, i32** %17
%60 = load i32, i32* %38
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i32, i32* %59, i64 %61
%63 = load i32, i32* %62
%64 = sitofp i32 %63 to float
store float %64, float* %40
%65 = load i32*, i32** %19
%66 = load i32, i32* %38
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds i32, i32* %65, i64 %67
%69 = load i32, i32* %68
%70 = sitofp i32 %69 to float
store float %70, float* %41
%71 = load i32*, i32** %21
%72 = load i32, i32* %38
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i32, i32* %71, i64 %73
%75 = load i32, i32* %74
%76 = sitofp i32 %75 to float
store float %76, float* %42
%77 = load float, float* %41
%78 = fpext float %77 to double
%79 = load float, float* %39
%80 = fpext float %79 to double
%81 = fsub double %78, %80
store double %81, double* %23
%82 = load float, float* %42
%83 = fpext float %82 to double
%84 = load float, float* %40
%85 = fpext float %84 to double
%86 = fsub double %83, %85
store double %86, double* %24
%87 = load double, double* %23
%88 = call double @llvm.fabs.f64(double %87)
%89 = load double, double* %24
%90 = call double @llvm.fabs.f64(double %89)
%91 = fcmp ogt double %88, %90
br i1 %91, label %92, label %310
92: ; preds = %52
%93 = load float, float* %41
%94 = load float, float* %39
%95 = fcmp olt float %93, %94
br i1 %95, label %96, label %107
96: ; preds = %92
br label %97
97: ; preds = %96
%98 = load float, float* %39
store float %98, float* %44
%99 = load float, float* %41
store float %99, float* %39
%100 = load float, float* %44
store float %100, float* %41
br label %101
101: ; preds = %97
br label %102
102: ; preds = %101
%103 = load float, float* %40
store float %103, float* %45
%104 = load float, float* %42
store float %104, float* %40
%105 = load float, float* %45
store float %105, float* %42
br label %106
106: ; preds = %102
br label %107
107: ; preds = %106, %92
%108 = load double, double* %24
%109 = load double, double* %23
%110 = fdiv double %108, %109
store double %110, double* %25
%111 = load float, float* %39
%112 = fpext float %111 to double
%113 = fadd double %112, 5.000000e-01
%114 = fptosi double %113 to i32
%115 = sitofp i32 %114 to double
store double %115, double* %26
%116 = load float, float* %40
%117 = fpext float %116 to double
%118 = load double, double* %25
%119 = load double, double* %26
%120 = load float, float* %39
%121 = fpext float %120 to double
%122 = fsub double %119, %121
%123 = call double @llvm.fmuladd.f64(double %118, double %122, double %117)
store double %123, double* %27
%124 = load float, float* %39
%125 = fpext float %124 to double
%126 = fadd double %125, 5.000000e-01
%127 = load float, float* %39
%128 = fptosi float %127 to i32
%129 = sitofp i32 %128 to double
%130 = fadd double %129, 5.000000e-01
%131 = fsub double %126, %130
%132 = fsub double 1.000000e+00, %131
store double %132, double* %28
%133 = load double, double* %26
%134 = fptosi double %133 to i32
store i32 %134, i32* %32
%135 = load double, double* %27
%136 = fptosi double %135 to i32
store i32 %136, i32* %33
%137 = load double, double* %27
%138 = load double, double* %27
%139 = fptosi double %138 to i32
%140 = sitofp i32 %139 to double
%141 = fsub double %137, %140
%142 = fsub double 1.000000e+00, %141
%143 = load double, double* %28
%144 = fmul double %142, %143
%145 = load float, float* %43
%146 = fpext float %145 to double
%147 = load float*, float** %12
%148 = load i32, i32* %33
%149 = load i32, i32* %14
%150 = mul nsw i32 %148, %149
%151 = load i32, i32* %32
%152 = add nsw i32 %150, %151
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds float, float* %147, i64 %153
%155 = load float, float* %154
%156 = fpext float %155 to double
%157 = call double @llvm.fmuladd.f64(double %144, double %146, double %156)
%158 = fptrunc double %157 to float
store float %158, float* %154
%159 = load double, double* %27
%160 = load double, double* %27
%161 = fptosi double %160 to i32
%162 = sitofp i32 %161 to double
%163 = fsub double %159, %162
%164 = load double, double* %28
%165 = fmul double %163, %164
%166 = load float, float* %43
%167 = fpext float %166 to double
%168 = load float*, float** %12
%169 = load i32, i32* %33
%170 = add nsw i32 %169, 1
%171 = load i32, i32* %14
%172 = mul nsw i32 %170, %171
%173 = load i32, i32* %32
%174 = add nsw i32 %172, %173
%175 = sext i32 %174 to i64
%176 = getelementptr inbounds float, float* %168, i64 %175
%177 = load float, float* %176
%178 = fpext float %177 to double
%179 = call double @llvm.fmuladd.f64(double %165, double %167, double %178)
%180 = fptrunc double %179 to float
store float %180, float* %176
%181 = load double, double* %27
%182 = load double, double* %25
%183 = fadd double %181, %182
store double %183, double* %30
%184 = load float, float* %41
%185 = fpext float %184 to double
%186 = fadd double %185, 5.000000e-01
%187 = fptosi double %186 to i32
%188 = sitofp i32 %187 to double
store double %188, double* %26
%189 = load float, float* %42
%190 = fpext float %189 to double
%191 = load double, double* %25
%192 = load double, double* %26
%193 = load float, float* %41
%194 = fpext float %193 to double
%195 = fsub double %192, %194
%196 = call double @llvm.fmuladd.f64(double %191, double %195, double %190)
store double %196, double* %27
%197 = load float, float* %41
%198 = fpext float %197 to double
%199 = fadd double %198, 5.000000e-01
%200 = load float, float* %41
%201 = fptosi float %200 to i32
%202 = sitofp i32 %201 to double
%203 = fadd double %202, 5.000000e-01
%204 = fsub double %199, %203
store double %204, double* %28
%205 = load double, double* %26
%206 = fptosi double %205 to i32
store i32 %206, i32* %34
%207 = load double, double* %27
%208 = fptosi double %207 to i32
store i32 %208, i32* %35
%209 = load double, double* %27
%210 = load double, double* %27
%211 = fptosi double %210 to i32
%212 = sitofp i32 %211 to double
%213 = fsub double %209, %212
%214 = fsub double 1.000000e+00, %213
%215 = load double, double* %28
%216 = fmul double %214, %215
%217 = load float, float* %43
%218 = fpext float %217 to double
%219 = load float*, float** %12
%220 = load i32, i32* %35
%221 = load i32, i32* %14
%222 = mul nsw i32 %220, %221
%223 = load i32, i32* %34
%224 = add nsw i32 %222, %223
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds float, float* %219, i64 %225
%227 = load float, float* %226
%228 = fpext float %227 to double
%229 = call double @llvm.fmuladd.f64(double %216, double %218, double %228)
%230 = fptrunc double %229 to float
store float %230, float* %226
%231 = load double, double* %27
%232 = load double, double* %27
%233 = fptosi double %232 to i32
%234 = sitofp i32 %233 to double
%235 = fsub double %231, %234
%236 = load double, double* %28
%237 = fmul double %235, %236
%238 = load float, float* %43
%239 = fpext float %238 to double
%240 = load float*, float** %12
%241 = load i32, i32* %35
%242 = add nsw i32 %241, 1
%243 = load i32, i32* %14
%244 = mul nsw i32 %242, %243
%245 = load i32, i32* %34
%246 = add nsw i32 %244, %245
%247 = sext i32 %246 to i64
%248 = getelementptr inbounds float, float* %240, i64 %247
%249 = load float, float* %248
%250 = fpext float %249 to double
%251 = call double @llvm.fmuladd.f64(double %237, double %239, double %250)
%252 = fptrunc double %251 to float
store float %252, float* %248
%253 = load i32, i32* %32
%254 = add nsw i32 %253, 1
store i32 %254, i32* %36
br label %255
255: ; preds = %306, %107
%256 = load i32, i32* %36
%257 = load i32, i32* %34
%258 = sub nsw i32 %257, 1
%259 = icmp sle i32 %256, %258
br i1 %259, label %260, label %309
260: ; preds = %255
%261 = load double, double* %30
%262 = load double, double* %30
%263 = fptosi double %262 to i32
%264 = sitofp i32 %263 to double
%265 = fsub double %261, %264
%266 = fsub double 1.000000e+00, %265
%267 = load float, float* %43
%268 = fpext float %267 to double
%269 = load float*, float** %12
%270 = load double, double* %30
%271 = fptosi double %270 to i32
%272 = load i32, i32* %14
%273 = mul nsw i32 %271, %272
%274 = load i32, i32* %36
%275 = add nsw i32 %273, %274
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds float, float* %269, i64 %276
%278 = load float, float* %277
%279 = fpext float %278 to double
%280 = call double @llvm.fmuladd.f64(double %266, double %268, double %279)
%281 = fptrunc double %280 to float
store float %281, float* %277
%282 = load double, double* %30
%283 = load double, double* %30
%284 = fptosi double %283 to i32
%285 = sitofp i32 %284 to double
%286 = fsub double %282, %285
%287 = load float, float* %43
%288 = fpext float %287 to double
%289 = load float*, float** %12
%290 = load double, double* %30
%291 = fptosi double %290 to i32
%292 = add nsw i32 %291, 1
%293 = load i32, i32* %14
%294 = mul nsw i32 %292, %293
%295 = load i32, i32* %36
%296 = add nsw i32 %294, %295
%297 = sext i32 %296 to i64
%298 = getelementptr inbounds float, float* %289, i64 %297
%299 = load float, float* %298
%300 = fpext float %299 to double
%301 = call double @llvm.fmuladd.f64(double %286, double %288, double %300)
%302 = fptrunc double %301 to float
store float %302, float* %298
%303 = load double, double* %25
%304 = load double, double* %30
%305 = fadd double %304, %303
store double %305, double* %30
br label %306
306: ; preds = %260
%307 = load i32, i32* %36
%308 = add nsw i32 %307, 1
store i32 %308, i32* %36
br label %255
309: ; preds = %255
br label %528
310: ; preds = %52
%311 = load float, float* %42
%312 = load float, float* %40
%313 = fcmp olt float %311, %312
br i1 %313, label %314, label %325
314: ; preds = %310
br label %315
315: ; preds = %314
%316 = load float, float* %39
store float %316, float* %46
%317 = load float, float* %41
store float %317, float* %39
%318 = load float, float* %46
store float %318, float* %41
br label %319
319: ; preds = %315
br label %320
320: ; preds = %319
%321 = load float, float* %40
store float %321, float* %47
%322 = load float, float* %42
store float %322, float* %40
%323 = load float, float* %47
store float %323, float* %42
br label %324
324: ; preds = %320
br label %325
325: ; preds = %324, %310
%326 = load double, double* %23
%327 = load double, double* %24
%328 = fdiv double %326, %327
store double %328, double* %25
%329 = load float, float* %40
%330 = fpext float %329 to double
%331 = fadd double %330, 5.000000e-01
%332 = fptosi double %331 to i32
%333 = sitofp i32 %332 to double
store double %333, double* %27
%334 = load float, float* %39
%335 = fpext float %334 to double
%336 = load double, double* %25
%337 = load double, double* %27
%338 = load float, float* %40
%339 = fpext float %338 to double
%340 = fsub double %337, %339
%341 = call double @llvm.fmuladd.f64(double %336, double %340, double %335)
store double %341, double* %26
%342 = load float, float* %40
%343 = fpext float %342 to double
%344 = fadd double %343, 5.000000e-01
%345 = load float, float* %40
%346 = fptosi float %345 to i32
%347 = sitofp i32 %346 to double
%348 = fadd double %347, 5.000000e-01
%349 = fsub double %344, %348
%350 = fsub double 1.000000e+00, %349
store double %350, double* %29
%351 = load double, double* %27
%352 = fptosi double %351 to i32
store i32 %352, i32* %33
%353 = load double, double* %26
%354 = fptosi double %353 to i32
store i32 %354, i32* %32
%355 = load double, double* %26
%356 = load double, double* %26
%357 = fptosi double %356 to i32
%358 = sitofp i32 %357 to double
%359 = fsub double %355, %358
%360 = fsub double 1.000000e+00, %359
%361 = load double, double* %29
%362 = fmul double %360, %361
%363 = load float, float* %43
%364 = fpext float %363 to double
%365 = load float*, float** %12
%366 = load i32, i32* %33
%367 = load i32, i32* %14
%368 = mul nsw i32 %366, %367
%369 = load i32, i32* %32
%370 = add nsw i32 %368, %369
%371 = sext i32 %370 to i64
%372 = getelementptr inbounds float, float* %365, i64 %371
%373 = load float, float* %372
%374 = fpext float %373 to double
%375 = call double @llvm.fmuladd.f64(double %362, double %364, double %374)
%376 = fptrunc double %375 to float
store float %376, float* %372
%377 = load double, double* %26
%378 = load double, double* %26
%379 = fptosi double %378 to i32
%380 = sitofp i32 %379 to double
%381 = fsub double %377, %380
%382 = load double, double* %29
%383 = fmul double %381, %382
%384 = load float, float* %43
%385 = fpext float %384 to double
%386 = load float*, float** %12
%387 = load i32, i32* %33
%388 = add nsw i32 %387, 1
%389 = load i32, i32* %14
%390 = mul nsw i32 %388, %389
%391 = load i32, i32* %32
%392 = add nsw i32 %390, %391
%393 = sext i32 %392 to i64
%394 = getelementptr inbounds float, float* %386, i64 %393
%395 = load float, float* %394
%396 = fpext float %395 to double
%397 = call double @llvm.fmuladd.f64(double %383, double %385, double %396)
%398 = fptrunc double %397 to float
store float %398, float* %394
%399 = load double, double* %26
%400 = load double, double* %25
%401 = fadd double %399, %400
store double %401, double* %31
%402 = load float, float* %42
%403 = fpext float %402 to double
%404 = fadd double %403, 5.000000e-01
%405 = fptosi double %404 to i32
%406 = sitofp i32 %405 to double
store double %406, double* %27
%407 = load float, float* %41
%408 = fpext float %407 to double
%409 = load double, double* %25
%410 = load double, double* %27
%411 = load float, float* %42
%412 = fpext float %411 to double
%413 = fsub double %410, %412
%414 = call double @llvm.fmuladd.f64(double %409, double %413, double %408)
store double %414, double* %26
%415 = load float, float* %42
%416 = fpext float %415 to double
%417 = fadd double %416, 5.000000e-01
%418 = load float, float* %42
%419 = fptosi float %418 to i32
%420 = sitofp i32 %419 to double
%421 = fadd double %420, 5.000000e-01
%422 = fsub double %417, %421
store double %422, double* %29
%423 = load double, double* %27
%424 = fptosi double %423 to i32
store i32 %424, i32* %35
%425 = load double, double* %26
%426 = fptosi double %425 to i32
store i32 %426, i32* %34
%427 = load double, double* %26
%428 = load double, double* %26
%429 = fptosi double %428 to i32
%430 = sitofp i32 %429 to double
%431 = fsub double %427, %430
%432 = fsub double 1.000000e+00, %431
%433 = load double, double* %29
%434 = fmul double %432, %433
%435 = load float, float* %43
%436 = fpext float %435 to double
%437 = load float*, float** %12
%438 = load i32, i32* %35
%439 = load i32, i32* %14
%440 = mul nsw i32 %438, %439
%441 = load i32, i32* %34
%442 = add nsw i32 %440, %441
%443 = sext i32 %442 to i64
%444 = getelementptr inbounds float, float* %437, i64 %443
%445 = load float, float* %444
%446 = fpext float %445 to double
%447 = call double @llvm.fmuladd.f64(double %434, double %436, double %446)
%448 = fptrunc double %447 to float
store float %448, float* %444
%449 = load double, double* %26
%450 = load double, double* %26
%451 = fptosi double %450 to i32
%452 = sitofp i32 %451 to double
%453 = fsub double %449, %452
%454 = load double, double* %29
%455 = fmul double %453, %454
%456 = load float, float* %43
%457 = fpext float %456 to double
%458 = load float*, float** %12
%459 = load i32, i32* %35
%460 = add nsw i32 %459, 1
%461 = load i32, i32* %14
%462 = mul nsw i32 %460, %461
%463 = load i32, i32* %34
%464 = add nsw i32 %462, %463
%465 = sext i32 %464 to i64
%466 = getelementptr inbounds float, float* %458, i64 %465
%467 = load float, float* %466
%468 = fpext float %467 to double
%469 = call double @llvm.fmuladd.f64(double %455, double %457, double %468)
%470 = fptrunc double %469 to float
store float %470, float* %466
%471 = load i32, i32* %33
%472 = add nsw i32 %471, 1
store i32 %472, i32* %37
br label %473
473: ; preds = %524, %325
%474 = load i32, i32* %37
%475 = load i32, i32* %35
%476 = sub nsw i32 %475, 1
%477 = icmp sle i32 %474, %476
br i1 %477, label %478, label %527
478: ; preds = %473
%479 = load double, double* %31
%480 = load double, double* %31
%481 = fptosi double %480 to i32
%482 = sitofp i32 %481 to double
%483 = fsub double %479, %482
%484 = fsub double 1.000000e+00, %483
%485 = load float, float* %43
%486 = fpext float %485 to double
%487 = load float*, float** %12
%488 = load i32, i32* %37
%489 = load i32, i32* %14
%490 = mul nsw i32 %488, %489
%491 = load double, double* %31
%492 = fptosi double %491 to i32
%493 = add nsw i32 %490, %492
%494 = sext i32 %493 to i64
%495 = getelementptr inbounds float, float* %487, i64 %494
%496 = load float, float* %495
%497 = fpext float %496 to double
%498 = call double @llvm.fmuladd.f64(double %484, double %486, double %497)
%499 = fptrunc double %498 to float
store float %499, float* %495
%500 = load double, double* %31
%501 = load double, double* %31
%502 = fptosi double %501 to i32
%503 = sitofp i32 %502 to double
%504 = fsub double %500, %503
%505 = load float, float* %43
%506 = fpext float %505 to double
%507 = load float*, float** %12
%508 = load i32, i32* %37
%509 = load i32, i32* %14
%510 = mul nsw i32 %508, %509
%511 = load double, double* %31
%512 = fptosi double %511 to i32
%513 = add nsw i32 %510, %512
%514 = add nsw i32 %513, 1
%515 = sext i32 %514 to i64
%516 = getelementptr inbounds float, float* %507, i64 %515
%517 = load float, float* %516
%518 = fpext float %517 to double
%519 = call double @llvm.fmuladd.f64(double %504, double %506, double %518)
%520 = fptrunc double %519 to float
store float %520, float* %516
%521 = load double, double* %25
%522 = load double, double* %31
%523 = fadd double %522, %521
store double %523, double* %31
br label %524
524: ; preds = %478
%525 = load i32, i32* %37
%526 = add nsw i32 %525, 1
store i32 %526, i32* %37
br label %473
527: ; preds = %473
br label %528
528: ; preds = %527, %309
br label %529
529: ; preds = %528
%530 = load i32, i32* %38
%531 = add nsw i32 %530, 1
store i32 %531, i32* %38
br label %48
532: ; preds = %48
ret void
}

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