short getLineCoordinates(short listOfCoordinates[][2], const short originLoc[2],
                         const short targetLoc[2]) {
  float targetVector[2], error[2];
  short largerTargetComponent, currentVector[2], previousVector[2],
      quadrantTransform[2], i;
  short currentLoc[2], previousLoc[2];
  short cellNumber = 0;
  if (originLoc[0] == targetLoc[0] && originLoc[1] == targetLoc[1]) {
    return 0;
  }
  for (i = 0; i <= 1; i++) {
    targetVector[i] = targetLoc[i] - originLoc[i];
    if (targetVector[i] < 0) {
      targetVector[i] *= -1;
      quadrantTransform[i] = -1;
    } else {
      quadrantTransform[i] = 1;
    }
    currentVector[i] = previousVector[i] = error[i] = 0;
    currentLoc[i] = originLoc[i];
  }
  largerTargetComponent =
      (((targetVector[0]) > (targetVector[1])) ? (targetVector[0])
                                               : (targetVector[1]));
  targetVector[0] /= largerTargetComponent;
  targetVector[1] /= largerTargetComponent;
  do {
    for (i = 0; i <= 1; i++) {
      previousLoc[i] = currentLoc[i];
      currentVector[i] += targetVector[i];
      error[i] += (targetVector[i] == 1 ? 0 : targetVector[i]);
      if (error[i] >= 0.5) {
        currentVector[i]++;
        error[i] -= 1;
      }
      currentLoc[i] = quadrantTransform[i] * currentVector[i] + originLoc[i];
      listOfCoordinates[cellNumber][i] = currentLoc[i];
    }
    cellNumber++;
  } while (((currentLoc[0]) >= 0 && (currentLoc[0]) < (100 - 20 - 1) &&
            (currentLoc[1]) >= 0 && (currentLoc[1]) < ((31 + 5) - 5 - 2)));
  cellNumber--;
  listOfCoordinates[cellNumber][0] = listOfCoordinates[cellNumber][1] = -1;
  return cellNumber;
}


x86 assembly (clang, -O0):
<getLineCoordinates>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
movw   $0x0,-0x4a(%rbp)
mov    -0x18(%rbp),%rax
movswl (%rax),%eax
mov    -0x20(%rbp),%rcx
movswl (%rcx),%ecx
cmp    %ecx,%eax
jne    114f <getLineCoordinates+0x4f>
mov    -0x18(%rbp),%rax
movswl 0x2(%rax),%eax
mov    -0x20(%rbp),%rcx
movswl 0x2(%rcx),%ecx
cmp    %ecx,%eax
jne    114f <getLineCoordinates+0x4f>
movw   $0x0,-0x2(%rbp)
jmp    1465 <getLineCoordinates+0x365>
movw   $0x0,-0x40(%rbp)
movswl -0x40(%rbp),%eax
cmp    $0x1,%eax
jg     1224 <getLineCoordinates+0x124>
mov    -0x20(%rbp),%rax
movswq -0x40(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
mov    -0x18(%rbp),%rcx
movswq -0x40(%rbp),%rdx
movswl (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
cvtsi2ss %eax,%xmm0
movswq -0x40(%rbp),%rax
movss  %xmm0,-0x28(%rbp,%rax,4)
movswq -0x40(%rbp),%rax
xorps  %xmm0,%xmm0
ucomiss -0x28(%rbp,%rax,4),%xmm0
jbe    11ca <getLineCoordinates+0xca>
movswq -0x40(%rbp),%rax
movss  0xe57(%rip),%xmm0
mulss  -0x28(%rbp,%rax,4),%xmm0
movss  %xmm0,-0x28(%rbp,%rax,4)
movswq -0x40(%rbp),%rax
movw   $0xffff,-0x3e(%rbp,%rax,2)
jmp    11d6 <getLineCoordinates+0xd6>
movswq -0x40(%rbp),%rax
movw   $0x1,-0x3e(%rbp,%rax,2)
movswq -0x40(%rbp),%rax
xorps  %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp,%rax,4)
movswq -0x40(%rbp),%rax
movw   $0x0,-0x3a(%rbp,%rax,2)
movswq -0x40(%rbp),%rax
movw   $0x0,-0x36(%rbp,%rax,2)
mov    -0x18(%rbp),%rax
movswq -0x40(%rbp),%rcx
mov    (%rax,%rcx,2),%cx
movswq -0x40(%rbp),%rax
mov    %cx,-0x44(%rbp,%rax,2)
mov    -0x40(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x40(%rbp)
jmp    1155 <getLineCoordinates+0x55>
movss  -0x28(%rbp),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    1242 <getLineCoordinates+0x142>
movss  -0x28(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
jmp    124c <getLineCoordinates+0x14c>
movss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x50(%rbp),%xmm0
cvttss2si %xmm0,%eax
mov    %ax,-0x32(%rbp)
movswl -0x32(%rbp),%eax
cvtsi2ss %eax,%xmm1
movss  -0x28(%rbp),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movswl -0x32(%rbp),%eax
cvtsi2ss %eax,%xmm1
movss  -0x24(%rbp),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movw   $0x0,-0x40(%rbp)
movswl -0x40(%rbp),%eax
cmp    $0x1,%eax
jg     13d8 <getLineCoordinates+0x2d8>
movswq -0x40(%rbp),%rax
mov    -0x44(%rbp,%rax,2),%cx
mov    %cx,-0x48(%rbp,%rax,2)
movswq -0x40(%rbp),%rcx
movss  -0x28(%rbp,%rcx,4),%xmm1
mov    %rcx,%rax
movswl -0x36(%rbp,%rcx,2),%ecx
cvtsi2ss %ecx,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%ecx
mov    %cx,-0x36(%rbp,%rax,2)
movswq -0x40(%rbp),%rax
movss  -0x28(%rbp,%rax,4),%xmm0
movss  0xd22(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    12fa <getLineCoordinates+0x1fa>
jp     12fa <getLineCoordinates+0x1fa>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
jmp    130a <getLineCoordinates+0x20a>
movswq -0x40(%rbp),%rax
movss  -0x28(%rbp,%rax,4),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
movswq -0x40(%rbp),%rax
addss  -0x30(%rbp,%rax,4),%xmm0
movss  %xmm0,-0x30(%rbp,%rax,4)
movswq -0x40(%rbp),%rax
movss  -0x30(%rbp,%rax,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcd1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1371 <getLineCoordinates+0x271>
movswq -0x40(%rbp),%rax
mov    -0x36(%rbp,%rax,2),%cx
add    $0x1,%cx
mov    %cx,-0x36(%rbp,%rax,2)
movswq -0x40(%rbp),%rax
movss  -0x30(%rbp,%rax,4),%xmm0
movss  0xc99(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x30(%rbp,%rax,4)
movswq -0x40(%rbp),%rax
movswl -0x3e(%rbp,%rax,2),%eax
movswq -0x40(%rbp),%rcx
movswl -0x36(%rbp,%rcx,2),%ecx
imul   %ecx,%eax
mov    -0x18(%rbp),%rcx
movswq -0x40(%rbp),%rdx
movswl (%rcx,%rdx,2),%ecx
add    %ecx,%eax
mov    %ax,%cx
movswq -0x40(%rbp),%rax
mov    %cx,-0x44(%rbp,%rax,2)
movswq -0x40(%rbp),%rax
mov    -0x44(%rbp,%rax,2),%dx
mov    -0x10(%rbp),%rax
movswq -0x4a(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
movswq -0x40(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x40(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x40(%rbp)
jmp    128b <getLineCoordinates+0x18b>
mov    -0x4a(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x4a(%rbp)
movswl -0x44(%rbp),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x55(%rbp)
jl     1427 <getLineCoordinates+0x327>
movswl -0x44(%rbp),%ecx
xor    %eax,%eax
cmp    $0x4f,%ecx
mov    %al,-0x55(%rbp)
jge    1427 <getLineCoordinates+0x327>
movswl -0x42(%rbp),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x55(%rbp)
jl     1427 <getLineCoordinates+0x327>
movswl -0x42(%rbp),%eax
cmp    $0x1d,%eax
setl   %al
mov    %al,-0x55(%rbp)
mov    -0x55(%rbp),%al
test   $0x1,%al
jne    1285 <getLineCoordinates+0x185>
mov    -0x4a(%rbp),%ax
add    $0xffff,%ax
mov    %ax,-0x4a(%rbp)
mov    -0x10(%rbp),%rax
movswq -0x4a(%rbp),%rcx
movw   $0xffff,0x2(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movswq -0x4a(%rbp),%rcx
movw   $0xffff,(%rax,%rcx,4)
mov    -0x4a(%rbp),%ax
mov    %ax,-0x2(%rbp)
movswl -0x2(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<getLineCoordinates>:
push   %rbx
movswl (%rsi),%eax
movswl (%rdx),%r8d
cmp    %r8w,%ax
jne    111c <getLineCoordinates+0x1c>
movzwl 0x2(%rsi),%ecx
cmp    0x2(%rdx),%cx
jne    111c <getLineCoordinates+0x1c>
xor    %eax,%eax
pop    %rbx
ret
sub    %eax,%r8d
cvtsi2ss %r8d,%xmm8
movaps 0xed5(%rip),%xmm2
jns    1131 <getLineCoordinates+0x31>
xorps  %xmm2,%xmm8
movswl 0x2(%rdx),%r9d
movswl 0x2(%rsi),%eax
sub    %eax,%r9d
cvtsi2ss %r9d,%xmm9
jns    1148 <getLineCoordinates+0x48>
xorps  %xmm2,%xmm9
movaps %xmm8,%xmm2
maxss  %xmm9,%xmm2
cvttss2si %xmm2,%eax
cwtl
xorps  %xmm2,%xmm2
cvtsi2ss %eax,%xmm2
divss  %xmm2,%xmm8
divss  %xmm2,%xmm9
movss  0xea1(%rip),%xmm2
movaps %xmm8,%xmm3
cmpeqss %xmm2,%xmm3
andnps %xmm8,%xmm3
cmpeqss %xmm9,%xmm2
andnps %xmm9,%xmm2
xorps  %xmm4,%xmm4
mov    $0xffff,%ax
xor    %r11d,%r11d
movss  0xe7c(%rip),%xmm1
movss  0xe78(%rip),%xmm6
xorps  %xmm7,%xmm7
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
movswl %r11w,%edx
xorps  %xmm0,%xmm0
cvtsi2ss %edx,%xmm0
addss  %xmm8,%xmm0
cvttss2si %xmm0,%r11d
add    $0x1,%eax
addss  %xmm3,%xmm4
ucomiss %xmm1,%xmm4
sbb    $0xffff,%r11w
mov    %r11d,%ebx
neg    %ebx
test   %r8d,%r8d
cmovns %r11d,%ebx
add    (%rsi),%bx
movswl %cx,%ecx
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
addss  %xmm9,%xmm0
cvttss2si %xmm0,%ecx
addss  %xmm2,%xmm7
ucomiss %xmm1,%xmm7
sbb    $0xffff,%cx
mov    %ecx,%edx
neg    %edx
test   %r9d,%r9d
movswq %ax,%r10
mov    %bx,(%rdi,%r10,4)
cmovns %ecx,%edx
add    0x2(%rsi),%dx
mov    %dx,0x2(%rdi,%r10,4)
cmp    $0x4e,%bx
ja     1263 <getLineCoordinates+0x163>
test   %dx,%dx
js     1263 <getLineCoordinates+0x163>
movaps %xmm4,%xmm0
addss  %xmm6,%xmm0
movaps %xmm1,%xmm5
cmpnless %xmm4,%xmm5
andps  %xmm5,%xmm4
andnps %xmm0,%xmm5
orps   %xmm5,%xmm4
movaps %xmm7,%xmm0
addss  %xmm6,%xmm0
movaps %xmm1,%xmm5
cmpnless %xmm7,%xmm5
andps  %xmm5,%xmm7
andnps %xmm0,%xmm5
orps   %xmm5,%xmm7
cmp    $0x1d,%dx
jl     11b0 <getLineCoordinates+0xb0>
movl   $0xffffffff,(%rdi,%r10,4)
ff
pop    %rbx
ret

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

LLVM IR (-O2):
define signext i16 @getLineCoordinates([2 x i16]* nocapture writeonly %0, i16* nocapture %1, i16* nocapture %2) {
%4 = load i16, i16* %1
%5 = load i16, i16* %2
%6 = icmp eq i16 %4, %5
br i1 %6, label %7, label %13
7: ; preds = %3
%8 = getelementptr inbounds i16, i16* %1, i64 1
%9 = load i16, i16* %8
%10 = getelementptr inbounds i16, i16* %2, i64 1
%11 = load i16, i16* %10
%12 = icmp eq i16 %9, %11
br i1 %12, label %88, label %13
13: ; preds = %7, %3
%14 = getelementptr inbounds i16, i16* %1, i64 1
%15 = sext i16 %5 to i32
%16 = sext i16 %4 to i32
%17 = sub nsw i32 %15, %16
%18 = sitofp i32 %17 to float
%19 = icmp slt i32 %17, 0
%20 = fneg float %18
%21 = select i1 %19, float %20, float %18
%22 = getelementptr inbounds i16, i16* %2, i64 1
%23 = load i16, i16* %22
%24 = sext i16 %23 to i32
%25 = load i16, i16* %14
%26 = sext i16 %25 to i32
%27 = sub nsw i32 %24, %26
%28 = sitofp i32 %27 to float
%29 = icmp slt i32 %27, 0
%30 = fneg float %28
%31 = select i1 %29, float %30, float %28
%32 = fcmp ogt float %21, %31
%33 = select i1 %32, float %21, float %31
%34 = fptosi float %33 to i16
%35 = sitofp i16 %34 to float
%36 = fdiv float %21, %35
%37 = fdiv float %31, %35
%38 = fcmp oeq float %36, 1.000000e+00
%39 = select i1 %38, float 0.000000e+00, float %36
%40 = fcmp oeq float %37, 1.000000e+00
%41 = select i1 %40, float 0.000000e+00, float %37
br label %42
42: ; preds = %42, %13
%43 = phi float [ 0.000000e+00, %13 ], [ %55, %42 ]
%44 = phi float [ 0.000000e+00, %13 ], [ %70, %42 ]
%45 = phi i16 [ 0, %13 ], [ %58, %42 ]
%46 = phi i16 [ 0, %13 ], [ %73, %42 ]
%47 = phi i16 [ 0, %13 ], [ %79, %42 ]
%48 = sext i16 %47 to i64
%49 = sitofp i16 %45 to float
%50 = fadd float %36, %49
%51 = fptosi float %50 to i16
%52 = fadd float %39, %43
%53 = fcmp ult float %52, 5.000000e-01
%54 = fadd float %52, -1.000000e+00
%55 = select i1 %53, float %52, float %54
%56 = xor i1 %53, true
%57 = zext i1 %56 to i16
%58 = add i16 %51, %57
%59 = sub i16 0, %58
%60 = select i1 %19, i16 %59, i16 %58
%61 = load i16, i16* %1
%62 = add i16 %60, %61
%63 = getelementptr inbounds [2 x i16], [2 x i16]* %0, i64 %48, i64 0
store i16 %62, i16* %63
%64 = sitofp i16 %46 to float
%65 = fadd float %37, %64
%66 = fptosi float %65 to i16
%67 = fadd float %41, %44
%68 = fcmp ult float %67, 5.000000e-01
%69 = fadd float %67, -1.000000e+00
%70 = select i1 %68, float %67, float %69
%71 = xor i1 %68, true
%72 = zext i1 %71 to i16
%73 = add i16 %66, %72
%74 = sub i16 0, %73
%75 = select i1 %29, i16 %74, i16 %73
%76 = load i16, i16* %14
%77 = add i16 %75, %76
%78 = getelementptr inbounds [2 x i16], [2 x i16]* %0, i64 %48, i64 1
store i16 %77, i16* %78
%79 = add i16 %47, 1
%80 = icmp ult i16 %62, 79
%81 = icmp sgt i16 %77, -1
%82 = select i1 %80, i1 %81, i1 false
%83 = icmp slt i16 %77, 29
%84 = select i1 %82, i1 %83, i1 false
br i1 %84, label %42, label %85
85: ; preds = %42
%86 = getelementptr inbounds [2 x i16], [2 x i16]* %0, i64 %48, i64 0
%87 = getelementptr inbounds [2 x i16], [2 x i16]* %0, i64 %48, i64 1
store i16 -1, i16* %87
store i16 -1, i16* %86
br label %88
88: ; preds = %7, %85
%89 = phi i16 [ %47, %85 ], [ 0, %7 ]
ret i16 %89
}