#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 */
int flutes_wl_LD(int, int *, int *, int *);
int flutes_wl_MD(int, int *, int *, int *, int);
int flutes_wl_RDP(int d, int xs[], int ys[], int s[], int acc) {
  int i, j, ss;
  for (i = 0; i < d - 1; i++) {
    if (xs[s[i]] == xs[s[i + 1]] && ys[i] == ys[i + 1]) {
      if (s[i] < s[i + 1])
        ss = s[i + 1];
      else {
        ss = s[i];
        s[i] = s[i + 1];
      }
      for (j = i + 2; j < d; j++) {
        ys[j - 1] = ys[j];
        s[j - 1] = s[j];
      }
      for (j = ss + 1; j < d; j++)
        xs[j - 1] = xs[j];
      for (j = 0; j <= d - 2; j++)
        if (s[j] > ss)
          s[j]--;
      i--;
      d--;
    }
  }
  return (d <= 9 ? flutes_wl_LD(d, xs, ys, s)
                 : flutes_wl_MD(d, xs, ys, s, acc));
}


x86 assembly (clang, -O0):
<flutes_wl_RDP>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1313 <flutes_wl_RDP+0x1f3>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq -0x28(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
mov    -0x20(%rbp),%rdx
mov    -0x28(%rbp),%esi
add    $0x1,%esi
movslq %esi,%rsi
movslq (%rdx,%rsi,4),%rdx
cmp    (%rcx,%rdx,4),%eax
jne    1300 <flutes_wl_RDP+0x1e0>
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x18(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jne    1300 <flutes_wl_RDP+0x1e0>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jge    11de <flutes_wl_RDP+0xbe>
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x30(%rbp)
jmp    1207 <flutes_wl_RDP+0xe7>
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1260 <flutes_wl_RDP+0x140>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1210 <flutes_wl_RDP+0xf0>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    129e <flutes_wl_RDP+0x17e>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1269 <flutes_wl_RDP+0x149>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x2,%ecx
cmp    %ecx,%eax
jg     12ee <flutes_wl_RDP+0x1ce>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x30(%rbp),%eax
jle    12db <flutes_wl_RDP+0x1bb>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
add    $0xffffffff,%edx
mov    %edx,(%rax,%rcx,4)
jmp    12e0 <flutes_wl_RDP+0x1c0>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12a5 <flutes_wl_RDP+0x185>
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
mov    -0x4(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4(%rbp)
jmp    1305 <flutes_wl_RDP+0x1e5>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1142 <flutes_wl_RDP+0x22>
cmpl   $0x9,-0x4(%rbp)
jg     1339 <flutes_wl_RDP+0x219>
mov    -0x4(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    -0x20(%rbp),%rcx
call   1030 <flutes_wl_LD@plt>
mov    %eax,-0x34(%rbp)
jmp    1354 <flutes_wl_RDP+0x234>
mov    -0x4(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    -0x20(%rbp),%rcx
mov    -0x24(%rbp),%r8d
call   1040 <flutes_wl_MD@plt>
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<flutes_wl_RDP>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
cmp    $0x2,%edi
jl     173b <flutes_wl_RDP+0x61b>
mov    %r8d,-0x3c(%rsp)
movabs $0x1fffffff8,%r13
lea    -0x1(%rdi),%r11d
lea    0x4(%rsi),%rax
mov    %rax,-0x8(%rsp)
lea    -0x4(%rdx),%rax
mov    %rax,-0x10(%rsp)
lea    0x4(%rdx),%rax
mov    %rax,-0x20(%rsp)
lea    -0x4(%rcx),%rax
mov    %rax,-0x28(%rsp)
lea    0x4(%rcx),%rax
mov    %rax,-0x18(%rsp)
lea    0x30(%rsi),%rax
mov    %rax,-0x30(%rsp)
xor    %r14d,%r14d
movabs $0x400000000,%r12
jmp    11b0 <flutes_wl_RDP+0x90>
mov    -0x38(%rsp),%rax
mov    %eax,%r8d
mov    -0x40(%rsp),%eax
mov    %eax,%edi
nopl   0x0(%rax)
lea    -0x1(%rdi),%r11d
mov    %r8d,%r14d
cmp    %r11d,%r8d
jge    1736 <flutes_wl_RDP+0x616>
movslq %r14d,%rbp
movslq (%rcx,%rbp,4),%r9
mov    (%rsi,%r9,4),%eax
lea    0x1(%rbp),%r8d
movslq 0x4(%rcx,%rbp,4),%rbx
cmp    (%rsi,%rbx,4),%eax
jne    11a0 <flutes_wl_RDP+0x80>
lea    0x1(%rbp),%r10
mov    (%rdx,%rbp,4),%eax
cmp    (%rdx,%r10,4),%eax
jne    11a0 <flutes_wl_RDP+0x80>
cmp    %ebx,%r9d
jge    11e0 <flutes_wl_RDP+0xc0>
mov    %ebx,%r9d
jmp    11e3 <flutes_wl_RDP+0xc3>
mov    %ebx,(%rcx,%rbp,4)
mov    %r11d,-0x40(%rsp)
lea    0x2(%r14),%eax
cmp    %edi,%eax
jge    1394 <flutes_wl_RDP+0x274>
movslq %eax,%rbx
mov    %edi,%r15d
sub    %r14d,%r15d
add    $0xfffffffd,%r15d
cmp    $0x7,%r15d
jb     134a <flutes_wl_RDP+0x22a>
mov    -0x10(%rsp),%rax
lea    (%rax,%rbx,4),%r8
lea    (%r15,%rbx,1),%rax
mov    -0x18(%rsp),%rbp
lea    0x0(%rbp,%rax,4),%rbp
cmp    %rbp,%r8
jae    124a <flutes_wl_RDP+0x12a>
mov    -0x20(%rsp),%rbp
lea    0x0(,%rax,4),%rax
add    %rbp,%rax
mov    -0x28(%rsp),%rbp
lea    0x0(%rbp,%rbx,4),%rbp
cmp    %rax,%rbp
jb     134a <flutes_wl_RDP+0x22a>
add    $0x1,%r15
mov    %r15,%r8
and    %r13,%r8
lea    -0x8(%r8),%rax
mov    %rax,%r11
shr    $0x3,%r11
add    $0x1,%r11
test   %rax,%rax
je     1714 <flutes_wl_RDP+0x5f4>
mov    %r11,%r13
movabs $0x3ffffffffffffffe,%rax
ff ff 3f
and    %rax,%r13
lea    (%rcx,%rbx,4),%rbp
lea    (%rdx,%rbx,4),%rax
xor    %r10d,%r10d
nopw   0x0(%rax,%rax,1)
movups (%rax,%r10,4),%xmm0
movups 0x10(%rax,%r10,4),%xmm1
movups %xmm0,-0x4(%rax,%r10,4)
movups %xmm1,0xc(%rax,%r10,4)
movups 0x0(%rbp,%r10,4),%xmm0
movups 0x10(%rbp,%r10,4),%xmm1
movups %xmm0,-0x4(%rbp,%r10,4)
movups %xmm1,0xc(%rbp,%r10,4)
movups 0x20(%rax,%r10,4),%xmm0
movups 0x30(%rax,%r10,4),%xmm1
movups %xmm0,0x1c(%rax,%r10,4)
movups %xmm1,0x2c(%rax,%r10,4)
movdqu 0x20(%rbp,%r10,4),%xmm0
movdqu 0x30(%rbp,%r10,4),%xmm1
movdqu %xmm0,0x1c(%rbp,%r10,4)
movdqu %xmm1,0x2c(%rbp,%r10,4)
add    $0x10,%r10
add    $0xfffffffffffffffe,%r13
jne    1290 <flutes_wl_RDP+0x170>
test   $0x1,%r11b
je     1338 <flutes_wl_RDP+0x218>
add    %rbx,%r10
movups (%rdx,%r10,4),%xmm0
movups 0x10(%rdx,%r10,4),%xmm1
movups %xmm0,-0x4(%rdx,%r10,4)
movups %xmm1,0xc(%rdx,%r10,4)
movdqu (%rcx,%r10,4),%xmm0
movdqu 0x10(%rcx,%r10,4),%xmm1
movdqu %xmm0,-0x4(%rcx,%r10,4)
movdqu %xmm1,0xc(%rcx,%r10,4)
cmp    %r8,%r15
movabs $0x1fffffff8,%r13
je     1394 <flutes_wl_RDP+0x274>
add    %r8,%rbx
mov    %edi,%ebp
sub    %ebx,%ebp
lea    0x1(%rbx),%eax
test   $0x1,%bpl
je     1369 <flutes_wl_RDP+0x249>
mov    (%rdx,%rbx,4),%ebp
mov    %ebp,-0x4(%rdx,%rbx,4)
mov    (%rcx,%rbx,4),%ebp
mov    %ebp,-0x4(%rcx,%rbx,4)
add    $0x1,%rbx
cmp    %eax,%edi
je     1394 <flutes_wl_RDP+0x274>
mov    %edi,%eax
nop
mov    (%rdx,%rbx,4),%ebp
mov    %ebp,-0x4(%rdx,%rbx,4)
mov    (%rcx,%rbx,4),%ebp
mov    %ebp,-0x4(%rcx,%rbx,4)
mov    0x4(%rdx,%rbx,4),%ebp
mov    %ebp,(%rdx,%rbx,4)
mov    0x4(%rcx,%rbx,4),%ebp
mov    %ebp,(%rcx,%rbx,4)
add    $0x2,%rbx
cmp    %ebx,%eax
jne    1370 <flutes_wl_RDP+0x250>
mov    %r14,-0x38(%rsp)
lea    0x1(%r9),%eax
cmp    %edi,%eax
jge    15b0 <flutes_wl_RDP+0x490>
movslq %eax,%r8
lea    -0x2(%rdi),%eax
mov    %eax,%r15d
sub    %r9d,%r15d
cmp    $0x7,%r15d
jb     13f5 <flutes_wl_RDP+0x2d5>
cmp    %r9d,%eax
jl     13f5 <flutes_wl_RDP+0x2d5>
movslq %r9d,%rax
lea    (%rsi,%rax,4),%r10
mov    %edi,%ebx
sub    %r9d,%ebx
add    $0xfffffffe,%ebx
lea    (%r8,%rbx,1),%rbp
mov    -0x8(%rsp),%r11
lea    (%r11,%rbp,4),%rbp
cmp    %rbp,%r10
jae    14c6 <flutes_wl_RDP+0x3a6>
add    %rbx,%rax
lea    (%r11,%rax,4),%rax
lea    (%rsi,%r8,4),%rbp
cmp    %rax,%rbp
jae    14c6 <flutes_wl_RDP+0x3a6>
mov    %r9d,%r14d
movabs $0x100000000,%r15
mov    %edi,%r11d
sub    %r8d,%r11d
mov    %r8d,%r10d
not    %r10d
add    %edi,%r10d
and    $0x3,%r11d
je     144f <flutes_wl_RDP+0x32f>
neg    %r11d
xor    %ebx,%ebx
mov    %r8,%rax
nop
mov    (%rsi,%rax,4),%r15d
movslq %r14d,%rbp
mov    %r15d,(%rsi,%rbp,4)
mov    %eax,%r14d
add    $0x1,%rax
add    $0xffffffffffffffff,%rbx
cmp    %ebx,%r11d
jne    1420 <flutes_wl_RDP+0x300>
not    %ebx
add    %r8d,%ebx
mov    %ebx,%r14d
movabs $0x100000000,%r15
jmp    1452 <flutes_wl_RDP+0x332>
mov    %r8,%rax
cmp    $0x3,%r10d
movabs $0x1fffffff8,%r13
jb     15b0 <flutes_wl_RDP+0x490>
mov    %edi,%r8d
mov    %rax,%r11
shl    $0x20,%r11
mov    (%rsi,%rax,4),%r10d
movslq %r14d,%rbx
mov    %r10d,(%rsi,%rbx,4)
mov    0x4(%rsi,%rax,4),%ebx
mov    %r11,%rbp
sar    $0x1e,%rbp
mov    %ebx,(%rsi,%rbp,1)
mov    0x8(%rsi,%rax,4),%ebp
lea    (%r11,%r15,1),%rbx
sar    $0x1e,%rbx
mov    %ebp,(%rsi,%rbx,1)
mov    0xc(%rsi,%rax,4),%ebp
lea    (%r11,%r13,1),%rbx
add    $0x8,%rbx
sar    $0x1e,%rbx
mov    %ebp,(%rsi,%rbx,1)
mov    %eax,%r14d
lea    0x4(%rax),%rbp
add    $0x3,%r14d
add    %r12,%r11
mov    %rbp,%rax
cmp    %ebp,%r8d
jne    1470 <flutes_wl_RDP+0x350>
jmp    15b0 <flutes_wl_RDP+0x490>
add    $0x1,%r15
mov    %r15,%r14
movabs $0x1fffffff8,%rax
and    %rax,%r14
lea    -0x8(%r14),%rax
mov    %rax,%rbx
shr    $0x3,%rbx
add    $0x1,%rbx
test   %rax,%rax
je     1726 <flutes_wl_RDP+0x606>
mov    %rbx,%r10
movabs $0x3ffffffffffffffe,%rax
ff ff 3f
and    %rax,%r10
mov    -0x30(%rsp),%rax
lea    (%rax,%r8,4),%r11
lea    0x8(%r9),%r13d
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    (%r9,%rax,1),%ebp
movups -0x30(%r11,%rax,4),%xmm0
movups -0x20(%r11,%rax,4),%xmm1
movslq %ebp,%rbp
movups %xmm0,(%rsi,%rbp,4)
movups %xmm1,0x10(%rsi,%rbp,4)
lea    0x0(%r13,%rax,1),%ebp
movdqu -0x10(%r11,%rax,4),%xmm0
movdqu (%r11,%rax,4),%xmm1
movslq %ebp,%rbp
movdqu %xmm0,(%rsi,%rbp,4)
movdqu %xmm1,0x10(%rsi,%rbp,4)
add    $0x10,%rax
add    $0xfffffffffffffffe,%r10
jne    1520 <flutes_wl_RDP+0x400>
test   $0x1,%bl
je     158a <flutes_wl_RDP+0x46a>
lea    (%rax,%r8,1),%rbp
add    %r9d,%eax
movdqu (%rsi,%rbp,4),%xmm0
movdqu 0x10(%rsi,%rbp,4),%xmm1
cltq
movdqu %xmm0,(%rsi,%rax,4)
movdqu %xmm1,0x10(%rsi,%rax,4)
cmp    %r14,%r15
movabs $0x1fffffff8,%r13
movabs $0x100000000,%r15
jne    1709 <flutes_wl_RDP+0x5e9>
nopw   0x0(%rax,%rax,1)
cmp    $0x2,%edi
jl     118b <flutes_wl_RDP+0x6b>
add    $0xffffffff,%edi
cmp    $0x8,%edi
mov    -0x40(%rsp),%r10d
mov    -0x38(%rsp),%r8
jae    15d2 <flutes_wl_RDP+0x4b2>
xor    %ebx,%ebx
jmp    16f9 <flutes_wl_RDP+0x5d9>
mov    %edi,%ebx
and    $0xfffffff8,%ebx
movd   %r9d,%xmm0
pshufd $0x0,%xmm0,%xmm0
xor    %ebp,%ebp
jmp    15fd <flutes_wl_RDP+0x4dd>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x8,%rbp
cmp    %rbp,%rbx
je     16dc <flutes_wl_RDP+0x5bc>
movdqu (%rcx,%rbp,4),%xmm1
movdqa %xmm1,%xmm2
pcmpgtd %xmm0,%xmm2
movd   %xmm2,%eax
test   $0x1,%al
je     161c <flutes_wl_RDP+0x4fc>
movd   %xmm1,%eax
add    $0xffffffff,%eax
mov    %eax,(%rcx,%rbp,4)
pextrw $0x2,%xmm2,%eax
test   $0x1,%al
je     1635 <flutes_wl_RDP+0x515>
pshufd $0x55,%xmm1,%xmm3
movd   %xmm3,%eax
add    $0xffffffff,%eax
mov    %eax,0x4(%rcx,%rbp,4)
pextrw $0x4,%xmm2,%eax
test   $0x1,%al
je     164e <flutes_wl_RDP+0x52e>
pshufd $0xee,%xmm1,%xmm3
movd   %xmm3,%eax
add    $0xffffffff,%eax
mov    %eax,0x8(%rcx,%rbp,4)
pextrw $0x6,%xmm2,%eax
test   $0x1,%al
je     1667 <flutes_wl_RDP+0x547>
pshufd $0xff,%xmm1,%xmm1
movd   %xmm1,%eax
add    $0xffffffff,%eax
mov    %eax,0xc(%rcx,%rbp,4)
movdqu 0x10(%rcx,%rbp,4),%xmm1
movdqa %xmm1,%xmm2
pcmpgtd %xmm0,%xmm2
movd   %xmm2,%eax
test   $0x1,%al
je     1688 <flutes_wl_RDP+0x568>
movd   %xmm1,%eax
add    $0xffffffff,%eax
mov    %eax,0x10(%rcx,%rbp,4)
pextrw $0x2,%xmm2,%eax
test   $0x1,%al
je     16a1 <flutes_wl_RDP+0x581>
pshufd $0x55,%xmm1,%xmm3
movd   %xmm3,%eax
add    $0xffffffff,%eax
mov    %eax,0x14(%rcx,%rbp,4)
pextrw $0x4,%xmm2,%eax
test   $0x1,%al
je     16ba <flutes_wl_RDP+0x59a>
pshufd $0xee,%xmm1,%xmm3
movd   %xmm3,%eax
add    $0xffffffff,%eax
mov    %eax,0x18(%rcx,%rbp,4)
pextrw $0x6,%xmm2,%eax
test   $0x1,%al
je     15f0 <flutes_wl_RDP+0x4d0>
pshufd $0xff,%xmm1,%xmm1
movd   %xmm1,%eax
add    $0xffffffff,%eax
mov    %eax,0x1c(%rcx,%rbp,4)
jmp    15f0 <flutes_wl_RDP+0x4d0>
cmp    %rdi,%rbx
jne    16f9 <flutes_wl_RDP+0x5d9>
mov    %r10d,%edi
jmp    11a0 <flutes_wl_RDP+0x80>
nopl   0x0(%rax)
add    $0x1,%rbx
cmp    %rbx,%rdi
je     16e1 <flutes_wl_RDP+0x5c1>
mov    (%rcx,%rbx,4),%eax
cmp    %r9d,%eax
jle    16f0 <flutes_wl_RDP+0x5d0>
add    $0xffffffff,%eax
mov    %eax,(%rcx,%rbx,4)
jmp    16f0 <flutes_wl_RDP+0x5d0>
add    %r14,%r8
add    %r9d,%r14d
jmp    1402 <flutes_wl_RDP+0x2e2>
xor    %r10d,%r10d
test   $0x1,%r11b
jne    1303 <flutes_wl_RDP+0x1e3>
jmp    1338 <flutes_wl_RDP+0x218>
xor    %eax,%eax
test   $0x1,%bl
jne    156b <flutes_wl_RDP+0x44b>
jmp    158a <flutes_wl_RDP+0x46a>
cmp    $0x9,%edi
jg     174a <flutes_wl_RDP+0x62a>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <flutes_wl_LD@plt>
mov    -0x3c(%rsp),%r8d
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <flutes_wl_MD@plt>

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

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