#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 */
scalar_t__ fabs(float);
void opus_pcm_soft_clip(float *_x, int N, int C, float *declip_mem) {
  int c;
  int i;
  float *x;
  if (C < 1 || N < 1 || !_x || !declip_mem)
    return;
  for (i = 0; i < N * C; i++)
    _x[i] = ((-2.f) > (((2.f) < (_x[i]) ? (2.f) : (_x[i])))
                 ? (-2.f)
                 : (((2.f) < (_x[i]) ? (2.f) : (_x[i]))));
  for (c = 0; c < C; c++) {
    float a;
    float x0;
    int curr;
    x = _x + c;
    a = declip_mem[c];
    for (i = 0; i < N; i++) {
      if (x[i * C] * a >= 0)
        break;
      x[i * C] = x[i * C] + a * x[i * C] * x[i * C];
    }
    curr = 0;
    x0 = x[0];
    while (1) {
      int start, end;
      float maxval;
      int special = 0;
      int peak_pos;
      for (i = curr; i < N; i++) {
        if (x[i * C] > 1 || x[i * C] < -1)
          break;
      }
      if (i == N) {
        a = 0;
        break;
      }
      peak_pos = i;
      start = end = i;
      maxval = ((float)fabs(x[i * C]));
      while (start > 0 && x[i * C] * x[(start - 1) * C] >= 0)
        start--;
      while (end < N && x[i * C] * x[end * C] >= 0) {
        if (((float)fabs(x[end * C])) > maxval) {
          maxval = ((float)fabs(x[end * C]));
          peak_pos = end;
        }
        end++;
      }
      special = (start == 0 && x[i * C] * x[0] >= 0);
      a = (maxval - 1) / (maxval * maxval);
      a += a * 2.4e-7f;
      if (x[i * C] > 0)
        a = -a;
      for (i = start; i < end; i++)
        x[i * C] = x[i * C] + a * x[i * C] * x[i * C];
      if (special && peak_pos >= 2) {
        float delta;
        float offset = x0 - x[0];
        delta = offset / peak_pos;
        for (i = curr; i < peak_pos; i++) {
          offset -= delta;
          x[i * C] += offset;
          x[i * C] = ((-1.f) > (((1.f) < (x[i * C]) ? (1.f) : (x[i * C])))
                          ? (-1.f)
                          : (((1.f) < (x[i * C]) ? (1.f) : (x[i * C]))));
        }
      }
      curr = end;
      if (curr == N)
        break;
    }
    declip_mem[c] = a;
  }
}


x86 assembly (clang, -O0):
<opus_pcm_soft_clip>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
cmpl   $0x1,-0x10(%rbp)
jl     1150 <opus_pcm_soft_clip+0x40>
cmpl   $0x1,-0xc(%rbp)
jl     1150 <opus_pcm_soft_clip+0x40>
cmpq   $0x0,-0x8(%rbp)
je     1150 <opus_pcm_soft_clip+0x40>
cmpq   $0x0,-0x18(%rbp)
jne    1155 <opus_pcm_soft_clip+0x45>
jmp    17ec <opus_pcm_soft_clip+0x6dc>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   -0x10(%rbp),%ecx
cmp    %ecx,%eax
jge    1244 <opus_pcm_soft_clip+0x134>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  0xe89(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    119e <opus_pcm_soft_clip+0x8e>
movss  0xe78(%rip),%xmm0
movss  %xmm0,-0x54(%rbp)
jmp    11b0 <opus_pcm_soft_clip+0xa0>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm1
movss  0xe53(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    11d8 <opus_pcm_soft_clip+0xc8>
movss  0xe42(%rip),%xmm0
movss  %xmm0,-0x58(%rbp)
jmp    1224 <opus_pcm_soft_clip+0x114>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  0xe1f(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1208 <opus_pcm_soft_clip+0xf8>
movss  0xe0e(%rip),%xmm0
movss  %xmm0,-0x5c(%rbp)
jmp    121a <opus_pcm_soft_clip+0x10a>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x58(%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    115c <opus_pcm_soft_clip+0x4c>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    17ec <opus_pcm_soft_clip+0x6dc>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x2c(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    131f <opus_pcm_soft_clip+0x20f>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mulss  -0x2c(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jb     12b8 <opus_pcm_soft_clip+0x1a8>
jmp    131f <opus_pcm_soft_clip+0x20f>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
movss  -0x2c(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1283 <opus_pcm_soft_clip+0x173>
movl   $0x0,-0x34(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x30(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    13a8 <opus_pcm_soft_clip+0x298>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  0xc99(%rip),%xmm1
ucomiss %xmm1,%xmm0
ja     1390 <opus_pcm_soft_clip+0x280>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  0xc7e(%rip),%xmm0
ucomiss (%rax,%rcx,4),%xmm0
jbe    1395 <opus_pcm_soft_clip+0x285>
jmp    13a8 <opus_pcm_soft_clip+0x298>
jmp    139a <opus_pcm_soft_clip+0x28a>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1340 <opus_pcm_soft_clip+0x230>
mov    -0x20(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    13c1 <opus_pcm_soft_clip+0x2b1>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    17cc <opus_pcm_soft_clip+0x6bc>
mov    -0x20(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    %eax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
call   1030 <fabs@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x40(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x38(%rbp)
mov    %al,-0x5d(%rbp)
jle    1436 <opus_pcm_soft_clip+0x326>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
sub    $0x1,%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
setae  %al
mov    %al,-0x5d(%rbp)
mov    -0x5d(%rbp),%al
test   $0x1,%al
jne    1446 <opus_pcm_soft_clip+0x336>
jmp    1454 <opus_pcm_soft_clip+0x344>
mov    -0x38(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x38(%rbp)
jmp    13f2 <opus_pcm_soft_clip+0x2e2>
jmp    1459 <opus_pcm_soft_clip+0x349>
mov    -0x3c(%rbp),%ecx
xor    %eax,%eax
cmp    -0xc(%rbp),%ecx
mov    %al,-0x5e(%rbp)
jge    149c <opus_pcm_soft_clip+0x38c>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
setae  %al
mov    %al,-0x5e(%rbp)
mov    -0x5e(%rbp),%al
test   $0x1,%al
jne    14ac <opus_pcm_soft_clip+0x39c>
jmp    1509 <opus_pcm_soft_clip+0x3f9>
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
call   1030 <fabs@plt>
cvtsi2ss %rax,%xmm0
ucomiss -0x40(%rbp),%xmm0
jbe    14fb <opus_pcm_soft_clip+0x3eb>
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
call   1030 <fabs@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1459 <opus_pcm_soft_clip+0x349>
xor    %eax,%eax
cmpl   $0x0,-0x38(%rbp)
mov    %al,-0x5f(%rbp)
jne    153f <opus_pcm_soft_clip+0x42f>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
mulss  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
setae  %al
mov    %al,-0x5f(%rbp)
mov    -0x5f(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x44(%rbp)
movss  -0x40(%rbp),%xmm0
movss  0xaa9(%rip),%xmm1
subss  %xmm1,%xmm0
movss  -0x40(%rbp),%xmm1
mulss  -0x40(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x2c(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm1
movss  0xa88(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    15c3 <opus_pcm_soft_clip+0x4b3>
movss  -0x2c(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    163c <opus_pcm_soft_clip+0x52c>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
movss  -0x2c(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    15c9 <opus_pcm_soft_clip+0x4b9>
cmpl   $0x0,-0x44(%rbp)
je     17b0 <opus_pcm_soft_clip+0x6a0>
cmpl   $0x2,-0x48(%rbp)
jl     17b0 <opus_pcm_soft_clip+0x6a0>
movss  -0x30(%rbp),%xmm0
mov    -0x28(%rbp),%rax
subss  (%rax),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x50(%rbp),%xmm0
cvtsi2ssl -0x48(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x48(%rbp),%eax
jge    17ab <opus_pcm_soft_clip+0x69b>
movss  -0x4c(%rbp),%xmm1
movss  -0x50(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  0x92e(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    16ed <opus_pcm_soft_clip+0x5dd>
movss  0x91d(%rip),%xmm0
movss  %xmm0,-0x64(%rbp)
jmp    1705 <opus_pcm_soft_clip+0x5f5>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x64(%rbp),%xmm1
movss  0x8f2(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    172d <opus_pcm_soft_clip+0x61d>
movss  0x8e1(%rip),%xmm0
movss  %xmm0,-0x68(%rbp)
jmp    1785 <opus_pcm_soft_clip+0x675>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  0x8b8(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1763 <opus_pcm_soft_clip+0x653>
movss  0x8a7(%rip),%xmm0
movss  %xmm0,-0x6c(%rbp)
jmp    177b <opus_pcm_soft_clip+0x66b>
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x20(%rbp),%ecx
imul   -0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    167b <opus_pcm_soft_clip+0x56b>
jmp    17b0 <opus_pcm_soft_clip+0x6a0>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jne    17c7 <opus_pcm_soft_clip+0x6b7>
jmp    17cc <opus_pcm_soft_clip+0x6bc>
jmp    1333 <opus_pcm_soft_clip+0x223>
movss  -0x2c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    124b <opus_pcm_soft_clip+0x13b>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<opus_pcm_soft_clip>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
test   %rcx,%rcx
je     17a4 <opus_pcm_soft_clip+0x694>
test   %rdi,%rdi
je     17a4 <opus_pcm_soft_clip+0x694>
mov    %esi,%r13d
test   %esi,%esi
jle    17a4 <opus_pcm_soft_clip+0x694>
mov    %edx,%r14d
test   %edx,%edx
jle    17a4 <opus_pcm_soft_clip+0x694>
mov    %rcx,0x28(%rsp)
mov    %r14d,%ecx
imul   %r13d,%ecx
test   %ecx,%ecx
jle    120a <opus_pcm_soft_clip+0xfa>
mov    %ecx,%eax
cmp    $0x8,%ecx
jae    116b <opus_pcm_soft_clip+0x5b>
xor    %ecx,%ecx
jmp    17b6 <opus_pcm_soft_clip+0x6a6>
mov    %eax,%ecx
and    $0xfffffff8,%ecx
xor    %edx,%edx
movaps 0xe87(%rip),%xmm0
movaps 0xe8f(%rip),%xmm8
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movups (%rdi,%rdx,4),%xmm5
movups 0x10(%rdi,%rdx,4),%xmm4
movaps %xmm0,%xmm2
cmpltps %xmm5,%xmm2
movaps %xmm0,%xmm3
cmpltps %xmm4,%xmm3
movaps %xmm0,%xmm7
minps  %xmm5,%xmm7
movaps %xmm0,%xmm6
minps  %xmm4,%xmm6
cmpltps %xmm8,%xmm7
cmpltps %xmm8,%xmm6
orps   %xmm7,%xmm2
orps   %xmm6,%xmm3
movaps %xmm8,%xmm1
andps  %xmm7,%xmm1
andnps %xmm0,%xmm7
orps   %xmm1,%xmm7
movaps %xmm8,%xmm1
andps  %xmm6,%xmm1
andnps %xmm0,%xmm6
orps   %xmm1,%xmm6
andps  %xmm2,%xmm7
andnps %xmm5,%xmm2
orps   %xmm7,%xmm2
andps  %xmm3,%xmm6
andnps %xmm4,%xmm3
orps   %xmm6,%xmm3
movups %xmm2,(%rdi,%rdx,4)
movups %xmm3,0x10(%rdi,%rdx,4)
add    $0x8,%rdx
cmp    %rdx,%rcx
jne    1190 <opus_pcm_soft_clip+0x80>
cmp    %rax,%rcx
jne    17b6 <opus_pcm_soft_clip+0x6a6>
movslq %r14d,%rax
movslq %r13d,%rcx
mov    %r14d,%edx
mov    %rdx,0x68(%rsp)
mov    %r13d,%edx
mov    %rdx,0x60(%rsp)
lea    0x0(,%rax,4),%rbp
mov    %rcx,0x70(%rsp)
neg    %rcx
mov    %rcx,0x78(%rsp)
mov    %rbp,%rcx
neg    %rcx
mov    %rcx,0x80(%rsp)
mov    %rax,0x18(%rsp)
lea    0x0(,%rax,8),%r8
xor    %ecx,%ecx
xorps  %xmm8,%xmm8
movss  0xdd9(%rip),%xmm9
movss  0xdd5(%rip),%xmm7
mov    %rdi,%rsi
mov    0x28(%rsp),%rax
mov    %r14d,0x24(%rsp)
mov    %r13d,0x20(%rsp)
mov    %rdi,0x30(%rsp)
mov    %r8,0x50(%rsp)
mov    %rbp,0x40(%rsp)
jmp    12ba <opus_pcm_soft_clip+0x1aa>
nopw   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
mov    0x28(%rsp),%rax
mov    0x30(%rsp),%rdi
mov    0x38(%rsp),%rcx
movss  %xmm0,(%rax,%rcx,4)
add    $0x1,%rcx
add    $0x4,%rsi
cmp    0x68(%rsp),%rcx
je     17a4 <opus_pcm_soft_clip+0x694>
lea    (%rdi,%rcx,4),%rbx
mov    %rcx,0x38(%rsp)
movss  (%rax,%rcx,4),%xmm0
mov    0x60(%rsp),%rax
mov    %rsi,0x8(%rsp)
mov    %rsi,%rcx
cs nopw 0x0(%rax,%rax,1)
nop
movss  (%rcx),%xmm1
movaps %xmm0,%xmm2
mulss  %xmm1,%xmm2
ucomiss %xmm8,%xmm2
jae    1306 <opus_pcm_soft_clip+0x1f6>
mulss  %xmm1,%xmm2
addss  %xmm1,%xmm2
movss  %xmm2,(%rcx)
add    %rbp,%rcx
add    $0xffffffffffffffff,%rax
jne    12e0 <opus_pcm_soft_clip+0x1d0>
movss  (%rbx),%xmm0
movss  %xmm0,0x48(%rsp)
xor    %r12d,%r12d
mov    %rbx,0x58(%rsp)
jmp    1329 <opus_pcm_soft_clip+0x219>
nopw   0x0(%rax,%rax,1)
cmp    %r13d,%r12d
je     178b <opus_pcm_soft_clip+0x67b>
mov    %r12d,%edi
cmp    %r13d,%r12d
jge    1376 <opus_pcm_soft_clip+0x266>
movslq %edi,%rax
mov    0x18(%rsp),%rcx
imul   %rax,%rcx
mov    0x8(%rsp),%rsi
lea    (%rsi,%rcx,4),%rcx
add    0x78(%rsp),%rax
xor    %edx,%edx
nopl   (%rax)
movss  (%rcx),%xmm0
ucomiss %xmm9,%xmm0
ja     1370 <opus_pcm_soft_clip+0x260>
ucomiss %xmm0,%xmm7
ja     1370 <opus_pcm_soft_clip+0x260>
add    $0xffffffffffffffff,%rdx
add    %rbp,%rcx
cmp    %rdx,%rax
jne    1350 <opus_pcm_soft_clip+0x240>
jmp    1290 <opus_pcm_soft_clip+0x180>
mov    %edi,%r12d
sub    %edx,%r12d
cmp    %r13d,%r12d
je     1788 <opus_pcm_soft_clip+0x678>
mov    %edi,0x4c(%rsp)
mov    %r12d,%eax
imul   %r14d,%eax
movslq %eax,%rbp
movss  (%rbx,%rbp,4),%xmm0
call   1030 <fabs@plt>
mov    0x58(%rsp),%rbx
xorps  %xmm8,%xmm8
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
movss  %xmm0,0x14(%rsp)
movslq %r12d,%rax
test   %r12d,%r12d
mov    $0x0,%ecx
cmovs  %r12d,%ecx
lea    0x1(%r12),%r15d
lea    -0x1(%rax),%rdx
imul   0x18(%rsp),%rdx
mov    0x8(%rsp),%rsi
lea    (%rsi,%rdx,4),%rdx
mov    %rax,%rsi
nopl   0x0(%rax,%rax,1)
test   %rsi,%rsi
jle    1410 <opus_pcm_soft_clip+0x300>
movss  (%rbx,%rbp,4),%xmm0
add    $0xffffffffffffffff,%rsi
mulss  (%rdx),%xmm0
add    $0xffffffff,%r15d
add    0x80(%rsp),%rdx
ucomiss %xmm8,%xmm0
jae    13e0 <opus_pcm_soft_clip+0x2d0>
jmp    1413 <opus_pcm_soft_clip+0x303>
cs nopw 0x0(%rax,%rax,1)
mov    %ecx,%r15d
cmp    %r13d,%r12d
movss  0xc19(%rip),%xmm9
movss  0xc15(%rip),%xmm7
jge    14e0 <opus_pcm_soft_clip+0x3d0>
mov    0x18(%rsp),%rcx
imul   %rax,%rcx
mov    0x8(%rsp),%rdx
lea    (%rdx,%rcx,4),%r14
mov    0x70(%rsp),%r13
sub    %rax,%r13
mov    %r12d,%eax
mov    %r12d,0x10(%rsp)
jmp    1489 <opus_pcm_soft_clip+0x379>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12d
add    0x40(%rsp),%r14
add    $0xffffffffffffffff,%r13
xorps  %xmm8,%xmm8
movss  0xbbe(%rip),%xmm9
movss  0xbba(%rip),%xmm7
mov    0x58(%rsp),%rbx
je     14f6 <opus_pcm_soft_clip+0x3e6>
movss  (%r14),%xmm0
movss  (%rbx,%rbp,4),%xmm1
mulss  %xmm0,%xmm1
ucomiss %xmm8,%xmm1
jb     14ea <opus_pcm_soft_clip+0x3da>
call   1030 <fabs@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
ucomiss 0x14(%rsp),%xmm0
jbe    1460 <opus_pcm_soft_clip+0x350>
movss  (%r14),%xmm0
call   1030 <fabs@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
movss  %xmm0,0x14(%rsp)
mov    %r12d,%eax
mov    %r12d,0x10(%rsp)
jmp    1460 <opus_pcm_soft_clip+0x350>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r12d,%eax
mov    %r12d,0x10(%rsp)
jmp    1503 <opus_pcm_soft_clip+0x3f3>
mov    0x24(%rsp),%r14d
mov    0x20(%rsp),%r13d
jmp    1503 <opus_pcm_soft_clip+0x3f3>
mov    0x20(%rsp),%r13d
mov    %r13d,%r12d
mov    0x24(%rsp),%r14d
movss  (%rbx,%rbp,4),%xmm1
test   %r15d,%r15d
je     1520 <opus_pcm_soft_clip+0x410>
xor    %eax,%eax
jmp    152f <opus_pcm_soft_clip+0x41f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movss  (%rbx),%xmm0
mulss  %xmm1,%xmm0
ucomiss %xmm8,%xmm0
setae  %al
mov    0x40(%rsp),%rbp
mov    0x50(%rsp),%r8
movss  0x14(%rsp),%xmm0
movaps %xmm0,%xmm2
addss  %xmm7,%xmm2
mulss  %xmm0,%xmm0
divss  %xmm0,%xmm2
movaps %xmm2,%xmm0
mulss  0xae7(%rip),%xmm0
addss  %xmm2,%xmm0
xorps  %xmm2,%xmm2
cmpltss %xmm1,%xmm2
movaps %xmm2,%xmm1
andnps %xmm0,%xmm1
xorps  0xaae(%rip),%xmm0
andps  %xmm2,%xmm0
orps   %xmm1,%xmm0
cmp    %r12d,%r15d
jge    161b <opus_pcm_soft_clip+0x50b>
movslq %r15d,%rsi
mov    %r12d,%edx
sub    %r15d,%edx
mov    %rsi,%rcx
test   $0x1,%dl
je     15b8 <opus_pcm_soft_clip+0x4a8>
mov    %rsi,%rcx
imul   0x18(%rsp),%rcx
movss  (%rbx,%rcx,4),%xmm1
movaps %xmm0,%xmm2
mulss  %xmm1,%xmm2
mulss  %xmm1,%xmm2
addss  %xmm1,%xmm2
movss  %xmm2,(%rbx,%rcx,4)
lea    0x1(%rsi),%rcx
movslq %r12d,%rdx
not    %rsi
add    %rdx,%rsi
je     161b <opus_pcm_soft_clip+0x50b>
sub    %rcx,%rdx
mov    %rbp,%rsi
imul   %rcx,%rsi
add    $0x1,%rcx
imul   %rbp,%rcx
mov    0x8(%rsp),%rdi
nopw   0x0(%rax,%rax,1)
movss  (%rdi,%rsi,1),%xmm1
movaps %xmm0,%xmm2
mulss  %xmm1,%xmm2
mulss  %xmm1,%xmm2
addss  %xmm1,%xmm2
movss  %xmm2,(%rdi,%rsi,1)
movss  (%rdi,%rcx,1),%xmm1
movaps %xmm0,%xmm2
mulss  %xmm1,%xmm2
mulss  %xmm1,%xmm2
addss  %xmm1,%xmm2
movss  %xmm2,(%rdi,%rcx,1)
add    %r8,%rdi
add    $0xfffffffffffffffe,%rdx
jne    15e0 <opus_pcm_soft_clip+0x4d0>
mov    0x10(%rsp),%esi
cmp    $0x2,%esi
setge  %cl
and    %cl,%al
cmp    $0x1,%al
mov    0x4c(%rsp),%ecx
jne    1320 <opus_pcm_soft_clip+0x210>
cmp    %esi,%ecx
jge    1320 <opus_pcm_soft_clip+0x210>
movss  0x48(%rsp),%xmm1
subss  (%rbx),%xmm1
cvtsi2ss %esi,%xmm3
movaps %xmm1,%xmm2
divss  %xmm3,%xmm2
movslq %ecx,%rdx
mov    %esi,%eax
sub    %ecx,%eax
test   $0x1,%al
jne    1660 <opus_pcm_soft_clip+0x550>
mov    %rdx,%rax
jmp    16b6 <opus_pcm_soft_clip+0x5a6>
subss  %xmm2,%xmm1
mov    %rdx,%rax
imul   0x18(%rsp),%rax
movss  (%rbx,%rax,4),%xmm4
addss  %xmm1,%xmm4
movaps %xmm9,%xmm3
minss  %xmm4,%xmm3
ucomiss %xmm3,%xmm7
cmpltss %xmm7,%xmm3
movaps %xmm3,%xmm5
andps  %xmm7,%xmm5
andnps %xmm9,%xmm3
orps   %xmm5,%xmm3
movaps %xmm3,%xmm5
ja     169b <opus_pcm_soft_clip+0x58b>
movaps %xmm4,%xmm5
movaps %xmm9,%xmm6
cmpltss %xmm4,%xmm6
andps  %xmm6,%xmm3
andnps %xmm5,%xmm6
orps   %xmm3,%xmm6
movss  %xmm6,(%rbx,%rax,4)
lea    0x1(%rdx),%rax
mov    %esi,%ecx
not    %rdx
add    %rcx,%rdx
je     1320 <opus_pcm_soft_clip+0x210>
sub    %rax,%rcx
mov    %rbp,%rdx
imul   %rax,%rdx
add    $0x1,%rax
imul   %rbp,%rax
mov    0x8(%rsp),%rsi
jmp    1704 <opus_pcm_soft_clip+0x5f4>
nopl   (%rax)
movaps %xmm9,%xmm6
cmpltss %xmm4,%xmm6
andps  %xmm6,%xmm3
andnps %xmm5,%xmm6
orps   %xmm3,%xmm6
movss  %xmm6,(%rsi,%rax,1)
add    %r8,%rsi
add    $0xfffffffffffffffe,%rcx
je     1320 <opus_pcm_soft_clip+0x210>
subss  %xmm2,%xmm1
movss  (%rsi,%rdx,1),%xmm4
addss  %xmm1,%xmm4
movaps %xmm9,%xmm3
minss  %xmm4,%xmm3
ucomiss %xmm3,%xmm7
cmpltss %xmm7,%xmm3
movaps %xmm3,%xmm5
andps  %xmm7,%xmm5
andnps %xmm9,%xmm3
orps   %xmm5,%xmm3
movaps %xmm3,%xmm5
ja     1736 <opus_pcm_soft_clip+0x626>
movaps %xmm4,%xmm5
movaps %xmm9,%xmm6
cmpltss %xmm4,%xmm6
andps  %xmm6,%xmm3
andnps %xmm5,%xmm6
orps   %xmm3,%xmm6
movss  %xmm6,(%rsi,%rdx,1)
subss  %xmm2,%xmm1
movss  (%rsi,%rax,1),%xmm4
addss  %xmm1,%xmm4
movaps %xmm9,%xmm3
minss  %xmm4,%xmm3
ucomiss %xmm3,%xmm7
cmpltss %xmm7,%xmm3
movaps %xmm3,%xmm5
andps  %xmm7,%xmm5
andnps %xmm9,%xmm3
orps   %xmm5,%xmm3
movaps %xmm3,%xmm5
ja     16e0 <opus_pcm_soft_clip+0x5d0>
movaps %xmm4,%xmm5
jmp    16e0 <opus_pcm_soft_clip+0x5d0>
xorps  %xmm0,%xmm0
mov    0x28(%rsp),%rax
mov    0x30(%rsp),%rdi
mov    0x38(%rsp),%rcx
mov    0x8(%rsp),%rsi
jmp    12a2 <opus_pcm_soft_clip+0x192>
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movss  0x872(%rip),%xmm0
movss  0x86e(%rip),%xmm1
jmp    17f3 <opus_pcm_soft_clip+0x6e3>
nopl   0x0(%rax,%rax,1)
movaps %xmm0,%xmm5
cmpltss %xmm3,%xmm5
andps  %xmm5,%xmm2
andnps %xmm4,%xmm5
orps   %xmm2,%xmm5
movss  %xmm5,(%rdi,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rax
je     120a <opus_pcm_soft_clip+0xfa>
movss  (%rdi,%rcx,4),%xmm3
movaps %xmm0,%xmm2
minss  %xmm3,%xmm2
ucomiss %xmm2,%xmm1
cmpltss %xmm1,%xmm2
movaps %xmm2,%xmm4
andps  %xmm1,%xmm4
andnps %xmm0,%xmm2
orps   %xmm4,%xmm2
movaps %xmm2,%xmm4
ja     17d0 <opus_pcm_soft_clip+0x6c0>
movaps %xmm3,%xmm4
jmp    17d0 <opus_pcm_soft_clip+0x6c0>

LLVM IR (-O0):
define void @opus_pcm_soft_clip(float* %0, i32 %1, i32 %2, float* %3) {
%5 = alloca float*
%6 = alloca i32
%7 = alloca i32
%8 = alloca float*
%9 = alloca i32
%10 = alloca i32
%11 = alloca float*
%12 = alloca float
%13 = alloca float
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca float
%18 = alloca i32
%19 = alloca i32
%20 = alloca float
%21 = alloca float
store float* %0, float** %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store float* %3, float** %8
%22 = load i32, i32* %7
%23 = icmp slt i32 %22, 1
br i1 %23, label %33, label %24
24: ; preds = %4
%25 = load i32, i32* %6
%26 = icmp slt i32 %25, 1
br i1 %26, label %33, label %27
27: ; preds = %24
%28 = load float*, float** %5
%29 = icmp ne float* %28, null
br i1 %29, label %30, label %33
30: ; preds = %27
%31 = load float*, float** %8
%32 = icmp ne float* %31, null
br i1 %32, label %34, label %33
33: ; preds = %30, %27, %24, %4
br label %457
34: ; preds = %30
store i32 0, i32* %10
br label %35
35: ; preds = %81, %34
%36 = load i32, i32* %10
%37 = load i32, i32* %6
%38 = load i32, i32* %7
%39 = mul nsw i32 %37, %38
%40 = icmp slt i32 %36, %39
br i1 %40, label %41, label %84
41: ; preds = %35
%42 = load float*, float** %5
%43 = load i32, i32* %10
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds float, float* %42, i64 %44
%46 = load float, float* %45
%47 = fcmp olt float 2.000000e+00, %46
br i1 %47, label %48, label %49
48: ; preds = %41
br label %55
49: ; preds = %41
%50 = load float*, float** %5
%51 = load i32, i32* %10
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds float, float* %50, i64 %52
%54 = load float, float* %53
br label %55
55: ; preds = %49, %48
%56 = phi float [ 2.000000e+00, %48 ], [ %54, %49 ]
%57 = fcmp ogt float -2.000000e+00, %56
br i1 %57, label %58, label %59
58: ; preds = %55
br label %75
59: ; preds = %55
%60 = load float*, float** %5
%61 = load i32, i32* %10
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds float, float* %60, i64 %62
%64 = load float, float* %63
%65 = fcmp olt float 2.000000e+00, %64
br i1 %65, label %66, label %67
66: ; preds = %59
br label %73
67: ; preds = %59
%68 = load float*, float** %5
%69 = load i32, i32* %10
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds float, float* %68, i64 %70
%72 = load float, float* %71
br label %73
73: ; preds = %67, %66
%74 = phi float [ 2.000000e+00, %66 ], [ %72, %67 ]
br label %75
75: ; preds = %73, %58
%76 = phi float [ -2.000000e+00, %58 ], [ %74, %73 ]
%77 = load float*, float** %5
%78 = load i32, i32* %10
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds float, float* %77, i64 %79
store float %76, float* %80
br label %81
81: ; preds = %75
%82 = load i32, i32* %10
%83 = add nsw i32 %82, 1
store i32 %83, i32* %10
br label %35
84: ; preds = %35
store i32 0, i32* %9
br label %85
85: ; preds = %454, %84
%86 = load i32, i32* %9
%87 = load i32, i32* %7
%88 = icmp slt i32 %86, %87
br i1 %88, label %89, label %457
89: ; preds = %85
%90 = load float*, float** %5
%91 = load i32, i32* %9
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds float, float* %90, i64 %92
store float* %93, float** %11
%94 = load float*, float** %8
%95 = load i32, i32* %9
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds float, float* %94, i64 %96
%98 = load float, float* %97
store float %98, float* %12
store i32 0, i32* %10
br label %99
99: ; preds = %146, %89
%100 = load i32, i32* %10
%101 = load i32, i32* %6
%102 = icmp slt i32 %100, %101
br i1 %102, label %103, label %149
103: ; preds = %99
%104 = load float*, float** %11
%105 = load i32, i32* %10
%106 = load i32, i32* %7
%107 = mul nsw i32 %105, %106
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds float, float* %104, i64 %108
%110 = load float, float* %109
%111 = load float, float* %12
%112 = fmul float %110, %111
%113 = fcmp oge float %112, 0.000000e+00
br i1 %113, label %114, label %115
114: ; preds = %103
br label %149
115: ; preds = %103
%116 = load float*, float** %11
%117 = load i32, i32* %10
%118 = load i32, i32* %7
%119 = mul nsw i32 %117, %118
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds float, float* %116, i64 %120
%122 = load float, float* %121
%123 = load float, float* %12
%124 = load float*, float** %11
%125 = load i32, i32* %10
%126 = load i32, i32* %7
%127 = mul nsw i32 %125, %126
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds float, float* %124, i64 %128
%130 = load float, float* %129
%131 = fmul float %123, %130
%132 = load float*, float** %11
%133 = load i32, i32* %10
%134 = load i32, i32* %7
%135 = mul nsw i32 %133, %134
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds float, float* %132, i64 %136
%138 = load float, float* %137
%139 = call float @llvm.fmuladd.f32(float %131, float %138, float %122)
%140 = load float*, float** %11
%141 = load i32, i32* %10
%142 = load i32, i32* %7
%143 = mul nsw i32 %141, %142
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds float, float* %140, i64 %144
store float %139, float* %145
br label %146
146: ; preds = %115
%147 = load i32, i32* %10
%148 = add nsw i32 %147, 1
store i32 %148, i32* %10
br label %99
149: ; preds = %114, %99
store i32 0, i32* %14
%150 = load float*, float** %11
%151 = getelementptr inbounds float, float* %150, i64 0
%152 = load float, float* %151
store float %152, float* %13
br label %153
153: ; preds = %149, %447
store i32 0, i32* %18
%154 = load i32, i32* %14
store i32 %154, i32* %10
br label %155
155: ; preds = %179, %153
%156 = load i32, i32* %10
%157 = load i32, i32* %6
%158 = icmp slt i32 %156, %157
br i1 %158, label %159, label %182
159: ; preds = %155
%160 = load float*, float** %11
%161 = load i32, i32* %10
%162 = load i32, i32* %7
%163 = mul nsw i32 %161, %162
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds float, float* %160, i64 %164
%166 = load float, float* %165
%167 = fcmp ogt float %166, 1.000000e+00
br i1 %167, label %177, label %168
168: ; preds = %159
%169 = load float*, float** %11
%170 = load i32, i32* %10
%171 = load i32, i32* %7
%172 = mul nsw i32 %170, %171
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds float, float* %169, i64 %173
%175 = load float, float* %174
%176 = fcmp olt float %175, -1.000000e+00
br i1 %176, label %177, label %178
177: ; preds = %168, %159
br label %182
178: ; preds = %168
br label %179
179: ; preds = %178
%180 = load i32, i32* %10
%181 = add nsw i32 %180, 1
store i32 %181, i32* %10
br label %155
182: ; preds = %177, %155
%183 = load i32, i32* %10
%184 = load i32, i32* %6
%185 = icmp eq i32 %183, %184
br i1 %185, label %186, label %187
186: ; preds = %182
store float 0.000000e+00, float* %12
br label %448
187: ; preds = %182
%188 = load i32, i32* %10
store i32 %188, i32* %19
%189 = load i32, i32* %10
store i32 %189, i32* %16
store i32 %189, i32* %15
%190 = load float*, float** %11
%191 = load i32, i32* %10
%192 = load i32, i32* %7
%193 = mul nsw i32 %191, %192
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds float, float* %190, i64 %194
%196 = load float, float* %195
%197 = call i64 @fabs(float %196)
%198 = sitofp i64 %197 to float
store float %198, float* %17
br label %199
199: ; preds = %222, %187
%200 = load i32, i32* %15
%201 = icmp sgt i32 %200, 0
br i1 %201, label %202, label %220
202: ; preds = %199
%203 = load float*, float** %11
%204 = load i32, i32* %10
%205 = load i32, i32* %7
%206 = mul nsw i32 %204, %205
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds float, float* %203, i64 %207
%209 = load float, float* %208
%210 = load float*, float** %11
%211 = load i32, i32* %15
%212 = sub nsw i32 %211, 1
%213 = load i32, i32* %7
%214 = mul nsw i32 %212, %213
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds float, float* %210, i64 %215
%217 = load float, float* %216
%218 = fmul float %209, %217
%219 = fcmp oge float %218, 0.000000e+00
br label %220
220: ; preds = %202, %199
%221 = phi i1 [ false, %199 ], [ %219, %202 ]
br i1 %221, label %222, label %225
222: ; preds = %220
%223 = load i32, i32* %15
%224 = add nsw i32 %223, -1
store i32 %224, i32* %15
br label %199
225: ; preds = %220
br label %226
226: ; preds = %272, %225
%227 = load i32, i32* %16
%228 = load i32, i32* %6
%229 = icmp slt i32 %227, %228
br i1 %229, label %230, label %247
230: ; preds = %226
%231 = load float*, float** %11
%232 = load i32, i32* %10
%233 = load i32, i32* %7
%234 = mul nsw i32 %232, %233
%235 = sext i32 %234 to i64
%236 = getelementptr inbounds float, float* %231, i64 %235
%237 = load float, float* %236
%238 = load float*, float** %11
%239 = load i32, i32* %16
%240 = load i32, i32* %7
%241 = mul nsw i32 %239, %240
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds float, float* %238, i64 %242
%244 = load float, float* %243
%245 = fmul float %237, %244
%246 = fcmp oge float %245, 0.000000e+00
br label %247
247: ; preds = %230, %226
%248 = phi i1 [ false, %226 ], [ %246, %230 ]
br i1 %248, label %249, label %275
249: ; preds = %247
%250 = load float*, float** %11
%251 = load i32, i32* %16
%252 = load i32, i32* %7
%253 = mul nsw i32 %251, %252
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds float, float* %250, i64 %254
%256 = load float, float* %255
%257 = call i64 @fabs(float %256)
%258 = sitofp i64 %257 to float
%259 = load float, float* %17
%260 = fcmp ogt float %258, %259
br i1 %260, label %261, label %272
261: ; preds = %249
%262 = load float*, float** %11
%263 = load i32, i32* %16
%264 = load i32, i32* %7
%265 = mul nsw i32 %263, %264
%266 = sext i32 %265 to i64
%267 = getelementptr inbounds float, float* %262, i64 %266
%268 = load float, float* %267
%269 = call i64 @fabs(float %268)
%270 = sitofp i64 %269 to float
store float %270, float* %17
%271 = load i32, i32* %16
store i32 %271, i32* %19
br label %272
272: ; preds = %261, %249
%273 = load i32, i32* %16
%274 = add nsw i32 %273, 1
store i32 %274, i32* %16
br label %226
275: ; preds = %247
%276 = load i32, i32* %15
%277 = icmp eq i32 %276, 0
br i1 %277, label %278, label %291
278: ; preds = %275
%279 = load float*, float** %11
%280 = load i32, i32* %10
%281 = load i32, i32* %7
%282 = mul nsw i32 %280, %281
%283 = sext i32 %282 to i64
%284 = getelementptr inbounds float, float* %279, i64 %283
%285 = load float, float* %284
%286 = load float*, float** %11
%287 = getelementptr inbounds float, float* %286, i64 0
%288 = load float, float* %287
%289 = fmul float %285, %288
%290 = fcmp oge float %289, 0.000000e+00
br label %291
291: ; preds = %278, %275
%292 = phi i1 [ false, %275 ], [ %290, %278 ]
%293 = zext i1 %292 to i32
store i32 %293, i32* %18
%294 = load float, float* %17
%295 = fsub float %294, 1.000000e+00
%296 = load float, float* %17
%297 = load float, float* %17
%298 = fmul float %296, %297
%299 = fdiv float %295, %298
store float %299, float* %12
%300 = load float, float* %12
%301 = load float, float* %12
%302 = call float @llvm.fmuladd.f32(float %300, float 0x3E901B2B20000000, float %301)
store float %302, float* %12
%303 = load float*, float** %11
%304 = load i32, i32* %10
%305 = load i32, i32* %7
%306 = mul nsw i32 %304, %305
%307 = sext i32 %306 to i64
%308 = getelementptr inbounds float, float* %303, i64 %307
%309 = load float, float* %308
%310 = fcmp ogt float %309, 0.000000e+00
br i1 %310, label %311, label %314
311: ; preds = %291
%312 = load float, float* %12
%313 = fneg float %312
store float %313, float* %12
br label %314
314: ; preds = %311, %291
%315 = load i32, i32* %15
store i32 %315, i32* %10
br label %316
316: ; preds = %351, %314
%317 = load i32, i32* %10
%318 = load i32, i32* %16
%319 = icmp slt i32 %317, %318
br i1 %319, label %320, label %354
320: ; preds = %316
%321 = load float*, float** %11
%322 = load i32, i32* %10
%323 = load i32, i32* %7
%324 = mul nsw i32 %322, %323
%325 = sext i32 %324 to i64
%326 = getelementptr inbounds float, float* %321, i64 %325
%327 = load float, float* %326
%328 = load float, float* %12
%329 = load float*, float** %11
%330 = load i32, i32* %10
%331 = load i32, i32* %7
%332 = mul nsw i32 %330, %331
%333 = sext i32 %332 to i64
%334 = getelementptr inbounds float, float* %329, i64 %333
%335 = load float, float* %334
%336 = fmul float %328, %335
%337 = load float*, float** %11
%338 = load i32, i32* %10
%339 = load i32, i32* %7
%340 = mul nsw i32 %338, %339
%341 = sext i32 %340 to i64
%342 = getelementptr inbounds float, float* %337, i64 %341
%343 = load float, float* %342
%344 = call float @llvm.fmuladd.f32(float %336, float %343, float %327)
%345 = load float*, float** %11
%346 = load i32, i32* %10
%347 = load i32, i32* %7
%348 = mul nsw i32 %346, %347
%349 = sext i32 %348 to i64
%350 = getelementptr inbounds float, float* %345, i64 %349
store float %344, float* %350
br label %351
351: ; preds = %320
%352 = load i32, i32* %10
%353 = add nsw i32 %352, 1
store i32 %353, i32* %10
br label %316
354: ; preds = %316
%355 = load i32, i32* %18
%356 = icmp ne i32 %355, 0
br i1 %356, label %357, label %441
357: ; preds = %354
%358 = load i32, i32* %19
%359 = icmp sge i32 %358, 2
br i1 %359, label %360, label %441
360: ; preds = %357
%361 = load float, float* %13
%362 = load float*, float** %11
%363 = getelementptr inbounds float, float* %362, i64 0
%364 = load float, float* %363
%365 = fsub float %361, %364
store float %365, float* %21
%366 = load float, float* %21
%367 = load i32, i32* %19
%368 = sitofp i32 %367 to float
%369 = fdiv float %366, %368
store float %369, float* %20
%370 = load i32, i32* %14
store i32 %370, i32* %10
br label %371
371: ; preds = %437, %360
%372 = load i32, i32* %10
%373 = load i32, i32* %19
%374 = icmp slt i32 %372, %373
br i1 %374, label %375, label %440
375: ; preds = %371
%376 = load float, float* %20
%377 = load float, float* %21
%378 = fsub float %377, %376
store float %378, float* %21
%379 = load float, float* %21
%380 = load float*, float** %11
%381 = load i32, i32* %10
%382 = load i32, i32* %7
%383 = mul nsw i32 %381, %382
%384 = sext i32 %383 to i64
%385 = getelementptr inbounds float, float* %380, i64 %384
%386 = load float, float* %385
%387 = fadd float %386, %379
store float %387, float* %385
%388 = load float*, float** %11
%389 = load i32, i32* %10
%390 = load i32, i32* %7
%391 = mul nsw i32 %389, %390
%392 = sext i32 %391 to i64
%393 = getelementptr inbounds float, float* %388, i64 %392
%394 = load float, float* %393
%395 = fcmp olt float 1.000000e+00, %394
br i1 %395, label %396, label %397
396: ; preds = %375
br label %405
397: ; preds = %375
%398 = load float*, float** %11
%399 = load i32, i32* %10
%400 = load i32, i32* %7
%401 = mul nsw i32 %399, %400
%402 = sext i32 %401 to i64
%403 = getelementptr inbounds float, float* %398, i64 %402
%404 = load float, float* %403
br label %405
405: ; preds = %397, %396
%406 = phi float [ 1.000000e+00, %396 ], [ %404, %397 ]
%407 = fcmp ogt float -1.000000e+00, %406
br i1 %407, label %408, label %409
408: ; preds = %405
br label %429
409: ; preds = %405
%410 = load float*, float** %11
%411 = load i32, i32* %10
%412 = load i32, i32* %7
%413 = mul nsw i32 %411, %412
%414 = sext i32 %413 to i64
%415 = getelementptr inbounds float, float* %410, i64 %414
%416 = load float, float* %415
%417 = fcmp olt float 1.000000e+00, %416
br i1 %417, label %418, label %419
418: ; preds = %409
br label %427
419: ; preds = %409
%420 = load float*, float** %11
%421 = load i32, i32* %10
%422 = load i32, i32* %7
%423 = mul nsw i32 %421, %422
%424 = sext i32 %423 to i64
%425 = getelementptr inbounds float, float* %420, i64 %424
%426 = load float, float* %425
br label %427
427: ; preds = %419, %418
%428 = phi float [ 1.000000e+00, %418 ], [ %426, %419 ]
br label %429
429: ; preds = %427, %408
%430 = phi float [ -1.000000e+00, %408 ], [ %428, %427 ]
%431 = load float*, float** %11
%432 = load i32, i32* %10
%433 = load i32, i32* %7
%434 = mul nsw i32 %432, %433
%435 = sext i32 %434 to i64
%436 = getelementptr inbounds float, float* %431, i64 %435
store float %430, float* %436
br label %437
437: ; preds = %429
%438 = load i32, i32* %10
%439 = add nsw i32 %438, 1
store i32 %439, i32* %10
br label %371
440: ; preds = %371
br label %441
441: ; preds = %440, %357, %354
%442 = load i32, i32* %16
store i32 %442, i32* %14
%443 = load i32, i32* %14
%444 = load i32, i32* %6
%445 = icmp eq i32 %443, %444
br i1 %445, label %446, label %447
446: ; preds = %441
br label %448
447: ; preds = %441
br label %153
448: ; preds = %446, %186
%449 = load float, float* %12
%450 = load float*, float** %8
%451 = load i32, i32* %9
%452 = sext i32 %451 to i64
%453 = getelementptr inbounds float, float* %450, i64 %452
store float %449, float* %453
br label %454
454: ; preds = %448
%455 = load i32, i32* %9
%456 = add nsw i32 %455, 1
store i32 %456, i32* %9
br label %85
457: ; preds = %33, %85
ret void
}

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