int __IsHBalanceBetterTT(int ncon, int nparts, float *pt1, float *pt2,
                         float *vwgt, float *ubvec) {
  int i;
  float m11 = 0.0, m12 = 0.0, m21 = 0.0, m22 = 0.0, sm1 = 0.0, sm2 = 0.0, temp;
  for (i = 0; i < ncon; i++) {
    temp = (pt1[i] + vwgt[i]) * nparts / ubvec[i];
    if (m11 < temp) {
      m12 = m11;
      m11 = temp;
    } else if (m12 < temp)
      m12 = temp;
    sm1 += temp;
    temp = (pt2[i] + vwgt[i]) * nparts / ubvec[i];
    if (m21 < temp) {
      m22 = m21;
      m21 = temp;
    } else if (m22 < temp)
      m22 = temp;
    sm2 += temp;
  }
  if (m21 < m11)
    return 1;
  if (m21 > m11)
    return 0;
  if (m22 < m12)
    return 1;
  if (m22 > m12)
    return 0;
  return sm2 < sm1;
}


x86 assembly (clang, -O0):
<__IsHBalanceBetterTT>:
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    128f <__IsHBalanceBetterTT+0x18f>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
addss  (%rax,%rcx,4),%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    11be <__IsHBalanceBetterTT+0xbe>
movss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    11e0 <__IsHBalanceBetterTT+0xe0>
movss  -0x3c(%rbp),%xmm1
movss  -0x50(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    11db <__IsHBalanceBetterTT+0xdb>
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
jmp    11e0 <__IsHBalanceBetterTT+0xe0>
movss  -0x50(%rbp),%xmm0
addss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
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
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  -0x40(%rbp),%xmm1
movss  -0x50(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1250 <__IsHBalanceBetterTT+0x150>
movss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    1272 <__IsHBalanceBetterTT+0x172>
movss  -0x44(%rbp),%xmm1
movss  -0x50(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    126d <__IsHBalanceBetterTT+0x16d>
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
jmp    1272 <__IsHBalanceBetterTT+0x172>
movss  -0x50(%rbp),%xmm0
addss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1151 <__IsHBalanceBetterTT+0x51>
movss  -0x40(%rbp),%xmm1
movss  -0x38(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    12ae <__IsHBalanceBetterTT+0x1ae>
movl   $0x1,-0x4(%rbp)
jmp    131b <__IsHBalanceBetterTT+0x21b>
movss  -0x40(%rbp),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    12c9 <__IsHBalanceBetterTT+0x1c9>
movl   $0x0,-0x4(%rbp)
jmp    131b <__IsHBalanceBetterTT+0x21b>
movss  -0x44(%rbp),%xmm1
movss  -0x3c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    12e8 <__IsHBalanceBetterTT+0x1e8>
movl   $0x1,-0x4(%rbp)
jmp    131b <__IsHBalanceBetterTT+0x21b>
movss  -0x44(%rbp),%xmm0
ucomiss -0x3c(%rbp),%xmm0
jbe    1303 <__IsHBalanceBetterTT+0x203>
movl   $0x0,-0x4(%rbp)
jmp    131b <__IsHBalanceBetterTT+0x21b>
movss  -0x4c(%rbp),%xmm1
movss  -0x48(%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):
<__IsHBalanceBetterTT>:
test   %edi,%edi
jle    11c1 <__IsHBalanceBetterTT+0xc1>
cvtsi2ss %esi,%xmm10
mov    %edi,%eax
xorps  %xmm0,%xmm0
xor    %esi,%esi
xorps  %xmm1,%xmm1
xorps  %xmm8,%xmm8
xorps  %xmm4,%xmm4
xorps  %xmm9,%xmm9
xorps  %xmm3,%xmm3
jmp    1148 <__IsHBalanceBetterTT+0x48>
nopw   0x0(%rax,%rax,1)
movaps %xmm6,%xmm4
movaps %xmm2,%xmm8
addss  %xmm7,%xmm1
addss  %xmm6,%xmm0
add    $0x1,%rsi
cmp    %rsi,%rax
je     11af <__IsHBalanceBetterTT+0xaf>
movaps %xmm3,%xmm5
movaps %xmm4,%xmm2
movss  (%r8,%rsi,4),%xmm6
movss  (%rdx,%rsi,4),%xmm7
addss  %xmm6,%xmm7
mulss  %xmm10,%xmm7
movss  (%r9,%rsi,4),%xmm4
divss  %xmm4,%xmm7
ucomiss %xmm3,%xmm7
jbe    1180 <__IsHBalanceBetterTT+0x80>
movaps %xmm7,%xmm3
movaps %xmm5,%xmm9
jmp    118d <__IsHBalanceBetterTT+0x8d>
nopw   0x0(%rax,%rax,1)
movaps %xmm5,%xmm3
ucomiss %xmm9,%xmm7
jbe    118d <__IsHBalanceBetterTT+0x8d>
movaps %xmm7,%xmm9
addss  (%rcx,%rsi,4),%xmm6
mulss  %xmm10,%xmm6
divss  %xmm4,%xmm6
ucomiss %xmm2,%xmm6
ja     1130 <__IsHBalanceBetterTT+0x30>
movaps %xmm2,%xmm4
ucomiss %xmm8,%xmm6
jbe    1137 <__IsHBalanceBetterTT+0x37>
movaps %xmm6,%xmm8
jmp    1137 <__IsHBalanceBetterTT+0x37>
mov    $0x1,%eax
ucomiss %xmm4,%xmm3
ja     11cf <__IsHBalanceBetterTT+0xcf>
ucomiss %xmm3,%xmm4
jbe    11d0 <__IsHBalanceBetterTT+0xd0>
xor    %eax,%eax
ret
xorps  %xmm1,%xmm1
xorps  %xmm0,%xmm0
xor    %eax,%eax
ucomiss %xmm0,%xmm1
seta   %al
ret
ucomiss %xmm8,%xmm9
ja     11cf <__IsHBalanceBetterTT+0xcf>
ucomiss %xmm9,%xmm8
mov    $0x0,%eax
jbe    11c7 <__IsHBalanceBetterTT+0xc7>
jmp    11cf <__IsHBalanceBetterTT+0xcf>

LLVM IR (-O0):
define i32 @__IsHBalanceBetterTT(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 = %101, %6
%23 = load i32, i32* %14
%24 = load i32, i32* %8
%25 = icmp slt i32 %23, %24
br i1 %25, label %26, label %104
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** %12
%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 = fadd float %31, %36
%38 = load i32, i32* %9
%39 = sitofp i32 %38 to float
%40 = fmul float %37, %39
%41 = load float*, float** %13
%42 = load i32, i32* %14
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds float, float* %41, i64 %43
%45 = load float, float* %44
%46 = fdiv float %40, %45
store float %46, float* %21
%47 = load float, float* %15
%48 = load float, float* %21
%49 = fcmp olt float %47, %48
br i1 %49, label %50, label %53
50: ; preds = %26
%51 = load float, float* %15
store float %51, float* %16
%52 = load float, float* %21
store float %52, float* %15
br label %60
53: ; preds = %26
%54 = load float, float* %16
%55 = load float, float* %21
%56 = fcmp olt float %54, %55
br i1 %56, label %57, label %59
57: ; preds = %53
%58 = load float, float* %21
store float %58, float* %16
br label %59
59: ; preds = %57, %53
br label %60
60: ; preds = %59, %50
%61 = load float, float* %21
%62 = load float, float* %19
%63 = fadd float %62, %61
store float %63, float* %19
%64 = load float*, float** %11
%65 = load i32, i32* %14
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds float, float* %64, i64 %66
%68 = load float, float* %67
%69 = load float*, float** %12
%70 = load i32, i32* %14
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds float, float* %69, i64 %71
%73 = load float, float* %72
%74 = fadd float %68, %73
%75 = load i32, i32* %9
%76 = sitofp i32 %75 to float
%77 = fmul float %74, %76
%78 = load float*, float** %13
%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 = fdiv float %77, %82
store float %83, float* %21
%84 = load float, float* %17
%85 = load float, float* %21
%86 = fcmp olt float %84, %85
br i1 %86, label %87, label %90
87: ; preds = %60
%88 = load float, float* %17
store float %88, float* %18
%89 = load float, float* %21
store float %89, float* %17
br label %97
90: ; preds = %60
%91 = load float, float* %18
%92 = load float, float* %21
%93 = fcmp olt float %91, %92
br i1 %93, label %94, label %96
94: ; preds = %90
%95 = load float, float* %21
store float %95, float* %18
br label %96
96: ; preds = %94, %90
br label %97
97: ; preds = %96, %87
%98 = load float, float* %21
%99 = load float, float* %20
%100 = fadd float %99, %98
store float %100, float* %20
br label %101
101: ; preds = %97
%102 = load i32, i32* %14
%103 = add nsw i32 %102, 1
store i32 %103, i32* %14
br label %22
104: ; preds = %22
%105 = load float, float* %17
%106 = load float, float* %15
%107 = fcmp olt float %105, %106
br i1 %107, label %108, label %109
108: ; preds = %104
store i32 1, i32* %7
br label %129
109: ; preds = %104
%110 = load float, float* %17
%111 = load float, float* %15
%112 = fcmp ogt float %110, %111
br i1 %112, label %113, label %114
113: ; preds = %109
store i32 0, i32* %7
br label %129
114: ; preds = %109
%115 = load float, float* %18
%116 = load float, float* %16
%117 = fcmp olt float %115, %116
br i1 %117, label %118, label %119
118: ; preds = %114
store i32 1, i32* %7
br label %129
119: ; preds = %114
%120 = load float, float* %18
%121 = load float, float* %16
%122 = fcmp ogt float %120, %121
br i1 %122, label %123, label %124
123: ; preds = %119
store i32 0, i32* %7
br label %129
124: ; preds = %119
%125 = load float, float* %20
%126 = load float, float* %19
%127 = fcmp olt float %125, %126
%128 = zext i1 %127 to i32
store i32 %128, i32* %7
br label %129
129: ; preds = %124, %123, %118, %113, %108
%130 = load i32, i32* %7
ret i32 %130
}

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