int __IsHBalanceBetterFT(int ncon, int nparts, float *pfrom, float *pto,
                         float *vwgt, float *ubvec) {
  int i;
  float blb1 = 0.0, alb1 = 0.0, sblb = 0.0, salb = 0.0;
  float blb2 = 0.0, alb2 = 0.0;
  float temp;
  for (i = 0; i < ncon; i++) {
    temp = ((pfrom[i]) >= (pto[i]) ? (pfrom[i]) : (pto[i])) * nparts / ubvec[i];
    if (blb1 < temp) {
      blb2 = blb1;
      blb1 = temp;
    } else if (blb2 < temp)
      blb2 = temp;
    sblb += temp;
    temp = ((pfrom[i] - vwgt[i]) >= (pto[i] + vwgt[i]) ? (pfrom[i] - vwgt[i])
                                                       : (pto[i] + vwgt[i])) *
           nparts / ubvec[i];
    if (alb1 < temp) {
      alb2 = alb1;
      alb1 = temp;
    } else if (alb2 < temp)
      alb2 = temp;
    salb += temp;
  }
  if (alb1 < blb1)
    return 1;
  if (blb1 < alb1)
    return 0;
  if (alb2 < blb2)
    return 1;
  if (blb2 < alb2)
    return 0;
  return salb < sblb;
}


x86 assembly (clang, -O0):
<__IsHBalanceBetterFT>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    132d <__IsHBalanceBetterFT+0x22d>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jb     1193 <__IsHBalanceBetterFT+0x93>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x54(%rbp)
jmp    11a5 <__IsHBalanceBetterFT+0xa5>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
cvtsi2ssl -0xc(%rbp),%xmm1
mulss  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
divss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x38(%rbp),%xmm1
movss  -0x50(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    11f1 <__IsHBalanceBetterFT+0xf1>
movss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    1213 <__IsHBalanceBetterFT+0x113>
movss  -0x48(%rbp),%xmm1
movss  -0x50(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    120e <__IsHBalanceBetterFT+0x10e>
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    1213 <__IsHBalanceBetterFT+0x113>
movss  -0x50(%rbp),%xmm0
addss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm1
ucomiss %xmm1,%xmm0
jb     1283 <__IsHBalanceBetterFT+0x183>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x58(%rbp)
jmp    12a2 <__IsHBalanceBetterFT+0x1a2>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x58(%rbp),%xmm0
cvtsi2ssl -0xc(%rbp),%xmm1
mulss  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
divss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x3c(%rbp),%xmm1
movss  -0x50(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    12ee <__IsHBalanceBetterFT+0x1ee>
movss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
jmp    1310 <__IsHBalanceBetterFT+0x210>
movss  -0x4c(%rbp),%xmm1
movss  -0x50(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    130b <__IsHBalanceBetterFT+0x20b>
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
jmp    1310 <__IsHBalanceBetterFT+0x210>
movss  -0x50(%rbp),%xmm0
addss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1151 <__IsHBalanceBetterFT+0x51>
movss  -0x3c(%rbp),%xmm1
movss  -0x38(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    134c <__IsHBalanceBetterFT+0x24c>
movl   $0x1,-0x4(%rbp)
jmp    13c1 <__IsHBalanceBetterFT+0x2c1>
movss  -0x38(%rbp),%xmm1
movss  -0x3c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    136b <__IsHBalanceBetterFT+0x26b>
movl   $0x0,-0x4(%rbp)
jmp    13c1 <__IsHBalanceBetterFT+0x2c1>
movss  -0x4c(%rbp),%xmm1
movss  -0x48(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    138a <__IsHBalanceBetterFT+0x28a>
movl   $0x1,-0x4(%rbp)
jmp    13c1 <__IsHBalanceBetterFT+0x2c1>
movss  -0x48(%rbp),%xmm1
movss  -0x4c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    13a9 <__IsHBalanceBetterFT+0x2a9>
movl   $0x0,-0x4(%rbp)
jmp    13c1 <__IsHBalanceBetterFT+0x2c1>
movss  -0x44(%rbp),%xmm1
movss  -0x40(%rbp),%xmm0
ucomiss %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<__IsHBalanceBetterFT>:
test   %edi,%edi
jle    11f9 <__IsHBalanceBetterFT+0xf9>
cvtsi2ss %esi,%xmm10
mov    %edi,%eax
xorps  %xmm8,%xmm8
xor    %esi,%esi
xorps  %xmm9,%xmm9
xorps  %xmm1,%xmm1
xorps  %xmm0,%xmm0
xorps  %xmm2,%xmm2
xorps  %xmm11,%xmm11
jmp    114c <__IsHBalanceBetterFT+0x4c>
nopl   0x0(%rax,%rax,1)
movaps %xmm3,%xmm2
movaps %xmm7,%xmm8
addss  %xmm6,%xmm0
addss  %xmm3,%xmm1
add    $0x1,%rsi
cmp    %rsi,%rax
je     11e5 <__IsHBalanceBetterFT+0xe5>
movaps %xmm11,%xmm3
movaps %xmm2,%xmm7
movss  (%rdx,%rsi,4),%xmm2
movss  (%rcx,%rsi,4),%xmm5
movaps %xmm5,%xmm6
cmpless %xmm2,%xmm6
movaps %xmm6,%xmm4
andps  %xmm2,%xmm4
andnps %xmm5,%xmm6
orps   %xmm4,%xmm6
mulss  %xmm10,%xmm6
movss  (%r9,%rsi,4),%xmm4
divss  %xmm4,%xmm6
ucomiss %xmm11,%xmm6
jbe    1190 <__IsHBalanceBetterFT+0x90>
movaps %xmm6,%xmm11
movaps %xmm3,%xmm9
jmp    119e <__IsHBalanceBetterFT+0x9e>
movaps %xmm3,%xmm11
ucomiss %xmm9,%xmm6
jbe    119e <__IsHBalanceBetterFT+0x9e>
movaps %xmm6,%xmm9
movss  (%r8,%rsi,4),%xmm3
subss  %xmm3,%xmm2
addss  %xmm3,%xmm5
movaps %xmm5,%xmm3
cmpless %xmm2,%xmm3
andps  %xmm3,%xmm2
andnps %xmm5,%xmm3
orps   %xmm2,%xmm3
mulss  %xmm10,%xmm3
divss  %xmm4,%xmm3
ucomiss %xmm7,%xmm3
ja     1130 <__IsHBalanceBetterFT+0x30>
movaps %xmm7,%xmm2
ucomiss %xmm8,%xmm3
jbe    1137 <__IsHBalanceBetterFT+0x37>
movaps %xmm3,%xmm8
jmp    1137 <__IsHBalanceBetterFT+0x37>
mov    $0x1,%eax
ucomiss %xmm2,%xmm11
ja     1207 <__IsHBalanceBetterFT+0x107>
ucomiss %xmm11,%xmm2
jbe    1208 <__IsHBalanceBetterFT+0x108>
xor    %eax,%eax
ret
xorps  %xmm0,%xmm0
xorps  %xmm1,%xmm1
xor    %eax,%eax
ucomiss %xmm1,%xmm0
seta   %al
ret
ucomiss %xmm8,%xmm9
ja     1207 <__IsHBalanceBetterFT+0x107>
ucomiss %xmm9,%xmm8
mov    $0x0,%eax
jbe    11ff <__IsHBalanceBetterFT+0xff>
jmp    1207 <__IsHBalanceBetterFT+0x107>

LLVM IR (-O0):
define i32 @__IsHBalanceBetterFT(i32 %0, i32 %1, float* %2, float* %3, float* %4, float* %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca float*
%11 = alloca float*
%12 = alloca float*
%13 = alloca float*
%14 = alloca i32
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
store i32 %0, i32* %8
store i32 %1, i32* %9
store float* %2, float** %10
store float* %3, float** %11
store float* %4, float** %12
store float* %5, float** %13
store float 0.000000e+00, float* %15
store float 0.000000e+00, float* %16
store float 0.000000e+00, float* %17
store float 0.000000e+00, float* %18
store float 0.000000e+00, float* %19
store float 0.000000e+00, float* %20
store i32 0, i32* %14
br label %22
22: ; preds = %153, %6
%23 = load i32, i32* %14
%24 = load i32, i32* %8
%25 = icmp slt i32 %23, %24
br i1 %25, label %26, label %156
26: ; preds = %22
%27 = load float*, float** %10
%28 = load i32, i32* %14
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds float, float* %27, i64 %29
%31 = load float, float* %30
%32 = load float*, float** %11
%33 = load i32, i32* %14
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds float, float* %32, i64 %34
%36 = load float, float* %35
%37 = fcmp oge float %31, %36
br i1 %37, label %38, label %44
38: ; preds = %26
%39 = load float*, float** %10
%40 = load i32, i32* %14
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds float, float* %39, i64 %41
%43 = load float, float* %42
br label %50
44: ; preds = %26
%45 = load float*, float** %11
%46 = load i32, i32* %14
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds float, float* %45, i64 %47
%49 = load float, float* %48
br label %50
50: ; preds = %44, %38
%51 = phi float [ %43, %38 ], [ %49, %44 ]
%52 = load i32, i32* %9
%53 = sitofp i32 %52 to float
%54 = fmul float %51, %53
%55 = load float*, float** %13
%56 = load i32, i32* %14
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds float, float* %55, i64 %57
%59 = load float, float* %58
%60 = fdiv float %54, %59
store float %60, float* %21
%61 = load float, float* %15
%62 = load float, float* %21
%63 = fcmp olt float %61, %62
br i1 %63, label %64, label %67
64: ; preds = %50
%65 = load float, float* %15
store float %65, float* %19
%66 = load float, float* %21
store float %66, float* %15
br label %74
67: ; preds = %50
%68 = load float, float* %19
%69 = load float, float* %21
%70 = fcmp olt float %68, %69
br i1 %70, label %71, label %73
71: ; preds = %67
%72 = load float, float* %21
store float %72, float* %19
br label %73
73: ; preds = %71, %67
br label %74
74: ; preds = %73, %64
%75 = load float, float* %21
%76 = load float, float* %17
%77 = fadd float %76, %75
store float %77, float* %17
%78 = load float*, float** %10
%79 = load i32, i32* %14
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds float, float* %78, i64 %80
%82 = load float, float* %81
%83 = load float*, float** %12
%84 = load i32, i32* %14
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds float, float* %83, i64 %85
%87 = load float, float* %86
%88 = fsub float %82, %87
%89 = load float*, float** %11
%90 = load i32, i32* %14
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds float, float* %89, i64 %91
%93 = load float, float* %92
%94 = load float*, float** %12
%95 = load i32, i32* %14
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds float, float* %94, i64 %96
%98 = load float, float* %97
%99 = fadd float %93, %98
%100 = fcmp oge float %88, %99
br i1 %100, label %101, label %113
101: ; preds = %74
%102 = load float*, float** %10
%103 = load i32, i32* %14
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds float, float* %102, i64 %104
%106 = load float, float* %105
%107 = load float*, float** %12
%108 = load i32, i32* %14
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds float, float* %107, i64 %109
%111 = load float, float* %110
%112 = fsub float %106, %111
br label %125
113: ; preds = %74
%114 = load float*, float** %11
%115 = load i32, i32* %14
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds float, float* %114, i64 %116
%118 = load float, float* %117
%119 = load float*, float** %12
%120 = load i32, i32* %14
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds float, float* %119, i64 %121
%123 = load float, float* %122
%124 = fadd float %118, %123
br label %125
125: ; preds = %113, %101
%126 = phi float [ %112, %101 ], [ %124, %113 ]
%127 = load i32, i32* %9
%128 = sitofp i32 %127 to float
%129 = fmul float %126, %128
%130 = load float*, float** %13
%131 = load i32, i32* %14
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds float, float* %130, i64 %132
%134 = load float, float* %133
%135 = fdiv float %129, %134
store float %135, float* %21
%136 = load float, float* %16
%137 = load float, float* %21
%138 = fcmp olt float %136, %137
br i1 %138, label %139, label %142
139: ; preds = %125
%140 = load float, float* %16
store float %140, float* %20
%141 = load float, float* %21
store float %141, float* %16
br label %149
142: ; preds = %125
%143 = load float, float* %20
%144 = load float, float* %21
%145 = fcmp olt float %143, %144
br i1 %145, label %146, label %148
146: ; preds = %142
%147 = load float, float* %21
store float %147, float* %20
br label %148
148: ; preds = %146, %142
br label %149
149: ; preds = %148, %139
%150 = load float, float* %21
%151 = load float, float* %18
%152 = fadd float %151, %150
store float %152, float* %18
br label %153
153: ; preds = %149
%154 = load i32, i32* %14
%155 = add nsw i32 %154, 1
store i32 %155, i32* %14
br label %22
156: ; preds = %22
%157 = load float, float* %16
%158 = load float, float* %15
%159 = fcmp olt float %157, %158
br i1 %159, label %160, label %161
160: ; preds = %156
store i32 1, i32* %7
br label %181
161: ; preds = %156
%162 = load float, float* %15
%163 = load float, float* %16
%164 = fcmp olt float %162, %163
br i1 %164, label %165, label %166
165: ; preds = %161
store i32 0, i32* %7
br label %181
166: ; preds = %161
%167 = load float, float* %20
%168 = load float, float* %19
%169 = fcmp olt float %167, %168
br i1 %169, label %170, label %171
170: ; preds = %166
store i32 1, i32* %7
br label %181
171: ; preds = %166
%172 = load float, float* %19
%173 = load float, float* %20
%174 = fcmp olt float %172, %173
br i1 %174, label %175, label %176
175: ; preds = %171
store i32 0, i32* %7
br label %181
176: ; preds = %171
%177 = load float, float* %18
%178 = load float, float* %17
%179 = fcmp olt float %177, %178
%180 = zext i1 %179 to i32
store i32 %180, i32* %7
br label %181
181: ; preds = %176, %175, %170, %165, %160
%182 = load i32, i32* %7
ret i32 %182
}

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