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


x86 assembly (clang, -O0):
<optBoundsContainsRegion>:
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    11c8 <optBoundsContainsRegion+0xc8>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
ucomiss %xmm1,%xmm0
jb     11bc <optBoundsContainsRegion+0xbc>
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x10(%rbp),%rax
ucomiss 0x4(%rax),%xmm0
jb     11bc <optBoundsContainsRegion+0xbc>
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm0
ucomiss %xmm1,%xmm0
jb     11bc <optBoundsContainsRegion+0xbc>
mov    -0x20(%rbp),%rax
movss  0x4(%rax),%xmm0
mov    -0x10(%rbp),%rax
ucomiss 0xc(%rax),%xmm0
jb     11bc <optBoundsContainsRegion+0xbc>
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm0
ucomiss %xmm1,%xmm0
jb     11bc <optBoundsContainsRegion+0xbc>
mov    -0x20(%rbp),%rax
movss  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
ucomiss 0x14(%rax),%xmm0
jb     11bc <optBoundsContainsRegion+0xbc>
movl   $0x1,-0x4(%rbp)
jmp    1255 <optBoundsContainsRegion+0x155>
movl   $0x0,-0x4(%rbp)
jmp    1255 <optBoundsContainsRegion+0x155>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1249 <optBoundsContainsRegion+0x149>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jb     122a <optBoundsContainsRegion+0x12a>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jae    1236 <optBoundsContainsRegion+0x136>
movl   $0x0,-0x4(%rbp)
jmp    1255 <optBoundsContainsRegion+0x155>
jmp    123b <optBoundsContainsRegion+0x13b>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11cf <optBoundsContainsRegion+0xcf>
jmp    124e <optBoundsContainsRegion+0x14e>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<optBoundsContainsRegion>:
cmp    $0x3,%ecx
jne    114c <optBoundsContainsRegion+0x4c>
movss  (%rdi),%xmm0
ucomiss (%rsi),%xmm0
jb     1149 <optBoundsContainsRegion+0x49>
movss  (%rdx),%xmm0
ucomiss 0x4(%rdi),%xmm0
jb     1149 <optBoundsContainsRegion+0x49>
movss  0x8(%rdi),%xmm0
ucomiss 0x4(%rsi),%xmm0
jb     1149 <optBoundsContainsRegion+0x49>
movss  0x4(%rdx),%xmm0
ucomiss 0xc(%rdi),%xmm0
jb     1149 <optBoundsContainsRegion+0x49>
movss  0x10(%rdi),%xmm0
ucomiss 0x8(%rsi),%xmm0
jb     1149 <optBoundsContainsRegion+0x49>
movss  0x8(%rdx),%xmm0
mov    $0x1,%eax
ucomiss 0x14(%rdi),%xmm0
jae    11a0 <optBoundsContainsRegion+0xa0>
xor    %eax,%eax
ret
test   %ecx,%ecx
jle    1196 <optBoundsContainsRegion+0x96>
movss  (%rdi),%xmm0
mov    $0x1,%al
ucomiss (%rsi),%xmm0
jb     1198 <optBoundsContainsRegion+0x98>
mov    %ecx,%r8d
mov    $0x1,%al
mov    $0x1,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
movss  -0x4(%rdx,%rcx,4),%xmm0
ucomiss -0x4(%rdi,%rcx,8),%xmm0
jb     1198 <optBoundsContainsRegion+0x98>
cmp    %r8,%rcx
setb   %al
je     1198 <optBoundsContainsRegion+0x98>
movss  (%rdi,%rcx,8),%xmm0
ucomiss (%rsi,%rcx,4),%xmm0
lea    0x1(%rcx),%rcx
jae    1170 <optBoundsContainsRegion+0x70>
jmp    1198 <optBoundsContainsRegion+0x98>
xor    %eax,%eax
not    %al
movzbl %al,%eax
and    $0x1,%eax
ret

LLVM IR (-O0):
define i32 @optBoundsContainsRegion(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** %7
%15 = getelementptr inbounds float, float* %14, i64 0
%16 = load float, float* %15
%17 = load float*, float** %6
%18 = getelementptr inbounds float, float* %17, i64 0
%19 = load float, float* %18
%20 = fcmp ole float %16, %19
br i1 %20, label %21, label %62
21: ; preds = %13
%22 = load float*, float** %8
%23 = getelementptr inbounds float, float* %22, i64 0
%24 = load float, float* %23
%25 = load float*, float** %6
%26 = getelementptr inbounds float, float* %25, i64 1
%27 = load float, float* %26
%28 = fcmp oge float %24, %27
br i1 %28, label %29, label %62
29: ; preds = %21
%30 = load float*, float** %7
%31 = getelementptr inbounds float, float* %30, i64 1
%32 = load float, float* %31
%33 = load float*, float** %6
%34 = getelementptr inbounds float, float* %33, i64 2
%35 = load float, float* %34
%36 = fcmp ole float %32, %35
br i1 %36, label %37, label %62
37: ; preds = %29
%38 = load float*, float** %8
%39 = getelementptr inbounds float, float* %38, i64 1
%40 = load float, float* %39
%41 = load float*, float** %6
%42 = getelementptr inbounds float, float* %41, i64 3
%43 = load float, float* %42
%44 = fcmp oge float %40, %43
br i1 %44, label %45, label %62
45: ; preds = %37
%46 = load float*, float** %7
%47 = getelementptr inbounds float, float* %46, i64 2
%48 = load float, float* %47
%49 = load float*, float** %6
%50 = getelementptr inbounds float, float* %49, i64 4
%51 = load float, float* %50
%52 = fcmp ole float %48, %51
br i1 %52, label %53, label %62
53: ; preds = %45
%54 = load float*, float** %8
%55 = getelementptr inbounds float, float* %54, i64 2
%56 = load float, float* %55
%57 = load float*, float** %6
%58 = getelementptr inbounds float, float* %57, i64 5
%59 = load float, float* %58
%60 = fcmp oge float %56, %59
br i1 %60, label %61, label %62
61: ; preds = %53
store i32 1, i32* %5
br label %102
62: ; preds = %53, %45, %37, %29, %21, %13
store i32 0, i32* %5
br label %102
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** %7
%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 oge float %74, %79
br i1 %80, label %81, label %95
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** %8
%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 ole float %88, %93
br i1 %94, label %96, label %95
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
store i32 1, i32* %5
br label %102
102: ; preds = %101, %95, %62, %61
%103 = load i32, i32* %5
ret i32 %103
}

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