void sboxProject(float *p, float *lb, float *ub, int m) {
  register int i;
  if (!lb) {
    if (!ub)
      return;
    else {
      for (i = m; i-- > 0;)
        if (p[i] > ub[i])
          p[i] = ub[i];
    }
  } else if (!ub) {
    for (i = m; i-- > 0;)
      if (p[i] < lb[i])
        p[i] = lb[i];
  } else
    for (i = m; i-- > 0;)
      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    1190 <sboxProject+0x90>
cmpq   $0x0,-0x18(%rbp)
jne    112e <sboxProject+0x2e>
jmp    1387 <sboxProject+0x287>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    1186 <sboxProject+0x86>
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    1181 <sboxProject+0x81>
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    1134 <sboxProject+0x34>
jmp    118b <sboxProject+0x8b>
jmp    1387 <sboxProject+0x287>
cmpq   $0x0,-0x18(%rbp)
jne    11fc <sboxProject+0xfc>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    11f7 <sboxProject+0xf7>
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    11a1 <sboxProject+0xa1>
jmp    1382 <sboxProject+0x282>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    137d <sboxProject+0x27d>
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     12d0 <sboxProject+0x1d0>
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     126b <sboxProject+0x16b>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x24(%rbp)
jmp    12c1 <sboxProject+0x1c1>
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     12a5 <sboxProject+0x1a5>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    12b7 <sboxProject+0x1b7>
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    1366 <sboxProject+0x266>
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     1306 <sboxProject+0x206>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    135c <sboxProject+0x25c>
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     1340 <sboxProject+0x240>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x34(%rbp)
jmp    1352 <sboxProject+0x252>
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)
jmp    1202 <sboxProject+0x102>
jmp    1382 <sboxProject+0x282>
jmp    1387 <sboxProject+0x287>
pop    %rbp
ret

x86 assembly (clang, -O2):
<sboxProject>:
push   %r15
push   %r14
push   %rbx
test   %rsi,%rsi
je     1267 <sboxProject+0x167>
test   %rdx,%rdx
je     12f0 <sboxProject+0x1f0>
test   %ecx,%ecx
jle    1319 <sboxProject+0x219>
mov    %ecx,%r8d
cmp    $0x4,%ecx
jb     131f <sboxProject+0x21f>
lea    -0x1(%r8),%r9
add    $0xffffffff,%ecx
cmp    %r9d,%ecx
jb     131f <sboxProject+0x21f>
mov    %r9,%rax
shr    $0x20,%rax
jne    131f <sboxProject+0x21f>
mov    %r8,%rax
neg    %rax
add    %rcx,%rax
add    $0x1,%rax
lea    (%rdi,%rax,4),%r10
lea    0x4(%rdi,%rcx,4),%r11
lea    (%rsi,%rax,4),%r14
lea    (%rsi,%rcx,4),%rbx
add    $0x4,%rbx
lea    (%rdx,%rax,4),%r15
lea    (%rdx,%rcx,4),%rax
add    $0x4,%rax
cmp    %rbx,%r10
setb   %bl
cmp    %r11,%r14
setb   %cl
cmp    %rax,%r10
setb   %al
cmp    %r11,%r15
setb   %r10b
test   %cl,%bl
jne    131f <sboxProject+0x21f>
and    %r10b,%al
jne    131f <sboxProject+0x21f>
mov    %r8d,%r10d
and    $0xfffffffc,%r10d
mov    %r8d,%eax
and    $0x3,%eax
mov    %r10,%r11
mov    %r9d,%ecx
shl    $0x2,%rcx
movups -0xc(%rsi,%rcx,1),%xmm1
shufps $0x1b,%xmm1,%xmm1
movups -0xc(%rdi,%rcx,1),%xmm0
shufps $0x1b,%xmm0,%xmm0
movaps %xmm0,%xmm8
cmpnleps %xmm1,%xmm8
movaps %xmm0,%xmm5
cmpleps %xmm1,%xmm5
movups -0xc(%rdx,%rcx,1),%xmm2
shufps $0x1b,%xmm2,%xmm2
movaps %xmm1,%xmm3
cmpnleps %xmm2,%xmm3
andps  %xmm5,%xmm3
movaps %xmm2,%xmm6
cmpleps %xmm0,%xmm6
movaps %xmm0,%xmm5
andps  %xmm6,%xmm5
andnps %xmm2,%xmm6
orps   %xmm5,%xmm6
movaps %xmm0,%xmm5
cmpnleps %xmm2,%xmm5
movaps %xmm0,%xmm7
cmpleps %xmm2,%xmm7
movaps %xmm2,%xmm4
cmpleps %xmm1,%xmm4
andps  %xmm3,%xmm6
andnps %xmm1,%xmm3
andps  %xmm4,%xmm1
andnps %xmm2,%xmm4
orps   %xmm1,%xmm4
andps  %xmm8,%xmm7
andps  %xmm8,%xmm5
orps   %xmm6,%xmm3
andps  %xmm7,%xmm0
andnps %xmm3,%xmm7
orps   %xmm0,%xmm7
andps  %xmm5,%xmm4
andnps %xmm7,%xmm5
orps   %xmm4,%xmm5
pshufd $0x1b,%xmm5,%xmm0
movdqu %xmm0,-0xc(%rdi,%rcx,1)
add    $0xfffffffffffffffc,%r9
add    $0xfffffffffffffffc,%r11
jne    11b0 <sboxProject+0xb0>
cmp    %r8,%r10
je     1319 <sboxProject+0x219>
jmp    1322 <sboxProject+0x222>
test   %rdx,%rdx
je     1319 <sboxProject+0x219>
test   %ecx,%ecx
jle    1319 <sboxProject+0x219>
mov    %ecx,%eax
test   $0x1,%al
je     1298 <sboxProject+0x198>
add    $0xffffffffffffffff,%rax
mov    %eax,%esi
movss  (%rdi,%rsi,4),%xmm1
movss  (%rdx,%rsi,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    1298 <sboxProject+0x198>
movss  %xmm0,(%rdi,%rsi,4)
cmp    $0x1,%ecx
je     1319 <sboxProject+0x219>
add    $0xfffffffffffffffe,%rax
jmp    12c1 <sboxProject+0x1c1>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    -0x2(%rax),%rcx
add    $0x1,%rax
cmp    $0x1,%rax
mov    %rcx,%rax
jbe    1319 <sboxProject+0x219>
lea    0x1(%rax),%ecx
movss  (%rdi,%rcx,4),%xmm1
movss  (%rdx,%rcx,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    12d8 <sboxProject+0x1d8>
movss  %xmm0,(%rdi,%rcx,4)
mov    %eax,%ecx
movss  (%rdi,%rcx,4),%xmm1
movss  (%rdx,%rcx,4),%xmm0
ucomiss %xmm0,%xmm1
jbe    12b0 <sboxProject+0x1b0>
movss  %xmm0,(%rdi,%rcx,4)
jmp    12b0 <sboxProject+0x1b0>
test   %ecx,%ecx
jle    1319 <sboxProject+0x219>
mov    %ecx,%eax
test   $0x1,%al
je     1310 <sboxProject+0x210>
add    $0xffffffffffffffff,%rax
mov    %eax,%edx
movss  (%rsi,%rdx,4),%xmm0
ucomiss (%rdi,%rdx,4),%xmm0
jbe    1310 <sboxProject+0x210>
movss  %xmm0,(%rdi,%rdx,4)
cmp    $0x1,%ecx
jne    139b <sboxProject+0x29b>
pop    %rbx
pop    %r14
pop    %r15
ret
mov    %r8,%rax
add    $0x1,%rax
jmp    133f <sboxProject+0x23f>
nopl   0x0(%rax,%rax,1)
movss  %xmm0,(%rdi,%rcx,4)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
jbe    1319 <sboxProject+0x219>
lea    -0x2(%rax),%ecx
movss  (%rsi,%rcx,4),%xmm2
movss  (%rdi,%rcx,4),%xmm3
ucomiss %xmm3,%xmm2
movss  (%rdx,%rcx,4),%xmm1
jae    1380 <sboxProject+0x280>
ucomiss %xmm3,%xmm1
movaps %xmm3,%xmm0
jae    1330 <sboxProject+0x230>
movaps %xmm1,%xmm0
cmpless %xmm2,%xmm0
andps  %xmm0,%xmm2
andnps %xmm1,%xmm0
orps   %xmm2,%xmm0
jmp    1330 <sboxProject+0x230>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
ucomiss %xmm2,%xmm1
movaps %xmm2,%xmm0
jae    1330 <sboxProject+0x230>
movaps %xmm1,%xmm0
cmpless %xmm3,%xmm0
andps  %xmm0,%xmm3
andnps %xmm1,%xmm0
orps   %xmm3,%xmm0
jmp    1330 <sboxProject+0x230>
add    $0xfffffffffffffffe,%rax
jmp    13c5 <sboxProject+0x2c5>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    -0x2(%rax),%rcx
add    $0x1,%rax
cmp    $0x1,%rax
mov    %rcx,%rax
jbe    1319 <sboxProject+0x219>
lea    0x1(%rax),%ecx
movss  (%rsi,%rcx,4),%xmm0
ucomiss (%rdi,%rcx,4),%xmm0
jbe    13d8 <sboxProject+0x2d8>
movss  %xmm0,(%rdi,%rcx,4)
mov    %eax,%ecx
movss  (%rsi,%rcx,4),%xmm0
ucomiss (%rdi,%rcx,4),%xmm0
jbe    13b0 <sboxProject+0x2b0>
movss  %xmm0,(%rdi,%rcx,4)
jmp    13b0 <sboxProject+0x2b0>

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