void c_cswap(const int N, void *X, const int strideX, void *Y,
             const int strideY) {
  float *x = (float *)X;
  float *y = (float *)Y;
  float tmp;
  int ix;
  int iy;
  int i;
  int j;
  if (N <= 0) {
    return;
  }
  if (strideX == 1 && strideY == 1) {
    for (i = 0; i < N * 2; i += 2) {
      tmp = x[i];
      x[i] = y[i];
      y[i] = tmp;
      j = i + 1;
      tmp = x[j];
      x[j] = y[j];
      y[j] = tmp;
    }
    return;
  }
  if (strideX < 0) {
    ix = 2 * (1 - N) * strideX;
  } else {
    ix = 0;
  }
  if (strideY < 0) {
    iy = 2 * (1 - N) * strideY;
  } else {
    iy = 0;
  }
  for (i = 0; i < N; i++) {
    tmp = x[ix];
    x[ix] = y[iy];
    y[iy] = tmp;
    tmp = x[ix + 1];
    x[ix + 1] = y[iy + 1];
    y[iy + 1] = tmp;
    ix += strideX * 2;
    iy += strideY * 2;
  }
  return;
}


x86 assembly (clang, -O0):
<c_cswap>:
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)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     1135 <c_cswap+0x35>
jmp    1317 <c_cswap+0x217>
cmpl   $0x1,-0x14(%rbp)
jne    11f9 <c_cswap+0xf9>
cmpl   $0x1,-0x24(%rbp)
jne    11f9 <c_cswap+0xf9>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
cmp    %ecx,%eax
jge    11f4 <c_cswap+0xf4>
mov    -0x30(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x3c(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x3c(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x48(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x48(%rbp)
jmp    1150 <c_cswap+0x50>
jmp    1317 <c_cswap+0x217>
cmpl   $0x0,-0x14(%rbp)
jge    121a <c_cswap+0x11a>
mov    $0x1,%eax
sub    -0x4(%rbp),%eax
shl    $0x1,%eax
imul   -0x14(%rbp),%eax
mov    %eax,-0x40(%rbp)
jmp    1221 <c_cswap+0x121>
movl   $0x0,-0x40(%rbp)
cmpl   $0x0,-0x24(%rbp)
jge    1242 <c_cswap+0x142>
mov    $0x1,%eax
sub    -0x4(%rbp),%eax
shl    $0x1,%eax
imul   -0x24(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    1249 <c_cswap+0x149>
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1312 <c_cswap+0x212>
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x44(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x3c(%rbp),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x44(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x3c(%rbp),%xmm0
mov    -0x38(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
shl    $0x1,%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x24(%rbp),%eax
shl    $0x1,%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1250 <c_cswap+0x150>
jmp    1317 <c_cswap+0x217>
pop    %rbp
ret

x86 assembly (clang, -O2):
<c_cswap>:
test   %edi,%edi
jle    12b5 <c_cswap+0x1b5>
cmp    $0x1,%edx
jne    1140 <c_cswap+0x40>
cmp    $0x1,%r8d
jne    1140 <c_cswap+0x40>
add    %edi,%edi
movslq %edi,%r10
cmp    $0x3,%r10
mov    $0x2,%eax
mov    $0x2,%r9d
cmovge %r10,%r9
add    $0xffffffffffffffff,%r9
cmp    $0x1,%r9
jne    11c4 <c_cswap+0xc4>
xor    %edx,%edx
jmp    1280 <c_cswap+0x180>
mov    $0x2,%eax
sub    %edi,%eax
sub    %edi,%eax
mov    %eax,%r9d
imul   %r8d,%r9d
mov    %r8d,%r10d
sar    $0x1f,%r10d
and    %r9d,%r10d
imul   %edx,%eax
mov    %edx,%r9d
sar    $0x1f,%r9d
and    %eax,%r9d
add    %edx,%edx
add    %r8d,%r8d
movslq %r10d,%r10
movslq %r8d,%rax
movslq %r9d,%r8
movslq %edx,%rdx
lea    (%rsi,%r8,4),%rsi
add    $0x4,%rsi
shl    $0x2,%rdx
lea    (%rcx,%r10,4),%rcx
add    $0x4,%rcx
shl    $0x2,%rax
movss  -0x4(%rsi),%xmm0
movss  -0x4(%rcx),%xmm1
movss  %xmm1,-0x4(%rsi)
movss  %xmm0,-0x4(%rcx)
movss  (%rsi),%xmm0
movss  (%rcx),%xmm1
movss  %xmm1,(%rsi)
movss  %xmm0,(%rcx)
add    %rdx,%rsi
add    %rax,%rcx
add    $0xffffffff,%edi
jne    1190 <c_cswap+0x90>
jmp    12b5 <c_cswap+0x1b5>
cmp    $0x3,%r10
cmovge %r10,%rax
lea    (%rcx,%rax,4),%rdx
cmp    %rsi,%rdx
jbe    11e5 <c_cswap+0xe5>
lea    (%rsi,%rax,4),%rax
cmp    %rcx,%rax
jbe    11e5 <c_cswap+0xe5>
xor    %edx,%edx
jmp    1280 <c_cswap+0x180>
shr    %r9
add    $0x1,%r9
movabs $0x7ffffffffffffffe,%rdx
ff ff 7f
and    %r9,%rdx
lea    -0x2(%rdx),%rax
mov    %rax,%r8
shr    %r8
add    $0x1,%r8
test   %rax,%rax
je     12b6 <c_cswap+0x1b6>
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
xor    %edi,%edi
nopl   0x0(%rax)
movups (%rsi,%rdi,4),%xmm0
movups (%rcx,%rdi,4),%xmm1
movups %xmm1,(%rsi,%rdi,4)
movups %xmm0,(%rcx,%rdi,4)
movups 0x10(%rsi,%rdi,4),%xmm0
movups 0x10(%rcx,%rdi,4),%xmm1
movups %xmm1,0x10(%rsi,%rdi,4)
movups %xmm0,0x10(%rcx,%rdi,4)
add    $0x8,%rdi
add    $0xfffffffffffffffe,%rax
jne    1220 <c_cswap+0x120>
test   $0x1,%r8b
je     1272 <c_cswap+0x172>
lea    0x0(,%rdi,4),%rax
movups (%rsi,%rdi,4),%xmm0
movups (%rcx,%rdi,4),%xmm1
or     $0x4,%rax
movups %xmm1,-0x4(%rsi,%rax,1)
movups %xmm0,-0x4(%rcx,%rax,1)
cmp    %rdx,%r9
je     12b5 <c_cswap+0x1b5>
add    %rdx,%rdx
nopw   0x0(%rax,%rax,1)
movss  (%rsi,%rdx,4),%xmm0
movss  (%rcx,%rdx,4),%xmm1
movss  %xmm1,(%rsi,%rdx,4)
movss  %xmm0,(%rcx,%rdx,4)
movss  0x4(%rsi,%rdx,4),%xmm0
movss  0x4(%rcx,%rdx,4),%xmm1
movss  %xmm1,0x4(%rsi,%rdx,4)
movss  %xmm0,0x4(%rcx,%rdx,4)
add    $0x2,%rdx
cmp    %r10,%rdx
jl     1280 <c_cswap+0x180>
ret
xor    %edi,%edi
test   $0x1,%r8b
jne    1254 <c_cswap+0x154>
jmp    1272 <c_cswap+0x172>

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

LLVM IR (-O2):
define void @c_cswap(i32 %0, i8* nocapture %1, i32 %2, i8* nocapture %3, i32 %4) {
%6 = bitcast i8* %1 to float*
%7 = bitcast i8* %3 to float*
%8 = icmp slt i32 %0, 1
br i1 %8, label %149, label %9
9: ; preds = %5
%10 = icmp eq i32 %2, 1
%11 = icmp eq i32 %4, 1
%12 = and i1 %10, %11
br i1 %12, label %13, label %116
13: ; preds = %9
%14 = shl nuw nsw i32 %0, 1
%15 = sext i32 %14 to i64
%16 = call i64 @llvm.smax.i64(i64 %15, i64 2)
%17 = add nsw i64 %16, -1
%18 = lshr i64 %17, 1
%19 = add nuw nsw i64 %18, 1
%20 = icmp eq i64 %17, 1
br i1 %20, label %101, label %21
21: ; preds = %13
%22 = call i64 @llvm.smax.i64(i64 %15, i64 2)
%23 = shl i64 %22, 2
%24 = getelementptr i8, i8* %1, i64 %23
%25 = getelementptr i8, i8* %3, i64 %23
%26 = icmp ugt i8* %25, %1
%27 = icmp ugt i8* %24, %3
%28 = and i1 %26, %27
br i1 %28, label %101, label %29
29: ; preds = %21
%30 = and i64 %19, 9223372036854775806
%31 = shl nuw i64 %30, 1
%32 = add nsw i64 %30, -2
%33 = lshr exact i64 %32, 1
%34 = add nuw i64 %33, 1
%35 = and i64 %34, 1
%36 = icmp eq i64 %32, 0
br i1 %36, label %80, label %37
37: ; preds = %29
%38 = and i64 %34, -2
%39 = getelementptr inbounds i8, i8* %1, i64 -4
%40 = bitcast i8* %39 to float*
%41 = getelementptr inbounds i8, i8* %3, i64 -4
%42 = bitcast i8* %41 to float*
%43 = getelementptr inbounds i8, i8* %1, i64 -4
%44 = bitcast i8* %43 to float*
%45 = getelementptr inbounds i8, i8* %3, i64 -4
%46 = bitcast i8* %45 to float*
br label %47
47: ; preds = %47, %37
%48 = phi i64 [ 0, %37 ], [ %75, %47 ]
%49 = phi i64 [ 0, %37 ], [ %76, %47 ]
%50 = shl i64 %48, 1
%51 = getelementptr inbounds float, float* %6, i64 %50
%52 = bitcast float* %51 to <4 x float>*
%53 = load <4 x float>, <4 x float>* %52
%54 = getelementptr inbounds float, float* %7, i64 %50
%55 = bitcast float* %54 to <4 x float>*
%56 = load <4 x float>, <4 x float>* %55
%57 = or i64 %50, 1
%58 = getelementptr inbounds float, float* %40, i64 %57
%59 = bitcast float* %58 to <4 x float>*
store <4 x float> %56, <4 x float>* %59
%60 = getelementptr inbounds float, float* %42, i64 %57
%61 = bitcast float* %60 to <4 x float>*
store <4 x float> %53, <4 x float>* %61
%62 = shl i64 %48, 1
%63 = or i64 %62, 4
%64 = getelementptr inbounds float, float* %6, i64 %63
%65 = bitcast float* %64 to <4 x float>*
%66 = load <4 x float>, <4 x float>* %65
%67 = getelementptr inbounds float, float* %7, i64 %63
%68 = bitcast float* %67 to <4 x float>*
%69 = load <4 x float>, <4 x float>* %68
%70 = or i64 %62, 5
%71 = getelementptr inbounds float, float* %44, i64 %70
%72 = bitcast float* %71 to <4 x float>*
store <4 x float> %69, <4 x float>* %72
%73 = getelementptr inbounds float, float* %46, i64 %70
%74 = bitcast float* %73 to <4 x float>*
store <4 x float> %66, <4 x float>* %74
%75 = add nuw i64 %48, 4
%76 = add nuw i64 %49, 2
%77 = icmp eq i64 %76, %38
br i1 %77, label %78, label %47
78: ; preds = %47
%79 = shl i64 %75, 1
br label %80
80: ; preds = %78, %29
%81 = phi i64 [ 0, %29 ], [ %79, %78 ]
%82 = icmp eq i64 %35, 0
br i1 %82, label %99, label %83
83: ; preds = %80
%84 = getelementptr inbounds float, float* %6, i64 %81
%85 = bitcast float* %84 to <4 x float>*
%86 = load <4 x float>, <4 x float>* %85
%87 = getelementptr inbounds float, float* %7, i64 %81
%88 = bitcast float* %87 to <4 x float>*
%89 = load <4 x float>, <4 x float>* %88
%90 = or i64 %81, 1
%91 = getelementptr inbounds i8, i8* %1, i64 -4
%92 = bitcast i8* %91 to float*
%93 = getelementptr inbounds i8, i8* %3, i64 -4
%94 = bitcast i8* %93 to float*
%95 = getelementptr inbounds float, float* %92, i64 %90
%96 = bitcast float* %95 to <4 x float>*
store <4 x float> %89, <4 x float>* %96
%97 = getelementptr inbounds float, float* %94, i64 %90
%98 = bitcast float* %97 to <4 x float>*
store <4 x float> %86, <4 x float>* %98
br label %99
99: ; preds = %80, %83
%100 = icmp eq i64 %19, %30
br i1 %100, label %149, label %101
101: ; preds = %21, %13, %99
%102 = phi i64 [ 0, %21 ], [ 0, %13 ], [ %31, %99 ]
br label %103
103: ; preds = %101, %103
%104 = phi i64 [ %114, %103 ], [ %102, %101 ]
%105 = getelementptr inbounds float, float* %6, i64 %104
%106 = load float, float* %105
%107 = getelementptr inbounds float, float* %7, i64 %104
%108 = load float, float* %107
store float %108, float* %105
store float %106, float* %107
%109 = or i64 %104, 1
%110 = getelementptr inbounds float, float* %6, i64 %109
%111 = load float, float* %110
%112 = getelementptr inbounds float, float* %7, i64 %109
%113 = load float, float* %112
store float %113, float* %110
store float %111, float* %112
%114 = add nuw nsw i64 %104, 2
%115 = icmp slt i64 %114, %15
br i1 %115, label %103, label %149
116: ; preds = %9
%117 = mul i32 %0, -2
%118 = add i32 %117, 2
%119 = icmp slt i32 %4, 0
%120 = mul nsw i32 %118, %4
%121 = select i1 %119, i32 %120, i32 0
%122 = icmp slt i32 %2, 0
%123 = mul nsw i32 %118, %2
%124 = select i1 %122, i32 %123, i32 0
%125 = shl i32 %2, 1
%126 = shl i32 %4, 1
%127 = sext i32 %121 to i64
%128 = sext i32 %126 to i64
%129 = sext i32 %124 to i64
%130 = sext i32 %125 to i64
br label %131
131: ; preds = %116, %131
%132 = phi i64 [ %129, %116 ], [ %145, %131 ]
%133 = phi i64 [ %127, %116 ], [ %146, %131 ]
%134 = phi i32 [ 0, %116 ], [ %147, %131 ]
%135 = getelementptr inbounds float, float* %6, i64 %132
%136 = load float, float* %135
%137 = getelementptr inbounds float, float* %7, i64 %133
%138 = load float, float* %137
store float %138, float* %135
store float %136, float* %137
%139 = or i64 %132, 1
%140 = getelementptr inbounds float, float* %6, i64 %139
%141 = load float, float* %140
%142 = or i64 %133, 1
%143 = getelementptr inbounds float, float* %7, i64 %142
%144 = load float, float* %143
store float %144, float* %140
store float %141, float* %143
%145 = add i64 %132, %130
%146 = add i64 %133, %128
%147 = add nuw nsw i32 %134, 1
%148 = icmp eq i32 %147, %0
br i1 %148, label %149, label %131
149: ; preds = %131, %103, %99, %5
ret void
}