#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
float FLT_MAX;
void sboxScale(float *lb, float *ub, float *scl, int m, int div) {
  register int i;
  if (!lb) {
    if (!ub)
      return;
    else {
      if (div) {
        for (i = m; i-- > 0;)
          if (ub[i] != FLT_MAX)
            ub[i] = ub[i] / scl[i];
      } else {
        for (i = m; i-- > 0;)
          if (ub[i] != FLT_MAX)
            ub[i] = ub[i] * scl[i];
      }
    }
  } else if (!ub) {
    if (div) {
      for (i = m; i-- > 0;)
        if (lb[i] != -FLT_MAX)
          lb[i] = lb[i] / scl[i];
    } else {
      for (i = m; i-- > 0;)
        if (lb[i] != -FLT_MAX)
          lb[i] = lb[i] * scl[i];
    }
  } else {
    if (div) {
      for (i = m; i-- > 0;) {
        if (ub[i] != FLT_MAX)
          ub[i] = ub[i] / scl[i];
        if (lb[i] != -FLT_MAX)
          lb[i] = lb[i] / scl[i];
      }
    } else {
      for (i = m; i-- > 0;) {
        if (ub[i] != FLT_MAX)
          ub[i] = ub[i] * scl[i];
        if (lb[i] != -FLT_MAX)
          lb[i] = lb[i] * scl[i];
      }
    }
  }
}


x86 assembly (clang, -O0):
<sboxScale>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
cmpq   $0x0,-0x8(%rbp)
jne    122c <sboxScale+0x12c>
cmpq   $0x0,-0x10(%rbp)
jne    1132 <sboxScale+0x32>
jmp    1508 <sboxScale+0x408>
cmpl   $0x0,-0x20(%rbp)
je     11af <sboxScale+0xaf>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    11aa <sboxScale+0xaa>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    0x2e7e(%rip),%rax
ucomiss (%rax),%xmm0
jne    117e <sboxScale+0x7e>
jp     117e <sboxScale+0x7e>
jmp    11a5 <sboxScale+0xa5>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
divss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    1142 <sboxScale+0x42>
jmp    1222 <sboxScale+0x122>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    121d <sboxScale+0x11d>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    0x2e0b(%rip),%rax
ucomiss (%rax),%xmm0
jne    11f1 <sboxScale+0xf1>
jp     11f1 <sboxScale+0xf1>
jmp    1218 <sboxScale+0x118>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    11b5 <sboxScale+0xb5>
jmp    1222 <sboxScale+0x122>
jmp    1227 <sboxScale+0x127>
jmp    1508 <sboxScale+0x408>
cmpq   $0x0,-0x10(%rbp)
jne    134e <sboxScale+0x24e>
cmpl   $0x0,-0x20(%rbp)
je     12c5 <sboxScale+0x1c5>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    12c0 <sboxScale+0x1c0>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    0x2d79(%rip),%rax
movss  (%rax),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
ucomiss %xmm1,%xmm0
jne    1294 <sboxScale+0x194>
jp     1294 <sboxScale+0x194>
jmp    12bb <sboxScale+0x1bb>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
divss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    1247 <sboxScale+0x147>
jmp    1349 <sboxScale+0x249>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    1344 <sboxScale+0x244>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    0x2cf5(%rip),%rax
movss  (%rax),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
ucomiss %xmm1,%xmm0
jne    1318 <sboxScale+0x218>
jp     1318 <sboxScale+0x218>
jmp    133f <sboxScale+0x23f>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    12cb <sboxScale+0x1cb>
jmp    1349 <sboxScale+0x249>
jmp    1503 <sboxScale+0x403>
cmpl   $0x0,-0x20(%rbp)
je     142b <sboxScale+0x32b>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    1426 <sboxScale+0x326>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    0x2c62(%rip),%rax
ucomiss (%rax),%xmm0
jne    139a <sboxScale+0x29a>
jp     139a <sboxScale+0x29a>
jmp    13c1 <sboxScale+0x2c1>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
divss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    0x2c13(%rip),%rax
movss  (%rax),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
ucomiss %xmm1,%xmm0
jne    13fa <sboxScale+0x2fa>
jp     13fa <sboxScale+0x2fa>
jmp    1421 <sboxScale+0x321>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
divss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    135e <sboxScale+0x25e>
jmp    14fe <sboxScale+0x3fe>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
jle    14f9 <sboxScale+0x3f9>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    0x2b8f(%rip),%rax
ucomiss (%rax),%xmm0
jne    146d <sboxScale+0x36d>
jp     146d <sboxScale+0x36d>
jmp    1494 <sboxScale+0x394>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    0x2b40(%rip),%rax
movss  (%rax),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
ucomiss %xmm1,%xmm0
jne    14cd <sboxScale+0x3cd>
jp     14cd <sboxScale+0x3cd>
jmp    14f4 <sboxScale+0x3f4>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    1431 <sboxScale+0x331>
jmp    14fe <sboxScale+0x3fe>
jmp    1503 <sboxScale+0x403>
jmp    1508 <sboxScale+0x408>
pop    %rbp
ret

x86 assembly (clang, -O2):
<sboxScale>:
test   %rdi,%rdi
je     118f <sboxScale+0x8f>
test   %rsi,%rsi
je     11ed <sboxScale+0xed>
test   %r8d,%r8d
je     1253 <sboxScale+0x153>
test   %ecx,%ecx
jle    13b8 <sboxScale+0x2b8>
mov    %ecx,%eax
mov    0x2ebc(%rip),%r8
movss  (%r8),%xmm1
add    $0x1,%rax
movaps 0xec4(%rip),%xmm0
jmp    114e <sboxScale+0x4e>
xchg   %ax,%ax
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    13b8 <sboxScale+0x2b8>
lea    -0x2(%rax),%ecx
movss  (%rsi,%rcx,4),%xmm2
ucomiss %xmm1,%xmm2
jne    115d <sboxScale+0x5d>
jnp    116c <sboxScale+0x6c>
divss  (%rdx,%rcx,4),%xmm2
movss  %xmm2,(%rsi,%rcx,4)
movss  (%r8),%xmm1
movss  (%rdi,%rcx,4),%xmm2
movaps %xmm1,%xmm3
xorps  %xmm0,%xmm3
ucomiss %xmm3,%xmm2
jne    117e <sboxScale+0x7e>
jnp    1140 <sboxScale+0x40>
divss  (%rdx,%rcx,4),%xmm2
movss  %xmm2,(%rdi,%rcx,4)
movss  (%r8),%xmm1
jmp    1140 <sboxScale+0x40>
test   %rsi,%rsi
je     13b8 <sboxScale+0x2b8>
test   %r8d,%r8d
je     12cf <sboxScale+0x1cf>
test   %ecx,%ecx
jle    13b8 <sboxScale+0x2b8>
mov    %ecx,%eax
mov    0x2e36(%rip),%rcx
movss  (%rcx),%xmm0
add    $0x1,%rax
jmp    11ce <sboxScale+0xce>
nopl   0x0(%rax)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    13b8 <sboxScale+0x2b8>
lea    -0x2(%rax),%edi
movss  (%rsi,%rdi,4),%xmm1
ucomiss %xmm0,%xmm1
jne    11dd <sboxScale+0xdd>
jnp    11c0 <sboxScale+0xc0>
divss  (%rdx,%rdi,4),%xmm1
movss  %xmm1,(%rsi,%rdi,4)
movss  (%rcx),%xmm0
jmp    11c0 <sboxScale+0xc0>
test   %r8d,%r8d
je     1370 <sboxScale+0x270>
test   %ecx,%ecx
jle    13b8 <sboxScale+0x2b8>
mov    %ecx,%eax
mov    0x2de1(%rip),%rcx
movss  (%rcx),%xmm1
add    $0x1,%rax
movaps 0xdea(%rip),%xmm0
jmp    122e <sboxScale+0x12e>
nopl   0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    13b8 <sboxScale+0x2b8>
lea    -0x2(%rax),%esi
movss  (%rdi,%rsi,4),%xmm2
movaps %xmm1,%xmm3
xorps  %xmm0,%xmm3
ucomiss %xmm3,%xmm2
jne    1243 <sboxScale+0x143>
jnp    1220 <sboxScale+0x120>
divss  (%rdx,%rsi,4),%xmm2
movss  %xmm2,(%rdi,%rsi,4)
movss  (%rcx),%xmm1
jmp    1220 <sboxScale+0x120>
test   %ecx,%ecx
jle    13b8 <sboxScale+0x2b8>
mov    %ecx,%eax
mov    0x2d84(%rip),%r8
movss  (%r8),%xmm1
add    $0x1,%rax
movaps 0xd8c(%rip),%xmm0
jmp    128e <sboxScale+0x18e>
cs nopw 0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    13b8 <sboxScale+0x2b8>
lea    -0x2(%rax),%ecx
movss  (%rsi,%rcx,4),%xmm2
ucomiss %xmm1,%xmm2
jne    129d <sboxScale+0x19d>
jnp    12ac <sboxScale+0x1ac>
mulss  (%rdx,%rcx,4),%xmm2
movss  %xmm2,(%rsi,%rcx,4)
movss  (%r8),%xmm1
movss  (%rdi,%rcx,4),%xmm2
movaps %xmm1,%xmm3
xorps  %xmm0,%xmm3
ucomiss %xmm3,%xmm2
jne    12be <sboxScale+0x1be>
jnp    1280 <sboxScale+0x180>
mulss  (%rdx,%rcx,4),%xmm2
movss  %xmm2,(%rdi,%rcx,4)
movss  (%r8),%xmm1
jmp    1280 <sboxScale+0x180>
test   %ecx,%ecx
jle    13b8 <sboxScale+0x2b8>
mov    %ecx,%eax
mov    0x2d08(%rip),%rdi
movss  (%rdi),%xmm0
test   $0x1,%al
je     130c <sboxScale+0x20c>
add    $0xffffffffffffffff,%rax
mov    %eax,%r8d
movss  (%rsi,%r8,4),%xmm1
ucomiss %xmm0,%xmm1
jne    12fc <sboxScale+0x1fc>
jnp    130c <sboxScale+0x20c>
mulss  (%rdx,%r8,4),%xmm1
movss  %xmm1,(%rsi,%r8,4)
movss  (%rdi),%xmm0
cmp    $0x1,%ecx
je     13b8 <sboxScale+0x2b8>
add    $0xfffffffffffffffe,%rax
jmp    1335 <sboxScale+0x235>
nopl   0x0(%rax,%rax,1)
lea    -0x2(%rax),%rcx
add    $0x1,%rax
cmp    $0x1,%rax
mov    %rcx,%rax
jbe    13b8 <sboxScale+0x2b8>
lea    0x1(%rax),%ecx
movss  (%rsi,%rcx,4),%xmm1
ucomiss %xmm0,%xmm1
jne    1344 <sboxScale+0x244>
jnp    1352 <sboxScale+0x252>
mulss  (%rdx,%rcx,4),%xmm1
movss  %xmm1,(%rsi,%rcx,4)
movss  (%rdi),%xmm0
mov    %eax,%ecx
movss  (%rsi,%rcx,4),%xmm1
ucomiss %xmm0,%xmm1
jne    1360 <sboxScale+0x260>
jnp    1320 <sboxScale+0x220>
mulss  (%rdx,%rcx,4),%xmm1
movss  %xmm1,(%rsi,%rcx,4)
movss  (%rdi),%xmm0
jmp    1320 <sboxScale+0x220>
test   %ecx,%ecx
jle    13b8 <sboxScale+0x2b8>
mov    %ecx,%eax
mov    0x2c6b(%rip),%rsi
movss  (%rsi),%xmm0
test   $0x1,%al
je     13b3 <sboxScale+0x2b3>
add    $0xffffffffffffffff,%rax
mov    %eax,%r8d
movss  (%rdi,%r8,4),%xmm1
movaps 0xc67(%rip),%xmm2
xorps  %xmm0,%xmm2
ucomiss %xmm2,%xmm1
jne    13a3 <sboxScale+0x2a3>
jnp    13b3 <sboxScale+0x2b3>
mulss  (%rdx,%r8,4),%xmm1
movss  %xmm1,(%rdi,%r8,4)
movss  (%rsi),%xmm0
cmp    $0x1,%ecx
jne    13b9 <sboxScale+0x2b9>
ret
add    $0xfffffffffffffffe,%rax
movaps 0xc3c(%rip),%xmm1
jmp    13e1 <sboxScale+0x2e1>
cs nopw 0x0(%rax,%rax,1)
lea    -0x2(%rax),%rcx
add    $0x1,%rax
cmp    $0x1,%rax
mov    %rcx,%rax
jbe    13b8 <sboxScale+0x2b8>
lea    0x1(%rax),%ecx
movss  (%rdi,%rcx,4),%xmm2
movaps %xmm0,%xmm3
xorps  %xmm1,%xmm3
ucomiss %xmm3,%xmm2
jne    13f6 <sboxScale+0x2f6>
jnp    1404 <sboxScale+0x304>
mulss  (%rdx,%rcx,4),%xmm2
movss  %xmm2,(%rdi,%rcx,4)
movss  (%rsi),%xmm0
mov    %eax,%ecx
movss  (%rdi,%rcx,4),%xmm2
movaps %xmm0,%xmm3
xorps  %xmm1,%xmm3
ucomiss %xmm3,%xmm2
jne    1418 <sboxScale+0x318>
jnp    13d0 <sboxScale+0x2d0>
mulss  (%rdx,%rcx,4),%xmm2
movss  %xmm2,(%rdi,%rcx,4)
movss  (%rsi),%xmm0
jmp    13d0 <sboxScale+0x2d0>

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

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