void render_line_2D_WALA(float *mat, int wy, int wx, int x1, int y1, int x2,
                         int y2, float val) {
  double dx = (double)x2 - (double)x1;
  double 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);
    }
    double gradient = dy / dx;
    double xend = ((int)(((double)(x1)) + 0.5));
    double yend = y1 + gradient * (xend - x1);
    double xgap = (1.0 - ((double)(x1 + 0.5) - (double)((int)x1 + 0.5)));
    int xpxl1 = xend;
    int 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);
    double intery = yend + gradient;
    xend = ((int)(((double)(x2)) + 0.5));
    yend = y2 + gradient * (xend - x2);
    xgap = ((double)(x2 + 0.5) - (double)((int)x2 + 0.5));
    int xpxl2 = xend;
    int 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);
    int x;
    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);
    }
    double gradient = dx / dy;
    double yend = ((int)(((double)(y1)) + 0.5));
    double xend = x1 + gradient * (yend - y1);
    double ygap = (1.0 - ((double)(y1 + 0.5) - (double)((int)y1 + 0.5)));
    int ypxl1 = yend;
    int 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);
    double interx = xend + gradient;
    yend = ((int)(((double)(y2)) + 0.5));
    xend = x2 + gradient * (yend - y2);
    ygap = ((double)(y2 + 0.5) - (double)((int)y2 + 0.5));
    int ypxl2 = yend;
    int 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);
    int y;
    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_line_2D_WALA>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
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)
cvtsi2sdl -0x1c(%rbp),%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
cvtsi2sdl 0x10(%rbp),%xmm0
cvtsi2sdl -0x18(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x28(%rbp),%xmm0
movaps 0xea9(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm1
movaps 0xe99(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    14ff <render_line_2D_WALA+0x3ff>
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11b4 <render_line_2D_WALA+0xb4>
jmp    1186 <render_line_2D_WALA+0x86>
mov    -0x14(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    119d <render_line_2D_WALA+0x9d>
mov    -0x18(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    0x10(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,0x10(%rbp)
jmp    11b4 <render_line_2D_WALA+0xb4>
movsd  -0x30(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
cvtsi2sdl -0x14(%rbp),%xmm0
movsd  0xe48(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x48(%rbp)
cvtsi2sdl -0x18(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
cvtsi2sdl -0x14(%rbp),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
cvtsi2sdl -0x14(%rbp),%xmm1
movsd  0xe05(%rip),%xmm0
addsd  %xmm0,%xmm1
cvtsi2sdl -0x14(%rbp),%xmm0
movsd  0xdf4(%rip),%xmm2
addsd  %xmm2,%xmm0
subsd  %xmm0,%xmm1
movsd  0xddc(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvttsd2si -0x48(%rbp),%eax
mov    %eax,-0x5c(%rbp)
cvttsd2si -0x50(%rbp),%eax
mov    %eax,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm1
cvttsd2si -0x50(%rbp),%eax
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0xda9(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x60(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x5c(%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  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x60(%rbp),%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    -0x5c(%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)
cvtsi2sdl -0x1c(%rbp),%xmm0
movsd  0xd0a(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x48(%rbp)
cvtsi2sdl 0x10(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
cvtsi2sdl -0x1c(%rbp),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
cvtsi2sdl -0x1c(%rbp),%xmm0
movsd  0xcc7(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl -0x1c(%rbp),%xmm1
movsd  0xcb6(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvttsd2si -0x48(%rbp),%eax
mov    %eax,-0x6c(%rbp)
cvttsd2si -0x50(%rbp),%eax
mov    %eax,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm1
cvttsd2si -0x50(%rbp),%eax
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0xc77(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x70(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x6c(%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  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0x70(%rbp),%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    -0x6c(%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    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
mov    -0x6c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     14fa <render_line_2D_WALA+0x3fa>
movsd  -0x68(%rbp),%xmm1
cvttsd2si -0x68(%rbp),%eax
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0xbb8(%rip),%xmm0
subsd  %xmm1,%xmm0
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
cvttsd2si -0x68(%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  -0x68(%rbp),%xmm0
cvttsd2si -0x68(%rbp),%eax
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
cvttsd2si -0x68(%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  -0x40(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    142d <render_line_2D_WALA+0x32d>
jmp    193e <render_line_2D_WALA+0x83e>
mov    0x10(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    153e <render_line_2D_WALA+0x43e>
jmp    1510 <render_line_2D_WALA+0x410>
mov    -0x14(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x78(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    1527 <render_line_2D_WALA+0x427>
mov    -0x18(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    0x10(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x7c(%rbp),%eax
mov    %eax,0x10(%rbp)
jmp    153e <render_line_2D_WALA+0x43e>
movsd  -0x28(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
cvtsi2sdl -0x18(%rbp),%xmm0
movsd  0xabb(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
cvtsi2sdl -0x14(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm2
ff
cvtsi2sdl -0x18(%rbp),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
cvtsi2sdl -0x18(%rbp),%xmm1
movsd  0xa6c(%rip),%xmm0
addsd  %xmm0,%xmm1
cvtsi2sdl -0x18(%rbp),%xmm0
movsd  0xa5b(%rip),%xmm2
addsd  %xmm2,%xmm0
subsd  %xmm0,%xmm1
movsd  0xa43(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
cvttsd2si -0x90(%rbp),%eax
ff
mov    %eax,-0xa4(%rbp)
cvttsd2si -0x98(%rbp),%eax
ff
mov    %eax,-0xa8(%rbp)
movsd  -0x98(%rbp),%xmm1
ff
cvttsd2si -0x98(%rbp),%eax
ff
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0x9fb(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0xa4(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0xa8(%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  -0x98(%rbp),%xmm0
ff
cvttsd2si -0x98(%rbp),%eax
ff
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0xa4(%rbp),%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    -0xa8(%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  -0x98(%rbp),%xmm0
ff
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
cvtsi2sdl 0x10(%rbp),%xmm0
movsd  0x93b(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
cvtsi2sdl -0x1c(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm2
ff
cvtsi2sdl 0x10(%rbp),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
cvtsi2sdl 0x10(%rbp),%xmm0
movsd  0x8ec(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsi2sdl 0x10(%rbp),%xmm1
movsd  0x8db(%rip),%xmm2
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
cvttsd2si -0x90(%rbp),%eax
ff
mov    %eax,-0xb4(%rbp)
cvttsd2si -0x98(%rbp),%eax
ff
mov    %eax,-0xb8(%rbp)
movsd  -0x98(%rbp),%xmm1
ff
cvttsd2si -0x98(%rbp),%eax
ff
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0x887(%rip),%xmm0
subsd  %xmm1,%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0xb4(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0xb8(%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  -0x98(%rbp),%xmm0
ff
cvttsd2si -0x98(%rbp),%eax
ff
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0xb4(%rbp),%ecx
add    $0x1,%ecx
imul   -0x10(%rbp),%ecx
add    -0xb8(%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    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
mov    -0xbc(%rbp),%eax
mov    -0xb4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     1939 <render_line_2D_WALA+0x839>
movsd  -0xb0(%rbp),%xmm1
ff
cvttsd2si -0xb0(%rbp),%eax
ff
cvtsi2sd %eax,%xmm0
subsd  %xmm0,%xmm1
movsd  0x79e(%rip),%xmm0
subsd  %xmm1,%xmm0
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0xbc(%rbp),%ecx
imul   -0x10(%rbp),%ecx
cvttsd2si -0xb0(%rbp),%edx
ff
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  -0xb0(%rbp),%xmm0
ff
cvttsd2si -0xb0(%rbp),%eax
ff
cvtsi2sd %eax,%xmm1
subsd  %xmm1,%xmm0
movss  -0x20(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
mov    -0x8(%rbp),%rax
mov    -0xbc(%rbp),%ecx
imul   -0x10(%rbp),%ecx
cvttsd2si -0xb0(%rbp),%edx
ff
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  -0x88(%rbp),%xmm0
ff
addsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0xbc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xbc(%rbp)
jmp    183b <render_line_2D_WALA+0x73b>
jmp    193e <render_line_2D_WALA+0x83e>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<render_line_2D_WALA>:
cvtsi2sd %r9d,%xmm10
cvtsi2sd %ecx,%xmm3
mov    0x8(%rsp),%eax
movapd %xmm10,%xmm7
subsd  %xmm3,%xmm7
cvtsi2sd %eax,%xmm6
cvtsi2sd %r8d,%xmm4
movapd %xmm6,%xmm2
subsd  %xmm4,%xmm2
movapd 0xed1(%rip),%xmm5
movapd %xmm7,%xmm1
andpd  %xmm5,%xmm1
andpd  %xmm2,%xmm5
ucomisd %xmm5,%xmm1
jbe    1152 <render_line_2D_WALA+0x52>
cmp    %ecx,%r9d
jge    116a <render_line_2D_WALA+0x6a>
movapd %xmm4,%xmm8
movapd %xmm3,%xmm9
jmp    117d <render_line_2D_WALA+0x7d>
cmp    %r8d,%eax
jge    135d <render_line_2D_WALA+0x25d>
movapd %xmm3,%xmm8
movapd %xmm4,%xmm9
jmp    1370 <render_line_2D_WALA+0x270>
movapd %xmm6,%xmm8
movapd %xmm10,%xmm9
movapd %xmm4,%xmm6
movapd %xmm3,%xmm10
movsd  0xe8b(%rip),%xmm4
movapd %xmm10,%xmm5
addsd  %xmm4,%xmm5
cvttsd2si %xmm5,%r8d
cvttpd2dq %xmm5,%xmm1
cvtdq2pd %xmm1,%xmm3
divsd  %xmm7,%xmm2
subsd  %xmm10,%xmm3
mulsd  %xmm2,%xmm3
addsd  %xmm6,%xmm3
subsd  %xmm5,%xmm5
movsd  0xe5f(%rip),%xmm10
cvttsd2si %xmm3,%ecx
cvttpd2dq %xmm3,%xmm6
cvtdq2pd %xmm6,%xmm7
addsd  %xmm10,%xmm5
movapd %xmm3,%xmm6
subsd  %xmm7,%xmm6
movapd %xmm10,%xmm7
subsd  %xmm6,%xmm7
mulsd  %xmm5,%xmm7
cvtss2sd %xmm0,%xmm0
mov    %ecx,%esi
imul   %edx,%esi
add    %r8d,%esi
movslq %esi,%rsi
movss  (%rdi,%rsi,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm7
addsd  %xmm1,%xmm7
xorps  %xmm1,%xmm1
cvtsd2ss %xmm7,%xmm1
movss  %xmm1,(%rdi,%rsi,4)
mulsd  %xmm5,%xmm6
add    $0x1,%ecx
imul   %edx,%ecx
add    %r8d,%ecx
movslq %ecx,%rcx
movss  (%rdi,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm6
addsd  %xmm1,%xmm6
xorps  %xmm1,%xmm1
cvtsd2ss %xmm6,%xmm1
movss  %xmm1,(%rdi,%rcx,4)
addsd  %xmm9,%xmm4
cvttsd2si %xmm4,%ecx
cvttpd2dq %xmm4,%xmm1
cvtdq2pd %xmm1,%xmm5
subsd  %xmm9,%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm8,%xmm5
subsd  %xmm4,%xmm4
cvttsd2si %xmm5,%eax
cvttpd2dq %xmm5,%xmm1
cvtdq2pd %xmm1,%xmm1
subsd  %xmm1,%xmm5
movapd %xmm10,%xmm1
subsd  %xmm5,%xmm1
mulsd  %xmm4,%xmm1
mov    %eax,%esi
imul   %edx,%esi
add    %ecx,%esi
movslq %esi,%rsi
movss  (%rdi,%rsi,4),%xmm6
cvtss2sd %xmm6,%xmm6
mulsd  %xmm0,%xmm1
addsd  %xmm6,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,(%rdi,%rsi,4)
mulsd  %xmm4,%xmm5
add    $0x1,%eax
imul   %edx,%eax
add    %ecx,%eax
cltq
movss  (%rdi,%rax,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm5
addsd  %xmm1,%xmm5
xorps  %xmm1,%xmm1
cvtsd2ss %xmm5,%xmm1
movss  %xmm1,(%rdi,%rax,4)
lea    -0x1(%rcx),%eax
cmp    %r8d,%eax
jle    153e <render_line_2D_WALA+0x43e>
mov    %ecx,%r9d
movslq %r8d,%rax
add    $0x1,%rax
nopl   (%rax)
addsd  %xmm2,%xmm3
cvttsd2si %xmm3,%ecx
cvttpd2dq %xmm3,%xmm1
cvtdq2pd %xmm1,%xmm1
movapd %xmm3,%xmm4
subsd  %xmm1,%xmm4
movapd %xmm10,%xmm1
mov    %ecx,%esi
imul   %edx,%esi
subsd  %xmm4,%xmm1
movslq %esi,%rsi
add    %rax,%rsi
movss  (%rdi,%rsi,4),%xmm5
cvtss2sd %xmm5,%xmm5
mulsd  %xmm0,%xmm1
addsd  %xmm5,%xmm1
cvtsd2ss %xmm1,%xmm1
add    $0x1,%ecx
imul   %edx,%ecx
movss  %xmm1,(%rdi,%rsi,4)
movslq %ecx,%rcx
add    %rax,%rcx
movss  (%rdi,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm4
addsd  %xmm1,%xmm4
xorps  %xmm1,%xmm1
cvtsd2ss %xmm4,%xmm1
movss  %xmm1,(%rdi,%rcx,4)
add    $0x1,%rax
cmp    %eax,%r9d
jne    12e0 <render_line_2D_WALA+0x1e0>
jmp    153e <render_line_2D_WALA+0x43e>
movapd %xmm10,%xmm8
movapd %xmm6,%xmm9
movapd %xmm3,%xmm10
movapd %xmm4,%xmm6
movsd  0xc98(%rip),%xmm4
movapd %xmm6,%xmm5
addsd  %xmm4,%xmm5
cvttsd2si %xmm5,%eax
cvttpd2dq %xmm5,%xmm1
divsd  %xmm2,%xmm7
cvtdq2pd %xmm1,%xmm2
subsd  %xmm6,%xmm2
mulsd  %xmm7,%xmm2
addsd  %xmm10,%xmm2
subsd  %xmm5,%xmm5
movsd  0xc6e(%rip),%xmm10
cvttsd2si %xmm2,%esi
cvttpd2dq %xmm2,%xmm1
addsd  %xmm10,%xmm5
cvtdq2pd %xmm1,%xmm1
movapd %xmm2,%xmm6
subsd  %xmm1,%xmm6
movapd %xmm10,%xmm1
subsd  %xmm6,%xmm1
mulsd  %xmm5,%xmm1
cvtss2sd %xmm0,%xmm0
mov    %eax,%ecx
imul   %edx,%ecx
add    %esi,%ecx
movslq %ecx,%rcx
movss  (%rdi,%rcx,4),%xmm3
cvtss2sd %xmm3,%xmm3
mulsd  %xmm0,%xmm1
addsd  %xmm3,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,(%rdi,%rcx,4)
mulsd  %xmm5,%xmm6
lea    0x1(%rax),%r8d
mov    %r8d,%r9d
imul   %edx,%r9d
add    %r9d,%esi
movslq %esi,%rsi
movss  (%rdi,%rsi,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm6
addsd  %xmm1,%xmm6
xorps  %xmm1,%xmm1
cvtsd2ss %xmm6,%xmm1
movss  %xmm1,(%rdi,%rsi,4)
addsd  %xmm9,%xmm4
cvttsd2si %xmm4,%r10d
cvttpd2dq %xmm4,%xmm1
cvtdq2pd %xmm1,%xmm5
subsd  %xmm9,%xmm5
mulsd  %xmm7,%xmm5
addsd  %xmm8,%xmm5
subsd  %xmm4,%xmm4
cvttsd2si %xmm5,%ecx
cvttpd2dq %xmm5,%xmm1
cvtdq2pd %xmm1,%xmm1
subsd  %xmm1,%xmm5
movapd %xmm10,%xmm1
subsd  %xmm5,%xmm1
mulsd  %xmm4,%xmm1
mov    %r10d,%esi
imul   %edx,%esi
add    %ecx,%esi
movslq %esi,%rsi
movss  (%rdi,%rsi,4),%xmm3
cvtss2sd %xmm3,%xmm3
mulsd  %xmm0,%xmm1
addsd  %xmm3,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,(%rdi,%rsi,4)
mulsd  %xmm4,%xmm5
lea    0x1(%r10),%esi
imul   %edx,%esi
add    %ecx,%esi
movslq %esi,%rcx
movss  (%rdi,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm5
addsd  %xmm1,%xmm5
xorps  %xmm1,%xmm1
cvtsd2ss %xmm5,%xmm1
movss  %xmm1,(%rdi,%rcx,4)
cmp    %r10d,%r8d
jge    153e <render_line_2D_WALA+0x43e>
not    %eax
add    %r10d,%eax
movslq %r9d,%rcx
movslq %edx,%r8
nopl   (%rax)
addsd  %xmm7,%xmm2
cvttpd2dq %xmm2,%xmm1
cvtdq2pd %xmm1,%xmm1
cvttsd2si %xmm2,%esi
movapd %xmm2,%xmm3
subsd  %xmm1,%xmm3
movapd %xmm10,%xmm1
movslq %esi,%rsi
subsd  %xmm3,%xmm1
lea    (%rcx,%rsi,1),%rdx
movss  (%rdi,%rdx,4),%xmm4
mulsd  %xmm0,%xmm1
cvtss2sd %xmm4,%xmm4
addsd  %xmm4,%xmm1
cvtsd2ss %xmm1,%xmm1
movss  %xmm1,(%rdi,%rdx,4)
lea    0x1(%rcx,%rsi,1),%edx
movslq %edx,%rdx
movss  (%rdi,%rdx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm0,%xmm3
addsd  %xmm1,%xmm3
xorps  %xmm1,%xmm1
cvtsd2ss %xmm3,%xmm1
movss  %xmm1,(%rdi,%rdx,4)
add    %r8,%rcx
add    $0xffffffff,%eax
jne    14d0 <render_line_2D_WALA+0x3d0>
ret

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

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