float return_attack(const int combo_counter, int *const color_combo,
                    int *const num_drops_combo, int *const isLine_combo,
                    const int LS, const int strong, const float line,
                    const float way) {
  const float AT = 1.0;
  int num_line = 0;
  float attack = 0;
  float l = 1.0;
  int i;
  for (i = 0; i < combo_counter; i++) {
    int color = color_combo[i];
    float drop_pwr;
    switch (color) {
    case 0:
      drop_pwr = num_drops_combo[i] == 4
                     ? (1 + 0.25 * (num_drops_combo[i] - 3)) * way
                     : 1 + 0.25 * (num_drops_combo[i] - 3);
      if (strong)
        drop_pwr = drop_pwr * (1 + 0.06 * num_drops_combo[i]);
      attack += drop_pwr;
      if (isLine_combo[i])
        num_line++;
      break;
    default:
      break;
    }
  }
  int count;
  switch (LS) {
  case 2:
    for (i = 0; i < combo_counter; i++) {
      if (0 == color_combo[i]) {
        int num_drops = num_drops_combo[i];
        if (num_drops >= 8) {
          l = 16;
        } else if (num_drops == 7 && l < 12.25) {
          l = 12.25;
        } else if (num_drops == 6 && l < 9) {
          l = 9;
        }
      }
    }
    break;
  case 3:
    if (combo_counter < 6)
      l = 6.25;
    else
      l = 2.75 * 2.75;
    break;
  case 4:
    count = 0;
    for (i = 0; i < combo_counter; i++) {
      if (0 == color_combo[i]) {
        count++;
        int num_drops = num_drops_combo[i];
        if (num_drops == 5)
          l = 2.25;
      }
    }
    if (count == 2)
      l = l * 3 * 3;
    else if (count >= 3)
      l = l * 4.5 * 4.5;
    else
      l = 1;
    break;
  case 5:
    if (combo_counter == 5)
      l = 3.0 * 3.0;
    else if (combo_counter == 6)
      l = 3.5 * 3.5;
    else if (combo_counter >= 7)
      l = 4.0 * 4.0;
    else
      l = 1.0;
    break;
  case 6:
    l = 6.25;
    for (i = 0; i < combo_counter; i++) {
      if (0 != color_combo[i]) {
        int num_drops = num_drops_combo[i];
        if (num_drops >= 5)
          l = 25;
      }
    }
    break;
  default:
    break;
  }
  attack = attack * (1 + 0.25 * (combo_counter - 1)) * AT * l *
           (1 + 0.1 * line * num_line);
  return attack;
}


x86 assembly (clang, -O0):
<return_attack>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
mov    %r9d,-0x28(%rbp)
movss  %xmm0,-0x2c(%rbp)
movss  %xmm1,-0x30(%rbp)
movss  0xed3(%rip),%xmm0
movss  %xmm0,-0x34(%rbp)
movl   $0x0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  0xeb7(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    129b <return_attack+0x19b>
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
test   %eax,%eax
jne    1283 <return_attack+0x183>
jmp    117f <return_attack+0x7f>
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
cmpl   $0x4,(%rax,%rcx,4)
jne    11d2 <return_attack+0xd2>
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
sub    $0x3,%eax
cvtsi2sd %eax,%xmm0
movsd  0xe9d(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe81(%rip),%xmm1
addsd  %xmm1,%xmm0
movss  -0x30(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1201 <return_attack+0x101>
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
sub    $0x3,%eax
cvtsi2sd %eax,%xmm0
movsd  0xe5c(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe40(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
cmpl   $0x0,-0x28(%rbp)
je     1254 <return_attack+0x154>
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm1
movsd  0xe19(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xdf5(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
addss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x44(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     127e <return_attack+0x17e>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1288 <return_attack+0x188>
jmp    1288 <return_attack+0x188>
jmp    128d <return_attack+0x18d>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1155 <return_attack+0x55>
mov    -0x24(%rbp),%eax
add    $0xfffffffe,%eax
mov    %eax,%ecx
mov    %rcx,-0x70(%rbp)
sub    $0x4,%eax
ja     159e <return_attack+0x49e>
mov    -0x70(%rbp),%rax
lea    0xd9d(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1396 <return_attack+0x296>
mov    -0x10(%rbp),%rcx
movslq -0x44(%rbp),%rdx
xor    %eax,%eax
cmp    (%rcx,%rdx,4),%eax
jne    1383 <return_attack+0x283>
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x54(%rbp)
cmpl   $0x8,-0x54(%rbp)
jl     1314 <return_attack+0x214>
movss  0xd02(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    137e <return_attack+0x27e>
cmpl   $0x7,-0x54(%rbp)
jne    134b <return_attack+0x24b>
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd01(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    134b <return_attack+0x24b>
movss  0xccf(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    1379 <return_attack+0x279>
cmpl   $0x6,-0x54(%rbp)
jne    1374 <return_attack+0x274>
movss  0xcb7(%rip),%xmm0
ucomiss -0x40(%rbp),%xmm0
jbe    1374 <return_attack+0x274>
movss  0xca5(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    1379 <return_attack+0x279>
jmp    137e <return_attack+0x27e>
jmp    1383 <return_attack+0x283>
jmp    1388 <return_attack+0x288>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12cb <return_attack+0x1cb>
jmp    15a3 <return_attack+0x4a3>
cmpl   $0x6,-0x4(%rbp)
jge    13b7 <return_attack+0x2b7>
movss  0xc57(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    13c4 <return_attack+0x2c4>
movss  0xc61(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    15a3 <return_attack+0x4a3>
movl   $0x0,-0x50(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    143c <return_attack+0x33c>
mov    -0x10(%rbp),%rcx
movslq -0x44(%rbp),%rdx
xor    %eax,%eax
cmp    (%rcx,%rdx,4),%eax
jne    1429 <return_attack+0x329>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x58(%rbp)
cmpl   $0x5,-0x58(%rbp)
jne    1424 <return_attack+0x324>
movss  0xbfd(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    1429 <return_attack+0x329>
jmp    142e <return_attack+0x32e>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    13d7 <return_attack+0x2d7>
cmpl   $0x2,-0x50(%rbp)
jne    1469 <return_attack+0x369>
movss  0xbca(%rip),%xmm0
mulss  -0x40(%rbp),%xmm0
movss  0xbbd(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    14b4 <return_attack+0x3b4>
cmpl   $0x3,-0x50(%rbp)
jl     14a2 <return_attack+0x3a2>
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xba4(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb98(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    14af <return_attack+0x3af>
movss  0xb56(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    14b4 <return_attack+0x3b4>
jmp    15a3 <return_attack+0x4a3>
cmpl   $0x5,-0x4(%rbp)
jne    14d5 <return_attack+0x3d5>
movss  0xb49(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    1524 <return_attack+0x424>
cmpl   $0x6,-0x4(%rbp)
jne    14f1 <return_attack+0x3f1>
movss  0xb29(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    151f <return_attack+0x41f>
cmpl   $0x7,-0x4(%rbp)
jl     150d <return_attack+0x40d>
movss  0xb09(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    151a <return_attack+0x41a>
movss  0xaeb(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    151f <return_attack+0x41f>
jmp    1524 <return_attack+0x424>
jmp    15a3 <return_attack+0x4a3>
movss  0xad3(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1599 <return_attack+0x499>
mov    -0x10(%rbp),%rcx
movslq -0x44(%rbp),%rdx
xor    %eax,%eax
cmp    (%rcx,%rdx,4),%eax
je     1586 <return_attack+0x486>
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x5c(%rbp)
cmpl   $0x5,-0x5c(%rbp)
jl     1581 <return_attack+0x481>
movss  0xa8c(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    1586 <return_attack+0x486>
jmp    158b <return_attack+0x48b>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    153d <return_attack+0x43d>
jmp    15a3 <return_attack+0x4a3>
jmp    15a3 <return_attack+0x4a3>
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x4(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  0xa8a(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xa6e(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa5e(%rip),%xmm1
mulsd  %xmm1,%xmm0
movss  -0x40(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
movss  -0x2c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xa44(%rip),%xmm1
mulsd  %xmm2,%xmm1
cvtsi2sdl -0x38(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xa27(%rip),%xmm2
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x3c(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<return_attack>:
push   %rbp
push   %rbx
test   %edi,%edi
jle    11a9 <return_attack+0xa9>
cvtss2sd %xmm1,%xmm2
mulsd  0xeea(%rip),%xmm2
mov    %edi,%r11d
xorps  %xmm1,%xmm1
xor    %eax,%eax
movsd  0xee2(%rip),%xmm3
movsd  0xee2(%rip),%xmm4
movsd  0xee2(%rip),%xmm5
xor    %r10d,%r10d
jmp    1155 <return_attack+0x55>
nopl   0x0(%rax,%rax,1)
addss  %xmm6,%xmm1
cmpl   $0x1,(%rcx,%rax,4)
sbb    $0xffffffff,%r10d
add    $0x1,%rax
cmp    %rax,%r11
je     11af <return_attack+0xaf>
cmpl   $0x0,(%rsi,%rax,4)
jne    114c <return_attack+0x4c>
mov    (%rdx,%rax,4),%ebx
lea    -0x3(%rbx),%ebp
xorps  %xmm6,%xmm6
cvtsi2sd %ebp,%xmm6
mulsd  %xmm3,%xmm6
addsd  %xmm4,%xmm6
movapd %xmm2,%xmm7
cmp    $0x4,%ebx
je     117d <return_attack+0x7d>
movapd %xmm6,%xmm7
xorps  %xmm6,%xmm6
cvtsd2ss %xmm7,%xmm6
test   %r9d,%r9d
je     1140 <return_attack+0x40>
cvtss2sd %xmm6,%xmm6
xorps  %xmm7,%xmm7
cvtsi2sd %ebx,%xmm7
mulsd  %xmm5,%xmm7
addsd  %xmm4,%xmm7
mulsd  %xmm6,%xmm7
xorps  %xmm6,%xmm6
cvtsd2ss %xmm7,%xmm6
jmp    1140 <return_attack+0x40>
xor    %r10d,%r10d
xorps  %xmm1,%xmm1
movss  0xe89(%rip),%xmm2
add    $0xfffffffe,%r8d
cmp    $0x4,%r8d
ja     1459 <return_attack+0x359>
lea    0xe94(%rip),%rax
movslq (%rax,%r8,4),%rcx
add    %rax,%rcx
jmp    *%rcx
test   %edi,%edi
jle    1459 <return_attack+0x359>
mov    %edi,%eax
movss  0xe59(%rip),%xmm6
xor    %ecx,%ecx
movss  0xe6b(%rip),%xmm3
movss  0xe57(%rip),%xmm4
movss  0xe4b(%rip),%xmm5
jmp    1223 <return_attack+0x123>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movaps %xmm6,%xmm2
add    $0x1,%rcx
movaps %xmm2,%xmm6
cmp    %rcx,%rax
je     1459 <return_attack+0x359>
cmpl   $0x0,(%rsi,%rcx,4)
jne    1210 <return_attack+0x110>
mov    (%rdx,%rcx,4),%ebx
movaps %xmm3,%xmm2
cmp    $0x7,%ebx
jg     1213 <return_attack+0x113>
jne    123e <return_attack+0x13e>
ucomiss %xmm6,%xmm4
movaps %xmm4,%xmm2
ja     1213 <return_attack+0x113>
cmp    $0x6,%ebx
jne    1210 <return_attack+0x110>
movaps %xmm5,%xmm2
maxss  %xmm6,%xmm2
movaps %xmm2,%xmm6
jmp    1210 <return_attack+0x110>
xor    %eax,%eax
cmp    $0x6,%edi
setl   %al
lea    0xdd2(%rip),%rcx
movss  (%rcx,%rax,4),%xmm2
jmp    1459 <return_attack+0x359>
test   %edi,%edi
jle    1459 <return_attack+0x359>
mov    %edi,%r8d
cmp    $0x1,%edi
jne    1353 <return_attack+0x253>
xor    %ecx,%ecx
movss  0xdba(%rip),%xmm2
xor    %r9d,%r9d
test   $0x1,%r8b
je     12a7 <return_attack+0x1a7>
cmpl   $0x0,(%rsi,%rcx,4)
jne    12a7 <return_attack+0x1a7>
cmpl   $0x5,(%rdx,%rcx,4)
jne    12a3 <return_attack+0x1a3>
movss  0xdb1(%rip),%xmm2
add    $0x1,%r9d
cmp    $0x2,%r9d
jne    13ce <return_attack+0x2ce>
movss  0xd9f(%rip),%xmm3
mulss  %xmm3,%xmm2
mulss  %xmm3,%xmm2
jmp    1459 <return_attack+0x359>
cmp    $0x5,%edi
je     132f <return_attack+0x22f>
cmp    $0x6,%edi
jne    133c <return_attack+0x23c>
movss  0xd78(%rip),%xmm2
jmp    1459 <return_attack+0x359>
test   %edi,%edi
jle    1322 <return_attack+0x222>
mov    %edi,%r8d
cmp    $0x1,%edi
jne    13ee <return_attack+0x2ee>
movss  0xd4f(%rip),%xmm2
xor    %ecx,%ecx
test   $0x1,%r8b
je     1459 <return_attack+0x359>
cmpl   $0x0,(%rsi,%rcx,4)
je     1459 <return_attack+0x359>
cmpl   $0x5,(%rdx,%rcx,4)
jl     1459 <return_attack+0x359>
movss  0xd2b(%rip),%xmm2
jmp    1459 <return_attack+0x359>
movss  0xd1a(%rip),%xmm2
jmp    1459 <return_attack+0x359>
movss  0xd15(%rip),%xmm2
jmp    1459 <return_attack+0x359>
setg   %al
movzbl %al,%eax
lea    0xcd7(%rip),%rcx
movss  (%rcx,%rax,4),%xmm2
jmp    1459 <return_attack+0x359>
mov    %r8d,%eax
and    $0xfffffffe,%eax
xor    %ecx,%ecx
movss  0xcdd(%rip),%xmm2
movss  0xce9(%rip),%xmm3
xor    %r9d,%r9d
jmp    1385 <return_attack+0x285>
add    $0x1,%r9d
movapd %xmm4,%xmm2
add    $0x2,%rcx
cmp    %rcx,%rax
je     1289 <return_attack+0x189>
cmpl   $0x0,(%rsi,%rcx,4)
je     13a0 <return_attack+0x2a0>
cmpl   $0x0,0x4(%rsi,%rcx,4)
jne    1378 <return_attack+0x278>
jmp    13bd <return_attack+0x2bd>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmpl   $0x5,(%rdx,%rcx,4)
movapd %xmm3,%xmm4
je     13ae <return_attack+0x2ae>
movapd %xmm2,%xmm4
add    $0x1,%r9d
movapd %xmm4,%xmm2
cmpl   $0x0,0x4(%rsi,%rcx,4)
jne    1378 <return_attack+0x278>
cmpl   $0x5,0x4(%rdx,%rcx,4)
movapd %xmm3,%xmm4
je     1370 <return_attack+0x270>
movapd %xmm2,%xmm4
jmp    1370 <return_attack+0x270>
jle    1451 <return_attack+0x351>
cvtss2sd %xmm2,%xmm2
movsd  0xc48(%rip),%xmm3
mulsd  %xmm3,%xmm2
mulsd  %xmm3,%xmm2
cvtsd2ss %xmm2,%xmm2
jmp    1459 <return_attack+0x359>
mov    %r8d,%eax
and    $0xfffffffe,%eax
movss  0xc48(%rip),%xmm2
xor    %ecx,%ecx
movss  0xc42(%rip),%xmm3
jmp    1421 <return_attack+0x321>
nopl   0x0(%rax,%rax,1)
movapd %xmm4,%xmm2
add    $0x2,%rcx
cmp    %rcx,%rax
je     12f7 <return_attack+0x1f7>
cmpl   $0x0,(%rsi,%rcx,4)
je     1439 <return_attack+0x339>
cmpl   $0x5,(%rdx,%rcx,4)
movapd %xmm3,%xmm4
jge    1435 <return_attack+0x335>
movapd %xmm2,%xmm4
movapd %xmm4,%xmm2
cmpl   $0x0,0x4(%rsi,%rcx,4)
je     1414 <return_attack+0x314>
cmpl   $0x5,0x4(%rdx,%rcx,4)
movapd %xmm3,%xmm4
jge    1410 <return_attack+0x310>
movapd %xmm2,%xmm4
jmp    1410 <return_attack+0x310>
movss  0xbe7(%rip),%xmm2
add    $0xffffffff,%edi
xorps  %xmm3,%xmm3
cvtsi2sd %edi,%xmm3
mulsd  0xb9d(%rip),%xmm3
cvtss2sd %xmm1,%xmm1
movsd  0xb99(%rip),%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm1,%xmm3
xorps  %xmm1,%xmm1
cvtss2sd %xmm2,%xmm1
cvtss2sd %xmm0,%xmm0
mulsd  0xba6(%rip),%xmm0
mulsd  %xmm3,%xmm1
xorps  %xmm2,%xmm2
cvtsi2sd %r10d,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm4,%xmm2
mulsd  %xmm1,%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
pop    %rbx
pop    %rbp
ret

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

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