int box_disjoint(const int a[3][2], const int b[3][2]) {
  return a[0][1] <= b[0][0] || b[0][1] <= a[0][0] || a[1][1] <= b[1][0] ||
         b[1][1] <= a[1][0] || a[2][1] <= b[2][0] || b[2][1] <= a[2][0];
}


x86 assembly (clang, -O0):
<box_disjoint>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1,%al
cmp    (%rdx),%ecx
mov    %al,-0x11(%rbp)
jle    119b <box_disjoint+0x9b>
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x8(%rbp),%rdx
mov    $0x1,%al
cmp    (%rdx),%ecx
mov    %al,-0x11(%rbp)
jle    119b <box_disjoint+0x9b>
mov    -0x8(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1,%al
cmp    0x8(%rdx),%ecx
mov    %al,-0x11(%rbp)
jle    119b <box_disjoint+0x9b>
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%ecx
mov    -0x8(%rbp),%rdx
mov    $0x1,%al
cmp    0x8(%rdx),%ecx
mov    %al,-0x11(%rbp)
jle    119b <box_disjoint+0x9b>
mov    -0x8(%rbp),%rax
mov    0x14(%rax),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1,%al
cmp    0x10(%rdx),%ecx
mov    %al,-0x11(%rbp)
jle    119b <box_disjoint+0x9b>
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%eax
mov    -0x8(%rbp),%rcx
cmp    0x10(%rcx),%eax
setle  %al
mov    %al,-0x11(%rbp)
mov    -0x11(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<box_disjoint>:
mov    0x4(%rdi),%ecx
mov    $0x1,%eax
cmp    (%rsi),%ecx
jle    1136 <box_disjoint+0x36>
mov    0x4(%rsi),%ecx
cmp    (%rdi),%ecx
jle    1136 <box_disjoint+0x36>
mov    0xc(%rdi),%ecx
cmp    0x8(%rsi),%ecx
jle    1136 <box_disjoint+0x36>
mov    0xc(%rsi),%ecx
cmp    0x8(%rdi),%ecx
jle    1136 <box_disjoint+0x36>
mov    0x14(%rdi),%ecx
cmp    0x10(%rsi),%ecx
jle    1136 <box_disjoint+0x36>
mov    0x14(%rsi),%ecx
xor    %eax,%eax
cmp    0x10(%rdi),%ecx
setle  %al
ret

LLVM IR (-O0):
define i32 @box_disjoint([2 x i32]* %0, [2 x i32]* %1) {
%3 = alloca [2 x i32]*
%4 = alloca [2 x i32]*
store [2 x i32]* %0, [2 x i32]** %3
store [2 x i32]* %1, [2 x i32]** %4
%5 = load [2 x i32]*, [2 x i32]** %3
%6 = getelementptr inbounds [2 x i32], [2 x i32]* %5, i64 0
%7 = getelementptr inbounds [2 x i32], [2 x i32]* %6, i64 0, i64 1
%8 = load i32, i32* %7
%9 = load [2 x i32]*, [2 x i32]** %4
%10 = getelementptr inbounds [2 x i32], [2 x i32]* %9, i64 0
%11 = getelementptr inbounds [2 x i32], [2 x i32]* %10, i64 0, i64 0
%12 = load i32, i32* %11
%13 = icmp sle i32 %8, %12
br i1 %13, label %64, label %14
14: ; preds = %2
%15 = load [2 x i32]*, [2 x i32]** %4
%16 = getelementptr inbounds [2 x i32], [2 x i32]* %15, i64 0
%17 = getelementptr inbounds [2 x i32], [2 x i32]* %16, i64 0, i64 1
%18 = load i32, i32* %17
%19 = load [2 x i32]*, [2 x i32]** %3
%20 = getelementptr inbounds [2 x i32], [2 x i32]* %19, i64 0
%21 = getelementptr inbounds [2 x i32], [2 x i32]* %20, i64 0, i64 0
%22 = load i32, i32* %21
%23 = icmp sle i32 %18, %22
br i1 %23, label %64, label %24
24: ; preds = %14
%25 = load [2 x i32]*, [2 x i32]** %3
%26 = getelementptr inbounds [2 x i32], [2 x i32]* %25, i64 1
%27 = getelementptr inbounds [2 x i32], [2 x i32]* %26, i64 0, i64 1
%28 = load i32, i32* %27
%29 = load [2 x i32]*, [2 x i32]** %4
%30 = getelementptr inbounds [2 x i32], [2 x i32]* %29, i64 1
%31 = getelementptr inbounds [2 x i32], [2 x i32]* %30, i64 0, i64 0
%32 = load i32, i32* %31
%33 = icmp sle i32 %28, %32
br i1 %33, label %64, label %34
34: ; preds = %24
%35 = load [2 x i32]*, [2 x i32]** %4
%36 = getelementptr inbounds [2 x i32], [2 x i32]* %35, i64 1
%37 = getelementptr inbounds [2 x i32], [2 x i32]* %36, i64 0, i64 1
%38 = load i32, i32* %37
%39 = load [2 x i32]*, [2 x i32]** %3
%40 = getelementptr inbounds [2 x i32], [2 x i32]* %39, i64 1
%41 = getelementptr inbounds [2 x i32], [2 x i32]* %40, i64 0, i64 0
%42 = load i32, i32* %41
%43 = icmp sle i32 %38, %42
br i1 %43, label %64, label %44
44: ; preds = %34
%45 = load [2 x i32]*, [2 x i32]** %3
%46 = getelementptr inbounds [2 x i32], [2 x i32]* %45, i64 2
%47 = getelementptr inbounds [2 x i32], [2 x i32]* %46, i64 0, i64 1
%48 = load i32, i32* %47
%49 = load [2 x i32]*, [2 x i32]** %4
%50 = getelementptr inbounds [2 x i32], [2 x i32]* %49, i64 2
%51 = getelementptr inbounds [2 x i32], [2 x i32]* %50, i64 0, i64 0
%52 = load i32, i32* %51
%53 = icmp sle i32 %48, %52
br i1 %53, label %64, label %54
54: ; preds = %44
%55 = load [2 x i32]*, [2 x i32]** %4
%56 = getelementptr inbounds [2 x i32], [2 x i32]* %55, i64 2
%57 = getelementptr inbounds [2 x i32], [2 x i32]* %56, i64 0, i64 1
%58 = load i32, i32* %57
%59 = load [2 x i32]*, [2 x i32]** %3
%60 = getelementptr inbounds [2 x i32], [2 x i32]* %59, i64 2
%61 = getelementptr inbounds [2 x i32], [2 x i32]* %60, i64 0, i64 0
%62 = load i32, i32* %61
%63 = icmp sle i32 %58, %62
br label %64
64: ; preds = %54, %44, %34, %24, %14, %2
%65 = phi i1 [ true, %44 ], [ true, %34 ], [ true, %24 ], [ true, %14 ], [ true, %2 ], [ %63, %54 ]
%66 = zext i1 %65 to i32
ret i32 %66
}

LLVM IR (-O2):
define i32 @box_disjoint([2 x i32]* nocapture %0, [2 x i32]* nocapture %1) {
%3 = getelementptr inbounds [2 x i32], [2 x i32]* %0, i64 0, i64 1
%4 = load i32, i32* %3
%5 = getelementptr inbounds [2 x i32], [2 x i32]* %1, i64 0, i64 0
%6 = load i32, i32* %5
%7 = icmp sgt i32 %4, %6
br i1 %7, label %8, label %39
8: ; preds = %2
%9 = getelementptr inbounds [2 x i32], [2 x i32]* %1, i64 0, i64 1
%10 = load i32, i32* %9
%11 = getelementptr inbounds [2 x i32], [2 x i32]* %0, i64 0, i64 0
%12 = load i32, i32* %11
%13 = icmp sgt i32 %10, %12
br i1 %13, label %14, label %39
14: ; preds = %8
%15 = getelementptr inbounds [2 x i32], [2 x i32]* %0, i64 1, i64 1
%16 = load i32, i32* %15
%17 = getelementptr inbounds [2 x i32], [2 x i32]* %1, i64 1, i64 0
%18 = load i32, i32* %17
%19 = icmp sgt i32 %16, %18
br i1 %19, label %20, label %39
20: ; preds = %14
%21 = getelementptr inbounds [2 x i32], [2 x i32]* %1, i64 1, i64 1
%22 = load i32, i32* %21
%23 = getelementptr inbounds [2 x i32], [2 x i32]* %0, i64 1, i64 0
%24 = load i32, i32* %23
%25 = icmp sgt i32 %22, %24
br i1 %25, label %26, label %39
26: ; preds = %20
%27 = getelementptr inbounds [2 x i32], [2 x i32]* %0, i64 2, i64 1
%28 = load i32, i32* %27
%29 = getelementptr inbounds [2 x i32], [2 x i32]* %1, i64 2, i64 0
%30 = load i32, i32* %29
%31 = icmp sgt i32 %28, %30
br i1 %31, label %32, label %39
32: ; preds = %26
%33 = getelementptr inbounds [2 x i32], [2 x i32]* %1, i64 2, i64 1
%34 = load i32, i32* %33
%35 = getelementptr inbounds [2 x i32], [2 x i32]* %0, i64 2, i64 0
%36 = load i32, i32* %35
%37 = icmp sle i32 %34, %36
%38 = zext i1 %37 to i32
br label %39
39: ; preds = %32, %26, %20, %14, %8, %2
%40 = phi i32 [ 1, %26 ], [ 1, %20 ], [ 1, %14 ], [ 1, %8 ], [ 1, %2 ], [ %38, %32 ]
ret i32 %40
}