int isect(double a, double b, double x, double y, double *l, double *u) {
  const int A = a < b, B = a < x, C = a < y, D = b < x, E = b < y, F = x < y;
  const int ret = B & ~E | B & ~D | B & ~C | C & ~E | C & ~D | ~B & C | D & ~E |
                  ~C & D | ~B & D | ~D & E | ~C & E | ~B & E;
  const int alower = A & B & ~C & ~E & ~F | A & ~B & C & ~D & F;
  const int blower = ~A & ~C & D & ~E & ~F | ~A & ~B & ~D & E & F;
  const int xlower = A & B & C & ~D & F | ~A & ~B & D & E & F;
  const int ylower = A & B & C & ~E & ~F | ~A & ~C & D & E & ~F;
  const int aupper = ~A & B & ~C & D & ~F | ~A & ~B & C & E & F;
  const int bupper = A & B & D & ~E & ~F | A & C & ~D & E & F;
  const int xupper = A & B & ~D & ~E & ~F | ~A & ~B & ~C & D & ~F;
  const int yupper = A & C & ~D & ~E & F | ~A & ~B & ~C & E & F;
  *l = a * alower + b * blower + x * xlower + y * ylower;
  *u = a * aupper + b * bupper + x * xupper + y * yupper;
  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  -0x8(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x18(%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  -0x10(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x40(%rbp)
movsd  -0x10(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x44(%rbp)
movsd  -0x18(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x48(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x44(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x38(%rbp),%ecx
mov    -0x40(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    -0x38(%rbp),%ecx
mov    -0x3c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    -0x3c(%rbp),%ecx
mov    -0x44(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    -0x3c(%rbp),%ecx
mov    -0x40(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    -0x38(%rbp),%ecx
xor    $0xffffffff,%ecx
and    -0x3c(%rbp),%ecx
or     %ecx,%eax
mov    -0x40(%rbp),%ecx
mov    -0x44(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    -0x3c(%rbp),%ecx
xor    $0xffffffff,%ecx
and    -0x40(%rbp),%ecx
or     %ecx,%eax
mov    -0x38(%rbp),%ecx
xor    $0xffffffff,%ecx
and    -0x40(%rbp),%ecx
or     %ecx,%eax
mov    -0x40(%rbp),%ecx
xor    $0xffffffff,%ecx
and    -0x44(%rbp),%ecx
or     %ecx,%eax
mov    -0x3c(%rbp),%ecx
xor    $0xffffffff,%ecx
and    -0x44(%rbp),%ecx
or     %ecx,%eax
mov    -0x38(%rbp),%ecx
xor    $0xffffffff,%ecx
and    -0x44(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
and    -0x38(%rbp),%eax
mov    -0x3c(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x44(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x48(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x34(%rbp),%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x3c(%rbp),%ecx
mov    -0x40(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x48(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x50(%rbp)
mov    -0x34(%rbp),%eax
xor    $0xffffffff,%eax
mov    -0x3c(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
and    -0x40(%rbp),%eax
mov    -0x44(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x48(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x34(%rbp),%ecx
xor    $0xffffffff,%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x40(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x44(%rbp),%ecx
and    -0x48(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x34(%rbp),%eax
and    -0x38(%rbp),%eax
and    -0x3c(%rbp),%eax
mov    -0x40(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
and    -0x48(%rbp),%eax
mov    -0x34(%rbp),%ecx
xor    $0xffffffff,%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x40(%rbp),%ecx
and    -0x44(%rbp),%ecx
and    -0x48(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x58(%rbp)
mov    -0x34(%rbp),%eax
and    -0x38(%rbp),%eax
and    -0x3c(%rbp),%eax
mov    -0x44(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x48(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x34(%rbp),%ecx
xor    $0xffffffff,%ecx
mov    -0x3c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x40(%rbp),%ecx
and    -0x44(%rbp),%ecx
mov    -0x48(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x34(%rbp),%eax
xor    $0xffffffff,%eax
and    -0x38(%rbp),%eax
mov    -0x3c(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
and    -0x40(%rbp),%eax
mov    -0x48(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x34(%rbp),%ecx
xor    $0xffffffff,%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x3c(%rbp),%ecx
and    -0x44(%rbp),%ecx
and    -0x48(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x60(%rbp)
mov    -0x34(%rbp),%eax
and    -0x38(%rbp),%eax
and    -0x40(%rbp),%eax
mov    -0x44(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x48(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x34(%rbp),%ecx
and    -0x3c(%rbp),%ecx
mov    -0x40(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x44(%rbp),%ecx
and    -0x48(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x64(%rbp)
mov    -0x34(%rbp),%eax
and    -0x38(%rbp),%eax
mov    -0x40(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x44(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x48(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x34(%rbp),%ecx
xor    $0xffffffff,%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x3c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x40(%rbp),%ecx
mov    -0x48(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0x68(%rbp)
mov    -0x34(%rbp),%eax
and    -0x3c(%rbp),%eax
mov    -0x40(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
mov    -0x44(%rbp),%ecx
xor    $0xffffffff,%ecx
and    %ecx,%eax
and    -0x48(%rbp),%eax
mov    -0x34(%rbp),%ecx
xor    $0xffffffff,%ecx
mov    -0x38(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
mov    -0x3c(%rbp),%edx
xor    $0xffffffff,%edx
and    %edx,%ecx
and    -0x44(%rbp),%ecx
and    -0x48(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x6c(%rbp)
movsd  -0x8(%rbp),%xmm0
cvtsi2sdl -0x50(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
cvtsi2sdl -0x54(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
cvtsi2sdl -0x58(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x20(%rbp),%xmm0
cvtsi2sdl -0x5c(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
cvtsi2sdl -0x60(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
cvtsi2sdl -0x64(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm1
cvtsi2sdl -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x20(%rbp),%xmm0
cvtsi2sdl -0x6c(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x4c(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<isect>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
xor    %ecx,%ecx
ucomisd %xmm0,%xmm1
seta   %cl
xor    %eax,%eax
ucomisd %xmm0,%xmm2
seta   %al
mov    %eax,%ebp
mov    %eax,-0x14(%rsp)
xor    %eax,%eax
ucomisd %xmm0,%xmm3
seta   %al
xor    %r11d,%r11d
ucomisd %xmm1,%xmm2
seta   %r11b
xor    %r9d,%r9d
ucomisd %xmm1,%xmm3
seta   %r9b
xor    %ebx,%ebx
ucomisd %xmm2,%xmm3
seta   %bl
mov    %rsi,-0x8(%rsp)
mov    %rdi,-0x10(%rsp)
mov    %r9d,%r15d
not    %r15d
mov    %r11d,%edx
not    %edx
mov    %edx,%edi
mov    %r11d,%edx
mov    %eax,%esi
and    %sil,%dl
and    %edi,%eax
mov    %edi,%r12d
not    %ebp
mov    %esi,%r13d
mov    %esi,%edi
and    %ebp,%r13d
or     %eax,%r13d
mov    %cl,-0x2f(%rsp)
mov    %ebx,%eax
mov    %ebx,-0x28(%rsp)
and    %dil,%al
and    %cl,%al
mov    %al,-0x2e(%rsp)
mov    %ecx,-0x2c(%rsp)
mov    %edi,%eax
or     %cl,%al
mov    %al,-0x2d(%rsp)
and    %dil,%cl
mov    %esi,%r10d
not    %r10d
movzbl %dl,%esi
not    %esi
or     %r15d,%esi
mov    %edi,%r14d
mov    %edi,%r8d
mov    %edi,-0x24(%rsp)
and    %r15d,%r14d
movzbl %cl,%eax
mov    %r12d,%edi
mov    %r12d,-0x20(%rsp)
and    %r12d,%eax
mov    %ebx,%edx
and    %r9b,%dl
movzbl %dl,%ecx
and    %eax,%ecx
mov    %ecx,-0x18(%rsp)
and    %r15d,%eax
mov    %eax,-0x1c(%rsp)
and    %r11d,%r15d
mov    %r10d,%edx
and    %r11d,%edx
or     %r15d,%edx
mov    %r9d,%r12d
and    %ebp,%r12d
mov    -0x2c(%rsp),%r15d
not    %r15d
and    %ebp,%r15d
and    %r11d,%ebp
or     %r14d,%ebp
or     %r13d,%ebp
mov    %r9d,%r14d
and    %edi,%r14d
or     %edx,%r14d
or     %ebp,%r14d
mov    %r15d,%r13d
and    %r10d,%r15d
and    %r9d,%r10d
or     %r10d,%r12d
mov    -0x14(%rsp),%ebx
and    %ebx,%esi
or     %esi,%r12d
or     %r14d,%r12d
mov    %ebx,%eax
or     %r11b,%al
movzbl %al,%r10d
not    %r10d
movzbl -0x2e(%rsp),%edx
and    %edx,%r10d
mov    %r8d,%edx
or     %r9b,%dl
mov    -0x2f(%rsp),%cl
and    %bl,%cl
mov    -0x28(%rsp),%r8d
or     %r8b,%dl
movzbl %dl,%edx
not    %edx
movzbl %cl,%r14d
and    %r14d,%edx
or     %edx,%r10d
and    %r9d,%r13d
mov    %r8d,%esi
not    %esi
mov    %esi,%ebp
and    %r9d,%ebp
mov    %r13d,%edx
mov    %r11d,%eax
and    %r11d,%edx
and    %r11d,%esi
mov    %al,-0x2f(%rsp)
or     %r9b,%al
mov    %eax,-0x2c(%rsp)
and    %esi,%ebx
and    %r15d,%esi
and    %r9d,%r15d
mov    %r14d,%edi
and    -0x24(%rsp),%dil
movzbl -0x2d(%rsp),%ecx
not    %ecx
and    %ecx,%r11d
or     %r8b,%r9b
movzbl %r9b,%r9d
not    %r9d
and    %r11d,%ebp
and    %r9d,%r11d
movzbl %dil,%edi
mov    %edi,%r8d
mov    -0x20(%rsp),%eax
and    %eax,%r8d
and    -0x28(%rsp),%eax
and    %r13d,%eax
or     %r11d,%eax
or     %r8d,%edx
and    %r9d,%edi
or     %edi,%ebp
and    %ecx,%ebx
mov    -0x24(%rsp),%ecx
mov    -0x28(%rsp),%r8d
and    %r8d,%ecx
and    %r13d,%ecx
or     %ebx,%ecx
mov    -0x2f(%rsp),%bl
and    %r14b,%bl
movzbl %bl,%edi
and    %r9d,%edi
mov    -0x18(%rsp),%ebx
or     %edi,%ebx
mov    -0x2c(%rsp),%edi
or     %r8b,%dil
movzbl %dil,%edi
not    %edi
and    %r14d,%edi
or     %edi,%esi
or     -0x1c(%rsp),%r15d
and    %r8d,%edx
and    %r8d,%r15d
cvtsi2sd %r10d,%xmm4
cvtsi2sd %eax,%xmm5
cvtsi2sd %edx,%xmm6
cvtsi2sd %ebp,%xmm7
mulsd  %xmm1,%xmm5
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm2,%xmm6
addsd  %xmm4,%xmm6
mulsd  %xmm3,%xmm7
addsd  %xmm6,%xmm7
mov    -0x10(%rsp),%rax
movsd  %xmm7,(%rax)
xorps  %xmm4,%xmm4
cvtsi2sd %ecx,%xmm4
xorps  %xmm5,%xmm5
cvtsi2sd %ebx,%xmm5
xorps  %xmm6,%xmm6
cvtsi2sd %esi,%xmm6
xorps  %xmm7,%xmm7
cvtsi2sd %r15d,%xmm7
mulsd  %xmm1,%xmm5
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm2,%xmm6
addsd  %xmm4,%xmm6
mulsd  %xmm3,%xmm7
addsd  %xmm6,%xmm7
mov    -0x8(%rsp),%rax
movsd  %xmm7,(%rax)
mov    %r12d,%eax
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
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = 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
%28 = load double, double* %7
%29 = load double, double* %8
%30 = fcmp olt double %28, %29
%31 = zext i1 %30 to i32
store i32 %31, i32* %13
%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* %14
%36 = load double, double* %7
%37 = load double, double* %10
%38 = fcmp olt double %36, %37
%39 = zext i1 %38 to i32
store i32 %39, i32* %15
%40 = load double, double* %8
%41 = load double, double* %9
%42 = fcmp olt double %40, %41
%43 = zext i1 %42 to i32
store i32 %43, i32* %16
%44 = load double, double* %8
%45 = load double, double* %10
%46 = fcmp olt double %44, %45
%47 = zext i1 %46 to i32
store i32 %47, i32* %17
%48 = load double, double* %9
%49 = load double, double* %10
%50 = fcmp olt double %48, %49
%51 = zext i1 %50 to i32
store i32 %51, i32* %18
%52 = load i32, i32* %14
%53 = load i32, i32* %17
%54 = xor i32 %53, -1
%55 = and i32 %52, %54
%56 = load i32, i32* %14
%57 = load i32, i32* %16
%58 = xor i32 %57, -1
%59 = and i32 %56, %58
%60 = or i32 %55, %59
%61 = load i32, i32* %14
%62 = load i32, i32* %15
%63 = xor i32 %62, -1
%64 = and i32 %61, %63
%65 = or i32 %60, %64
%66 = load i32, i32* %15
%67 = load i32, i32* %17
%68 = xor i32 %67, -1
%69 = and i32 %66, %68
%70 = or i32 %65, %69
%71 = load i32, i32* %15
%72 = load i32, i32* %16
%73 = xor i32 %72, -1
%74 = and i32 %71, %73
%75 = or i32 %70, %74
%76 = load i32, i32* %14
%77 = xor i32 %76, -1
%78 = load i32, i32* %15
%79 = and i32 %77, %78
%80 = or i32 %75, %79
%81 = load i32, i32* %16
%82 = load i32, i32* %17
%83 = xor i32 %82, -1
%84 = and i32 %81, %83
%85 = or i32 %80, %84
%86 = load i32, i32* %15
%87 = xor i32 %86, -1
%88 = load i32, i32* %16
%89 = and i32 %87, %88
%90 = or i32 %85, %89
%91 = load i32, i32* %14
%92 = xor i32 %91, -1
%93 = load i32, i32* %16
%94 = and i32 %92, %93
%95 = or i32 %90, %94
%96 = load i32, i32* %16
%97 = xor i32 %96, -1
%98 = load i32, i32* %17
%99 = and i32 %97, %98
%100 = or i32 %95, %99
%101 = load i32, i32* %15
%102 = xor i32 %101, -1
%103 = load i32, i32* %17
%104 = and i32 %102, %103
%105 = or i32 %100, %104
%106 = load i32, i32* %14
%107 = xor i32 %106, -1
%108 = load i32, i32* %17
%109 = and i32 %107, %108
%110 = or i32 %105, %109
store i32 %110, i32* %19
%111 = load i32, i32* %13
%112 = load i32, i32* %14
%113 = and i32 %111, %112
%114 = load i32, i32* %15
%115 = xor i32 %114, -1
%116 = and i32 %113, %115
%117 = load i32, i32* %17
%118 = xor i32 %117, -1
%119 = and i32 %116, %118
%120 = load i32, i32* %18
%121 = xor i32 %120, -1
%122 = and i32 %119, %121
%123 = load i32, i32* %13
%124 = load i32, i32* %14
%125 = xor i32 %124, -1
%126 = and i32 %123, %125
%127 = load i32, i32* %15
%128 = and i32 %126, %127
%129 = load i32, i32* %16
%130 = xor i32 %129, -1
%131 = and i32 %128, %130
%132 = load i32, i32* %18
%133 = and i32 %131, %132
%134 = or i32 %122, %133
store i32 %134, i32* %20
%135 = load i32, i32* %13
%136 = xor i32 %135, -1
%137 = load i32, i32* %15
%138 = xor i32 %137, -1
%139 = and i32 %136, %138
%140 = load i32, i32* %16
%141 = and i32 %139, %140
%142 = load i32, i32* %17
%143 = xor i32 %142, -1
%144 = and i32 %141, %143
%145 = load i32, i32* %18
%146 = xor i32 %145, -1
%147 = and i32 %144, %146
%148 = load i32, i32* %13
%149 = xor i32 %148, -1
%150 = load i32, i32* %14
%151 = xor i32 %150, -1
%152 = and i32 %149, %151
%153 = load i32, i32* %16
%154 = xor i32 %153, -1
%155 = and i32 %152, %154
%156 = load i32, i32* %17
%157 = and i32 %155, %156
%158 = load i32, i32* %18
%159 = and i32 %157, %158
%160 = or i32 %147, %159
store i32 %160, i32* %21
%161 = load i32, i32* %13
%162 = load i32, i32* %14
%163 = and i32 %161, %162
%164 = load i32, i32* %15
%165 = and i32 %163, %164
%166 = load i32, i32* %16
%167 = xor i32 %166, -1
%168 = and i32 %165, %167
%169 = load i32, i32* %18
%170 = and i32 %168, %169
%171 = load i32, i32* %13
%172 = xor i32 %171, -1
%173 = load i32, i32* %14
%174 = xor i32 %173, -1
%175 = and i32 %172, %174
%176 = load i32, i32* %16
%177 = and i32 %175, %176
%178 = load i32, i32* %17
%179 = and i32 %177, %178
%180 = load i32, i32* %18
%181 = and i32 %179, %180
%182 = or i32 %170, %181
store i32 %182, i32* %22
%183 = load i32, i32* %13
%184 = load i32, i32* %14
%185 = and i32 %183, %184
%186 = load i32, i32* %15
%187 = and i32 %185, %186
%188 = load i32, i32* %17
%189 = xor i32 %188, -1
%190 = and i32 %187, %189
%191 = load i32, i32* %18
%192 = xor i32 %191, -1
%193 = and i32 %190, %192
%194 = load i32, i32* %13
%195 = xor i32 %194, -1
%196 = load i32, i32* %15
%197 = xor i32 %196, -1
%198 = and i32 %195, %197
%199 = load i32, i32* %16
%200 = and i32 %198, %199
%201 = load i32, i32* %17
%202 = and i32 %200, %201
%203 = load i32, i32* %18
%204 = xor i32 %203, -1
%205 = and i32 %202, %204
%206 = or i32 %193, %205
store i32 %206, i32* %23
%207 = load i32, i32* %13
%208 = xor i32 %207, -1
%209 = load i32, i32* %14
%210 = and i32 %208, %209
%211 = load i32, i32* %15
%212 = xor i32 %211, -1
%213 = and i32 %210, %212
%214 = load i32, i32* %16
%215 = and i32 %213, %214
%216 = load i32, i32* %18
%217 = xor i32 %216, -1
%218 = and i32 %215, %217
%219 = load i32, i32* %13
%220 = xor i32 %219, -1
%221 = load i32, i32* %14
%222 = xor i32 %221, -1
%223 = and i32 %220, %222
%224 = load i32, i32* %15
%225 = and i32 %223, %224
%226 = load i32, i32* %17
%227 = and i32 %225, %226
%228 = load i32, i32* %18
%229 = and i32 %227, %228
%230 = or i32 %218, %229
store i32 %230, i32* %24
%231 = load i32, i32* %13
%232 = load i32, i32* %14
%233 = and i32 %231, %232
%234 = load i32, i32* %16
%235 = and i32 %233, %234
%236 = load i32, i32* %17
%237 = xor i32 %236, -1
%238 = and i32 %235, %237
%239 = load i32, i32* %18
%240 = xor i32 %239, -1
%241 = and i32 %238, %240
%242 = load i32, i32* %13
%243 = load i32, i32* %15
%244 = and i32 %242, %243
%245 = load i32, i32* %16
%246 = xor i32 %245, -1
%247 = and i32 %244, %246
%248 = load i32, i32* %17
%249 = and i32 %247, %248
%250 = load i32, i32* %18
%251 = and i32 %249, %250
%252 = or i32 %241, %251
store i32 %252, i32* %25
%253 = load i32, i32* %13
%254 = load i32, i32* %14
%255 = and i32 %253, %254
%256 = load i32, i32* %16
%257 = xor i32 %256, -1
%258 = and i32 %255, %257
%259 = load i32, i32* %17
%260 = xor i32 %259, -1
%261 = and i32 %258, %260
%262 = load i32, i32* %18
%263 = xor i32 %262, -1
%264 = and i32 %261, %263
%265 = load i32, i32* %13
%266 = xor i32 %265, -1
%267 = load i32, i32* %14
%268 = xor i32 %267, -1
%269 = and i32 %266, %268
%270 = load i32, i32* %15
%271 = xor i32 %270, -1
%272 = and i32 %269, %271
%273 = load i32, i32* %16
%274 = and i32 %272, %273
%275 = load i32, i32* %18
%276 = xor i32 %275, -1
%277 = and i32 %274, %276
%278 = or i32 %264, %277
store i32 %278, i32* %26
%279 = load i32, i32* %13
%280 = load i32, i32* %15
%281 = and i32 %279, %280
%282 = load i32, i32* %16
%283 = xor i32 %282, -1
%284 = and i32 %281, %283
%285 = load i32, i32* %17
%286 = xor i32 %285, -1
%287 = and i32 %284, %286
%288 = load i32, i32* %18
%289 = and i32 %287, %288
%290 = load i32, i32* %13
%291 = xor i32 %290, -1
%292 = load i32, i32* %14
%293 = xor i32 %292, -1
%294 = and i32 %291, %293
%295 = load i32, i32* %15
%296 = xor i32 %295, -1
%297 = and i32 %294, %296
%298 = load i32, i32* %17
%299 = and i32 %297, %298
%300 = load i32, i32* %18
%301 = and i32 %299, %300
%302 = or i32 %289, %301
store i32 %302, i32* %27
%303 = load double, double* %7
%304 = load i32, i32* %20
%305 = sitofp i32 %304 to double
%306 = load double, double* %8
%307 = load i32, i32* %21
%308 = sitofp i32 %307 to double
%309 = fmul double %306, %308
%310 = call double @llvm.fmuladd.f64(double %303, double %305, double %309)
%311 = load double, double* %9
%312 = load i32, i32* %22
%313 = sitofp i32 %312 to double
%314 = call double @llvm.fmuladd.f64(double %311, double %313, double %310)
%315 = load double, double* %10
%316 = load i32, i32* %23
%317 = sitofp i32 %316 to double
%318 = call double @llvm.fmuladd.f64(double %315, double %317, double %314)
%319 = load double*, double** %11
store double %318, double* %319
%320 = load double, double* %7
%321 = load i32, i32* %24
%322 = sitofp i32 %321 to double
%323 = load double, double* %8
%324 = load i32, i32* %25
%325 = sitofp i32 %324 to double
%326 = fmul double %323, %325
%327 = call double @llvm.fmuladd.f64(double %320, double %322, double %326)
%328 = load double, double* %9
%329 = load i32, i32* %26
%330 = sitofp i32 %329 to double
%331 = call double @llvm.fmuladd.f64(double %328, double %330, double %327)
%332 = load double, double* %10
%333 = load i32, i32* %27
%334 = sitofp i32 %333 to double
%335 = call double @llvm.fmuladd.f64(double %332, double %334, double %331)
%336 = load double*, double** %12
store double %335, double* %336
%337 = load i32, i32* %19
ret i32 %337
}

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