void scopy(int n__, float *sx, int incx, float *sy, int incy) {
  int i__1;
  static int i, m, ix, iy, mp1;
  if (n__ <= 0) {
    return;
  }
  if (incx == 1 && incy == 1) {
    goto L20;
  }
  ix = 1;
  iy = 1;
  if (incx < 0) {
    ix = (-(n__) + 1) * incx + 1;
  }
  if (incy < 0) {
    iy = (-(n__) + 1) * incy + 1;
  }
  i__1 = n__;
  for (i = 1; i <= n__; ++i) {
    sy[(iy)-1] = sx[(ix)-1];
    ix += incx;
    iy += incy;
  }
  return;
L20:
  m = n__ % 7;
  if (m == 0) {
    goto L40;
  }
  i__1 = m;
  for (i = 1; i <= m; ++i) {
    sy[(i)-1] = sx[(i)-1];
  }
  if (n__ < 7) {
    return;
  }
L40:
  mp1 = m + 1;
  i__1 = n__;
  for (i = mp1; i <= n__; i += 7) {
    sy[(i)-1] = sx[(i)-1];
    sy[(i + 1) - 1] = sx[(i + 1) - 1];
    sy[(i + 2) - 1] = sx[(i + 2) - 1];
    sy[(i + 3) - 1] = sx[(i + 3) - 1];
    sy[(i + 4) - 1] = sx[(i + 4) - 1];
    sy[(i + 5) - 1] = sx[(i + 5) - 1];
    sy[(i + 6) - 1] = sx[(i + 6) - 1];
  }
}


x86 assembly (clang, -O0):
<scopy>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     1125 <scopy+0x25>
jmp    1438 <scopy+0x338>
cmpl   $0x1,-0x14(%rbp)
jne    113e <scopy+0x3e>
cmpl   $0x1,-0x24(%rbp)
jne    113e <scopy+0x3e>
jmp    1210 <scopy+0x110>
movl   $0x1,0x2ee4(%rip)
movl   $0x1,0x2ede(%rip)
cmpl   $0x0,-0x14(%rbp)
jge    1171 <scopy+0x71>
xor    %eax,%eax
sub    -0x4(%rbp),%eax
add    $0x1,%eax
imul   -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,0x2ebb(%rip)
cmpl   $0x0,-0x24(%rbp)
jge    1190 <scopy+0x90>
xor    %eax,%eax
sub    -0x4(%rbp),%eax
add    $0x1,%eax
imul   -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,0x2ea0(%rip)
mov    -0x4(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x1,0x2e84(%rip)
mov    0x2e7e(%rip),%eax
cmp    -0x4(%rbp),%eax
jg     120b <scopy+0x10b>
mov    -0x10(%rbp),%rax
mov    0x2e73(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
mov    0x2e62(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    0x2e4a(%rip),%eax
mov    %eax,0x2e44(%rip)
mov    -0x24(%rbp),%eax
add    0x2e3f(%rip),%eax
mov    %eax,0x2e39(%rip)
mov    0x2e27(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2e1e(%rip)
jmp    11a0 <scopy+0xa0>
jmp    1438 <scopy+0x338>
mov    -0x4(%rbp),%eax
mov    $0x7,%ecx
cltd
idiv   %ecx
mov    %edx,0x2e07(%rip)
cmpl   $0x0,0x2e00(%rip)
jne    1233 <scopy+0x133>
jmp    12aa <scopy+0x1aa>
mov    0x2def(%rip),%eax
mov    %eax,-0x28(%rbp)
movl   $0x1,0x2dde(%rip)
mov    0x2dd8(%rip),%eax
cmp    0x2dd6(%rip),%eax
jg     1296 <scopy+0x196>
mov    -0x10(%rbp),%rax
mov    0x2dc2(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
mov    0x2dad(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    0x2d9c(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2d93(%rip)
jmp    1246 <scopy+0x146>
cmpl   $0x7,-0x4(%rbp)
jge    12a5 <scopy+0x1a5>
jmp    1438 <scopy+0x338>
jmp    12aa <scopy+0x1aa>
mov    0x2d78(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2d7b(%rip)
mov    -0x4(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    0x2d6f(%rip),%eax
mov    %eax,0x2d59(%rip)
mov    0x2d53(%rip),%eax
cmp    -0x4(%rbp),%eax
jg     1438 <scopy+0x338>
mov    -0x10(%rbp),%rax
mov    0x2d40(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
mov    0x2d2b(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    0x2d16(%rip),%ecx
add    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
mov    0x2cfe(%rip),%ecx
add    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    0x2ce6(%rip),%ecx
add    $0x2,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
mov    0x2cce(%rip),%ecx
add    $0x2,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    0x2cb6(%rip),%ecx
add    $0x3,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
mov    0x2c9e(%rip),%ecx
add    $0x3,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    0x2c86(%rip),%ecx
add    $0x4,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
mov    0x2c6e(%rip),%ecx
add    $0x4,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    0x2c56(%rip),%ecx
add    $0x5,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
mov    0x2c3e(%rip),%ecx
add    $0x5,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    0x2c26(%rip),%ecx
add    $0x6,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
mov    0x2c0e(%rip),%ecx
add    $0x6,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    0x2bfa(%rip),%eax
add    $0x7,%eax
mov    %eax,0x2bf1(%rip)
jmp    12cb <scopy+0x1cb>
pop    %rbp
ret

x86 assembly (clang, -O2):
<scopy>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %edi,%edi
jle    152d <scopy+0x42d>
cmp    $0x1,%edx
jne    11de <scopy+0xde>
cmp    $0x1,%r8d
jne    11de <scopy+0xde>
mov    %edi,%r9d
imul   $0x24924925,%r9,%rax
shr    $0x20,%rax
mov    %edi,%r11d
sub    %eax,%r11d
shr    %r11d
add    %eax,%r11d
shr    $0x2,%r11d
lea    0x0(,%r11,8),%eax
sub    %eax,%r11d
add    %edi,%r11d
je     14b0 <scopy+0x3b0>
imul   $0x24924925,%r9,%rax
shr    $0x20,%rax
mov    %edi,%r14d
sub    %eax,%r14d
shr    %r14d
add    %eax,%r14d
shr    $0x2,%r14d
lea    0x0(,%r14,8),%eax
sub    %eax,%r14d
add    %edi,%r14d
lea    0x1(%r14),%r8
mov    $0x1,%ebx
cmp    $0x8,%r14d
jb     1434 <scopy+0x334>
lea    (%rsi,%r8,4),%rax
add    $0xfffffffffffffffc,%rax
cmp    %rcx,%rax
jbe    11b1 <scopy+0xb1>
lea    (%rcx,%r8,4),%rax
add    $0xfffffffffffffffc,%rax
cmp    %rsi,%rax
ja     1434 <scopy+0x334>
mov    %r14d,%ebx
and    $0xfffffff8,%ebx
lea    -0x8(%rbx),%rax
mov    %rax,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
mov    %edx,%r10d
and    $0x3,%r10d
cmp    $0x18,%rax
jae    1386 <scopy+0x286>
xor    %eax,%eax
jmp    13e8 <scopy+0x2e8>
mov    $0x1,%ebx
mov    $0x1,%eax
sub    %edi,%eax
mov    %eax,%ebp
imul   %edx,%ebp
add    $0x1,%ebp
test   %edx,%edx
cmovns %ebx,%ebp
movslq %ebp,%r9
imul   %r8d,%eax
add    $0x1,%eax
test   %r8d,%r8d
cmovns %ebx,%eax
movslq %eax,%r12
movslq %edx,%r14
movslq %r8d,%r11
lea    -0x1(%rdi),%ebp
cmp    $0x7,%ebp
jae    1231 <scopy+0x131>
test   $0x1,%dil
jne    131d <scopy+0x21d>
mov    %ebx,%ebp
cmp    %edi,%ebx
jne    133c <scopy+0x23c>
jmp    152d <scopy+0x42d>
cmp    $0x1,%r8d
jne    1218 <scopy+0x118>
cmp    $0x1,%edx
jne    1218 <scopy+0x118>
lea    (%rcx,%r12,4),%rax
add    $0xfffffffffffffffc,%rax
lea    (%r9,%rbp,1),%rdx
lea    (%rsi,%rdx,4),%rdx
cmp    %rdx,%rax
jae    1266 <scopy+0x166>
lea    (%r12,%rbp,1),%rax
lea    (%rcx,%rax,4),%rax
lea    (%rsi,%r9,4),%rdx
add    $0xfffffffffffffffc,%rdx
cmp    %rax,%rdx
jb     1218 <scopy+0x118>
add    $0x1,%rbp
mov    %rbp,-0x10(%rsp)
mov    %rbp,%rax
and    $0xfffffffffffffff8,%rax
mov    %rax,-0x8(%rsp)
add    $0xfffffffffffffff8,%rax
mov    %rax,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
test   %rax,%rax
mov    %rdx,-0x18(%rsp)
je     1538 <scopy+0x438>
movabs $0x3ffffffffffffffc,%rbx
ff ff 3f
or     $0x2,%rbx
and    %rdx,%rbx
mov    %r11,%r13
shl    $0x5,%r13
lea    (%rcx,%r12,4),%rax
add    $0xc,%rax
mov    %r11,%rbp
shl    $0x6,%rbp
mov    %r14,%r10
shl    $0x5,%r10
lea    (%rsi,%r9,4),%r8
mov    %r14,%r15
shl    $0x6,%r15
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups -0x4(%r8),%xmm0
movups 0xc(%r8),%xmm1
movups %xmm0,-0x10(%rax)
movups %xmm1,(%rax)
movups -0x4(%r8,%r10,1),%xmm0
movups 0xc(%r8,%r10,1),%xmm1
movups %xmm0,-0x10(%rax,%r13,1)
movups %xmm1,(%rax,%r13,1)
add    $0x10,%rdx
add    %rbp,%rax
add    %r15,%r8
add    $0xfffffffffffffffe,%rbx
jne    12e0 <scopy+0x1e0>
jmp    153a <scopy+0x43a>
movss  -0x4(%rsi,%r9,4),%xmm0
movss  %xmm0,-0x4(%rcx,%r12,4)
add    %r14,%r9
add    %r11,%r12
lea    0x1(%rbx),%ebp
cmp    %edi,%ebx
je     152d <scopy+0x42d>
add    $0xfffffffffffffffc,%rcx
lea    (%r12,%r11,1),%rax
shl    $0x3,%r11
add    $0xfffffffffffffffc,%rsi
lea    (%r9,%r14,1),%rdx
shl    $0x3,%r14
sub    %ebp,%edi
add    $0x1,%edi
nopl   0x0(%rax)
movss  (%rsi,%r9,4),%xmm0
movss  %xmm0,(%rcx,%r12,4)
movss  (%rsi,%rdx,4),%xmm0
movss  %xmm0,(%rcx,%rax,4)
add    %r11,%rcx
add    %r14,%rsi
add    $0xfffffffe,%edi
jne    1360 <scopy+0x260>
jmp    152d <scopy+0x42d>
and    $0xfffffffffffffffc,%rdx
xor    %eax,%eax
nopl   0x0(%rax)
movups (%rsi,%rax,4),%xmm0
movups 0x10(%rsi,%rax,4),%xmm1
movups %xmm0,(%rcx,%rax,4)
movups %xmm1,0x10(%rcx,%rax,4)
movups 0x20(%rsi,%rax,4),%xmm0
movups 0x30(%rsi,%rax,4),%xmm1
movups %xmm0,0x20(%rcx,%rax,4)
movups %xmm1,0x30(%rcx,%rax,4)
movups 0x40(%rsi,%rax,4),%xmm0
movups 0x50(%rsi,%rax,4),%xmm1
movups %xmm0,0x40(%rcx,%rax,4)
movups %xmm1,0x50(%rcx,%rax,4)
movups 0x60(%rsi,%rax,4),%xmm0
movups 0x70(%rsi,%rax,4),%xmm1
movups %xmm0,0x60(%rcx,%rax,4)
movups %xmm1,0x70(%rcx,%rax,4)
add    $0x20,%rax
add    $0xfffffffffffffffc,%rdx
jne    1390 <scopy+0x290>
test   %r10,%r10
je     142b <scopy+0x32b>
lea    (%rcx,%rax,4),%rdx
add    $0x10,%rdx
lea    (%rsi,%rax,4),%rax
add    $0x10,%rax
shl    $0x5,%r10
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups -0x10(%rax,%rbp,1),%xmm0
movups (%rax,%rbp,1),%xmm1
movups %xmm0,-0x10(%rdx,%rbp,1)
movups %xmm1,(%rdx,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%r10
jne    1410 <scopy+0x310>
cmp    %rbx,%r14
je     14a7 <scopy+0x3a7>
or     $0x1,%rbx
mov    %r8d,%edx
sub    %ebx,%edx
mov    %rbx,%rax
not    %rax
add    %r8,%rax
and    $0x3,%rdx
je     1466 <scopy+0x366>
shl    $0x2,%rdx
nopl   0x0(%rax)
movss  -0x4(%rsi,%rbx,4),%xmm0
movss  %xmm0,-0x4(%rcx,%rbx,4)
add    $0x1,%rbx
add    $0xfffffffffffffffc,%rdx
jne    1450 <scopy+0x350>
cmp    $0x3,%rax
jb     14a7 <scopy+0x3a7>
nopl   0x0(%rax)
movss  -0x4(%rsi,%rbx,4),%xmm0
movss  %xmm0,-0x4(%rcx,%rbx,4)
movss  (%rsi,%rbx,4),%xmm0
movss  %xmm0,(%rcx,%rbx,4)
movss  0x4(%rsi,%rbx,4),%xmm0
movss  %xmm0,0x4(%rcx,%rbx,4)
movss  0x8(%rsi,%rbx,4),%xmm0
movss  %xmm0,0x8(%rcx,%rbx,4)
add    $0x4,%rbx
cmp    %rbx,%r8
jne    1470 <scopy+0x370>
cmp    $0x7,%edi
jl     152d <scopy+0x42d>
cmp    %edi,%r11d
jge    152d <scopy+0x42d>
mov    %r11d,%eax
add    $0x6,%rax
nopl   0x0(%rax)
lea    -0x5(%rax),%edx
movss  -0x18(%rsi,%rax,4),%xmm0
movss  %xmm0,-0x18(%rcx,%rax,4)
movss  (%rsi,%rdx,4),%xmm0
movss  %xmm0,(%rcx,%rdx,4)
lea    -0x4(%rax),%edx
movss  (%rsi,%rdx,4),%xmm0
movss  %xmm0,(%rcx,%rdx,4)
lea    -0x3(%rax),%edx
movss  (%rsi,%rdx,4),%xmm0
movss  %xmm0,(%rcx,%rdx,4)
lea    -0x2(%rax),%edx
movss  (%rsi,%rdx,4),%xmm0
movss  %xmm0,(%rcx,%rdx,4)
lea    -0x1(%rax),%edx
movss  (%rsi,%rdx,4),%xmm0
movss  %xmm0,(%rcx,%rdx,4)
mov    %eax,%edx
shl    $0x2,%rdx
movss  (%rsi,%rdx,1),%xmm0
movss  %xmm0,(%rcx,%rdx,1)
lea    0x7(%rax),%rdx
add    $0x2,%rax
cmp    %r9,%rax
mov    %rdx,%rax
jbe    14c0 <scopy+0x3c0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %edx,%edx
testb  $0x1,-0x18(%rsp)
je     1566 <scopy+0x466>
mov    %rdx,%rax
imul   %r11,%rax
add    %r12,%rax
imul   %r14,%rdx
add    %r9,%rdx
movups -0x4(%rsi,%rdx,4),%xmm0
movups 0xc(%rsi,%rdx,4),%xmm1
movups %xmm0,-0x4(%rcx,%rax,4)
movups %xmm1,0xc(%rcx,%rax,4)
mov    -0x8(%rsp),%rbx
cmp    %rbx,-0x10(%rsp)
je     152d <scopy+0x42d>
mov    %rbx,%rax
imul   %r11,%rax
mov    %rbx,%rdx
imul   %r14,%rdx
add    %rax,%r12
add    %rdx,%r9
or     $0x1,%ebx
jmp    1218 <scopy+0x118>

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

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