int isect(double a, double b, double x, double y, double *l, double *u) {
  int D = b < x, E = b < y, C = a < y, B = a < x;
  int ret = (D & ~E) | (~D & E) | (C & ~(D & E)) | (~C & (D | E)) |
            (B & ~(C & D & E)) | (~B & (C | D | E));
  if (ret) {
    int A = a < b, F = x < y;
    *l = a * (A & ((B & ~C & ~E & ~F) | (~B & C & ~D & F)));
    *u = a * (~A & ((B & ~C & D & ~F) | (~B & C & E & F)));
    *l += b * (~A & ((~C & D & ~E & ~F) | (~B & ~D & E & F)));
    *u += b * (A & ((B & D & ~E & ~F) | (C & ~D & E & F)));
    *l += x * (F & ((A & B & C & ~D) | (~A & ~B & D & E)));
    *u += x * (~F & ((A & B & ~D & ~E) | (~A & ~B & ~C & D)));
    *l += y * (~F & ((A & B & C & ~E) | (~A & ~C & D & E)));
    *u += y * (F & ((A & C & ~D & ~E) | (~A & ~B & ~C & E)));
  }
  return ret;
}


x86 assembly (clang, -O0):
<isect>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
mov    %rdi,-0x28(%rbp)
mov    %rsi,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
movsd  -0x10(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x38(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x3c(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x40(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x38(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x34(%rbp),%ecx
xor    $0xffffffff,%ecx
and    -0x38(%rbp),%ecx
or     %ecx,%eax
mov    -0x3c(%rbp),%ecx
mov    -0x34(%rbp),%edx
and    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    -0x3c(%rbp),%ecx
xor    $0xffffffff,%ecx
mov    -0x34(%rbp),%edx
or     -0x38(%rbp),%edx
and    %edx,%ecx
or     %ecx,%eax
mov    -0x40(%rbp),%ecx
mov    -0x3c(%rbp),%edx
and    -0x34(%rbp),%edx
and    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    -0x40(%rbp),%ecx
xor    $0xffffffff,%ecx
mov    -0x3c(%rbp),%edx
or     -0x34(%rbp),%edx
or     -0x38(%rbp),%edx
and    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0x44(%rbp)
cmpl   $0x0,-0x44(%rbp)
je     148b <isect+0x38b>
movsd  -0x8(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x48(%rbp)
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4c(%rbp)
movsd  -0x8(%rbp),%xmm0
mov    -0x48(%rbp),%eax
mov    -0x40(%rbp),%ecx
mov    -0x3c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x4c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x40(%rbp),%edx
xor    $0xffffffff,%edx
and    -0x3c(%rbp),%edx
mov    -0x34(%rbp),%esi
xor    $0xffffffff,%esi
and    %esi,%edx
and    -0x4c(%rbp),%edx
or     %edx,%ecx
and    %ecx,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
mov    -0x48(%rbp),%eax
xor    $0xffffffff,%eax
mov    -0x40(%rbp),%ecx
mov    -0x3c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x34(%rbp),%ecx
mov    -0x4c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x40(%rbp),%edx
xor    $0xffffffff,%edx
and    -0x3c(%rbp),%edx
and    -0x38(%rbp),%edx
and    -0x4c(%rbp),%edx
or     %edx,%ecx
and    %ecx,%eax
cvtsi2sd %eax,%xmm1
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
mov    -0x48(%rbp),%eax
xor    $0xffffffff,%eax
mov    -0x3c(%rbp),%ecx
xor    $0xffffffff,%ecx
and    -0x34(%rbp),%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x4c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x40(%rbp),%edx
xor    $0xffffffff,%edx
mov    -0x34(%rbp),%esi
xor    $0xffffffff,%esi
and    %esi,%edx
and    -0x38(%rbp),%edx
and    -0x4c(%rbp),%edx
or     %edx,%ecx
and    %ecx,%eax
cvtsi2sd %eax,%xmm2
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x10(%rbp),%xmm0
mov    -0x48(%rbp),%eax
mov    -0x40(%rbp),%ecx
and    -0x34(%rbp),%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x4c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x3c(%rbp),%edx
mov    -0x34(%rbp),%esi
xor    $0xffffffff,%esi
and    %esi,%edx
and    -0x38(%rbp),%edx
and    -0x4c(%rbp),%edx
or     %edx,%ecx
and    %ecx,%eax
cvtsi2sd %eax,%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
mov    -0x4c(%rbp),%eax
mov    -0x48(%rbp),%ecx
and    -0x40(%rbp),%ecx
and    -0x3c(%rbp),%ecx
mov    -0x34(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x48(%rbp),%edx
xor    $0xffffffff,%edx
mov    -0x40(%rbp),%esi
xor    $0xffffffff,%esi
and    %esi,%edx
and    -0x34(%rbp),%edx
and    -0x38(%rbp),%edx
or     %edx,%ecx
and    %ecx,%eax
cvtsi2sd %eax,%xmm2
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x18(%rbp),%xmm0
mov    -0x4c(%rbp),%eax
xor    $0xffffffff,%eax
mov    -0x48(%rbp),%ecx
and    -0x40(%rbp),%ecx
mov    -0x34(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x48(%rbp),%edx
xor    $0xffffffff,%edx
mov    -0x40(%rbp),%esi
xor    $0xffffffff,%esi
and    %esi,%edx
mov    -0x3c(%rbp),%esi
xor    $0xffffffff,%esi
and    %esi,%edx
and    -0x34(%rbp),%edx
or     %edx,%ecx
and    %ecx,%eax
cvtsi2sd %eax,%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x20(%rbp),%xmm0
mov    -0x4c(%rbp),%eax
xor    $0xffffffff,%eax
mov    -0x48(%rbp),%ecx
and    -0x40(%rbp),%ecx
and    -0x3c(%rbp),%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x48(%rbp),%edx
xor    $0xffffffff,%edx
mov    -0x3c(%rbp),%esi
xor    $0xffffffff,%esi
and    %esi,%edx
and    -0x34(%rbp),%edx
and    -0x38(%rbp),%edx
or     %edx,%ecx
and    %ecx,%eax
cvtsi2sd %eax,%xmm2
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x20(%rbp),%xmm0
mov    -0x4c(%rbp),%eax
mov    -0x48(%rbp),%ecx
and    -0x3c(%rbp),%ecx
mov    -0x34(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x48(%rbp),%edx
xor    $0xffffffff,%edx
mov    -0x40(%rbp),%esi
xor    $0xffffffff,%esi
and    %esi,%edx
mov    -0x3c(%rbp),%esi
xor    $0xffffffff,%esi
and    %esi,%edx
and    -0x38(%rbp),%edx
or     %edx,%ecx
and    %ecx,%eax
cvtsi2sd %eax,%xmm2
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x44(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<isect>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
xor    %r9d,%r9d
ucomisd %xmm1,%xmm2
seta   %r15b
ucomisd %xmm1,%xmm3
seta   %dl
xor    %r8d,%r8d
ucomisd %xmm0,%xmm3
seta   %r8b
xor    %r14d,%r14d
ucomisd %xmm0,%xmm2
seta   %r14b
mov    %r15d,%eax
xor    %dl,%al
movzbl %al,%eax
mov    %r15d,%ebx
and    %dl,%bl
movzbl %bl,%r11d
mov    %r11d,%ebx
not    %ebx
and    %r8d,%ebx
mov    %r8d,%r12d
not    %r12d
mov    %r15d,%ecx
or     %dl,%cl
movzbl %cl,%r10d
mov    %r10d,%ecx
and    %r12d,%ecx
or     %eax,%ecx
or     %ebx,%ecx
mov    %r15d,%eax
and    %r8b,%al
and    %dl,%al
movzbl %al,%ebx
not    %ebx
and    %r14d,%ebx
or     %ecx,%ebx
mov    %r14d,%ebp
not    %ebp
mov    %r15d,%ecx
or     %r8b,%cl
or     %dl,%cl
movzbl %cl,%eax
and    %ebp,%eax
or     %ebx,%eax
je     138a <isect+0x28a>
ucomisd %xmm0,%xmm2
mov    %rsi,-0x8(%rsp)
mov    %rdi,-0x10(%rsp)
mov    %r10d,-0x18(%rsp)
seta   -0x2a(%rsp)
ucomisd %xmm0,%xmm3
seta   -0x2b(%rsp)
ucomisd %xmm1,%xmm3
seta   %sil
ucomisd %xmm1,%xmm2
mov    %dl,-0x29(%rsp)
mov    %ebp,-0x28(%rsp)
seta   %r10b
mov    %r15b,%r9b
mov    %r9d,%r15d
xor    %ebx,%ebx
ucomisd %xmm0,%xmm1
not    %r15d
seta   %bl
xor    %r13d,%r13d
ucomisd %xmm2,%xmm3
seta   %r13b
and    %r12d,%r14d
mov    %esi,%ecx
or     %r13b,%cl
mov    %r11d,-0x1c(%rsp)
movzbl %cl,%r11d
not    %r11d
mov    %r14d,%ecx
and    %r11d,%ecx
mov    %r8d,%edx
and    %ebp,%edx
mov    %r13d,%edi
and    %r15d,%edi
and    %edx,%edi
or     %ecx,%edi
and    %ebx,%edi
cvtsi2sd %edi,%xmm8
mov    %r13d,%ecx
not    %ecx
mov    %ecx,-0x20(%rsp)
mov    %r12d,-0x24(%rsp)
mov    %ecx,%r12d
and    %r9d,%r12d
and    %r14d,%r12d
mov    %eax,-0x14(%rsp)
mov    %r13d,%ecx
and    %sil,%cl
movzbl %cl,%edi
and    %edi,%edx
or     %r12d,%edx
mov    %ebx,%ebp
not    %ebp
and    %ebp,%edx
cvtsi2sd %edx,%xmm9
mov    -0x2b(%rsp),%r14b
or     %r14b,%sil
or     %r13b,%sil
movzbl %sil,%eax
not    %eax
and    %r9d,%eax
mov    -0x2a(%rsp),%dl
mov    %edx,%ecx
and    %r10b,%cl
or     %dl,%r10b
mov    %edx,%esi
movzbl %r10b,%edx
not    %edx
and    %edi,%edx
or     %eax,%edx
and    %ebp,%edx
cvtsi2sd %edx,%xmm10
movzbl %cl,%eax
and    %r11d,%eax
and    %r15d,%edi
and    %r8d,%edi
or     %eax,%edi
and    %ebx,%edi
cvtsi2sd %edi,%xmm7
and    %bl,%sil
movzbl %sil,%eax
and    -0x28(%rsp),%ebp
mov    %eax,%ecx
mov    %r14d,%edx
and    %r14b,%cl
movzbl %cl,%r11d
and    %r11d,%r15d
mov    %ebp,%ecx
mov    -0x1c(%rsp),%r10d
and    %r10d,%ecx
or     %r15d,%ecx
and    %r13d,%ecx
cvtsi2sd %ecx,%xmm4
and    -0x24(%rsp),%ebp
mov    -0x18(%rsp),%edi
not    %edi
and    %edi,%eax
and    %ebp,%r9d
or     %eax,%r9d
xor    %ecx,%ecx
mov    -0x29(%rsp),%al
mov    %al,%cl
mov    -0x20(%rsp),%esi
and    %esi,%r9d
cvtsi2sd %r9d,%xmm5
mov    %ecx,%eax
mov    %ecx,%r8d
not    %eax
and    %r11d,%eax
mov    %ebx,%ecx
or     %dl,%cl
mov    %edx,%r9d
movzbl %cl,%ecx
not    %ecx
and    %r10d,%ecx
or     %eax,%ecx
and    %esi,%ecx
cvtsi2sd %ecx,%xmm6
mov    -0x14(%rsp),%eax
mulsd  %xmm0,%xmm8
mov    -0x10(%rsp),%rsi
movsd  %xmm8,(%rsi)
mulsd  %xmm0,%xmm9
mov    -0x8(%rsp),%rcx
movsd  %xmm9,(%rcx)
mulsd  %xmm1,%xmm10
addsd  (%rsi),%xmm10
movsd  %xmm10,(%rsi)
mulsd  %xmm1,%xmm7
addsd  (%rcx),%xmm7
movsd  %xmm7,(%rcx)
mulsd  %xmm2,%xmm4
addsd  (%rsi),%xmm4
movsd  %xmm4,(%rsi)
mulsd  %xmm2,%xmm5
addsd  (%rcx),%xmm5
movsd  %xmm5,(%rcx)
mov    %rcx,%rdx
mulsd  %xmm3,%xmm6
addsd  (%rsi),%xmm6
movsd  %xmm6,(%rsi)
and    %r9b,%bl
movzbl %bl,%ecx
and    %edi,%ecx
and    %r8d,%ebp
or     %ecx,%ebp
and    %r13d,%ebp
cvtsi2sd %ebp,%xmm0
mulsd  %xmm3,%xmm0
addsd  (%rdx),%xmm0
movsd  %xmm0,(%rdx)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @isect(double %0, double %1, double %2, double %3, double* %4, double* %5) {
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double*
%12 = alloca double*
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
store double %0, double* %7
store double %1, double* %8
store double %2, double* %9
store double %3, double* %10
store double* %4, double** %11
store double* %5, double** %12
%20 = load double, double* %8
%21 = load double, double* %9
%22 = fcmp olt double %20, %21
%23 = zext i1 %22 to i32
store i32 %23, i32* %13
%24 = load double, double* %8
%25 = load double, double* %10
%26 = fcmp olt double %24, %25
%27 = zext i1 %26 to i32
store i32 %27, i32* %14
%28 = load double, double* %7
%29 = load double, double* %10
%30 = fcmp olt double %28, %29
%31 = zext i1 %30 to i32
store i32 %31, i32* %15
%32 = load double, double* %7
%33 = load double, double* %9
%34 = fcmp olt double %32, %33
%35 = zext i1 %34 to i32
store i32 %35, i32* %16
%36 = load i32, i32* %13
%37 = load i32, i32* %14
%38 = xor i32 %37, -1
%39 = and i32 %36, %38
%40 = load i32, i32* %13
%41 = xor i32 %40, -1
%42 = load i32, i32* %14
%43 = and i32 %41, %42
%44 = or i32 %39, %43
%45 = load i32, i32* %15
%46 = load i32, i32* %13
%47 = load i32, i32* %14
%48 = and i32 %46, %47
%49 = xor i32 %48, -1
%50 = and i32 %45, %49
%51 = or i32 %44, %50
%52 = load i32, i32* %15
%53 = xor i32 %52, -1
%54 = load i32, i32* %13
%55 = load i32, i32* %14
%56 = or i32 %54, %55
%57 = and i32 %53, %56
%58 = or i32 %51, %57
%59 = load i32, i32* %16
%60 = load i32, i32* %15
%61 = load i32, i32* %13
%62 = and i32 %60, %61
%63 = load i32, i32* %14
%64 = and i32 %62, %63
%65 = xor i32 %64, -1
%66 = and i32 %59, %65
%67 = or i32 %58, %66
%68 = load i32, i32* %16
%69 = xor i32 %68, -1
%70 = load i32, i32* %15
%71 = load i32, i32* %13
%72 = or i32 %70, %71
%73 = load i32, i32* %14
%74 = or i32 %72, %73
%75 = and i32 %69, %74
%76 = or i32 %67, %75
store i32 %76, i32* %17
%77 = load i32, i32* %17
%78 = icmp ne i32 %77, 0
br i1 %78, label %79, label %298
79: ; preds = %6
%80 = load double, double* %7
%81 = load double, double* %8
%82 = fcmp olt double %80, %81
%83 = zext i1 %82 to i32
store i32 %83, i32* %18
%84 = load double, double* %9
%85 = load double, double* %10
%86 = fcmp olt double %84, %85
%87 = zext i1 %86 to i32
store i32 %87, i32* %19
%88 = load double, double* %7
%89 = load i32, i32* %18
%90 = load i32, i32* %16
%91 = load i32, i32* %15
%92 = xor i32 %91, -1
%93 = and i32 %90, %92
%94 = load i32, i32* %14
%95 = xor i32 %94, -1
%96 = and i32 %93, %95
%97 = load i32, i32* %19
%98 = xor i32 %97, -1
%99 = and i32 %96, %98
%100 = load i32, i32* %16
%101 = xor i32 %100, -1
%102 = load i32, i32* %15
%103 = and i32 %101, %102
%104 = load i32, i32* %13
%105 = xor i32 %104, -1
%106 = and i32 %103, %105
%107 = load i32, i32* %19
%108 = and i32 %106, %107
%109 = or i32 %99, %108
%110 = and i32 %89, %109
%111 = sitofp i32 %110 to double
%112 = fmul double %88, %111
%113 = load double*, double** %11
store double %112, double* %113
%114 = load double, double* %7
%115 = load i32, i32* %18
%116 = xor i32 %115, -1
%117 = load i32, i32* %16
%118 = load i32, i32* %15
%119 = xor i32 %118, -1
%120 = and i32 %117, %119
%121 = load i32, i32* %13
%122 = and i32 %120, %121
%123 = load i32, i32* %19
%124 = xor i32 %123, -1
%125 = and i32 %122, %124
%126 = load i32, i32* %16
%127 = xor i32 %126, -1
%128 = load i32, i32* %15
%129 = and i32 %127, %128
%130 = load i32, i32* %14
%131 = and i32 %129, %130
%132 = load i32, i32* %19
%133 = and i32 %131, %132
%134 = or i32 %125, %133
%135 = and i32 %116, %134
%136 = sitofp i32 %135 to double
%137 = fmul double %114, %136
%138 = load double*, double** %12
store double %137, double* %138
%139 = load double, double* %8
%140 = load i32, i32* %18
%141 = xor i32 %140, -1
%142 = load i32, i32* %15
%143 = xor i32 %142, -1
%144 = load i32, i32* %13
%145 = and i32 %143, %144
%146 = load i32, i32* %14
%147 = xor i32 %146, -1
%148 = and i32 %145, %147
%149 = load i32, i32* %19
%150 = xor i32 %149, -1
%151 = and i32 %148, %150
%152 = load i32, i32* %16
%153 = xor i32 %152, -1
%154 = load i32, i32* %13
%155 = xor i32 %154, -1
%156 = and i32 %153, %155
%157 = load i32, i32* %14
%158 = and i32 %156, %157
%159 = load i32, i32* %19
%160 = and i32 %158, %159
%161 = or i32 %151, %160
%162 = and i32 %141, %161
%163 = sitofp i32 %162 to double
%164 = load double*, double** %11
%165 = load double, double* %164
%166 = call double @llvm.fmuladd.f64(double %139, double %163, double %165)
store double %166, double* %164
%167 = load double, double* %8
%168 = load i32, i32* %18
%169 = load i32, i32* %16
%170 = load i32, i32* %13
%171 = and i32 %169, %170
%172 = load i32, i32* %14
%173 = xor i32 %172, -1
%174 = and i32 %171, %173
%175 = load i32, i32* %19
%176 = xor i32 %175, -1
%177 = and i32 %174, %176
%178 = load i32, i32* %15
%179 = load i32, i32* %13
%180 = xor i32 %179, -1
%181 = and i32 %178, %180
%182 = load i32, i32* %14
%183 = and i32 %181, %182
%184 = load i32, i32* %19
%185 = and i32 %183, %184
%186 = or i32 %177, %185
%187 = and i32 %168, %186
%188 = sitofp i32 %187 to double
%189 = load double*, double** %12
%190 = load double, double* %189
%191 = call double @llvm.fmuladd.f64(double %167, double %188, double %190)
store double %191, double* %189
%192 = load double, double* %9
%193 = load i32, i32* %19
%194 = load i32, i32* %18
%195 = load i32, i32* %16
%196 = and i32 %194, %195
%197 = load i32, i32* %15
%198 = and i32 %196, %197
%199 = load i32, i32* %13
%200 = xor i32 %199, -1
%201 = and i32 %198, %200
%202 = load i32, i32* %18
%203 = xor i32 %202, -1
%204 = load i32, i32* %16
%205 = xor i32 %204, -1
%206 = and i32 %203, %205
%207 = load i32, i32* %13
%208 = and i32 %206, %207
%209 = load i32, i32* %14
%210 = and i32 %208, %209
%211 = or i32 %201, %210
%212 = and i32 %193, %211
%213 = sitofp i32 %212 to double
%214 = load double*, double** %11
%215 = load double, double* %214
%216 = call double @llvm.fmuladd.f64(double %192, double %213, double %215)
store double %216, double* %214
%217 = load double, double* %9
%218 = load i32, i32* %19
%219 = xor i32 %218, -1
%220 = load i32, i32* %18
%221 = load i32, i32* %16
%222 = and i32 %220, %221
%223 = load i32, i32* %13
%224 = xor i32 %223, -1
%225 = and i32 %222, %224
%226 = load i32, i32* %14
%227 = xor i32 %226, -1
%228 = and i32 %225, %227
%229 = load i32, i32* %18
%230 = xor i32 %229, -1
%231 = load i32, i32* %16
%232 = xor i32 %231, -1
%233 = and i32 %230, %232
%234 = load i32, i32* %15
%235 = xor i32 %234, -1
%236 = and i32 %233, %235
%237 = load i32, i32* %13
%238 = and i32 %236, %237
%239 = or i32 %228, %238
%240 = and i32 %219, %239
%241 = sitofp i32 %240 to double
%242 = load double*, double** %12
%243 = load double, double* %242
%244 = call double @llvm.fmuladd.f64(double %217, double %241, double %243)
store double %244, double* %242
%245 = load double, double* %10
%246 = load i32, i32* %19
%247 = xor i32 %246, -1
%248 = load i32, i32* %18
%249 = load i32, i32* %16
%250 = and i32 %248, %249
%251 = load i32, i32* %15
%252 = and i32 %250, %251
%253 = load i32, i32* %14
%254 = xor i32 %253, -1
%255 = and i32 %252, %254
%256 = load i32, i32* %18
%257 = xor i32 %256, -1
%258 = load i32, i32* %15
%259 = xor i32 %258, -1
%260 = and i32 %257, %259
%261 = load i32, i32* %13
%262 = and i32 %260, %261
%263 = load i32, i32* %14
%264 = and i32 %262, %263
%265 = or i32 %255, %264
%266 = and i32 %247, %265
%267 = sitofp i32 %266 to double
%268 = load double*, double** %11
%269 = load double, double* %268
%270 = call double @llvm.fmuladd.f64(double %245, double %267, double %269)
store double %270, double* %268
%271 = load double, double* %10
%272 = load i32, i32* %19
%273 = load i32, i32* %18
%274 = load i32, i32* %15
%275 = and i32 %273, %274
%276 = load i32, i32* %13
%277 = xor i32 %276, -1
%278 = and i32 %275, %277
%279 = load i32, i32* %14
%280 = xor i32 %279, -1
%281 = and i32 %278, %280
%282 = load i32, i32* %18
%283 = xor i32 %282, -1
%284 = load i32, i32* %16
%285 = xor i32 %284, -1
%286 = and i32 %283, %285
%287 = load i32, i32* %15
%288 = xor i32 %287, -1
%289 = and i32 %286, %288
%290 = load i32, i32* %14
%291 = and i32 %289, %290
%292 = or i32 %281, %291
%293 = and i32 %272, %292
%294 = sitofp i32 %293 to double
%295 = load double*, double** %12
%296 = load double, double* %295
%297 = call double @llvm.fmuladd.f64(double %271, double %294, double %296)
store double %297, double* %295
br label %298
298: ; preds = %79, %6
%299 = load i32, i32* %17
ret i32 %299
}

LLVM IR (-O2):
define i32 @isect(double %0, double %1, double %2, double %3, double* nocapture %4, double* nocapture %5) {
%7 = fcmp olt double %1, %2
%8 = zext i1 %7 to i32
%9 = fcmp olt double %1, %3
%10 = zext i1 %9 to i32
%11 = fcmp olt double %0, %3
%12 = zext i1 %11 to i32
%13 = fcmp olt double %0, %2
%14 = zext i1 %13 to i32
%15 = xor i32 %8, -1
%16 = xor i1 %7, %9
%17 = zext i1 %16 to i32
%18 = and i1 %7, %9
%19 = zext i1 %18 to i32
%20 = xor i32 %19, -1
%21 = and i32 %20, %12
%22 = or i32 %21, %17
%23 = xor i32 %12, -1
%24 = or i1 %7, %9
%25 = zext i1 %24 to i32
%26 = and i32 %25, %23
%27 = or i32 %22, %26
%28 = and i1 %7, %11
%29 = and i1 %9, %28
%30 = zext i1 %29 to i32
%31 = xor i32 %30, -1
%32 = and i32 %31, %14
%33 = or i32 %27, %32
%34 = xor i32 %14, -1
%35 = or i1 %7, %11
%36 = or i1 %9, %35
%37 = zext i1 %36 to i32
%38 = and i32 %37, %34
%39 = or i32 %33, %38
%40 = icmp eq i32 %39, 0
br i1 %40, label %134, label %41
41: ; preds = %6
%42 = xor i32 %10, -1
%43 = fcmp olt double %0, %1
%44 = zext i1 %43 to i32
%45 = fcmp olt double %2, %3
%46 = zext i1 %45 to i32
%47 = and i32 %23, %14
%48 = xor i32 %46, -1
%49 = or i1 %9, %45
%50 = zext i1 %49 to i32
%51 = xor i32 %50, -1
%52 = and i32 %47, %51
%53 = and i32 %12, %34
%54 = and i32 %46, %15
%55 = and i32 %54, %53
%56 = or i32 %55, %52
%57 = and i32 %56, %44
%58 = sitofp i32 %57 to double
%59 = fmul double %58, %0
store double %59, double* %4
%60 = xor i32 %44, -1
%61 = and i32 %48, %8
%62 = and i32 %61, %47
%63 = and i1 %45, %9
%64 = zext i1 %63 to i32
%65 = and i32 %53, %64
%66 = or i32 %62, %65
%67 = and i32 %66, %60
%68 = sitofp i32 %67 to double
%69 = fmul double %68, %0
store double %69, double* %5
%70 = or i1 %11, %9
%71 = or i1 %45, %70
%72 = zext i1 %71 to i32
%73 = xor i32 %72, -1
%74 = and i32 %73, %8
%75 = or i1 %7, %13
%76 = zext i1 %75 to i32
%77 = xor i32 %76, -1
%78 = and i32 %64, %77
%79 = or i32 %74, %78
%80 = and i32 %79, %60
%81 = sitofp i32 %80 to double
%82 = load double, double* %4
%83 = tail call double @llvm.fmuladd.f64(double %1, double %81, double %82)
store double %83, double* %4
%84 = and i1 %13, %7
%85 = zext i1 %84 to i32
%86 = and i32 %51, %85
%87 = and i32 %64, %15
%88 = and i32 %87, %12
%89 = or i32 %88, %86
%90 = and i32 %89, %44
%91 = sitofp i32 %90 to double
%92 = load double, double* %5
%93 = tail call double @llvm.fmuladd.f64(double %1, double %91, double %92)
store double %93, double* %5
%94 = and i1 %43, %13
%95 = zext i1 %94 to i32
%96 = and i1 %94, %11
%97 = zext i1 %96 to i32
%98 = and i32 %97, %15
%99 = and i32 %34, %60
%100 = and i32 %99, %19
%101 = or i32 %98, %100
%102 = and i32 %101, %46
%103 = sitofp i32 %102 to double
%104 = load double, double* %4
%105 = tail call double @llvm.fmuladd.f64(double %2, double %103, double %104)
store double %105, double* %4
%106 = xor i32 %25, -1
%107 = and i32 %106, %95
%108 = and i32 %99, %23
%109 = and i32 %108, %8
%110 = or i32 %107, %109
%111 = and i32 %110, %48
%112 = sitofp i32 %111 to double
%113 = load double, double* %5
%114 = tail call double @llvm.fmuladd.f64(double %2, double %112, double %113)
store double %114, double* %5
%115 = and i32 %97, %42
%116 = or i1 %43, %11
%117 = zext i1 %116 to i32
%118 = xor i32 %117, -1
%119 = and i32 %19, %118
%120 = or i32 %119, %115
%121 = and i32 %120, %48
%122 = sitofp i32 %121 to double
%123 = load double, double* %4
%124 = tail call double @llvm.fmuladd.f64(double %3, double %122, double %123)
store double %124, double* %4
%125 = and i1 %43, %11
%126 = zext i1 %125 to i32
%127 = and i32 %126, %106
%128 = and i32 %108, %10
%129 = or i32 %127, %128
%130 = and i32 %129, %46
%131 = sitofp i32 %130 to double
%132 = load double, double* %5
%133 = tail call double @llvm.fmuladd.f64(double %3, double %131, double %132)
store double %133, double* %5
br label %134
134: ; preds = %41, %6
ret i32 %39
}