get_box(x, x_dot, theta, theta_dot) float x, x_dot, theta, theta_dot;
{
  int box = 0;
  if (x < -2.4 || x > 2.4 || theta < -0.2094384 || theta > 0.2094384)
    return (-1);
  if (x < -0.8)
    box = 0;
  else if (x < 0.8)
    box = 1;
  else
    box = 2;
  if (x_dot < -0.5)
    ;
  else if (x_dot < 0.5)
    box += 3;
  else
    box += 6;
  if (theta < -0.1047192)
    ;
  else if (theta < -0.0174532)
    box += 9;
  else if (theta < 0)
    box += 18;
  else if (theta < 0.0174532)
    box += 27;
  else if (theta < 0.1047192)
    box += 36;
  else
    box += 45;
  if (theta_dot < -0.87266)
    ;
  else if (theta_dot < 0.87266)
    box += 54;
  else
    box += 108;
  return (box);
}


x86 assembly (clang, -O0):
<get_box>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movaps %xmm1,%xmm2
movsd  -0x28(%rbp),%xmm1
movaps %xmm0,%xmm3
movsd  -0x20(%rbp),%xmm0
cvtsd2ss %xmm3,%xmm3
cvtsd2ss %xmm2,%xmm2
cvtsd2ss %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm0
movss  %xmm3,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm1,-0x10(%rbp)
movss  %xmm0,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xea6(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     11b5 <get_box+0xb5>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe93(%rip),%xmm1
ucomisd %xmm1,%xmm0
ja     11b5 <get_box+0xb5>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe80(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     11b5 <get_box+0xb5>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe6d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11c1 <get_box+0xc1>
movl   $0xffffffff,-0x4(%rbp)
jmp    13a2 <get_box+0x2a2>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe4e(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11e8 <get_box+0xe8>
movl   $0x0,-0x18(%rbp)
jmp    121b <get_box+0x11b>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe2f(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    120f <get_box+0x10f>
movl   $0x1,-0x18(%rbp)
jmp    1216 <get_box+0x116>
movl   $0x2,-0x18(%rbp)
jmp    121b <get_box+0x11b>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe04(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    123b <get_box+0x13b>
jmp    1272 <get_box+0x172>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdec(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1264 <get_box+0x164>
mov    -0x18(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x18(%rbp)
jmp    126d <get_box+0x16d>
mov    -0x18(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x18(%rbp)
jmp    1272 <get_box+0x172>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdbd(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1292 <get_box+0x192>
jmp    1345 <get_box+0x245>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xda5(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12bb <get_box+0x1bb>
mov    -0x18(%rbp),%eax
add    $0x9,%eax
mov    %eax,-0x18(%rbp)
jmp    1340 <get_box+0x240>
xorps  %xmm0,%xmm0
ucomiss -0x10(%rbp),%xmm0
jbe    12d6 <get_box+0x1d6>
mov    -0x18(%rbp),%eax
add    $0x12,%eax
mov    %eax,-0x18(%rbp)
jmp    133b <get_box+0x23b>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd69(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12ff <get_box+0x1ff>
mov    -0x18(%rbp),%eax
add    $0x1b,%eax
mov    %eax,-0x18(%rbp)
jmp    1336 <get_box+0x236>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd48(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1328 <get_box+0x228>
mov    -0x18(%rbp),%eax
add    $0x24,%eax
mov    %eax,-0x18(%rbp)
jmp    1331 <get_box+0x231>
mov    -0x18(%rbp),%eax
add    $0x2d,%eax
mov    %eax,-0x18(%rbp)
jmp    1336 <get_box+0x236>
jmp    133b <get_box+0x23b>
jmp    1340 <get_box+0x240>
jmp    1345 <get_box+0x245>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd0a(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1365 <get_box+0x265>
jmp    139c <get_box+0x29c>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xcf2(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    138e <get_box+0x28e>
mov    -0x18(%rbp),%eax
add    $0x36,%eax
mov    %eax,-0x18(%rbp)
jmp    1397 <get_box+0x297>
mov    -0x18(%rbp),%eax
add    $0x6c,%eax
mov    %eax,-0x18(%rbp)
jmp    139c <get_box+0x29c>
mov    -0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_box>:
cvtsd2ss %xmm0,%xmm0
cvtss2sd %xmm0,%xmm4
movsd  0xef0(%rip),%xmm0
ucomisd %xmm4,%xmm0
mov    $0xffffffff,%eax
ja     1230 <get_box+0x130>
ucomisd 0xee1(%rip),%xmm4
ja     1230 <get_box+0x130>
cvtsd2ss %xmm2,%xmm2
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
movsd  0xed0(%rip),%xmm5
ucomisd %xmm0,%xmm5
ja     1230 <get_box+0x130>
ucomisd 0xec6(%rip),%xmm0
ja     1230 <get_box+0x130>
cvtsd2ss %xmm1,%xmm1
movsd  0xebc(%rip),%xmm5
xor    %eax,%eax
ucomisd %xmm4,%xmm5
seta   %al
mov    $0x2,%ecx
sub    %eax,%ecx
xor    %eax,%eax
movsd  0xeaa(%rip),%xmm5
ucomisd %xmm4,%xmm5
cmovbe %ecx,%eax
movss  0xed3(%rip),%xmm4
ucomiss %xmm1,%xmm4
ja     11a7 <get_box+0xa7>
movss  0xeca(%rip),%xmm4
ucomiss %xmm1,%xmm4
jbe    11a4 <get_box+0xa4>
add    $0x3,%eax
jmp    11a7 <get_box+0xa7>
add    $0x6,%eax
xorps  %xmm1,%xmm1
cvtsd2ss %xmm3,%xmm1
movsd  0xe7a(%rip),%xmm3
ucomisd %xmm0,%xmm3
ja     1206 <get_box+0x106>
movsd  0xe74(%rip),%xmm3
ucomisd %xmm0,%xmm3
jbe    11cf <get_box+0xcf>
add    $0x9,%eax
jmp    1206 <get_box+0x106>
xorpd  %xmm3,%xmm3
ucomiss %xmm2,%xmm3
jbe    11dd <get_box+0xdd>
add    $0x12,%eax
jmp    1206 <get_box+0x106>
movsd  0xe5b(%rip),%xmm2
ucomisd %xmm0,%xmm2
jbe    11f0 <get_box+0xf0>
add    $0x1b,%eax
jmp    1206 <get_box+0x106>
movsd  0xe50(%rip),%xmm2
ucomisd %xmm0,%xmm2
jbe    1203 <get_box+0x103>
add    $0x24,%eax
jmp    1206 <get_box+0x106>
add    $0x2d,%eax
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
movsd  0xe3b(%rip),%xmm1
ucomisd %xmm0,%xmm1
ja     1230 <get_box+0x130>
movsd  0xe35(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    122d <get_box+0x12d>
add    $0x36,%eax
ret
add    $0x6c,%eax
ret

LLVM IR (-O0):
define i32 @get_box(double %0, double %1, double %2, double %3) {
%5 = alloca i32
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca i32
%11 = fptrunc double %0 to float
%12 = fptrunc double %1 to float
%13 = fptrunc double %2 to float
%14 = fptrunc double %3 to float
store float %11, float* %6
store float %12, float* %7
store float %13, float* %8
store float %14, float* %9
store i32 0, i32* %10
%15 = load float, float* %6
%16 = fpext float %15 to double
%17 = fcmp olt double %16, -2.400000e+00
br i1 %17, label %30, label %18
18: ; preds = %4
%19 = load float, float* %6
%20 = fpext float %19 to double
%21 = fcmp ogt double %20, 2.400000e+00
br i1 %21, label %30, label %22
22: ; preds = %18
%23 = load float, float* %8
%24 = fpext float %23 to double
%25 = fcmp olt double %24, 0xBFCACEE0A3436687
br i1 %25, label %30, label %26
26: ; preds = %22
%27 = load float, float* %8
%28 = fpext float %27 to double
%29 = fcmp ogt double %28, 0x3FCACEE0A3436687
br i1 %29, label %30, label %31
30: ; preds = %26, %22, %18, %4
store i32 -1, i32* %5
br label %116
31: ; preds = %26
%32 = load float, float* %6
%33 = fpext float %32 to double
%34 = fcmp olt double %33, -8.000000e-01
br i1 %34, label %35, label %36
35: ; preds = %31
store i32 0, i32* %10
br label %43
36: ; preds = %31
%37 = load float, float* %6
%38 = fpext float %37 to double
%39 = fcmp olt double %38, 8.000000e-01
br i1 %39, label %40, label %41
40: ; preds = %36
store i32 1, i32* %10
br label %42
41: ; preds = %36
store i32 2, i32* %10
br label %42
42: ; preds = %41, %40
br label %43
43: ; preds = %42, %35
%44 = load float, float* %7
%45 = fpext float %44 to double
%46 = fcmp olt double %45, -5.000000e-01
br i1 %46, label %47, label %48
47: ; preds = %43
br label %59
48: ; preds = %43
%49 = load float, float* %7
%50 = fpext float %49 to double
%51 = fcmp olt double %50, 5.000000e-01
br i1 %51, label %52, label %55
52: ; preds = %48
%53 = load i32, i32* %10
%54 = add nsw i32 %53, 3
store i32 %54, i32* %10
br label %58
55: ; preds = %48
%56 = load i32, i32* %10
%57 = add nsw i32 %56, 6
store i32 %57, i32* %10
br label %58
58: ; preds = %55, %52
br label %59
59: ; preds = %58, %47
%60 = load float, float* %8
%61 = fpext float %60 to double
%62 = fcmp olt double %61, 0xBFBACEE0A3436687
br i1 %62, label %63, label %64
63: ; preds = %59
br label %98
64: ; preds = %59
%65 = load float, float* %8
%66 = fpext float %65 to double
%67 = fcmp olt double %66, -1.745320e-02
br i1 %67, label %68, label %71
68: ; preds = %64
%69 = load i32, i32* %10
%70 = add nsw i32 %69, 9
store i32 %70, i32* %10
br label %97
71: ; preds = %64
%72 = load float, float* %8
%73 = fcmp olt float %72, 0.000000e+00
br i1 %73, label %74, label %77
74: ; preds = %71
%75 = load i32, i32* %10
%76 = add nsw i32 %75, 18
store i32 %76, i32* %10
br label %96
77: ; preds = %71
%78 = load float, float* %8
%79 = fpext float %78 to double
%80 = fcmp olt double %79, 1.745320e-02
br i1 %80, label %81, label %84
81: ; preds = %77
%82 = load i32, i32* %10
%83 = add nsw i32 %82, 27
store i32 %83, i32* %10
br label %95
84: ; preds = %77
%85 = load float, float* %8
%86 = fpext float %85 to double
%87 = fcmp olt double %86, 0x3FBACEE0A3436687
br i1 %87, label %88, label %91
88: ; preds = %84
%89 = load i32, i32* %10
%90 = add nsw i32 %89, 36
store i32 %90, i32* %10
br label %94
91: ; preds = %84
%92 = load i32, i32* %10
%93 = add nsw i32 %92, 45
store i32 %93, i32* %10
br label %94
94: ; preds = %91, %88
br label %95
95: ; preds = %94, %81
br label %96
96: ; preds = %95, %74
br label %97
97: ; preds = %96, %68
br label %98
98: ; preds = %97, %63
%99 = load float, float* %9
%100 = fpext float %99 to double
%101 = fcmp olt double %100, 0xBFEBECD4AA10E022
br i1 %101, label %102, label %103
102: ; preds = %98
br label %114
103: ; preds = %98
%104 = load float, float* %9
%105 = fpext float %104 to double
%106 = fcmp olt double %105, 0x3FEBECD4AA10E022
br i1 %106, label %107, label %110
107: ; preds = %103
%108 = load i32, i32* %10
%109 = add nsw i32 %108, 54
store i32 %109, i32* %10
br label %113
110: ; preds = %103
%111 = load i32, i32* %10
%112 = add nsw i32 %111, 108
store i32 %112, i32* %10
br label %113
113: ; preds = %110, %107
br label %114
114: ; preds = %113, %102
%115 = load i32, i32* %10
store i32 %115, i32* %5
br label %116
116: ; preds = %114, %30
%117 = load i32, i32* %5
ret i32 %117
}

LLVM IR (-O2):
define i32 @get_box(double %0, double %1, double %2, double %3) {
%5 = fptrunc double %0 to float
%6 = fptrunc double %1 to float
%7 = fptrunc double %2 to float
%8 = fptrunc double %3 to float
%9 = fpext float %5 to double
%10 = fcmp olt double %9, -2.400000e+00
%11 = fcmp ogt double %9, 2.400000e+00
%12 = or i1 %10, %11
br i1 %12, label %61, label %13
13: ; preds = %4
%14 = fpext float %7 to double
%15 = fcmp olt double %14, 0xBFCACEE0A3436687
%16 = fcmp ogt double %14, 0x3FCACEE0A3436687
%17 = or i1 %15, %16
br i1 %17, label %61, label %18
18: ; preds = %13
%19 = fcmp olt double %9, -8.000000e-01
%20 = fcmp olt double %9, 8.000000e-01
%21 = select i1 %20, i32 1, i32 2
%22 = select i1 %19, i32 0, i32 %21
%23 = fcmp olt float %6, -5.000000e-01
br i1 %23, label %30, label %24
24: ; preds = %18
%25 = fcmp olt float %6, 5.000000e-01
br i1 %25, label %26, label %28
26: ; preds = %24
%27 = add nuw nsw i32 %22, 3
br label %30
28: ; preds = %24
%29 = add nuw nsw i32 %22, 6
br label %30
30: ; preds = %26, %28, %18
%31 = phi i32 [ %22, %18 ], [ %27, %26 ], [ %29, %28 ]
%32 = fcmp olt double %14, 0xBFBACEE0A3436687
br i1 %32, label %51, label %33
33: ; preds = %30
%34 = fcmp olt double %14, -1.745320e-02
br i1 %34, label %35, label %37
35: ; preds = %33
%36 = add nuw nsw i32 %31, 9
br label %51
37: ; preds = %33
%38 = fcmp olt float %7, 0.000000e+00
br i1 %38, label %39, label %41
39: ; preds = %37
%40 = add nuw nsw i32 %31, 18
br label %51
41: ; preds = %37
%42 = fcmp olt double %14, 1.745320e-02
br i1 %42, label %43, label %45
43: ; preds = %41
%44 = add nuw nsw i32 %31, 27
br label %51
45: ; preds = %41
%46 = fcmp olt double %14, 0x3FBACEE0A3436687
br i1 %46, label %47, label %49
47: ; preds = %45
%48 = add nuw nsw i32 %31, 36
br label %51
49: ; preds = %45
%50 = add nuw nsw i32 %31, 45
br label %51
51: ; preds = %35, %43, %49, %47, %39, %30
%52 = phi i32 [ %31, %30 ], [ %36, %35 ], [ %40, %39 ], [ %44, %43 ], [ %48, %47 ], [ %50, %49 ]
%53 = fpext float %8 to double
%54 = fcmp olt double %53, 0xBFEBECD4AA10E022
br i1 %54, label %61, label %55
55: ; preds = %51
%56 = fcmp olt double %53, 0x3FEBECD4AA10E022
br i1 %56, label %57, label %59
57: ; preds = %55
%58 = add nuw nsw i32 %52, 54
br label %61
59: ; preds = %55
%60 = add nuw nsw i32 %52, 108
br label %61
61: ; preds = %51, %59, %57, %4, %13
%62 = phi i32 [ -1, %13 ], [ -1, %4 ], [ %52, %51 ], [ %58, %57 ], [ %60, %59 ]
ret i32 %62
}