int optBoundsIntersectRegion(float *B, float *xmin, float *xmax,
                             int Dimension) {
  if (Dimension == 3) {
    if (B[0] > xmax[0] || B[1] < xmin[0] || B[2] > xmax[1] || B[3] < xmin[1] ||
        B[4] > xmax[2] || B[5] < xmin[2]) {
      return 0;
    }
  } else {
    int dc;
    for (dc = 0; dc < Dimension; dc++) {
      if (B[2 * dc] > xmax[dc] || B[2 * dc + 1] < xmin[dc]) {
        return (0);
      }
    }
  }
  return (1);
}


x86 assembly (clang, -O0):
<optBoundsIntersectRegion>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
cmpl   $0x3,-0x24(%rbp)
jne    11c1 <optBoundsIntersectRegion+0xc1>
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x20(%rbp),%rax
ucomiss (%rax),%xmm0
ja     11b0 <optBoundsIntersectRegion+0xb0>
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm1
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
ucomiss %xmm1,%xmm0
ja     11b0 <optBoundsIntersectRegion+0xb0>
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
ucomiss 0x4(%rax),%xmm0
ja     11b0 <optBoundsIntersectRegion+0xb0>
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm1
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm0
ucomiss %xmm1,%xmm0
ja     11b0 <optBoundsIntersectRegion+0xb0>
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
ucomiss 0x8(%rax),%xmm0
ja     11b0 <optBoundsIntersectRegion+0xb0>
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm1
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm0
ucomiss %xmm1,%xmm0
jbe    11bc <optBoundsIntersectRegion+0xbc>
movl   $0x0,-0x4(%rbp)
jmp    124e <optBoundsIntersectRegion+0x14e>
jmp    1247 <optBoundsIntersectRegion+0x147>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1242 <optBoundsIntersectRegion+0x142>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
ja     1223 <optBoundsIntersectRegion+0x123>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jbe    122f <optBoundsIntersectRegion+0x12f>
movl   $0x0,-0x4(%rbp)
jmp    124e <optBoundsIntersectRegion+0x14e>
jmp    1234 <optBoundsIntersectRegion+0x134>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11c8 <optBoundsIntersectRegion+0xc8>
jmp    1247 <optBoundsIntersectRegion+0x147>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<optBoundsIntersectRegion>:
cmp    $0x3,%ecx
jne    1147 <optBoundsIntersectRegion+0x47>
movss  (%rdi),%xmm0
xor    %eax,%eax
ucomiss (%rdx),%xmm0
ja     1146 <optBoundsIntersectRegion+0x46>
movss  (%rsi),%xmm0
ucomiss 0x4(%rdi),%xmm0
ja     1146 <optBoundsIntersectRegion+0x46>
movss  0x8(%rdi),%xmm0
ucomiss 0x4(%rdx),%xmm0
ja     1146 <optBoundsIntersectRegion+0x46>
movss  0x4(%rsi),%xmm0
ucomiss 0xc(%rdi),%xmm0
ja     1146 <optBoundsIntersectRegion+0x46>
movss  0x10(%rdi),%xmm0
ucomiss 0x8(%rdx),%xmm0
ja     1146 <optBoundsIntersectRegion+0x46>
movss  0x8(%rsi),%xmm0
ucomiss 0x14(%rdi),%xmm0
jbe    1180 <optBoundsIntersectRegion+0x80>
ret
test   %ecx,%ecx
jle    1180 <optBoundsIntersectRegion+0x80>
mov    %ecx,%r8d
xor    %eax,%eax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movss  (%rdi,%rcx,8),%xmm0
ucomiss (%rdx,%rcx,4),%xmm0
ja     1146 <optBoundsIntersectRegion+0x46>
movss  (%rsi,%rcx,4),%xmm0
ucomiss 0x4(%rdi,%rcx,8),%xmm0
ja     1146 <optBoundsIntersectRegion+0x46>
add    $0x1,%rcx
cmp    %rcx,%r8
jne    1160 <optBoundsIntersectRegion+0x60>
mov    $0x1,%eax
ret

LLVM IR (-O0):
define i32 @optBoundsIntersectRegion(float* %0, float* %1, float* %2, i32 %3) {
%5 = alloca i32
%6 = alloca float*
%7 = alloca float*
%8 = alloca float*
%9 = alloca i32
%10 = alloca i32
store float* %0, float** %6
store float* %1, float** %7
store float* %2, float** %8
store i32 %3, i32* %9
%11 = load i32, i32* %9
%12 = icmp eq i32 %11, 3
br i1 %12, label %13, label %63
13: ; preds = %4
%14 = load float*, float** %6
%15 = getelementptr inbounds float, float* %14, i64 0
%16 = load float, float* %15
%17 = load float*, float** %8
%18 = getelementptr inbounds float, float* %17, i64 0
%19 = load float, float* %18
%20 = fcmp ogt float %16, %19
br i1 %20, label %61, label %21
21: ; preds = %13
%22 = load float*, float** %6
%23 = getelementptr inbounds float, float* %22, i64 1
%24 = load float, float* %23
%25 = load float*, float** %7
%26 = getelementptr inbounds float, float* %25, i64 0
%27 = load float, float* %26
%28 = fcmp olt float %24, %27
br i1 %28, label %61, label %29
29: ; preds = %21
%30 = load float*, float** %6
%31 = getelementptr inbounds float, float* %30, i64 2
%32 = load float, float* %31
%33 = load float*, float** %8
%34 = getelementptr inbounds float, float* %33, i64 1
%35 = load float, float* %34
%36 = fcmp ogt float %32, %35
br i1 %36, label %61, label %37
37: ; preds = %29
%38 = load float*, float** %6
%39 = getelementptr inbounds float, float* %38, i64 3
%40 = load float, float* %39
%41 = load float*, float** %7
%42 = getelementptr inbounds float, float* %41, i64 1
%43 = load float, float* %42
%44 = fcmp olt float %40, %43
br i1 %44, label %61, label %45
45: ; preds = %37
%46 = load float*, float** %6
%47 = getelementptr inbounds float, float* %46, i64 4
%48 = load float, float* %47
%49 = load float*, float** %8
%50 = getelementptr inbounds float, float* %49, i64 2
%51 = load float, float* %50
%52 = fcmp ogt float %48, %51
br i1 %52, label %61, label %53
53: ; preds = %45
%54 = load float*, float** %6
%55 = getelementptr inbounds float, float* %54, i64 5
%56 = load float, float* %55
%57 = load float*, float** %7
%58 = getelementptr inbounds float, float* %57, i64 2
%59 = load float, float* %58
%60 = fcmp olt float %56, %59
br i1 %60, label %61, label %62
61: ; preds = %53, %45, %37, %29, %21, %13
store i32 0, i32* %5
br label %102
62: ; preds = %53
br label %101
63: ; preds = %4
store i32 0, i32* %10
br label %64
64: ; preds = %97, %63
%65 = load i32, i32* %10
%66 = load i32, i32* %9
%67 = icmp slt i32 %65, %66
br i1 %67, label %68, label %100
68: ; preds = %64
%69 = load float*, float** %6
%70 = load i32, i32* %10
%71 = mul nsw i32 2, %70
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds float, float* %69, i64 %72
%74 = load float, float* %73
%75 = load float*, float** %8
%76 = load i32, i32* %10
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds float, float* %75, i64 %77
%79 = load float, float* %78
%80 = fcmp ogt float %74, %79
br i1 %80, label %95, label %81
81: ; preds = %68
%82 = load float*, float** %6
%83 = load i32, i32* %10
%84 = mul nsw i32 2, %83
%85 = add nsw i32 %84, 1
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds float, float* %82, i64 %86
%88 = load float, float* %87
%89 = load float*, float** %7
%90 = load i32, i32* %10
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds float, float* %89, i64 %91
%93 = load float, float* %92
%94 = fcmp olt float %88, %93
br i1 %94, label %95, label %96
95: ; preds = %81, %68
store i32 0, i32* %5
br label %102
96: ; preds = %81
br label %97
97: ; preds = %96
%98 = load i32, i32* %10
%99 = add nsw i32 %98, 1
store i32 %99, i32* %10
br label %64
100: ; preds = %64
br label %101
101: ; preds = %100, %62
store i32 1, i32* %5
br label %102
102: ; preds = %101, %95, %61
%103 = load i32, i32* %5
ret i32 %103
}

LLVM IR (-O2):
define i32 @optBoundsIntersectRegion(float* nocapture %0, float* nocapture %1, float* nocapture %2, i32 %3) {
%5 = icmp eq i32 %3, 3
br i1 %5, label %10, label %6
6: ; preds = %4
%7 = icmp sgt i32 %3, 0
br i1 %7, label %8, label %61
8: ; preds = %6
%9 = zext i32 %3 to i64
br label %45
10: ; preds = %4
%11 = load float, float* %0
%12 = load float, float* %2
%13 = fcmp ogt float %11, %12
br i1 %13, label %62, label %14
14: ; preds = %10
%15 = getelementptr inbounds float, float* %0, i64 1
%16 = load float, float* %15
%17 = load float, float* %1
%18 = fcmp olt float %16, %17
br i1 %18, label %62, label %19
19: ; preds = %14
%20 = getelementptr inbounds float, float* %0, i64 2
%21 = load float, float* %20
%22 = getelementptr inbounds float, float* %2, i64 1
%23 = load float, float* %22
%24 = fcmp ogt float %21, %23
br i1 %24, label %62, label %25
25: ; preds = %19
%26 = getelementptr inbounds float, float* %0, i64 3
%27 = load float, float* %26
%28 = getelementptr inbounds float, float* %1, i64 1
%29 = load float, float* %28
%30 = fcmp olt float %27, %29
br i1 %30, label %62, label %31
31: ; preds = %25
%32 = getelementptr inbounds float, float* %0, i64 4
%33 = load float, float* %32
%34 = getelementptr inbounds float, float* %2, i64 2
%35 = load float, float* %34
%36 = fcmp ogt float %33, %35
br i1 %36, label %62, label %37
37: ; preds = %31
%38 = getelementptr inbounds float, float* %0, i64 5
%39 = load float, float* %38
%40 = getelementptr inbounds float, float* %1, i64 2
%41 = load float, float* %40
%42 = fcmp olt float %39, %41
br i1 %42, label %62, label %61
43: ; preds = %53
%44 = icmp eq i64 %60, %9
br i1 %44, label %61, label %45
45: ; preds = %8, %43
%46 = phi i64 [ 0, %8 ], [ %60, %43 ]
%47 = shl nuw nsw i64 %46, 1
%48 = getelementptr inbounds float, float* %0, i64 %47
%49 = load float, float* %48
%50 = getelementptr inbounds float, float* %2, i64 %46
%51 = load float, float* %50
%52 = fcmp ogt float %49, %51
br i1 %52, label %62, label %53
53: ; preds = %45
%54 = or i64 %47, 1
%55 = getelementptr inbounds float, float* %0, i64 %54
%56 = load float, float* %55
%57 = getelementptr inbounds float, float* %1, i64 %46
%58 = load float, float* %57
%59 = fcmp olt float %56, %58
%60 = add nuw nsw i64 %46, 1
br i1 %59, label %62, label %43
61: ; preds = %43, %6, %37
br label %62
62: ; preds = %53, %45, %10, %14, %19, %25, %31, %37, %61
%63 = phi i32 [ 1, %61 ], [ 0, %37 ], [ 0, %31 ], [ 0, %25 ], [ 0, %19 ], [ 0, %14 ], [ 0, %10 ], [ 0, %45 ], [ 0, %53 ]
ret i32 %63
}