void sboxProject(float *p, float *lb, float *ub, int m) {
  register int i;
  if (!lb) {
    if (!ub)
      return;
    else {
      for (i = 0; i < m; ++i)
        if (p[i] > ub[i])
          p[i] = ub[i];
    }
  } else if (!ub) {
    for (i = 0; i < m; ++i)
      if (p[i] < lb[i])
        p[i] = lb[i];
  } else
    for (i = 0; i < m; ++i)
      p[i] = (((lb[i]) >= (p[i]))
                  ? (((ub[i]) >= (lb[i]))
                         ? (lb[i])
                         : (((ub[i]) <= (p[i])) ? (p[i]) : (ub[i])))
                  : (((ub[i]) >= (p[i]))
                         ? (p[i])
                         : (((ub[i]) <= (lb[i])) ? (lb[i]) : (ub[i]))));
}


x86 assembly (clang, -O0):
<sboxProject>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    1197 <sboxProject+0x97>
cmpq   $0x0,-0x18(%rbp)
jne    112e <sboxProject+0x2e>
jmp    1397 <sboxProject+0x297>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    118d <sboxProject+0x8d>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jbe    117a <sboxProject+0x7a>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    117f <sboxProject+0x7f>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1135 <sboxProject+0x35>
jmp    1192 <sboxProject+0x92>
jmp    1397 <sboxProject+0x297>
cmpq   $0x0,-0x18(%rbp)
jne    120a <sboxProject+0x10a>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1205 <sboxProject+0x105>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jbe    11f2 <sboxProject+0xf2>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    11f7 <sboxProject+0xf7>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11a9 <sboxProject+0xa9>
jmp    1392 <sboxProject+0x292>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    138d <sboxProject+0x28d>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jb     12d7 <sboxProject+0x1d7>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jb     1272 <sboxProject+0x172>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x24(%rbp)
jmp    12c8 <sboxProject+0x1c8>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jb     12ac <sboxProject+0x1ac>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    12be <sboxProject+0x1be>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x28(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    136d <sboxProject+0x26d>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jb     130d <sboxProject+0x20d>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    1363 <sboxProject+0x263>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jb     1347 <sboxProject+0x247>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x34(%rbp)
jmp    1359 <sboxProject+0x259>
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x2c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1211 <sboxProject+0x111>
jmp    1392 <sboxProject+0x292>
jmp    1397 <sboxProject+0x297>
pop    %rbp
ret

x86 assembly (clang, -O2):
<sboxProject>:
test   %rsi,%rsi
je     1129 <sboxProject+0x29>
test   %rdx,%rdx
je     11ca <sboxProject+0xca>
test   %ecx,%ecx
jle    159c <sboxProject+0x49c>
mov    %ecx,%r9d
cmp    $0x4,%ecx
jae    1252 <sboxProject+0x152>
xor    %ecx,%ecx
jmp    1362 <sboxProject+0x262>
test   %rdx,%rdx
je     159c <sboxProject+0x49c>
test   %ecx,%ecx
jle    159c <sboxProject+0x49c>
mov    %ecx,%r9d
cmp    $0x8,%ecx
jb     115c <sboxProject+0x5c>
lea    (%rdx,%r9,4),%rcx
cmp    %rdi,%rcx
jbe    13bb <sboxProject+0x2bb>
lea    (%rdi,%r9,4),%rcx
cmp    %rdx,%rcx
jbe    13bb <sboxProject+0x2bb>
xor    %ecx,%ecx
mov    %rcx,%rsi
not    %rsi
test   $0x1,%r9b
je     1182 <sboxProject+0x82>
movss  (%rdi,%rcx,4),%xmm1
movss  (%rdx,%rcx,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    117e <sboxProject+0x7e>
movss  %xmm0,(%rdi,%rcx,4)
or     $0x1,%rcx
add    %r9,%rsi
jne    119d <sboxProject+0x9d>
jmp    159c <sboxProject+0x49c>
nopl   0x0(%rax)
add    $0x2,%rcx
cmp    %rcx,%r9
je     159c <sboxProject+0x49c>
movss  (%rdi,%rcx,4),%xmm1
movss  (%rdx,%rcx,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    11b1 <sboxProject+0xb1>
movss  %xmm0,(%rdi,%rcx,4)
movss  0x4(%rdi,%rcx,4),%xmm1
movss  0x4(%rdx,%rcx,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    1190 <sboxProject+0x90>
movss  %xmm0,0x4(%rdi,%rcx,4)
jmp    1190 <sboxProject+0x90>
test   %ecx,%ecx
jle    159c <sboxProject+0x49c>
mov    %ecx,%r9d
cmp    $0x8,%ecx
jb     11f4 <sboxProject+0xf4>
lea    (%rsi,%r9,4),%rcx
cmp    %rdi,%rcx
jbe    14b7 <sboxProject+0x3b7>
lea    (%rdi,%r9,4),%rcx
cmp    %rsi,%rcx
jbe    14b7 <sboxProject+0x3b7>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
test   $0x1,%r9b
je     1216 <sboxProject+0x116>
movss  (%rsi,%rcx,4),%xmm0
ucomiss (%rdi,%rcx,4),%xmm0
jbe    1212 <sboxProject+0x112>
movss  %xmm0,(%rdi,%rcx,4)
or     $0x1,%rcx
add    %r9,%rdx
jne    122d <sboxProject+0x12d>
jmp    159c <sboxProject+0x49c>
add    $0x2,%rcx
cmp    %rcx,%r9
je     159c <sboxProject+0x49c>
movss  (%rsi,%rcx,4),%xmm0
ucomiss (%rdi,%rcx,4),%xmm0
jbe    123d <sboxProject+0x13d>
movss  %xmm0,(%rdi,%rcx,4)
movss  0x4(%rsi,%rcx,4),%xmm0
ucomiss 0x4(%rdi,%rcx,4),%xmm0
jbe    1220 <sboxProject+0x120>
movss  %xmm0,0x4(%rdi,%rcx,4)
jmp    1220 <sboxProject+0x120>
lea    (%rdi,%r9,4),%rcx
lea    (%rsi,%r9,4),%rax
cmp    %rdi,%rax
seta   %r10b
lea    (%rdx,%r9,4),%rax
cmp    %rsi,%rcx
seta   %r11b
cmp    %rdi,%rax
seta   %al
cmp    %rdx,%rcx
seta   %r8b
xor    %ecx,%ecx
test   %r11b,%r10b
jne    1362 <sboxProject+0x262>
and    %r8b,%al
jne    1362 <sboxProject+0x262>
mov    %r9d,%ecx
and    $0xfffffffc,%ecx
lea    0x0(,%r9,4),%r8
and    $0xfffffffffffffff0,%r8
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movups (%rsi,%rax,1),%xmm2
movups (%rdi,%rax,1),%xmm0
movaps %xmm0,%xmm8
cmpnleps %xmm2,%xmm8
movaps %xmm0,%xmm4
cmpleps %xmm2,%xmm4
movups (%rdx,%rax,1),%xmm1
movaps %xmm2,%xmm3
cmpnleps %xmm1,%xmm3
andps  %xmm4,%xmm3
movaps %xmm1,%xmm6
cmpleps %xmm0,%xmm6
movaps %xmm0,%xmm4
andps  %xmm6,%xmm4
andnps %xmm1,%xmm6
orps   %xmm4,%xmm6
movaps %xmm0,%xmm4
cmpnleps %xmm1,%xmm4
movaps %xmm0,%xmm7
cmpleps %xmm1,%xmm7
movaps %xmm1,%xmm5
cmpleps %xmm2,%xmm5
andps  %xmm3,%xmm6
andnps %xmm2,%xmm3
andps  %xmm5,%xmm2
andnps %xmm1,%xmm5
orps   %xmm2,%xmm5
andps  %xmm8,%xmm7
andps  %xmm8,%xmm4
orps   %xmm6,%xmm3
andps  %xmm7,%xmm0
andnps %xmm3,%xmm7
orps   %xmm0,%xmm7
andps  %xmm4,%xmm5
andnps %xmm7,%xmm4
orps   %xmm5,%xmm4
movups %xmm4,(%rdi,%rax,1)
add    $0x10,%rax
cmp    %rax,%r8
jne    12b0 <sboxProject+0x1b0>
cmp    %r9,%rcx
jne    1362 <sboxProject+0x262>
jmp    159c <sboxProject+0x49c>
cs nopw 0x0(%rax,%rax,1)
nop
movss  %xmm0,(%rdi,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%r9
je     159c <sboxProject+0x49c>
movss  (%rsi,%rcx,4),%xmm2
movss  (%rdi,%rcx,4),%xmm3
ucomiss %xmm3,%xmm2
movss  (%rdx,%rcx,4),%xmm1
jae    13a0 <sboxProject+0x2a0>
ucomiss %xmm3,%xmm1
movaps %xmm3,%xmm0
jae    1350 <sboxProject+0x250>
movaps %xmm1,%xmm0
cmpless %xmm2,%xmm0
andps  %xmm0,%xmm2
andnps %xmm1,%xmm0
orps   %xmm2,%xmm0
jmp    1350 <sboxProject+0x250>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
ucomiss %xmm2,%xmm1
movaps %xmm2,%xmm0
jae    1350 <sboxProject+0x250>
movaps %xmm1,%xmm0
cmpless %xmm3,%xmm0
andps  %xmm0,%xmm3
andnps %xmm1,%xmm0
orps   %xmm3,%xmm0
jmp    1350 <sboxProject+0x250>
mov    %r9d,%ecx
and    $0xfffffff8,%ecx
lea    0x0(,%r9,4),%r8
and    $0xffffffffffffffe0,%r8
xor    %esi,%esi
jmp    13ed <sboxProject+0x2ed>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x20,%rsi
cmp    %rsi,%r8
je     14a9 <sboxProject+0x3a9>
movups (%rdi,%rsi,1),%xmm3
movups (%rdx,%rsi,1),%xmm1
movups 0x10(%rdx,%rsi,1),%xmm0
ucomiss %xmm1,%xmm3
jbe    1404 <sboxProject+0x304>
movss  %xmm1,(%rdi,%rsi,1)
movaps %xmm1,%xmm2
cmpltps %xmm3,%xmm2
pextrw $0x2,%xmm2,%eax
test   $0x1,%al
je     1421 <sboxProject+0x321>
movaps %xmm1,%xmm3
shufps $0x55,%xmm1,%xmm3
movss  %xmm3,0x4(%rdi,%rsi,1)
pextrw $0x4,%xmm2,%eax
test   $0x1,%al
je     1437 <sboxProject+0x337>
movaps %xmm1,%xmm3
unpckhpd %xmm1,%xmm3
movss  %xmm3,0x8(%rdi,%rsi,1)
pextrw $0x6,%xmm2,%eax
test   $0x1,%al
je     144a <sboxProject+0x34a>
shufps $0xff,%xmm1,%xmm1
movss  %xmm1,0xc(%rdi,%rsi,1)
movups 0x10(%rdi,%rsi,1),%xmm2
ucomiss %xmm0,%xmm2
jbe    145a <sboxProject+0x35a>
movss  %xmm0,0x10(%rdi,%rsi,1)
movaps %xmm0,%xmm1
cmpltps %xmm2,%xmm1
pextrw $0x2,%xmm1,%eax
test   $0x1,%al
je     1477 <sboxProject+0x377>
movaps %xmm0,%xmm2
shufps $0x55,%xmm0,%xmm2
movss  %xmm2,0x14(%rdi,%rsi,1)
pextrw $0x4,%xmm1,%eax
test   $0x1,%al
je     148d <sboxProject+0x38d>
movaps %xmm0,%xmm2
unpckhpd %xmm0,%xmm2
movss  %xmm2,0x18(%rdi,%rsi,1)
pextrw $0x6,%xmm1,%eax
test   $0x1,%al
je     13e0 <sboxProject+0x2e0>
shufps $0xff,%xmm0,%xmm0
movss  %xmm0,0x1c(%rdi,%rsi,1)
jmp    13e0 <sboxProject+0x2e0>
cmp    %r9,%rcx
je     159c <sboxProject+0x49c>
jmp    115e <sboxProject+0x5e>
mov    %r9d,%ecx
and    $0xfffffff8,%ecx
lea    0x0(,%r9,4),%r8
and    $0xffffffffffffffe0,%r8
xor    %edx,%edx
jmp    14dd <sboxProject+0x3dd>
nopl   (%rax)
add    $0x20,%rdx
cmp    %rdx,%r8
je     1593 <sboxProject+0x493>
movups (%rdi,%rdx,1),%xmm2
movups (%rsi,%rdx,1),%xmm1
movups 0x10(%rsi,%rdx,1),%xmm0
ucomiss %xmm2,%xmm1
jbe    14f4 <sboxProject+0x3f4>
movss  %xmm1,(%rdi,%rdx,1)
cmpltps %xmm1,%xmm2
pextrw $0x2,%xmm2,%eax
test   $0x1,%al
je     150e <sboxProject+0x40e>
movaps %xmm1,%xmm3
shufps $0x55,%xmm1,%xmm3
movss  %xmm3,0x4(%rdi,%rdx,1)
pextrw $0x4,%xmm2,%eax
test   $0x1,%al
je     1524 <sboxProject+0x424>
movaps %xmm1,%xmm3
unpckhpd %xmm1,%xmm3
movss  %xmm3,0x8(%rdi,%rdx,1)
pextrw $0x6,%xmm2,%eax
test   $0x1,%al
je     1537 <sboxProject+0x437>
shufps $0xff,%xmm1,%xmm1
movss  %xmm1,0xc(%rdi,%rdx,1)
movups 0x10(%rdi,%rdx,1),%xmm1
ucomiss %xmm1,%xmm0
jbe    1547 <sboxProject+0x447>
movss  %xmm0,0x10(%rdi,%rdx,1)
cmpltps %xmm0,%xmm1
pextrw $0x2,%xmm1,%eax
test   $0x1,%al
je     1561 <sboxProject+0x461>
movaps %xmm0,%xmm2
shufps $0x55,%xmm0,%xmm2
movss  %xmm2,0x14(%rdi,%rdx,1)
pextrw $0x4,%xmm1,%eax
test   $0x1,%al
je     1577 <sboxProject+0x477>
movaps %xmm0,%xmm2
unpckhpd %xmm0,%xmm2
movss  %xmm2,0x18(%rdi,%rdx,1)
pextrw $0x6,%xmm1,%eax
test   $0x1,%al
je     14d0 <sboxProject+0x3d0>
shufps $0xff,%xmm0,%xmm0
movss  %xmm0,0x1c(%rdi,%rdx,1)
jmp    14d0 <sboxProject+0x3d0>
cmp    %r9,%rcx
jne    11f6 <sboxProject+0xf6>
ret

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

LLVM IR (-O2):
define void @sboxProject(float* nocapture %0, float* %1, float* %2, i32 %3) {
%5 = icmp eq float* %1, null
br i1 %5, label %6, label %125
6: ; preds = %4
%7 = icmp ne float* %2, null
%8 = icmp sgt i32 %3, 0
%9 = and i1 %7, %8
br i1 %9, label %10, label %317
10: ; preds = %6
%11 = zext i32 %3 to i64
%12 = icmp ult i32 %3, 8
br i1 %12, label %88, label %13
13: ; preds = %10
%14 = getelementptr float, float* %0, i64 %11
%15 = getelementptr float, float* %2, i64 %11
%16 = icmp ugt float* %15, %0
%17 = icmp ugt float* %14, %2
%18 = and i1 %16, %17
br i1 %18, label %88, label %19
19: ; preds = %13
%20 = and i64 %11, 4294967288
br label %21
21: ; preds = %83, %19
%22 = phi i64 [ 0, %19 ], [ %84, %83 ]
%23 = or i64 %22, 4
%24 = getelementptr inbounds float, float* %0, i64 %22
%25 = bitcast float* %24 to <4 x float>*
%26 = load <4 x float>, <4 x float>* %25
%27 = getelementptr inbounds float, float* %24, i64 4
%28 = bitcast float* %27 to <4 x float>*
%29 = load <4 x float>, <4 x float>* %28
%30 = getelementptr inbounds float, float* %2, i64 %22
%31 = bitcast float* %30 to <4 x float>*
%32 = load <4 x float>, <4 x float>* %31
%33 = getelementptr inbounds float, float* %30, i64 4
%34 = bitcast float* %33 to <4 x float>*
%35 = load <4 x float>, <4 x float>* %34
%36 = fcmp ogt <4 x float> %26, %32
%37 = fcmp ogt <4 x float> %29, %35
%38 = extractelement <4 x i1> %36, i64 0
br i1 %38, label %39, label %42
39: ; preds = %21
%40 = getelementptr inbounds float, float* %0, i64 %22
%41 = extractelement <4 x float> %32, i64 0
store float %41, float* %40
br label %42
42: ; preds = %39, %21
%43 = extractelement <4 x i1> %36, i64 1
br i1 %43, label %44, label %48
44: ; preds = %42
%45 = or i64 %22, 1
%46 = getelementptr inbounds float, float* %0, i64 %45
%47 = extractelement <4 x float> %32, i64 1
store float %47, float* %46
br label %48
48: ; preds = %44, %42
%49 = extractelement <4 x i1> %36, i64 2
br i1 %49, label %50, label %54
50: ; preds = %48
%51 = or i64 %22, 2
%52 = getelementptr inbounds float, float* %0, i64 %51
%53 = extractelement <4 x float> %32, i64 2
store float %53, float* %52
br label %54
54: ; preds = %50, %48
%55 = extractelement <4 x i1> %36, i64 3
br i1 %55, label %56, label %60
56: ; preds = %54
%57 = or i64 %22, 3
%58 = getelementptr inbounds float, float* %0, i64 %57
%59 = extractelement <4 x float> %32, i64 3
store float %59, float* %58
br label %60
60: ; preds = %56, %54
%61 = extractelement <4 x i1> %37, i64 0
br i1 %61, label %62, label %65
62: ; preds = %60
%63 = getelementptr inbounds float, float* %0, i64 %23
%64 = extractelement <4 x float> %35, i64 0
store float %64, float* %63
br label %65
65: ; preds = %62, %60
%66 = extractelement <4 x i1> %37, i64 1
br i1 %66, label %67, label %71
67: ; preds = %65
%68 = or i64 %22, 5
%69 = getelementptr inbounds float, float* %0, i64 %68
%70 = extractelement <4 x float> %35, i64 1
store float %70, float* %69
br label %71
71: ; preds = %67, %65
%72 = extractelement <4 x i1> %37, i64 2
br i1 %72, label %73, label %77
73: ; preds = %71
%74 = or i64 %22, 6
%75 = getelementptr inbounds float, float* %0, i64 %74
%76 = extractelement <4 x float> %35, i64 2
store float %76, float* %75
br label %77
77: ; preds = %73, %71
%78 = extractelement <4 x i1> %37, i64 3
br i1 %78, label %79, label %83
79: ; preds = %77
%80 = or i64 %22, 7
%81 = getelementptr inbounds float, float* %0, i64 %80
%82 = extractelement <4 x float> %35, i64 3
store float %82, float* %81
br label %83
83: ; preds = %79, %77
%84 = add nuw i64 %22, 8
%85 = icmp eq i64 %84, %20
br i1 %85, label %86, label %21
86: ; preds = %83
%87 = icmp eq i64 %20, %11
br i1 %87, label %317, label %88
88: ; preds = %13, %10, %86
%89 = phi i64 [ 0, %13 ], [ 0, %10 ], [ %20, %86 ]
%90 = xor i64 %89, -1
%91 = and i64 %11, 1
%92 = icmp eq i64 %91, 0
br i1 %92, label %102, label %93
93: ; preds = %88
%94 = getelementptr inbounds float, float* %0, i64 %89
%95 = load float, float* %94
%96 = getelementptr inbounds float, float* %2, i64 %89
%97 = load float, float* %96
%98 = fcmp ogt float %95, %97
br i1 %98, label %99, label %100
99: ; preds = %93
store float %97, float* %94
br label %100
100: ; preds = %99, %93
%101 = or i64 %89, 1
br label %102
102: ; preds = %100, %88
%103 = phi i64 [ %89, %88 ], [ %101, %100 ]
%104 = sub nsw i64 0, %11
%105 = icmp eq i64 %90, %104
br i1 %105, label %317, label %106
106: ; preds = %102, %122
%107 = phi i64 [ %123, %122 ], [ %103, %102 ]
%108 = getelementptr inbounds float, float* %0, i64 %107
%109 = load float, float* %108
%110 = getelementptr inbounds float, float* %2, i64 %107
%111 = load float, float* %110
%112 = fcmp ogt float %109, %111
br i1 %112, label %113, label %114
113: ; preds = %106
store float %111, float* %108
br label %114
114: ; preds = %106, %113
%115 = add nuw nsw i64 %107, 1
%116 = getelementptr inbounds float, float* %0, i64 %115
%117 = load float, float* %116
%118 = getelementptr inbounds float, float* %2, i64 %115
%119 = load float, float* %118
%120 = fcmp ogt float %117, %119
br i1 %120, label %121, label %122
121: ; preds = %114
store float %119, float* %116
br label %122
122: ; preds = %121, %114
%123 = add nuw nsw i64 %107, 2
%124 = icmp eq i64 %123, %11
br i1 %124, label %317, label %106
125: ; preds = %4
%126 = icmp eq float* %2, null
%127 = icmp sgt i32 %3, 0
br i1 %126, label %178, label %128
128: ; preds = %125
br i1 %127, label %129, label %317
129: ; preds = %128
%130 = zext i32 %3 to i64
%131 = icmp ult i32 %3, 4
br i1 %131, label %176, label %132
132: ; preds = %129
%133 = getelementptr float, float* %0, i64 %130
%134 = getelementptr float, float* %1, i64 %130
%135 = getelementptr float, float* %2, i64 %130
%136 = icmp ugt float* %134, %0
%137 = icmp ugt float* %133, %1
%138 = and i1 %136, %137
%139 = icmp ugt float* %135, %0
%140 = icmp ugt float* %133, %2
%141 = and i1 %139, %140
%142 = or i1 %138, %141
br i1 %142, label %176, label %143
143: ; preds = %132
%144 = and i64 %130, 4294967292
br label %145
145: ; preds = %145, %143
%146 = phi i64 [ 0, %143 ], [ %172, %145 ]
%147 = getelementptr inbounds float, float* %1, i64 %146
%148 = bitcast float* %147 to <4 x float>*
%149 = load <4 x float>, <4 x float>* %148
%150 = getelementptr inbounds float, float* %0, i64 %146
%151 = bitcast float* %150 to <4 x float>*
%152 = load <4 x float>, <4 x float>* %151
%153 = fcmp ult <4 x float> %149, %152
%154 = getelementptr inbounds float, float* %2, i64 %146
%155 = bitcast float* %154 to <4 x float>*
%156 = load <4 x float>, <4 x float>* %155
%157 = fcmp ult <4 x float> %156, %149
%158 = fcmp ole <4 x float> %156, %152
%159 = select <4 x i1> %158, <4 x float> %152, <4 x float> %156
%160 = fcmp ult <4 x float> %156, %152
%161 = fcmp ole <4 x float> %156, %149
%162 = select <4 x i1> %161, <4 x float> %149, <4 x float> %156
%163 = xor <4 x i1> %153, <i1 true, i1 true, i1 true, i1 true>
%164 = select <4 x i1> %163, <4 x i1> %157, <4 x i1> zeroinitializer
%165 = xor <4 x i1> %160, <i1 true, i1 true, i1 true, i1 true>
%166 = select <4 x i1> %153, <4 x i1> %165, <4 x i1> zeroinitializer
%167 = select <4 x i1> %153, <4 x i1> %160, <4 x i1> zeroinitializer
%168 = select <4 x i1> %164, <4 x float> %159, <4 x float> %149
%169 = select <4 x i1> %166, <4 x float> %152, <4 x float> %168
%170 = select <4 x i1> %167, <4 x float> %162, <4 x float> %169
%171 = bitcast float* %150 to <4 x float>*
store <4 x float> %170, <4 x float>* %171
%172 = add nuw i64 %146, 4
%173 = icmp eq i64 %172, %144
br i1 %173, label %174, label %145
174: ; preds = %145
%175 = icmp eq i64 %144, %130
br i1 %175, label %317, label %176
176: ; preds = %132, %129, %174
%177 = phi i64 [ 0, %132 ], [ 0, %129 ], [ %144, %174 ]
br label %294
178: ; preds = %125
br i1 %127, label %179, label %317
179: ; preds = %178
%180 = zext i32 %3 to i64
%181 = icmp ult i32 %3, 8
br i1 %181, label %257, label %182
182: ; preds = %179
%183 = getelementptr float, float* %0, i64 %180
%184 = getelementptr float, float* %1, i64 %180
%185 = icmp ugt float* %184, %0
%186 = icmp ugt float* %183, %1
%187 = and i1 %185, %186
br i1 %187, label %257, label %188
188: ; preds = %182
%189 = and i64 %180, 4294967288
br label %190
190: ; preds = %252, %188
%191 = phi i64 [ 0, %188 ], [ %253, %252 ]
%192 = or i64 %191, 4
%193 = getelementptr inbounds float, float* %0, i64 %191
%194 = bitcast float* %193 to <4 x float>*
%195 = load <4 x float>, <4 x float>* %194
%196 = getelementptr inbounds float, float* %193, i64 4
%197 = bitcast float* %196 to <4 x float>*
%198 = load <4 x float>, <4 x float>* %197
%199 = getelementptr inbounds float, float* %1, i64 %191
%200 = bitcast float* %199 to <4 x float>*
%201 = load <4 x float>, <4 x float>* %200
%202 = getelementptr inbounds float, float* %199, i64 4
%203 = bitcast float* %202 to <4 x float>*
%204 = load <4 x float>, <4 x float>* %203
%205 = fcmp olt <4 x float> %195, %201
%206 = fcmp olt <4 x float> %198, %204
%207 = extractelement <4 x i1> %205, i64 0
br i1 %207, label %208, label %211
208: ; preds = %190
%209 = getelementptr inbounds float, float* %0, i64 %191
%210 = extractelement <4 x float> %201, i64 0
store float %210, float* %209
br label %211
211: ; preds = %208, %190
%212 = extractelement <4 x i1> %205, i64 1
br i1 %212, label %213, label %217
213: ; preds = %211
%214 = or i64 %191, 1
%215 = getelementptr inbounds float, float* %0, i64 %214
%216 = extractelement <4 x float> %201, i64 1
store float %216, float* %215
br label %217
217: ; preds = %213, %211
%218 = extractelement <4 x i1> %205, i64 2
br i1 %218, label %219, label %223
219: ; preds = %217
%220 = or i64 %191, 2
%221 = getelementptr inbounds float, float* %0, i64 %220
%222 = extractelement <4 x float> %201, i64 2
store float %222, float* %221
br label %223
223: ; preds = %219, %217
%224 = extractelement <4 x i1> %205, i64 3
br i1 %224, label %225, label %229
225: ; preds = %223
%226 = or i64 %191, 3
%227 = getelementptr inbounds float, float* %0, i64 %226
%228 = extractelement <4 x float> %201, i64 3
store float %228, float* %227
br label %229
229: ; preds = %225, %223
%230 = extractelement <4 x i1> %206, i64 0
br i1 %230, label %231, label %234
231: ; preds = %229
%232 = getelementptr inbounds float, float* %0, i64 %192
%233 = extractelement <4 x float> %204, i64 0
store float %233, float* %232
br label %234
234: ; preds = %231, %229
%235 = extractelement <4 x i1> %206, i64 1
br i1 %235, label %236, label %240
236: ; preds = %234
%237 = or i64 %191, 5
%238 = getelementptr inbounds float, float* %0, i64 %237
%239 = extractelement <4 x float> %204, i64 1
store float %239, float* %238
br label %240
240: ; preds = %236, %234
%241 = extractelement <4 x i1> %206, i64 2
br i1 %241, label %242, label %246
242: ; preds = %240
%243 = or i64 %191, 6
%244 = getelementptr inbounds float, float* %0, i64 %243
%245 = extractelement <4 x float> %204, i64 2
store float %245, float* %244
br label %246
246: ; preds = %242, %240
%247 = extractelement <4 x i1> %206, i64 3
br i1 %247, label %248, label %252
248: ; preds = %246
%249 = or i64 %191, 7
%250 = getelementptr inbounds float, float* %0, i64 %249
%251 = extractelement <4 x float> %204, i64 3
store float %251, float* %250
br label %252
252: ; preds = %248, %246
%253 = add nuw i64 %191, 8
%254 = icmp eq i64 %253, %189
br i1 %254, label %255, label %190
255: ; preds = %252
%256 = icmp eq i64 %189, %180
br i1 %256, label %317, label %257
257: ; preds = %182, %179, %255
%258 = phi i64 [ 0, %182 ], [ 0, %179 ], [ %189, %255 ]
%259 = xor i64 %258, -1
%260 = and i64 %180, 1
%261 = icmp eq i64 %260, 0
br i1 %261, label %271, label %262
262: ; preds = %257
%263 = getelementptr inbounds float, float* %0, i64 %258
%264 = load float, float* %263
%265 = getelementptr inbounds float, float* %1, i64 %258
%266 = load float, float* %265
%267 = fcmp olt float %264, %266
br i1 %267, label %268, label %269
268: ; preds = %262
store float %266, float* %263
br label %269
269: ; preds = %268, %262
%270 = or i64 %258, 1
br label %271
271: ; preds = %269, %257
%272 = phi i64 [ %258, %257 ], [ %270, %269 ]
%273 = sub nsw i64 0, %180
%274 = icmp eq i64 %259, %273
br i1 %274, label %317, label %275
275: ; preds = %271, %291
%276 = phi i64 [ %292, %291 ], [ %272, %271 ]
%277 = getelementptr inbounds float, float* %0, i64 %276
%278 = load float, float* %277
%279 = getelementptr inbounds float, float* %1, i64 %276
%280 = load float, float* %279
%281 = fcmp olt float %278, %280
br i1 %281, label %282, label %283
282: ; preds = %275
store float %280, float* %277
br label %283
283: ; preds = %275, %282
%284 = add nuw nsw i64 %276, 1
%285 = getelementptr inbounds float, float* %0, i64 %284
%286 = load float, float* %285
%287 = getelementptr inbounds float, float* %1, i64 %284
%288 = load float, float* %287
%289 = fcmp olt float %286, %288
br i1 %289, label %290, label %291
290: ; preds = %283
store float %288, float* %285
br label %291
291: ; preds = %290, %283
%292 = add nuw nsw i64 %276, 2
%293 = icmp eq i64 %292, %180
br i1 %293, label %317, label %275
294: ; preds = %176, %313
%295 = phi i64 [ %315, %313 ], [ %177, %176 ]
%296 = getelementptr inbounds float, float* %1, i64 %295
%297 = load float, float* %296
%298 = getelementptr inbounds float, float* %0, i64 %295
%299 = load float, float* %298
%300 = fcmp ult float %297, %299
%301 = getelementptr inbounds float, float* %2, i64 %295
%302 = load float, float* %301
br i1 %300, label %308, label %303
303: ; preds = %294
%304 = fcmp ult float %302, %297
br i1 %304, label %305, label %313
305: ; preds = %303
%306 = fcmp ole float %302, %299
%307 = select i1 %306, float %299, float %302
br label %313
308: ; preds = %294
%309 = fcmp ult float %302, %299
br i1 %309, label %310, label %313
310: ; preds = %308
%311 = fcmp ole float %302, %297
%312 = select i1 %311, float %297, float %302
br label %313
313: ; preds = %310, %308, %305, %303
%314 = phi float [ %297, %303 ], [ %307, %305 ], [ %299, %308 ], [ %312, %310 ]
store float %314, float* %298
%315 = add nuw nsw i64 %295, 1
%316 = icmp eq i64 %315, %130
br i1 %316, label %317, label %294
317: ; preds = %313, %271, %291, %102, %122, %174, %255, %86, %128, %178, %6
ret void
}