int dig_test_for_intersection(double ax1, double ay1, double ax2, double ay2,
                              double bx1, double by1, double bx2, double by2) {
  register double d, d1, d2;
  double t;
  d = ((ax2 - ax1) * (by1 - by2) - (ay2 - ay1) * (bx1 - bx2));
  d1 = ((bx1 - ax1) * (by1 - by2) - (by1 - ay1) * (bx1 - bx2));
  d2 = ((ax2 - ax1) * (by1 - ay1) - (ay2 - ay1) * (bx1 - ax1));
  if (d > 0)
    return (d1 >= 0 && d2 >= 0 && d >= d1 && d >= d2);
  if (d < 0)
    return (d1 <= 0 && d2 <= 0 && d <= d1 && d <= d2);
  if (d1 || d2)
    return 0;
  if (ax1 != ax2) {
    if (ax1 > ax2) {
      t = ax1;
      ax1 = ax2;
      ax2 = t;
    }
    if (bx1 > bx2) {
      t = bx1;
      bx1 = bx2;
      bx2 = t;
    }
    if (ax1 > bx2)
      return 0;
    if (ax2 < bx1)
      return 0;
    if (ax1 == bx2 || ax2 == bx1)
      return 1;
    return -1;
  } else {
    if (ay1 > ay2) {
      t = ay1;
      ay1 = ay2;
      ay2 = t;
    }
    if (by1 > by2) {
      t = by1;
      by1 = by2;
      by2 = t;
    }
    if (ay1 > by2)
      return 0;
    if (ay2 < by1)
      return 0;
    if (ay1 == by2 || ay2 == by1)
      return 1;
    return -1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<dig_test_for_intersection>:
push   %rbp
mov    %rsp,%rbp
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)
movsd  -0x20(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
subsd  -0x48(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm3
subsd  -0x40(%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,-0x50(%rbp)
movsd  -0x30(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
subsd  -0x48(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm3
subsd  -0x40(%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,-0x58(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
subsd  -0x18(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm3
subsd  -0x10(%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,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1291 <dig_test_for_intersection+0x191>
movsd  -0x58(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x69(%rbp)
jb     1281 <dig_test_for_intersection+0x181>
movsd  -0x60(%rbp),%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0x69(%rbp)
jb     1281 <dig_test_for_intersection+0x181>
movsd  -0x50(%rbp),%xmm0
xor    %eax,%eax
ucomisd -0x58(%rbp),%xmm0
mov    %al,-0x69(%rbp)
jb     1281 <dig_test_for_intersection+0x181>
movsd  -0x50(%rbp),%xmm0
ucomisd -0x60(%rbp),%xmm0
setae  %al
mov    %al,-0x69(%rbp)
mov    -0x69(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
xorps  %xmm0,%xmm0
ucomisd -0x50(%rbp),%xmm0
jbe    1302 <dig_test_for_intersection+0x202>
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomisd -0x58(%rbp),%xmm0
mov    %al,-0x6a(%rbp)
jb     12f2 <dig_test_for_intersection+0x1f2>
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomisd -0x60(%rbp),%xmm0
mov    %al,-0x6a(%rbp)
jb     12f2 <dig_test_for_intersection+0x1f2>
movsd  -0x50(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
xor    %eax,%eax
ucomisd %xmm1,%xmm0
mov    %al,-0x6a(%rbp)
jb     12f2 <dig_test_for_intersection+0x1f2>
movsd  -0x50(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
ucomisd %xmm1,%xmm0
setae  %al
mov    %al,-0x6a(%rbp)
mov    -0x6a(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
movsd  -0x58(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1337 <dig_test_for_intersection+0x237>
jp     1337 <dig_test_for_intersection+0x237>
movsd  -0x60(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1337 <dig_test_for_intersection+0x237>
jp     1337 <dig_test_for_intersection+0x237>
jmp    1343 <dig_test_for_intersection+0x243>
movl   $0x0,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
movsd  -0x10(%rbp),%xmm0
ucomisd -0x20(%rbp),%xmm0
jne    135e <dig_test_for_intersection+0x25e>
jp     135e <dig_test_for_intersection+0x25e>
jmp    143f <dig_test_for_intersection+0x33f>
movsd  -0x10(%rbp),%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    138c <dig_test_for_intersection+0x28c>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x30(%rbp),%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    13ba <dig_test_for_intersection+0x2ba>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x10(%rbp),%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    13d6 <dig_test_for_intersection+0x2d6>
movl   $0x0,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
movsd  -0x20(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    13f6 <dig_test_for_intersection+0x2f6>
movl   $0x0,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
movsd  -0x10(%rbp),%xmm0
ucomisd -0x40(%rbp),%xmm0
jne    1411 <dig_test_for_intersection+0x311>
jp     1411 <dig_test_for_intersection+0x311>
jmp    1427 <dig_test_for_intersection+0x327>
movsd  -0x20(%rbp),%xmm0
ucomisd -0x30(%rbp),%xmm0
jne    1433 <dig_test_for_intersection+0x333>
jp     1433 <dig_test_for_intersection+0x333>
movl   $0x1,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
movl   $0xffffffff,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
movsd  -0x18(%rbp),%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    146d <dig_test_for_intersection+0x36d>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x38(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    149b <dig_test_for_intersection+0x39b>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x18(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    14b7 <dig_test_for_intersection+0x3b7>
movl   $0x0,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
movsd  -0x28(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    14d7 <dig_test_for_intersection+0x3d7>
movl   $0x0,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
movsd  -0x18(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
jne    14f2 <dig_test_for_intersection+0x3f2>
jp     14f2 <dig_test_for_intersection+0x3f2>
jmp    1508 <dig_test_for_intersection+0x408>
movsd  -0x28(%rbp),%xmm0
ucomisd -0x38(%rbp),%xmm0
jne    1514 <dig_test_for_intersection+0x414>
jp     1514 <dig_test_for_intersection+0x414>
movl   $0x1,-0x4(%rbp)
jmp    151b <dig_test_for_intersection+0x41b>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<dig_test_for_intersection>:
movapd %xmm2,%xmm10
subsd  %xmm0,%xmm10
movapd %xmm5,%xmm8
subsd  %xmm7,%xmm8
movapd %xmm3,%xmm11
subsd  %xmm1,%xmm11
movapd %xmm4,%xmm12
subsd  %xmm6,%xmm12
movapd %xmm12,%xmm13
mulsd  %xmm11,%xmm13
movapd %xmm5,%xmm9
subsd  %xmm1,%xmm9
mulsd  %xmm9,%xmm12
mulsd  %xmm10,%xmm9
mulsd  %xmm8,%xmm10
subsd  %xmm13,%xmm10
movapd %xmm4,%xmm13
subsd  %xmm0,%xmm13
mulsd  %xmm13,%xmm8
subsd  %xmm12,%xmm8
mulsd  %xmm11,%xmm13
subsd  %xmm13,%xmm9
xorpd  %xmm11,%xmm11
ucomisd %xmm11,%xmm10
jbe    119b <dig_test_for_intersection+0x9b>
ucomisd %xmm11,%xmm8
setae  %al
ucomisd %xmm11,%xmm9
setae  %cl
and    %al,%cl
ucomisd %xmm8,%xmm10
setae  %al
ucomisd %xmm9,%xmm10
jmp    11c5 <dig_test_for_intersection+0xc5>
ucomisd %xmm10,%xmm11
jbe    11d0 <dig_test_for_intersection+0xd0>
xorpd  %xmm0,%xmm0
ucomisd %xmm8,%xmm0
setae  %al
ucomisd %xmm9,%xmm0
setae  %cl
and    %al,%cl
ucomisd %xmm10,%xmm8
setae  %al
ucomisd %xmm10,%xmm9
setae  %dl
and    %al,%dl
and    %cl,%dl
movzbl %dl,%eax
ret
xor    %eax,%eax
xorpd  %xmm10,%xmm10
ucomisd %xmm10,%xmm8
jne    127c <dig_test_for_intersection+0x17c>
jp     127c <dig_test_for_intersection+0x17c>
ucomisd %xmm10,%xmm9
jne    127c <dig_test_for_intersection+0x17c>
jp     127c <dig_test_for_intersection+0x17c>
ucomisd %xmm2,%xmm0
jne    1201 <dig_test_for_intersection+0x101>
jnp    1238 <dig_test_for_intersection+0x138>
movapd %xmm2,%xmm1
minsd  %xmm0,%xmm1
movapd %xmm4,%xmm3
maxsd  %xmm6,%xmm3
ucomisd %xmm3,%xmm1
ja     127c <dig_test_for_intersection+0x17c>
maxsd  %xmm2,%xmm0
minsd  %xmm4,%xmm6
ucomisd %xmm0,%xmm6
ja     127c <dig_test_for_intersection+0x17c>
cmpeqsd %xmm6,%xmm0
movq   %xmm0,%rax
and    $0x1,%eax
ucomisd %xmm3,%xmm1
jmp    126d <dig_test_for_intersection+0x16d>
movapd %xmm3,%xmm0
minsd  %xmm1,%xmm0
movapd %xmm5,%xmm2
maxsd  %xmm7,%xmm2
ucomisd %xmm2,%xmm0
ja     127c <dig_test_for_intersection+0x17c>
maxsd  %xmm3,%xmm1
minsd  %xmm5,%xmm7
ucomisd %xmm1,%xmm7
ja     127c <dig_test_for_intersection+0x17c>
cmpeqsd %xmm7,%xmm1
movq   %xmm1,%rax
and    $0x1,%eax
ucomisd %xmm2,%xmm0
lea    -0x1(%rax,%rax,1),%ecx
mov    $0x1,%eax
cmovne %ecx,%eax
cmovp  %ecx,%eax
ret

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

LLVM IR (-O2):
define i32 @dig_test_for_intersection(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7) {
%9 = fsub double %2, %0
%10 = fsub double %5, %7
%11 = fsub double %3, %1
%12 = fsub double %4, %6
%13 = fneg double %11
%14 = fmul double %12, %13
%15 = tail call double @llvm.fmuladd.f64(double %9, double %10, double %14)
%16 = fsub double %4, %0
%17 = fsub double %5, %1
%18 = fneg double %17
%19 = fmul double %12, %18
%20 = tail call double @llvm.fmuladd.f64(double %16, double %10, double %19)
%21 = fmul double %16, %13
%22 = tail call double @llvm.fmuladd.f64(double %9, double %17, double %21)
%23 = fcmp ogt double %15, 0.000000e+00
br i1 %23, label %24, label %33
24: ; preds = %8
%25 = fcmp oge double %20, 0.000000e+00
%26 = fcmp oge double %22, 0.000000e+00
%27 = select i1 %25, i1 %26, i1 false
%28 = fcmp oge double %15, %20
%29 = select i1 %27, i1 %28, i1 false
%30 = fcmp oge double %15, %22
%31 = select i1 %29, i1 %30, i1 false
%32 = zext i1 %31 to i32
br label %80
33: ; preds = %8
%34 = fcmp olt double %15, 0.000000e+00
br i1 %34, label %35, label %44
35: ; preds = %33
%36 = fcmp ole double %20, 0.000000e+00
%37 = fcmp ole double %22, 0.000000e+00
%38 = select i1 %36, i1 %37, i1 false
%39 = fcmp ole double %15, %20
%40 = select i1 %38, i1 %39, i1 false
%41 = fcmp ole double %15, %22
%42 = select i1 %40, i1 %41, i1 false
%43 = zext i1 %42 to i32
br label %80
44: ; preds = %33
%45 = fcmp une double %20, 0.000000e+00
%46 = fcmp une double %22, 0.000000e+00
%47 = select i1 %45, i1 true, i1 %46
br i1 %47, label %80, label %48
48: ; preds = %44
%49 = fcmp une double %0, %2
br i1 %49, label %50, label %65
50: ; preds = %48
%51 = fcmp ogt double %0, %2
%52 = select i1 %51, double %0, double %2
%53 = select i1 %51, double %2, double %0
%54 = fcmp ogt double %4, %6
%55 = select i1 %54, double %6, double %4
%56 = select i1 %54, double %4, double %6
%57 = fcmp ogt double %53, %56
%58 = fcmp olt double %52, %55
%59 = or i1 %57, %58
br i1 %59, label %80, label %60
60: ; preds = %50
%61 = fcmp oeq double %53, %56
%62 = fcmp oeq double %52, %55
%63 = or i1 %61, %62
%64 = select i1 %63, i32 1, i32 -1
br label %80
65: ; preds = %48
%66 = fcmp ogt double %1, %3
%67 = select i1 %66, double %1, double %3
%68 = select i1 %66, double %3, double %1
%69 = fcmp ogt double %5, %7
%70 = select i1 %69, double %7, double %5
%71 = select i1 %69, double %5, double %7
%72 = fcmp ogt double %68, %71
%73 = fcmp olt double %67, %70
%74 = or i1 %72, %73
br i1 %74, label %80, label %75
75: ; preds = %65
%76 = fcmp oeq double %68, %71
%77 = fcmp oeq double %67, %70
%78 = or i1 %76, %77
%79 = select i1 %78, i32 1, i32 -1
br label %80
80: ; preds = %75, %60, %65, %50, %44, %35, %24
%81 = phi i32 [ %32, %24 ], [ %43, %35 ], [ 0, %44 ], [ 0, %50 ], [ 0, %65 ], [ %64, %60 ], [ %79, %75 ]
ret i32 %81
}