int compact_slope(xp, yp, isa_move, sz, delta)
int xp[], yp[], isa_move[];
int *sz;
double delta;
{
  int dx, dy, old_size, new_index, i, start;
  float slope, old_slope;
  old_size = *sz;
  new_index = 0;
  start = 0;
  if (xp[1] != xp[0])
    old_slope = (float)(yp[1] - yp[0]) / (float)(xp[1] - xp[0]);
  else
    old_slope = (float)(yp[1] - yp[0]) / (float)(0.00001 + xp[1] - xp[0]);
  for (i = 2; i < old_size; i++) {
    dx = xp[i] - xp[i - 1];
    dy = yp[i] - yp[i - 1];
    if (dx != 0)
      slope = (float)dy / (float)dx;
    else
      slope = (float)dy / ((float)dx + 0.00001);
    if ((ABS(slope - old_slope) > delta) || (isa_move[i])) {
      xp[new_index] = xp[start];
      yp[new_index] = yp[start];
      isa_move[new_index] = isa_move[start];
      new_index++;
      if (start != i - 1) {
        xp[new_index] = xp[i - 1];
        yp[new_index] = yp[i - 1];
        isa_move[new_index] = isa_move[i - 1];
        new_index++;
      }
      start = i;
      old_slope = slope;
    }
  }
  xp[new_index] = xp[old_size - 1];
  yp[new_index] = yp[old_size - 1];
  isa_move[new_index] = isa_move[old_size - 1];
  new_index++;
  *sz = new_index;
  return (old_size - *sz);
}


x86 assembly (clang, -O0):
<compact_slope>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
mov    -0x8(%rbp),%rcx
cmp    (%rcx),%eax
je     1187 <compact_slope+0x77>
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
mov    -0x10(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm0
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
mov    -0x8(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    11c6 <compact_slope+0xb6>
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
mov    -0x10(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm0
mov    -0x8(%rbp),%rax
cvtsi2sdl 0x4(%rax),%xmm2
movsd  0xe57(%rip),%xmm1
addsd  %xmm2,%xmm1
mov    -0x8(%rbp),%rax
cvtsi2sdl (%rax),%xmm2
subsd  %xmm2,%xmm1
cvtsd2ss %xmm1,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
movl   $0x2,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1371 <compact_slope+0x261>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x8(%rbp),%rcx
mov    -0x3c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
sub    (%rcx,%rdx,4),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
mov    -0x3c(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
sub    (%rcx,%rdx,4),%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x0,-0x2c(%rbp)
je     1237 <compact_slope+0x127>
cvtsi2ssl -0x30(%rbp),%xmm0
cvtsi2ssl -0x2c(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
jmp    1262 <compact_slope+0x152>
cvtsi2ssl -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
cvtsi2ssl -0x2c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xdaf(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
subss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <ABS@plt>
cvtsi2sd %eax,%xmm0
ucomisd -0x28(%rbp),%xmm0
ja     1298 <compact_slope+0x188>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     135e <compact_slope+0x24e>
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     134e <compact_slope+0x23e>
mov    -0x8(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x40(%rbp)
movss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    1363 <compact_slope+0x253>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11cd <compact_slope+0xbd>
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x34(%rbp),%eax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<compact_slope>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
movsd  %xmm0,0x20(%rsp)
mov    %rdx,%r15
mov    %rsi,%r12
mov    %rdi,%rbx
mov    (%rcx),%edx
mov    0x4(%rdi),%r8d
mov    %r8d,%esi
sub    (%rdi),%esi
jne    115b <compact_slope+0x4b>
xorps  %xmm0,%xmm0
cvtsi2sd %r8d,%xmm0
movsd  0xeb6(%rip),%xmm1
addsd  %xmm0,%xmm1
subsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
jmp    1162 <compact_slope+0x52>
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
movslq %edx,%rax
xor    %edi,%edi
cmp    $0x3,%edx
jl     12b2 <compact_slope+0x1a2>
mov    %rax,0x8(%rsp)
mov    %rcx,0x10(%rsp)
mov    0x4(%r12),%esi
mov    %esi,%ecx
sub    (%r12),%ecx
cvtsi2ss %ecx,%xmm2
divss  %xmm0,%xmm2
mov    $0x3,%eax
sub    %rdx,%rax
mov    %rax,0x18(%rsp)
xor    %r13d,%r13d
mov    $0x1,%r14d
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x4(%rbx,%r14,4),%ecx
mov    0x4(%r12,%r14,4),%edx
sub    %esi,%edx
xorps  %xmm1,%xmm1
cvtsi2ss %edx,%xmm1
sub    %r8d,%ecx
je     11e0 <compact_slope+0xd0>
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
divss  %xmm0,%xmm1
jmp    11f6 <compact_slope+0xe6>
cs nopw 0x0(%rax,%rax,1)
nop
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
divsd  0xe11(%rip),%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movss  %xmm1,(%rsp)
movaps %xmm1,%xmm0
movss  %xmm2,0x4(%rsp)
subss  %xmm2,%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <ABS@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
ucomisd 0x20(%rsp),%xmm0
ja     122a <compact_slope+0x11a>
cmpl   $0x0,0x4(%r15,%r14,4)
je     129e <compact_slope+0x18e>
movslq %r13d,%rax
mov    (%rbx,%rax,4),%edx
movslq %ebp,%rdi
mov    %edx,(%rbx,%rdi,4)
mov    (%r12,%rax,4),%edx
mov    %edx,(%r12,%rdi,4)
mov    (%r15,%rax,4),%edx
mov    %edx,(%r15,%rdi,4)
add    $0x1,%edi
mov    %eax,%eax
lea    0x1(%r14),%r13
cmp    %rax,%r14
je     1273 <compact_slope+0x163>
mov    (%rbx,%r14,4),%eax
movslq %edi,%rcx
mov    %eax,(%rbx,%rcx,4)
mov    (%r12,%r14,4),%eax
mov    %eax,(%r12,%rcx,4)
mov    (%r15,%r14,4),%eax
mov    %eax,(%r15,%rcx,4)
add    $0x2,%ebp
mov    %ebp,%edi
movss  (%rsp),%xmm0
mov    0x18(%rsp),%rax
add    %r14,%rax
cmp    $0x1,%rax
je     12a8 <compact_slope+0x198>
mov    0x4(%rbx,%r14,4),%r8d
mov    0x4(%r12,%r14,4),%esi
add    $0x1,%r14
movaps %xmm0,%xmm2
mov    %edi,%ebp
jmp    11b0 <compact_slope+0xa0>
mov    %ebp,%edi
movss  0x4(%rsp),%xmm0
jmp    1278 <compact_slope+0x168>
mov    0x10(%rsp),%rcx
mov    0x8(%rsp),%rax
mov    -0x4(%rbx,%rax,4),%esi
movslq %edi,%rdx
mov    %esi,(%rbx,%rdx,4)
mov    -0x4(%r12,%rax,4),%esi
mov    %esi,(%r12,%rdx,4)
mov    -0x4(%r15,%rax,4),%esi
mov    %esi,(%r15,%rdx,4)
add    $0x1,%edx
mov    %edx,(%rcx)
sub    %edx,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @compact_slope(i32* nocapture %0, i32* nocapture %1, i32* nocapture %2, i32* nocapture %3, double %4) {
%6 = load i32, i32* %3
%7 = getelementptr inbounds i32, i32* %0, i64 1
%8 = load i32, i32* %7
%9 = load i32, i32* %0
%10 = icmp eq i32 %8, %9
%11 = getelementptr inbounds i32, i32* %1, i64 1
%12 = load i32, i32* %11
%13 = load i32, i32* %1
%14 = sub nsw i32 %12, %13
%15 = sitofp i32 %14 to float
br i1 %10, label %19, label %16
16: ; preds = %5
%17 = sub nsw i32 %8, %9
%18 = sitofp i32 %17 to float
br label %24
19: ; preds = %5
%20 = sitofp i32 %8 to double
%21 = fadd double %20, 1.000000e-05
%22 = fsub double %21, %20
%23 = fptrunc double %22 to float
br label %24
24: ; preds = %19, %16
%25 = phi float [ %23, %19 ], [ %18, %16 ]
%26 = icmp sgt i32 %6, 2
br i1 %26, label %27, label %101
27: ; preds = %24
%28 = fdiv float %15, %25
%29 = zext i32 %6 to i64
br label %30
30: ; preds = %98, %27
%31 = phi i32 [ %12, %27 ], [ %100, %98 ]
%32 = phi i32 [ %8, %27 ], [ %99, %98 ]
%33 = phi i64 [ 2, %27 ], [ %96, %98 ]
%34 = phi float [ %28, %27 ], [ %95, %98 ]
%35 = phi i32 [ 0, %27 ], [ %94, %98 ]
%36 = phi i32 [ 0, %27 ], [ %93, %98 ]
%37 = getelementptr inbounds i32, i32* %0, i64 %33
%38 = load i32, i32* %37
%39 = add nsw i64 %33, -1
%40 = getelementptr inbounds i32, i32* %0, i64 %39
%41 = sub nsw i32 %38, %32
%42 = getelementptr inbounds i32, i32* %1, i64 %33
%43 = load i32, i32* %42
%44 = getelementptr inbounds i32, i32* %1, i64 %39
%45 = sub nsw i32 %43, %31
%46 = icmp eq i32 %41, 0
%47 = sitofp i32 %45 to float
br i1 %46, label %51, label %48
48: ; preds = %30
%49 = sitofp i32 %41 to float
%50 = fdiv float %47, %49
br label %55
51: ; preds = %30
%52 = fpext float %47 to double
%53 = fdiv double %52, 1.000000e-05
%54 = fptrunc double %53 to float
br label %55
55: ; preds = %51, %48
%56 = phi float [ %50, %48 ], [ %54, %51 ]
%57 = fsub float %56, %34
%58 = fpext float %57 to double
%59 = tail call i32 (double, ...) bitcast (i32 (...)* @ABS to i32 (double, ...)*)(double %58)
%60 = sitofp i32 %59 to double
%61 = fcmp ogt double %60, %4
br i1 %61, label %66, label %62
62: ; preds = %55
%63 = getelementptr inbounds i32, i32* %2, i64 %33
%64 = load i32, i32* %63
%65 = icmp eq i32 %64, 0
br i1 %65, label %92, label %66
66: ; preds = %62, %55
%67 = sext i32 %35 to i64
%68 = getelementptr inbounds i32, i32* %0, i64 %67
%69 = load i32, i32* %68
%70 = sext i32 %36 to i64
%71 = getelementptr inbounds i32, i32* %0, i64 %70
store i32 %69, i32* %71
%72 = getelementptr inbounds i32, i32* %1, i64 %67
%73 = load i32, i32* %72
%74 = getelementptr inbounds i32, i32* %1, i64 %70
store i32 %73, i32* %74
%75 = getelementptr inbounds i32, i32* %2, i64 %67
%76 = load i32, i32* %75
%77 = getelementptr inbounds i32, i32* %2, i64 %70
store i32 %76, i32* %77
%78 = add nsw i32 %36, 1
%79 = zext i32 %35 to i64
%80 = icmp eq i64 %39, %79
%81 = trunc i64 %33 to i32
br i1 %80, label %92, label %82
82: ; preds = %66
%83 = load i32, i32* %40
%84 = sext i32 %78 to i64
%85 = getelementptr inbounds i32, i32* %0, i64 %84
store i32 %83, i32* %85
%86 = load i32, i32* %44
%87 = getelementptr inbounds i32, i32* %1, i64 %84
store i32 %86, i32* %87
%88 = getelementptr inbounds i32, i32* %2, i64 %39
%89 = load i32, i32* %88
%90 = getelementptr inbounds i32, i32* %2, i64 %84
store i32 %89, i32* %90
%91 = add nsw i32 %36, 2
br label %92
92: ; preds = %66, %82, %62
%93 = phi i32 [ %36, %62 ], [ %91, %82 ], [ %78, %66 ]
%94 = phi i32 [ %35, %62 ], [ %81, %82 ], [ %81, %66 ]
%95 = phi float [ %34, %62 ], [ %56, %82 ], [ %56, %66 ]
%96 = add nuw nsw i64 %33, 1
%97 = icmp eq i64 %96, %29
br i1 %97, label %101, label %98
98: ; preds = %92
%99 = load i32, i32* %37
%100 = load i32, i32* %42
br label %30
101: ; preds = %92, %24
%102 = phi i32 [ 0, %24 ], [ %93, %92 ]
%103 = add nsw i32 %6, -1
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i32, i32* %0, i64 %104
%106 = load i32, i32* %105
%107 = sext i32 %102 to i64
%108 = getelementptr inbounds i32, i32* %0, i64 %107
store i32 %106, i32* %108
%109 = getelementptr inbounds i32, i32* %1, i64 %104
%110 = load i32, i32* %109
%111 = getelementptr inbounds i32, i32* %1, i64 %107
store i32 %110, i32* %111
%112 = getelementptr inbounds i32, i32* %2, i64 %104
%113 = load i32, i32* %112
%114 = getelementptr inbounds i32, i32* %2, i64 %107
store i32 %113, i32* %114
%115 = add nsw i32 %102, 1
store i32 %115, i32* %3
%116 = sub nsw i32 %6, %115
ret i32 %116
}