int odswap(int *n, double *dx, int *incx, double *dy, int *incy) {
  int i__1;
  int i__, m, ix, iy, mp1;
  double dtemp;
  --dy;
  --dx;
  if (*n <= 0) {
    return 0;
  }
  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__ <= i__1; ++i__) {
    dtemp = dx[ix];
    dx[ix] = dy[iy];
    dy[iy] = dtemp;
    ix += *incx;
    iy += *incy;
  }
  return 0;
L20:
  m = *n % 3;
  if (m == 0) {
    goto L40;
  }
  i__1 = m;
  for (i__ = 1; i__ <= i__1; ++i__) {
    dtemp = dx[i__];
    dx[i__] = dy[i__];
    dy[i__] = dtemp;
  }
  if (*n < 3) {
    return 0;
  }
L40:
  mp1 = m + 1;
  i__1 = *n;
  for (i__ = mp1; i__ <= i__1; i__ += 3) {
    dtemp = dx[i__];
    dx[i__] = dy[i__];
    dy[i__] = dtemp;
    dtemp = dx[i__ + 1];
    dx[i__ + 1] = dy[i__ + 1];
    dy[i__ + 1] = dtemp;
    dtemp = dx[i__ + 2];
    dx[i__ + 2] = dy[i__ + 2];
    dy[i__ + 2] = dtemp;
  }
  return 0;
}


x86 assembly (clang, -O0):
<odswap>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,(%rax)
jg     1149 <odswap+0x49>
movl   $0x0,-0x4(%rbp)
jmp    140a <odswap+0x30a>
mov    -0x20(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1168 <odswap+0x68>
mov    -0x30(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1168 <odswap+0x68>
jmp    124c <odswap+0x14c>
movl   $0x1,-0x40(%rbp)
movl   $0x1,-0x44(%rbp)
mov    -0x20(%rbp),%rax
cmpl   $0x0,(%rax)
jge    119b <odswap+0x9b>
mov    -0x10(%rbp),%rcx
xor    %eax,%eax
sub    (%rcx),%eax
add    $0x1,%eax
mov    -0x20(%rbp),%rcx
imul   (%rcx),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
cmpl   $0x0,(%rax)
jge    11c0 <odswap+0xc0>
mov    -0x10(%rbp),%rcx
xor    %eax,%eax
sub    (%rcx),%eax
add    $0x1,%eax
mov    -0x30(%rbp),%rcx
imul   (%rcx),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     1240 <odswap+0x140>
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11d0 <odswap+0xd0>
movl   $0x0,-0x4(%rbp)
jmp    140a <odswap+0x30a>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    %edx,-0x3c(%rbp)
cmpl   $0x0,-0x3c(%rbp)
jne    126c <odswap+0x16c>
jmp    12ef <odswap+0x1ef>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x34(%rbp)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     12d1 <odswap+0x1d1>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1279 <odswap+0x179>
mov    -0x10(%rbp),%rax
cmpl   $0x3,(%rax)
jge    12ea <odswap+0x1ea>
movl   $0x0,-0x4(%rbp)
jmp    140a <odswap+0x30a>
jmp    12ef <odswap+0x1ef>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     1403 <odswap+0x303>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x38(%rbp)
jmp    1307 <odswap+0x207>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<odswap>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    (%rdi),%r9d
test   %r9d,%r9d
jle    159d <odswap+0x49d>
lea    -0x8(%rcx),%rdi
lea    -0x8(%rsi),%rax
movslq (%rdx),%r10
cmp    $0x1,%r10
jne    122f <odswap+0x12f>
mov    (%r8),%edx
cmp    $0x1,%edx
jne    1253 <odswap+0x153>
mov    %r9d,%ebx
mov    $0xaaaaaaab,%ebp
mov    %rbx,%rdx
imul   %rbp,%rdx
shr    $0x21,%rdx
lea    (%rdx,%rdx,2),%edx
mov    %r9d,%r8d
sub    %edx,%r8d
je     12d2 <odswap+0x1d2>
imul   %rbp,%rbx
shr    $0x21,%rbx
lea    (%rbx,%rbx,2),%edx
mov    %r9d,%r10d
sub    %edx,%r10d
lea    0x1(%r10),%r11
mov    $0x1,%edx
cmp    $0x4,%r10d
jb     14d7 <odswap+0x3d7>
lea    (%rcx,%r11,8),%rbx
add    $0xfffffffffffffff8,%rbx
cmp    %rsi,%rbx
jbe    119b <odswap+0x9b>
lea    (%rsi,%r11,8),%rbx
add    $0xfffffffffffffff8,%rbx
cmp    %rcx,%rbx
ja     14d7 <odswap+0x3d7>
mov    %r10d,%edx
and    $0xfffffffc,%edx
lea    -0x4(%rdx),%rbx
mov    %rbx,%r14
shr    $0x2,%r14
add    $0x1,%r14
test   %rbx,%rbx
je     149f <odswap+0x39f>
mov    %r14,%rbp
and    $0xfffffffffffffffe,%rbp
mov    $0x6,%ebx
cs nopw 0x0(%rax,%rax,1)
nop
movups -0x30(%rsi,%rbx,8),%xmm0
movups -0x20(%rsi,%rbx,8),%xmm1
movups -0x30(%rcx,%rbx,8),%xmm2
movups -0x20(%rcx,%rbx,8),%xmm3
movups %xmm2,-0x30(%rsi,%rbx,8)
movups %xmm3,-0x20(%rsi,%rbx,8)
movups %xmm0,-0x30(%rcx,%rbx,8)
movups %xmm1,-0x20(%rcx,%rbx,8)
movups -0x10(%rsi,%rbx,8),%xmm0
movups (%rsi,%rbx,8),%xmm1
movups -0x10(%rcx,%rbx,8),%xmm2
movups (%rcx,%rbx,8),%xmm3
movups %xmm2,-0x10(%rsi,%rbx,8)
movups %xmm3,(%rsi,%rbx,8)
movups %xmm0,-0x10(%rcx,%rbx,8)
movups %xmm1,(%rcx,%rbx,8)
add    $0x8,%rbx
add    $0xfffffffffffffffe,%rbp
jne    11d0 <odswap+0xd0>
add    $0xfffffffffffffffb,%rbx
jmp    14a4 <odswap+0x3a4>
mov    $0x1,%edx
mov    $0x1,%ebp
sub    %r9d,%ebp
mov    %r10d,%ebx
imul   %ebp,%ebx
add    $0x1,%ebx
test   %r10d,%r10d
cmovns %edx,%ebx
mov    (%r8),%edx
movslq %ebx,%r8
jmp    1261 <odswap+0x161>
mov    $0x1,%ebp
sub    %r9d,%ebp
mov    $0x1,%r8d
imul   %edx,%ebp
add    $0x1,%ebp
test   %edx,%edx
mov    $0x1,%r11d
cmovns %r11d,%ebp
movslq %ebp,%r13
movslq %edx,%r15
lea    -0x1(%r9),%ebx
cmp    $0x3,%ebx
jb     12b7 <odswap+0x1b7>
cmp    $0x1,%r10d
jne    12b7 <odswap+0x1b7>
cmp    $0x1,%edx
jne    12b7 <odswap+0x1b7>
lea    (%rsi,%r8,8),%rdx
add    $0xfffffffffffffff8,%rdx
lea    (%rbx,%r13,1),%rbp
lea    (%rcx,%rbp,8),%rbp
cmp    %rbp,%rdx
jae    12dd <odswap+0x1dd>
lea    (%r8,%rbx,1),%rdx
lea    (%rsi,%rdx,8),%rdx
lea    (%rcx,%r13,8),%rbp
add    $0xfffffffffffffff8,%rbp
cmp    %rdx,%rbp
jae    12dd <odswap+0x1dd>
test   $0x1,%r9b
jne    140a <odswap+0x30a>
mov    %r11d,%esi
cmp    %r11d,%r9d
jne    1435 <odswap+0x335>
jmp    159d <odswap+0x49d>
mov    $0x1,%r8d
jmp    1544 <odswap+0x444>
add    $0x1,%rbx
mov    %rbx,%rdx
and    $0xfffffffffffffffc,%rdx
lea    -0x4(%rdx),%r11
mov    %r11,%rbp
shr    $0x2,%rbp
add    $0x1,%rbp
test   %r11,%r11
mov    %rdx,-0x8(%rsp)
mov    %rbx,-0x10(%rsp)
mov    %rbp,-0x18(%rsp)
je     148d <odswap+0x38d>
mov    %rbp,%rbx
and    $0xfffffffffffffffe,%rbx
mov    %r10,%rdx
shl    $0x5,%rdx
lea    (%rsi,%r8,8),%rsi
add    $0x8,%rsi
mov    %r10,%rbp
shl    $0x6,%rbp
mov    %r15,%r11
shl    $0x5,%r11
lea    (%rcx,%r13,8),%r14
mov    %r15,%r12
shl    $0x6,%r12
xor    %ecx,%ecx
movups -0x10(%rsi),%xmm0
movups (%rsi),%xmm1
movups -0x8(%r14),%xmm2
movups 0x8(%r14),%xmm3
movups %xmm2,-0x10(%rsi)
movups %xmm3,(%rsi)
movups %xmm0,-0x8(%r14)
movups %xmm1,0x8(%r14)
movups -0x10(%rsi,%rdx,1),%xmm0
movups (%rsi,%rdx,1),%xmm1
movups -0x8(%r14,%r11,1),%xmm2
movups 0x8(%r14,%r11,1),%xmm3
movups %xmm2,-0x10(%rsi,%rdx,1)
movups %xmm3,(%rsi,%rdx,1)
movups %xmm0,-0x8(%r14,%r11,1)
movups %xmm1,0x8(%r14,%r11,1)
add    $0x8,%rcx
add    %rbp,%rsi
add    %r12,%r14
add    $0xfffffffffffffffe,%rbx
jne    1340 <odswap+0x240>
testb  $0x1,-0x18(%rsp)
je     13d8 <odswap+0x2d8>
mov    %rcx,%rdx
imul   %r10,%rdx
add    %r8,%rdx
imul   %r15,%rcx
add    %r13,%rcx
movups (%rax,%rdx,8),%xmm0
movups 0x10(%rax,%rdx,8),%xmm1
movups (%rdi,%rcx,8),%xmm2
movups 0x10(%rdi,%rcx,8),%xmm3
movups %xmm2,(%rax,%rdx,8)
movups %xmm3,0x10(%rax,%rdx,8)
movups %xmm0,(%rdi,%rcx,8)
movups %xmm1,0x10(%rdi,%rcx,8)
mov    -0x8(%rsp),%r11
cmp    %r11,-0x10(%rsp)
je     159d <odswap+0x49d>
mov    %r11,%rcx
imul   %r10,%rcx
mov    %r11,%rdx
imul   %r15,%rdx
add    %rcx,%r8
add    %rdx,%r13
or     $0x1,%r11d
test   $0x1,%r9b
je     12c1 <odswap+0x1c1>
movsd  (%rax,%r8,8),%xmm0
movsd  (%rdi,%r13,8),%xmm1
movsd  %xmm1,(%rax,%r8,8)
movsd  %xmm0,(%rdi,%r13,8)
add    %r10,%r8
add    %r15,%r13
lea    0x1(%r11),%esi
cmp    %r11d,%r9d
je     159d <odswap+0x49d>
lea    (%r8,%r10,1),%rcx
shl    $0x4,%r10
lea    (%r15,%r13,1),%rdx
shl    $0x4,%r15
sub    %esi,%r9d
add    $0x1,%r9d
nopl   0x0(%rax)
movsd  (%rax,%r8,8),%xmm0
movsd  (%rdi,%r13,8),%xmm1
movsd  %xmm1,(%rax,%r8,8)
movsd  %xmm0,(%rdi,%r13,8)
movsd  (%rax,%rcx,8),%xmm0
movsd  (%rdi,%rdx,8),%xmm1
movsd  %xmm1,(%rax,%rcx,8)
movsd  %xmm0,(%rdi,%rdx,8)
add    %r10,%rax
add    %r15,%rdi
add    $0xfffffffe,%r9d
jne    1450 <odswap+0x350>
jmp    159d <odswap+0x49d>
xor    %ecx,%ecx
testb  $0x1,-0x18(%rsp)
jne    13a3 <odswap+0x2a3>
jmp    13d8 <odswap+0x2d8>
mov    $0x1,%ebx
test   $0x1,%r14b
je     14ce <odswap+0x3ce>
movups (%rax,%rbx,8),%xmm0
movups 0x10(%rax,%rbx,8),%xmm1
movups (%rdi,%rbx,8),%xmm2
movups 0x10(%rdi,%rbx,8),%xmm3
movups %xmm2,(%rax,%rbx,8)
movups %xmm3,0x10(%rax,%rbx,8)
movups %xmm0,(%rdi,%rbx,8)
movups %xmm1,0x10(%rdi,%rbx,8)
cmp    %rdx,%r10
je     1535 <odswap+0x435>
or     $0x1,%rdx
mov    %rdx,%rbp
not    %rbp
test   $0x1,%r11b
jne    14fb <odswap+0x3fb>
movsd  (%rax,%rdx,8),%xmm0
movsd  (%rdi,%rdx,8),%xmm1
movsd  %xmm1,(%rax,%rdx,8)
movsd  %xmm0,(%rdi,%rdx,8)
add    $0x1,%rdx
add    %r11,%rbp
je     1535 <odswap+0x435>
movsd  -0x8(%rsi,%rdx,8),%xmm0
movsd  -0x8(%rcx,%rdx,8),%xmm1
movsd  %xmm1,-0x8(%rsi,%rdx,8)
movsd  %xmm0,-0x8(%rcx,%rdx,8)
movsd  (%rsi,%rdx,8),%xmm0
movsd  (%rcx,%rdx,8),%xmm1
movsd  %xmm1,(%rsi,%rdx,8)
movsd  %xmm0,(%rcx,%rdx,8)
add    $0x2,%rdx
cmp    %rdx,%r11
jne    1500 <odswap+0x400>
cmp    $0x3,%r9d
jl     159d <odswap+0x49d>
cmp    %r9d,%r8d
jge    159d <odswap+0x49d>
add    $0x1,%r8d
mov    %r8d,%eax
nopw   0x0(%rax,%rax,1)
movsd  -0x8(%rsi,%rax,8),%xmm0
movsd  -0x8(%rcx,%rax,8),%xmm1
movsd  %xmm1,-0x8(%rsi,%rax,8)
movsd  %xmm0,-0x8(%rcx,%rax,8)
movsd  (%rsi,%rax,8),%xmm0
movsd  (%rcx,%rax,8),%xmm1
movsd  %xmm1,(%rsi,%rax,8)
movsd  %xmm0,(%rcx,%rax,8)
movsd  0x8(%rsi,%rax,8),%xmm0
movsd  0x8(%rcx,%rax,8),%xmm1
movsd  %xmm1,0x8(%rsi,%rax,8)
movsd  %xmm0,0x8(%rcx,%rax,8)
add    $0x3,%rax
cmp    %eax,%r9d
jge    1550 <odswap+0x450>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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