float lowerleft_iou(float *restrict xmins, float *restrict ymins, float *widths,
                    float *heights, int i, int j) {
  float x0 = (((xmins[i]) > (xmins[j])) ? (xmins[i]) : (xmins[j]));
  float y0 = (((ymins[i]) > (ymins[j])) ? (ymins[i]) : (ymins[j]));
  float x1 = (((xmins[i] + widths[i]) < (xmins[j] + widths[j]))
                  ? (xmins[i] + widths[i])
                  : (xmins[j] + widths[j]));
  float y1 = (((ymins[i] + heights[i]) < (ymins[j] + heights[j]))
                  ? (ymins[i] + heights[i])
                  : (ymins[j] + heights[j]));
  float box1Area = widths[i] * heights[i];
  float box2Area = widths[j] * heights[j];
  float union_area = 0;
  if (x1 > x0) {
    union_area = (x1 - x0) * (y1 - y0);
  }
  union_area = (((union_area) > (0)) ? (union_area) : (0));
  float tot_area = box1Area + box2Area - union_area;
  float retval = 0;
  if (tot_area > 0.0) {
    retval =
        (((1.0) < (union_area / tot_area)) ? (1.0) : (union_area / tot_area));
  }
  return retval;
}


x86 assembly (clang, -O0):
<lowerleft_iou>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
mov    %r9d,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jbe    1152 <lowerleft_iou+0x52>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x50(%rbp)
jmp    1164 <lowerleft_iou+0x64>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jbe    11a4 <lowerleft_iou+0xa4>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x54(%rbp)
jmp    11b6 <lowerleft_iou+0xb6>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jbe    1221 <lowerleft_iou+0x121>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x58(%rbp)
jmp    1240 <lowerleft_iou+0x140>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x58(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jbe    12ab <lowerleft_iou+0x1ab>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x5c(%rbp)
jmp    12ca <lowerleft_iou+0x1ca>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x34(%rbp),%xmm0
ucomiss -0x2c(%rbp),%xmm0
jbe    1346 <lowerleft_iou+0x246>
movss  -0x34(%rbp),%xmm0
subss  -0x2c(%rbp),%xmm0
movss  -0x38(%rbp),%xmm1
subss  -0x30(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1366 <lowerleft_iou+0x266>
movss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
jmp    1373 <lowerleft_iou+0x273>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
jmp    1373 <lowerleft_iou+0x273>
movss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x3c(%rbp),%xmm0
addss  -0x40(%rbp),%xmm0
subss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1402 <lowerleft_iou+0x302>
movss  -0x44(%rbp),%xmm0
divss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc3b(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    13e1 <lowerleft_iou+0x2e1>
movsd  0xc29(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    13f4 <lowerleft_iou+0x2f4>
movss  -0x44(%rbp),%xmm0
divss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<lowerleft_iou>:
movslq %r8d,%rax
movss  (%rdi,%rax,4),%xmm0
movslq %r9d,%r8
movss  (%rdi,%r8,4),%xmm3
movaps %xmm0,%xmm1
maxss  %xmm3,%xmm1
movss  (%rsi,%rax,4),%xmm4
movss  (%rsi,%r8,4),%xmm5
movaps %xmm4,%xmm6
maxss  %xmm5,%xmm6
movss  (%rdx,%rax,4),%xmm7
addss  %xmm7,%xmm0
movss  (%rdx,%r8,4),%xmm2
addss  %xmm2,%xmm3
minss  %xmm3,%xmm0
movss  (%rcx,%rax,4),%xmm8
addss  %xmm8,%xmm4
movss  (%rcx,%r8,4),%xmm3
addss  %xmm3,%xmm5
minss  %xmm5,%xmm4
subss  %xmm6,%xmm4
mulss  %xmm8,%xmm7
mulss  %xmm3,%xmm2
addss  %xmm7,%xmm2
movaps %xmm0,%xmm3
subss  %xmm1,%xmm3
mulss  %xmm4,%xmm3
cmpltss %xmm0,%xmm1
andps  %xmm3,%xmm1
xorps  %xmm0,%xmm0
maxss  %xmm0,%xmm1
subss  %xmm1,%xmm2
ucomiss %xmm0,%xmm2
jbe    119e <lowerleft_iou+0x9e>
divss  %xmm2,%xmm1
movss  0xe66(%rip),%xmm0
minss  %xmm1,%xmm0
ret

LLVM IR (-O0):
define float @lowerleft_iou(float* noalias %0, float* noalias %1, float* %2, float* %3, i32 %4, i32 %5) {
%7 = alloca float*
%8 = alloca float*
%9 = alloca float*
%10 = alloca float*
%11 = alloca i32
%12 = alloca i32
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
store float* %0, float** %7
store float* %1, float** %8
store float* %2, float** %9
store float* %3, float** %10
store i32 %4, i32* %11
store i32 %5, i32* %12
%22 = load float*, float** %7
%23 = load i32, i32* %11
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds float, float* %22, i64 %24
%26 = load float, float* %25
%27 = load float*, float** %7
%28 = load i32, i32* %12
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds float, float* %27, i64 %29
%31 = load float, float* %30
%32 = fcmp ogt float %26, %31
br i1 %32, label %33, label %39
33: ; preds = %6
%34 = load float*, float** %7
%35 = load i32, i32* %11
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds float, float* %34, i64 %36
%38 = load float, float* %37
br label %45
39: ; preds = %6
%40 = load float*, float** %7
%41 = load i32, i32* %12
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds float, float* %40, i64 %42
%44 = load float, float* %43
br label %45
45: ; preds = %39, %33
%46 = phi float [ %38, %33 ], [ %44, %39 ]
store float %46, float* %13
%47 = load float*, float** %8
%48 = load i32, i32* %11
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds float, float* %47, i64 %49
%51 = load float, float* %50
%52 = load float*, float** %8
%53 = load i32, i32* %12
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds float, float* %52, i64 %54
%56 = load float, float* %55
%57 = fcmp ogt float %51, %56
br i1 %57, label %58, label %64
58: ; preds = %45
%59 = load float*, float** %8
%60 = load i32, i32* %11
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds float, float* %59, i64 %61
%63 = load float, float* %62
br label %70
64: ; preds = %45
%65 = load float*, float** %8
%66 = load i32, i32* %12
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds float, float* %65, i64 %67
%69 = load float, float* %68
br label %70
70: ; preds = %64, %58
%71 = phi float [ %63, %58 ], [ %69, %64 ]
store float %71, float* %14
%72 = load float*, float** %7
%73 = load i32, i32* %11
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds float, float* %72, i64 %74
%76 = load float, float* %75
%77 = load float*, float** %9
%78 = load i32, i32* %11
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds float, float* %77, i64 %79
%81 = load float, float* %80
%82 = fadd float %76, %81
%83 = load float*, float** %7
%84 = load i32, i32* %12
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds float, float* %83, i64 %85
%87 = load float, float* %86
%88 = load float*, float** %9
%89 = load i32, i32* %12
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds float, float* %88, i64 %90
%92 = load float, float* %91
%93 = fadd float %87, %92
%94 = fcmp olt float %82, %93
br i1 %94, label %95, label %107
95: ; preds = %70
%96 = load float*, float** %7
%97 = load i32, i32* %11
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds float, float* %96, i64 %98
%100 = load float, float* %99
%101 = load float*, float** %9
%102 = load i32, i32* %11
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds float, float* %101, i64 %103
%105 = load float, float* %104
%106 = fadd float %100, %105
br label %119
107: ; preds = %70
%108 = load float*, float** %7
%109 = load i32, i32* %12
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds float, float* %108, i64 %110
%112 = load float, float* %111
%113 = load float*, float** %9
%114 = load i32, i32* %12
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds float, float* %113, i64 %115
%117 = load float, float* %116
%118 = fadd float %112, %117
br label %119
119: ; preds = %107, %95
%120 = phi float [ %106, %95 ], [ %118, %107 ]
store float %120, float* %15
%121 = load float*, float** %8
%122 = load i32, i32* %11
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds float, float* %121, i64 %123
%125 = load float, float* %124
%126 = load float*, float** %10
%127 = load i32, i32* %11
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds float, float* %126, i64 %128
%130 = load float, float* %129
%131 = fadd float %125, %130
%132 = load float*, float** %8
%133 = load i32, i32* %12
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds float, float* %132, i64 %134
%136 = load float, float* %135
%137 = load float*, float** %10
%138 = load i32, i32* %12
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds float, float* %137, i64 %139
%141 = load float, float* %140
%142 = fadd float %136, %141
%143 = fcmp olt float %131, %142
br i1 %143, label %144, label %156
144: ; preds = %119
%145 = load float*, float** %8
%146 = load i32, i32* %11
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds float, float* %145, i64 %147
%149 = load float, float* %148
%150 = load float*, float** %10
%151 = load i32, i32* %11
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds float, float* %150, i64 %152
%154 = load float, float* %153
%155 = fadd float %149, %154
br label %168
156: ; preds = %119
%157 = load float*, float** %8
%158 = load i32, i32* %12
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds float, float* %157, i64 %159
%161 = load float, float* %160
%162 = load float*, float** %10
%163 = load i32, i32* %12
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds float, float* %162, i64 %164
%166 = load float, float* %165
%167 = fadd float %161, %166
br label %168
168: ; preds = %156, %144
%169 = phi float [ %155, %144 ], [ %167, %156 ]
store float %169, float* %16
%170 = load float*, float** %9
%171 = load i32, i32* %11
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds float, float* %170, i64 %172
%174 = load float, float* %173
%175 = load float*, float** %10
%176 = load i32, i32* %11
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds float, float* %175, i64 %177
%179 = load float, float* %178
%180 = fmul float %174, %179
store float %180, float* %17
%181 = load float*, float** %9
%182 = load i32, i32* %12
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds float, float* %181, i64 %183
%185 = load float, float* %184
%186 = load float*, float** %10
%187 = load i32, i32* %12
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds float, float* %186, i64 %188
%190 = load float, float* %189
%191 = fmul float %185, %190
store float %191, float* %18
store float 0.000000e+00, float* %19
%192 = load float, float* %15
%193 = load float, float* %13
%194 = fcmp ogt float %192, %193
br i1 %194, label %195, label %203
195: ; preds = %168
%196 = load float, float* %15
%197 = load float, float* %13
%198 = fsub float %196, %197
%199 = load float, float* %16
%200 = load float, float* %14
%201 = fsub float %199, %200
%202 = fmul float %198, %201
store float %202, float* %19
br label %203
203: ; preds = %195, %168
%204 = load float, float* %19
%205 = fcmp ogt float %204, 0.000000e+00
br i1 %205, label %206, label %208
206: ; preds = %203
%207 = load float, float* %19
br label %209
208: ; preds = %203
br label %209
209: ; preds = %208, %206
%210 = phi float [ %207, %206 ], [ 0.000000e+00, %208 ]
store float %210, float* %19
%211 = load float, float* %17
%212 = load float, float* %18
%213 = fadd float %211, %212
%214 = load float, float* %19
%215 = fsub float %213, %214
store float %215, float* %20
store float 0.000000e+00, float* %21
%216 = load float, float* %20
%217 = fpext float %216 to double
%218 = fcmp ogt double %217, 0.000000e+00
br i1 %218, label %219, label %234
219: ; preds = %209
%220 = load float, float* %19
%221 = load float, float* %20
%222 = fdiv float %220, %221
%223 = fpext float %222 to double
%224 = fcmp olt double 1.000000e+00, %223
br i1 %224, label %225, label %226
225: ; preds = %219
br label %231
226: ; preds = %219
%227 = load float, float* %19
%228 = load float, float* %20
%229 = fdiv float %227, %228
%230 = fpext float %229 to double
br label %231
231: ; preds = %226, %225
%232 = phi double [ 1.000000e+00, %225 ], [ %230, %226 ]
%233 = fptrunc double %232 to float
store float %233, float* %21
br label %234
234: ; preds = %231, %209
%235 = load float, float* %21
ret float %235
}

LLVM IR (-O2):
define float @lowerleft_iou(float* noalias nocapture %0, float* noalias nocapture %1, float* nocapture %2, float* nocapture %3, i32 %4, i32 %5) {
%7 = sext i32 %4 to i64
%8 = getelementptr inbounds float, float* %0, i64 %7
%9 = load float, float* %8
%10 = sext i32 %5 to i64
%11 = getelementptr inbounds float, float* %0, i64 %10
%12 = load float, float* %11
%13 = fcmp ogt float %9, %12
%14 = select i1 %13, float %9, float %12
%15 = getelementptr inbounds float, float* %1, i64 %7
%16 = load float, float* %15
%17 = getelementptr inbounds float, float* %1, i64 %10
%18 = load float, float* %17
%19 = fcmp ogt float %16, %18
%20 = select i1 %19, float %16, float %18
%21 = getelementptr inbounds float, float* %2, i64 %7
%22 = load float, float* %21
%23 = fadd float %9, %22
%24 = getelementptr inbounds float, float* %2, i64 %10
%25 = load float, float* %24
%26 = fadd float %12, %25
%27 = fcmp olt float %23, %26
%28 = select i1 %27, float %23, float %26
%29 = getelementptr inbounds float, float* %3, i64 %7
%30 = load float, float* %29
%31 = fadd float %16, %30
%32 = getelementptr inbounds float, float* %3, i64 %10
%33 = load float, float* %32
%34 = fadd float %18, %33
%35 = fcmp olt float %31, %34
%36 = select i1 %35, float %31, float %34
%37 = fmul float %22, %30
%38 = fmul float %25, %33
%39 = fcmp ogt float %28, %14
%40 = fsub float %28, %14
%41 = fsub float %36, %20
%42 = fmul float %40, %41
%43 = select i1 %39, float %42, float 0.000000e+00
%44 = fcmp ogt float %43, 0.000000e+00
%45 = select i1 %44, float %43, float 0.000000e+00
%46 = fadd float %37, %38
%47 = fsub float %46, %45
%48 = fcmp ogt float %47, 0.000000e+00
br i1 %48, label %49, label %53
49: ; preds = %6
%50 = fdiv float %45, %47
%51 = fcmp ogt float %50, 1.000000e+00
%52 = select i1 %51, float 1.000000e+00, float %50
br label %53
53: ; preds = %49, %6
%54 = phi float [ %52, %49 ], [ 0.000000e+00, %6 ]
ret float %54
}