int LineIntersect(double x1, double y1, double x2, double y2, double x3,
                  double y3, double x4, double y4, double *x, double *y) {
  double mua, mub;
  double denom, numera, numerb;
  denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
  numera = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);
  numerb = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);
  if ((numera < 0 ? -(numera) : (numera)) < 0.00001 &&
      (numerb < 0 ? -(numerb) : (numerb)) < 0.00001 &&
      (denom < 0 ? -(denom) : (denom)) < 0.00001) {
    *x = (x1 + x2) / 2;
    *y = (y1 + y2) / 2;
    return (1);
  }
  if ((denom < 0 ? -(denom) : (denom)) < 0.00001) {
    *x = 0;
    *y = 0;
    return (0);
  }
  mua = numera / denom;
  mub = numerb / denom;
  if (mua < 0 || mua > 1 || mub < 0 || mub > 1) {
    *x = 0;
    *y = 0;
    return (0);
  }
  *x = x1 + mua * (x2 - x1);
  *y = y1 + mua * (y2 - y1);
  return (1);
}


x86 assembly (clang, -O0):
<LineIntersect>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
mov    %rdi,-0x50(%rbp)
mov    %rsi,-0x58(%rbp)
movsd  -0x48(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
subsd  -0x10(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
subsd  -0x30(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm3
subsd  -0x18(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
subsd  -0x38(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
subsd  -0x38(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm3
subsd  -0x30(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
subsd  -0x38(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm3
subsd  -0x30(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x78(%rbp),%xmm0
jbe    125f <LineIntersect+0x15f>
movsd  -0x78(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    126c <LineIntersect+0x16c>
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  0xd84(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    138a <LineIntersect+0x28a>
xorps  %xmm0,%xmm0
ucomisd -0x80(%rbp),%xmm0
jbe    12bd <LineIntersect+0x1bd>
movsd  -0x80(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    12ca <LineIntersect+0x1ca>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  0xd26(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    138a <LineIntersect+0x28a>
xorps  %xmm0,%xmm0
ucomisd -0x70(%rbp),%xmm0
jbe    131b <LineIntersect+0x21b>
movsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    1328 <LineIntersect+0x228>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  0xcc8(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    138a <LineIntersect+0x28a>
movsd  -0x10(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  0xcbc(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  0xc9e(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    14e3 <LineIntersect+0x3e3>
xorps  %xmm0,%xmm0
ucomisd -0x70(%rbp),%xmm0
jbe    13c1 <LineIntersect+0x2c1>
movsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    13ce <LineIntersect+0x2ce>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm1
ff
movsd  0xc22(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    140a <LineIntersect+0x30a>
mov    -0x50(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x58(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    14e3 <LineIntersect+0x3e3>
movsd  -0x78(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x80(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x60(%rbp),%xmm0
ja     1472 <LineIntersect+0x372>
movsd  -0x60(%rbp),%xmm0
movsd  0xbc5(%rip),%xmm1
ucomisd %xmm1,%xmm0
ja     1472 <LineIntersect+0x372>
xorps  %xmm0,%xmm0
ucomisd -0x68(%rbp),%xmm0
ja     1472 <LineIntersect+0x372>
movsd  -0x68(%rbp),%xmm0
movsd  0xba0(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1494 <LineIntersect+0x394>
mov    -0x50(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x58(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    14e3 <LineIntersect+0x3e3>
movsd  -0x10(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
subsd  -0x10(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
subsd  -0x18(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<LineIntersect>:
movapd %xmm2,%xmm8
unpcklpd %xmm6,%xmm8
movapd %xmm0,%xmm6
unpcklpd %xmm4,%xmm6
subpd  %xmm6,%xmm8
movapd %xmm3,%xmm9
unpcklpd %xmm7,%xmm9
movapd %xmm1,%xmm6
unpcklpd %xmm5,%xmm6
subpd  %xmm6,%xmm9
movapd %xmm8,%xmm7
unpckhpd %xmm8,%xmm7
mulsd  %xmm9,%xmm7
movapd %xmm9,%xmm11
unpckhpd %xmm9,%xmm11
mulsd  %xmm8,%xmm11
subsd  %xmm7,%xmm11
movapd %xmm1,%xmm6
subsd  %xmm5,%xmm6
movapd %xmm0,%xmm5
subsd  %xmm4,%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm9,%xmm5
unpcklpd %xmm6,%xmm6
mulpd  %xmm8,%xmm6
subpd  %xmm5,%xmm6
movapd %xmm6,%xmm7
unpckhpd %xmm6,%xmm7
movapd 0xe79(%rip),%xmm4
xorpd  %xmm7,%xmm4
xorpd  %xmm10,%xmm10
movapd %xmm7,%xmm5
cmpltsd %xmm10,%xmm5
andpd  %xmm5,%xmm4
andnpd %xmm7,%xmm5
orpd   %xmm4,%xmm5
movsd  0xe62(%rip),%xmm4
ucomisd %xmm5,%xmm4
jbe    122d <LineIntersect+0x12d>
movapd 0xe44(%rip),%xmm5
xorpd  %xmm6,%xmm5
movapd %xmm6,%xmm7
cmpltsd %xmm10,%xmm7
andpd  %xmm7,%xmm5
andnpd %xmm6,%xmm7
orpd   %xmm5,%xmm7
ucomisd %xmm7,%xmm4
jbe    122d <LineIntersect+0x12d>
movapd 0xe1c(%rip),%xmm5
xorpd  %xmm11,%xmm5
xorpd  %xmm12,%xmm12
movapd %xmm11,%xmm7
cmpltsd %xmm12,%xmm7
andpd  %xmm7,%xmm5
andnpd %xmm11,%xmm7
orpd   %xmm5,%xmm7
ucomisd %xmm7,%xmm4
jbe    122d <LineIntersect+0x12d>
addsd  %xmm2,%xmm0
movsd  0xe08(%rip),%xmm2
mulsd  %xmm2,%xmm0
movsd  %xmm0,(%rdi)
addsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm1
jmp    12c2 <LineIntersect+0x1c2>
movapd 0xdcb(%rip),%xmm2
xorpd  %xmm11,%xmm2
movapd %xmm11,%xmm3
cmpltsd %xmm10,%xmm3
andpd  %xmm3,%xmm2
andnpd %xmm11,%xmm3
orpd   %xmm2,%xmm3
ucomisd %xmm3,%xmm4
jbe    126a <LineIntersect+0x16a>
movq   $0x0,(%rdi)
xor    %eax,%eax
xorpd  %xmm1,%xmm1
movsd  %xmm1,(%rsi)
ret
unpcklpd %xmm11,%xmm11
divpd  %xmm11,%xmm6
xorpd  %xmm2,%xmm2
movapd %xmm6,%xmm3
cmpltpd %xmm2,%xmm3
movmskpd %xmm3,%eax
test   $0x2,%al
jne    1258 <LineIntersect+0x158>
movapd %xmm6,%xmm2
unpckhpd %xmm6,%xmm2
ucomisd 0xd7f(%rip),%xmm2
ja     1258 <LineIntersect+0x158>
test   $0x1,%al
jne    1258 <LineIntersect+0x158>
ucomisd 0xd71(%rip),%xmm6
ja     1258 <LineIntersect+0x158>
mulsd  %xmm2,%xmm8
addsd  %xmm0,%xmm8
movsd  %xmm8,(%rdi)
mulsd  %xmm2,%xmm9
addsd  %xmm9,%xmm1
mov    $0x1,%eax
movsd  %xmm1,(%rsi)
ret

LLVM IR (-O0):
define i32 @LineIntersect(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double* %8, double* %9) {
%11 = alloca i32
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double*
%21 = alloca double*
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
store double %0, double* %12
store double %1, double* %13
store double %2, double* %14
store double %3, double* %15
store double %4, double* %16
store double %5, double* %17
store double %6, double* %18
store double %7, double* %19
store double* %8, double** %20
store double* %9, double** %21
%27 = load double, double* %19
%28 = load double, double* %17
%29 = fsub double %27, %28
%30 = load double, double* %14
%31 = load double, double* %12
%32 = fsub double %30, %31
%33 = load double, double* %18
%34 = load double, double* %16
%35 = fsub double %33, %34
%36 = load double, double* %15
%37 = load double, double* %13
%38 = fsub double %36, %37
%39 = fmul double %35, %38
%40 = fneg double %39
%41 = call double @llvm.fmuladd.f64(double %29, double %32, double %40)
store double %41, double* %24
%42 = load double, double* %18
%43 = load double, double* %16
%44 = fsub double %42, %43
%45 = load double, double* %13
%46 = load double, double* %17
%47 = fsub double %45, %46
%48 = load double, double* %19
%49 = load double, double* %17
%50 = fsub double %48, %49
%51 = load double, double* %12
%52 = load double, double* %16
%53 = fsub double %51, %52
%54 = fmul double %50, %53
%55 = fneg double %54
%56 = call double @llvm.fmuladd.f64(double %44, double %47, double %55)
store double %56, double* %25
%57 = load double, double* %14
%58 = load double, double* %12
%59 = fsub double %57, %58
%60 = load double, double* %13
%61 = load double, double* %17
%62 = fsub double %60, %61
%63 = load double, double* %15
%64 = load double, double* %13
%65 = fsub double %63, %64
%66 = load double, double* %12
%67 = load double, double* %16
%68 = fsub double %66, %67
%69 = fmul double %65, %68
%70 = fneg double %69
%71 = call double @llvm.fmuladd.f64(double %59, double %62, double %70)
store double %71, double* %26
%72 = load double, double* %25
%73 = fcmp olt double %72, 0.000000e+00
br i1 %73, label %74, label %77
74: ; preds = %10
%75 = load double, double* %25
%76 = fneg double %75
br label %79
77: ; preds = %10
%78 = load double, double* %25
br label %79
79: ; preds = %77, %74
%80 = phi double [ %76, %74 ], [ %78, %77 ]
%81 = fcmp olt double %80, 1.000000e-05
br i1 %81, label %82, label %115
82: ; preds = %79
%83 = load double, double* %26
%84 = fcmp olt double %83, 0.000000e+00
br i1 %84, label %85, label %88
85: ; preds = %82
%86 = load double, double* %26
%87 = fneg double %86
br label %90
88: ; preds = %82
%89 = load double, double* %26
br label %90
90: ; preds = %88, %85
%91 = phi double [ %87, %85 ], [ %89, %88 ]
%92 = fcmp olt double %91, 1.000000e-05
br i1 %92, label %93, label %115
93: ; preds = %90
%94 = load double, double* %24
%95 = fcmp olt double %94, 0.000000e+00
br i1 %95, label %96, label %99
96: ; preds = %93
%97 = load double, double* %24
%98 = fneg double %97
br label %101
99: ; preds = %93
%100 = load double, double* %24
br label %101
101: ; preds = %99, %96
%102 = phi double [ %98, %96 ], [ %100, %99 ]
%103 = fcmp olt double %102, 1.000000e-05
br i1 %103, label %104, label %115
104: ; preds = %101
%105 = load double, double* %12
%106 = load double, double* %14
%107 = fadd double %105, %106
%108 = fdiv double %107, 2.000000e+00
%109 = load double*, double** %20
store double %108, double* %109
%110 = load double, double* %13
%111 = load double, double* %15
%112 = fadd double %110, %111
%113 = fdiv double %112, 2.000000e+00
%114 = load double*, double** %21
store double %113, double* %114
store i32 1, i32* %11
br label %165
115: ; preds = %101, %90, %79
%116 = load double, double* %24
%117 = fcmp olt double %116, 0.000000e+00
br i1 %117, label %118, label %121
118: ; preds = %115
%119 = load double, double* %24
%120 = fneg double %119
br label %123
121: ; preds = %115
%122 = load double, double* %24
br label %123
123: ; preds = %121, %118
%124 = phi double [ %120, %118 ], [ %122, %121 ]
%125 = fcmp olt double %124, 1.000000e-05
br i1 %125, label %126, label %129
126: ; preds = %123
%127 = load double*, double** %20
store double 0.000000e+00, double* %127
%128 = load double*, double** %21
store double 0.000000e+00, double* %128
store i32 0, i32* %11
br label %165
129: ; preds = %123
%130 = load double, double* %25
%131 = load double, double* %24
%132 = fdiv double %130, %131
store double %132, double* %22
%133 = load double, double* %26
%134 = load double, double* %24
%135 = fdiv double %133, %134
store double %135, double* %23
%136 = load double, double* %22
%137 = fcmp olt double %136, 0.000000e+00
br i1 %137, label %147, label %138
138: ; preds = %129
%139 = load double, double* %22
%140 = fcmp ogt double %139, 1.000000e+00
br i1 %140, label %147, label %141
141: ; preds = %138
%142 = load double, double* %23
%143 = fcmp olt double %142, 0.000000e+00
br i1 %143, label %147, label %144
144: ; preds = %141
%145 = load double, double* %23
%146 = fcmp ogt double %145, 1.000000e+00
br i1 %146, label %147, label %150
147: ; preds = %144, %141, %138, %129
%148 = load double*, double** %20
store double 0.000000e+00, double* %148
%149 = load double*, double** %21
store double 0.000000e+00, double* %149
store i32 0, i32* %11
br label %165
150: ; preds = %144
%151 = load double, double* %12
%152 = load double, double* %22
%153 = load double, double* %14
%154 = load double, double* %12
%155 = fsub double %153, %154
%156 = call double @llvm.fmuladd.f64(double %152, double %155, double %151)
%157 = load double*, double** %20
store double %156, double* %157
%158 = load double, double* %13
%159 = load double, double* %22
%160 = load double, double* %15
%161 = load double, double* %13
%162 = fsub double %160, %161
%163 = call double @llvm.fmuladd.f64(double %159, double %162, double %158)
%164 = load double*, double** %21
store double %163, double* %164
store i32 1, i32* %11
br label %165
165: ; preds = %150, %147, %126, %104
%166 = load i32, i32* %11
ret i32 %166
}

LLVM IR (-O2):
define i32 @LineIntersect(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double* nocapture writeonly %8, double* nocapture writeonly %9) {
%11 = insertelement <2 x double> poison, double %2, i64 0
%12 = insertelement <2 x double> %11, double %6, i64 1
%13 = insertelement <2 x double> poison, double %0, i64 0
%14 = insertelement <2 x double> %13, double %4, i64 1
%15 = fsub <2 x double> %12, %14
%16 = insertelement <2 x double> poison, double %3, i64 0
%17 = insertelement <2 x double> %16, double %7, i64 1
%18 = insertelement <2 x double> poison, double %1, i64 0
%19 = insertelement <2 x double> %18, double %5, i64 1
%20 = fsub <2 x double> %17, %19
%21 = extractelement <2 x double> %15, i64 1
%22 = fneg double %21
%23 = extractelement <2 x double> %20, i64 0
%24 = fmul double %23, %22
%25 = extractelement <2 x double> %15, i64 0
%26 = extractelement <2 x double> %20, i64 1
%27 = tail call double @llvm.fmuladd.f64(double %26, double %25, double %24)
%28 = fsub double %1, %5
%29 = fsub double %0, %4
%30 = fneg <2 x double> %20
%31 = insertelement <2 x double> poison, double %29, i64 0
%32 = shufflevector <2 x double> %31, <2 x double> poison, <2 x i32> zeroinitializer
%33 = fmul <2 x double> %32, %30
%34 = insertelement <2 x double> poison, double %28, i64 0
%35 = shufflevector <2 x double> %34, <2 x double> poison, <2 x i32> zeroinitializer
%36 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %15, <2 x double> %35, <2 x double> %33)
%37 = extractelement <2 x double> %36, i64 1
%38 = fcmp olt double %37, 0.000000e+00
%39 = fneg double %37
%40 = select i1 %38, double %39, double %37
%41 = fcmp olt double %40, 1.000000e-05
br i1 %41, label %42, label %58
42: ; preds = %10
%43 = extractelement <2 x double> %36, i64 0
%44 = fcmp olt double %43, 0.000000e+00
%45 = fneg double %43
%46 = select i1 %44, double %45, double %43
%47 = fcmp olt double %46, 1.000000e-05
br i1 %47, label %48, label %58
48: ; preds = %42
%49 = fcmp olt double %27, 0.000000e+00
%50 = fneg double %27
%51 = select i1 %49, double %50, double %27
%52 = fcmp olt double %51, 1.000000e-05
br i1 %52, label %53, label %58
53: ; preds = %48
%54 = fadd double %0, %2
%55 = fmul double %54, 5.000000e-01
store double %55, double* %8
%56 = fadd double %1, %3
%57 = fmul double %56, 5.000000e-01
br label %82
58: ; preds = %48, %42, %10
%59 = fcmp olt double %27, 0.000000e+00
%60 = fneg double %27
%61 = select i1 %59, double %60, double %27
%62 = fcmp olt double %61, 1.000000e-05
br i1 %62, label %63, label %64
63: ; preds = %58
store double 0.000000e+00, double* %8
br label %82
64: ; preds = %58
%65 = insertelement <2 x double> poison, double %27, i64 0
%66 = shufflevector <2 x double> %65, <2 x double> poison, <2 x i32> zeroinitializer
%67 = fdiv <2 x double> %36, %66
%68 = extractelement <2 x double> %67, i64 1
%69 = fcmp ogt double %68, 1.000000e+00
%70 = fcmp olt <2 x double> %67, zeroinitializer
%71 = extractelement <2 x i1> %70, i64 1
%72 = or i1 %71, %69
%73 = extractelement <2 x i1> %70, i64 0
%74 = select i1 %72, i1 true, i1 %73
%75 = extractelement <2 x double> %67, i64 0
%76 = fcmp ogt double %75, 1.000000e+00
%77 = select i1 %74, i1 true, i1 %76
br i1 %77, label %78, label %79
78: ; preds = %64
store double 0.000000e+00, double* %8
br label %82
79: ; preds = %64
%80 = tail call double @llvm.fmuladd.f64(double %68, double %25, double %0)
store double %80, double* %8
%81 = tail call double @llvm.fmuladd.f64(double %68, double %23, double %1)
br label %82
82: ; preds = %79, %78, %63, %53
%83 = phi double [ %81, %79 ], [ 0.000000e+00, %78 ], [ 0.000000e+00, %63 ], [ %57, %53 ]
%84 = phi i32 [ 1, %79 ], [ 0, %78 ], [ 0, %63 ], [ 1, %53 ]
store double %83, double* %9
ret i32 %84
}