int clip_1d(int *x0, int *y0, int *x1, int *y1, int mindim, int maxdim) {
  float m;
  if (*x0 < mindim) {
    if (*x1 < mindim)
      return 0;
    m = (*y1 - *y0) / (float)(*x1 - *x0);
    *y0 -= m * (*x0 - mindim);
    *x0 = mindim;
    if (*x1 > maxdim) {
      *y1 += m * (maxdim - *x1);
      *x1 = maxdim;
    }
    return 1;
  }
  if (*x0 > maxdim) {
    if (*x1 > maxdim)
      return 0;
    m = (*y1 - *y0) / (float)(*x1 - *x0);
    *y0 += m * (maxdim - *x0);
    *x0 = maxdim;
    if (*x1 < mindim) {
      *y1 -= m * (*x1 - mindim);
      *x1 = mindim;
    }
    return 1;
  }
  if (*x1 > maxdim) {
    m = (*y1 - *y0) / (float)(*x1 - *x0);
    *y1 += m * (maxdim - *x1);
    *x1 = maxdim;
    return 1;
  }
  if (*x1 < mindim) {
    m = (*y1 - *y0) / (float)(*x1 - *x0);
    *y1 -= m * (*x1 - mindim);
    *x1 = mindim;
    return 1;
  }
  return 1;
}


x86 assembly (clang, -O0):
<clip_1d>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8d,-0x2c(%rbp)
mov    %r9d,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
cmp    -0x2c(%rbp),%eax
jge    11fa <clip_1d+0xfa>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
cmp    -0x2c(%rbp),%eax
jge    1146 <clip_1d+0x46>
movl   $0x0,-0x4(%rbp)
jmp    13d7 <clip_1d+0x2d7>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    -0x18(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm0
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x34(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
sub    -0x2c(%rbp),%eax
cvtsi2ss %eax,%xmm2
mov    -0x18(%rbp),%rax
cvtsi2ssl (%rax),%xmm1
movd   %xmm0,%ecx
xor    $0x80000000,%ecx
movd   %ecx,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%ecx
mov    %ecx,(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
cmp    -0x30(%rbp),%eax
jle    11ee <clip_1d+0xee>
movss  -0x34(%rbp),%xmm0
mov    -0x30(%rbp),%eax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm2
mov    -0x28(%rbp),%rax
cvtsi2ssl (%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    13d7 <clip_1d+0x2d7>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
cmp    -0x30(%rbp),%eax
jle    12d8 <clip_1d+0x1d8>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
cmp    -0x30(%rbp),%eax
jle    1224 <clip_1d+0x124>
movl   $0x0,-0x4(%rbp)
jmp    13d7 <clip_1d+0x2d7>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    -0x18(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm0
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x34(%rbp),%xmm0
mov    -0x30(%rbp),%eax
mov    -0x10(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm2
mov    -0x18(%rbp),%rax
cvtsi2ssl (%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
cmp    -0x2c(%rbp),%eax
jge    12cc <clip_1d+0x1cc>
movss  -0x34(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
sub    -0x2c(%rbp),%eax
cvtsi2ss %eax,%xmm2
mov    -0x28(%rbp),%rax
cvtsi2ssl (%rax),%xmm1
movd   %xmm0,%ecx
xor    $0x80000000,%ecx
movd   %ecx,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%ecx
mov    %ecx,(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    13d7 <clip_1d+0x2d7>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
cmp    -0x30(%rbp),%eax
jle    134d <clip_1d+0x24d>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    -0x18(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm0
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x34(%rbp),%xmm0
mov    -0x30(%rbp),%eax
mov    -0x20(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm2
mov    -0x28(%rbp),%rax
cvtsi2ssl (%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%ecx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    13d7 <clip_1d+0x2d7>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
cmp    -0x2c(%rbp),%eax
jge    13d0 <clip_1d+0x2d0>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    -0x18(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm0
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
sub    (%rcx),%eax
cvtsi2ss %eax,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x34(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
sub    -0x2c(%rbp),%eax
cvtsi2ss %eax,%xmm2
mov    -0x28(%rbp),%rax
cvtsi2ssl (%rax),%xmm1
movd   %xmm0,%ecx
xor    $0x80000000,%ecx
movd   %ecx,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
cvttss2si %xmm0,%ecx
mov    %ecx,(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    13d7 <clip_1d+0x2d7>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<clip_1d>:
push   %rbp
push   %rbx
mov    (%rdi),%r10d
mov    %r10d,%r11d
sub    %r8d,%r11d
jge    117c <clip_1d+0x7c>
mov    (%rdx),%ebx
xor    %eax,%eax
cmp    %r8d,%ebx
jl     1262 <clip_1d+0x162>
mov    (%rcx),%eax
mov    (%rsi),%ebp
sub    %ebp,%eax
cvtsi2ss %eax,%xmm0
sub    %r10d,%ebx
cvtsi2ss %ebx,%xmm1
divss  %xmm1,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ss %r11d,%xmm1
cvtsi2ss %ebp,%xmm2
mulss  %xmm0,%xmm1
subss  %xmm1,%xmm2
cvttss2si %xmm2,%eax
mov    %eax,(%rsi)
mov    %r8d,(%rdi)
mov    (%rdx),%esi
mov    $0x1,%eax
cmp    %r9d,%esi
jle    1262 <clip_1d+0x162>
mov    %r9d,%eax
sub    %esi,%eax
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
xorps  %xmm2,%xmm2
cvtsi2ssl (%rcx),%xmm2
mulss  %xmm1,%xmm0
addss  %xmm2,%xmm0
jmp    1254 <clip_1d+0x154>
mov    (%rdx),%r11d
cmp    %r9d,%r10d
jle    11ef <clip_1d+0xef>
xor    %eax,%eax
cmp    %r9d,%r11d
jg     1262 <clip_1d+0x162>
mov    (%rcx),%eax
mov    (%rsi),%ebx
sub    %ebx,%eax
cvtsi2ss %eax,%xmm1
sub    %r10d,%r11d
cvtsi2ss %r11d,%xmm0
divss  %xmm0,%xmm1
mov    %r9d,%eax
sub    %r10d,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
cvtsi2ss %ebx,%xmm2
mulss  %xmm1,%xmm0
addss  %xmm2,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,(%rsi)
mov    %r9d,(%rdi)
mov    (%rdx),%esi
mov    $0x1,%eax
sub    %r8d,%esi
jge    1262 <clip_1d+0x162>
xorps  %xmm2,%xmm2
cvtsi2ss %esi,%xmm2
xorps  %xmm0,%xmm0
cvtsi2ssl (%rcx),%xmm0
mulss  %xmm2,%xmm1
subss  %xmm1,%xmm0
jmp    1251 <clip_1d+0x151>
cmp    %r9d,%r11d
jle    1220 <clip_1d+0x120>
mov    (%rcx),%eax
cvtsi2ss %eax,%xmm0
sub    (%rsi),%eax
cvtsi2ss %eax,%xmm1
mov    %r9d,%eax
sub    %r11d,%eax
sub    %r10d,%r11d
cvtsi2ss %r11d,%xmm2
cvtsi2ss %eax,%xmm3
divss  %xmm2,%xmm1
mulss  %xmm1,%xmm3
addss  %xmm3,%xmm0
jmp    1254 <clip_1d+0x154>
mov    $0x1,%eax
mov    %r11d,%edi
sub    %r8d,%edi
jge    1262 <clip_1d+0x162>
mov    (%rcx),%eax
cvtsi2ss %eax,%xmm0
sub    (%rsi),%eax
cvtsi2ss %eax,%xmm1
sub    %r10d,%r11d
cvtsi2ss %r11d,%xmm2
cvtsi2ss %edi,%xmm3
divss  %xmm2,%xmm1
mulss  %xmm1,%xmm3
subss  %xmm3,%xmm0
mov    %r8d,%r9d
cvttss2si %xmm0,%eax
mov    %eax,(%rcx)
mov    %r9d,(%rdx)
mov    $0x1,%eax
pop    %rbx
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @clip_1d(i32* nocapture %0, i32* nocapture %1, i32* nocapture %2, i32* nocapture %3, i32 %4, i32 %5) {
%7 = load i32, i32* %0
%8 = icmp slt i32 %7, %4
br i1 %8, label %9, label %34
9: ; preds = %6
%10 = load i32, i32* %2
%11 = icmp slt i32 %10, %4
br i1 %11, label %93, label %12
12: ; preds = %9
%13 = load i32, i32* %3
%14 = load i32, i32* %1
%15 = sub nsw i32 %13, %14
%16 = sitofp i32 %15 to float
%17 = sub nsw i32 %10, %7
%18 = sitofp i32 %17 to float
%19 = fdiv float %16, %18
%20 = sub nsw i32 %7, %4
%21 = sitofp i32 %20 to float
%22 = sitofp i32 %14 to float
%23 = fneg float %19
%24 = tail call float @llvm.fmuladd.f32(float %23, float %21, float %22)
%25 = fptosi float %24 to i32
store i32 %25, i32* %1
store i32 %4, i32* %0
%26 = load i32, i32* %2
%27 = icmp sgt i32 %26, %5
br i1 %27, label %28, label %93
28: ; preds = %12
%29 = sub nsw i32 %5, %26
%30 = sitofp i32 %29 to float
%31 = load i32, i32* %3
%32 = sitofp i32 %31 to float
%33 = tail call float @llvm.fmuladd.f32(float %19, float %30, float %32)
br label %89
34: ; preds = %6
%35 = icmp sgt i32 %7, %5
%36 = load i32, i32* %2
%37 = icmp sgt i32 %36, %5
br i1 %35, label %38, label %61
38: ; preds = %34
br i1 %37, label %93, label %39
39: ; preds = %38
%40 = load i32, i32* %3
%41 = load i32, i32* %1
%42 = sub nsw i32 %40, %41
%43 = sitofp i32 %42 to float
%44 = sub nsw i32 %36, %7
%45 = sitofp i32 %44 to float
%46 = fdiv float %43, %45
%47 = sub nsw i32 %5, %7
%48 = sitofp i32 %47 to float
%49 = sitofp i32 %41 to float
%50 = tail call float @llvm.fmuladd.f32(float %46, float %48, float %49)
%51 = fptosi float %50 to i32
store i32 %51, i32* %1
store i32 %5, i32* %0
%52 = load i32, i32* %2
%53 = icmp slt i32 %52, %4
br i1 %53, label %54, label %93
54: ; preds = %39
%55 = sub nsw i32 %52, %4
%56 = sitofp i32 %55 to float
%57 = load i32, i32* %3
%58 = sitofp i32 %57 to float
%59 = fneg float %46
%60 = tail call float @llvm.fmuladd.f32(float %59, float %56, float %58)
br label %89
61: ; preds = %34
br i1 %37, label %62, label %74
62: ; preds = %61
%63 = load i32, i32* %3
%64 = load i32, i32* %1
%65 = sub nsw i32 %63, %64
%66 = sitofp i32 %65 to float
%67 = sub nsw i32 %36, %7
%68 = sitofp i32 %67 to float
%69 = fdiv float %66, %68
%70 = sub nsw i32 %5, %36
%71 = sitofp i32 %70 to float
%72 = sitofp i32 %63 to float
%73 = tail call float @llvm.fmuladd.f32(float %69, float %71, float %72)
br label %89
74: ; preds = %61
%75 = icmp slt i32 %36, %4
br i1 %75, label %76, label %93
76: ; preds = %74
%77 = load i32, i32* %3
%78 = load i32, i32* %1
%79 = sub nsw i32 %77, %78
%80 = sitofp i32 %79 to float
%81 = sub nsw i32 %36, %7
%82 = sitofp i32 %81 to float
%83 = sub nsw i32 %36, %4
%84 = sitofp i32 %83 to float
%85 = sitofp i32 %77 to float
%86 = fneg float %80
%87 = fdiv float %86, %82
%88 = tail call float @llvm.fmuladd.f32(float %87, float %84, float %85)
br label %89
89: ; preds = %62, %76, %28, %54
%90 = phi float [ %60, %54 ], [ %33, %28 ], [ %88, %76 ], [ %73, %62 ]
%91 = phi i32 [ %4, %54 ], [ %5, %28 ], [ %4, %76 ], [ %5, %62 ]
%92 = fptosi float %90 to i32
store i32 %92, i32* %3
store i32 %91, i32* %2
br label %93
93: ; preds = %89, %74, %39, %38, %12, %9
%94 = phi i32 [ 0, %9 ], [ 1, %12 ], [ 0, %38 ], [ 1, %39 ], [ 1, %74 ], [ 1, %89 ]
ret i32 %94
}