void rearrange(v1, v2) float v1[675][675][2], v2[675][675][2];
{
  int i, j;
  for (i = 0; i < 675; i++)
    for (j = 0; j < 675; j++) {
      if (v1[i][j][0] != 100.0 && v1[i][j][1] != 100.0) {
        v2[i][j][0] = v1[i][j][1];
        v2[i][j][1] = -v1[i][j][0];
      } else {
        v2[i][j][0] = 100.0;
        v2[i][j][1] = 100.0;
      }
    }
}


x86 assembly (clang, -O0):
<rearrange>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x2a3,-0x14(%rbp)
jge    129a <rearrange+0x19a>
movl   $0x0,-0x18(%rbp)
cmpl   $0x2a3,-0x18(%rbp)
jge    1287 <rearrange+0x187>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x1518,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,8),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xea5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1170 <rearrange+0x70>
jp     1170 <rearrange+0x70>
jmp    122d <rearrange+0x12d>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x1518,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movss  0x4(%rax,%rcx,8),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe68(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11ad <rearrange+0xad>
jp     11ad <rearrange+0xad>
jmp    122d <rearrange+0x12d>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x1518,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movss  0x4(%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x1518,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x1518,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movss  (%rax,%rcx,8),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x1518,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movss  %xmm0,0x4(%rax,%rcx,8)
jmp    1274 <rearrange+0x174>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x1518,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movss  0xdbd(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x1518,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movss  0xd9a(%rip),%xmm0
movss  %xmm0,0x4(%rax,%rcx,8)
jmp    1279 <rearrange+0x179>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1127 <rearrange+0x27>
jmp    128c <rearrange+0x18c>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1113 <rearrange+0x13>
pop    %rbp
ret

x86 assembly (clang, -O2):
<rearrange>:
xor    %eax,%eax
movss  0xef6(%rip),%xmm0
movaps 0xeff(%rip),%xmm1
jmp    113a <rearrange+0x3a>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rax
add    $0x1518,%rsi
add    $0x1518,%rdi
cmp    $0x2a3,%rax
je     1185 <rearrange+0x85>
xor    %ecx,%ecx
jmp    115d <rearrange+0x5d>
xchg   %ax,%ax
movl   $0x42c80000,(%rsi,%rcx,8)
movaps %xmm0,%xmm2
movss  %xmm2,0x4(%rsi,%rcx,8)
add    $0x1,%rcx
cmp    $0x2a3,%rcx
je     1120 <rearrange+0x20>
movss  (%rdi,%rcx,8),%xmm2
ucomiss %xmm0,%xmm2
jne    1169 <rearrange+0x69>
jnp    1140 <rearrange+0x40>
movss  0x4(%rdi,%rcx,8),%xmm2
ucomiss %xmm0,%xmm2
jne    1176 <rearrange+0x76>
jnp    1140 <rearrange+0x40>
movss  %xmm2,(%rsi,%rcx,8)
movss  (%rdi,%rcx,8),%xmm2
xorps  %xmm1,%xmm2
jmp    114a <rearrange+0x4a>
ret

LLVM IR (-O0):
define void @rearrange([675 x [2 x float]]* %0, [675 x [2 x float]]* %1) {
%3 = alloca [675 x [2 x float]]*
%4 = alloca [675 x [2 x float]]*
%5 = alloca i32
%6 = alloca i32
store [675 x [2 x float]]* %0, [675 x [2 x float]]** %3
store [675 x [2 x float]]* %1, [675 x [2 x float]]** %4
store i32 0, i32* %5
br label %7
7: ; preds = %96, %2
%8 = load i32, i32* %5
%9 = icmp slt i32 %8, 675
br i1 %9, label %10, label %99
10: ; preds = %7
store i32 0, i32* %6
br label %11
11: ; preds = %92, %10
%12 = load i32, i32* %6
%13 = icmp slt i32 %12, 675
br i1 %13, label %14, label %95
14: ; preds = %11
%15 = load [675 x [2 x float]]*, [675 x [2 x float]]** %3
%16 = load i32, i32* %5
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %15, i64 %17
%19 = load i32, i32* %6
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %18, i64 0, i64 %20
%22 = getelementptr inbounds [2 x float], [2 x float]* %21, i64 0, i64 0
%23 = load float, float* %22
%24 = fpext float %23 to double
%25 = fcmp une double %24, 1.000000e+02
br i1 %25, label %26, label %74
26: ; preds = %14
%27 = load [675 x [2 x float]]*, [675 x [2 x float]]** %3
%28 = load i32, i32* %5
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %27, i64 %29
%31 = load i32, i32* %6
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %30, i64 0, i64 %32
%34 = getelementptr inbounds [2 x float], [2 x float]* %33, i64 0, i64 1
%35 = load float, float* %34
%36 = fpext float %35 to double
%37 = fcmp une double %36, 1.000000e+02
br i1 %37, label %38, label %74
38: ; preds = %26
%39 = load [675 x [2 x float]]*, [675 x [2 x float]]** %3
%40 = load i32, i32* %5
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %39, i64 %41
%43 = load i32, i32* %6
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %42, i64 0, i64 %44
%46 = getelementptr inbounds [2 x float], [2 x float]* %45, i64 0, i64 1
%47 = load float, float* %46
%48 = load [675 x [2 x float]]*, [675 x [2 x float]]** %4
%49 = load i32, i32* %5
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %48, i64 %50
%52 = load i32, i32* %6
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %51, i64 0, i64 %53
%55 = getelementptr inbounds [2 x float], [2 x float]* %54, i64 0, i64 0
store float %47, float* %55
%56 = load [675 x [2 x float]]*, [675 x [2 x float]]** %3
%57 = load i32, i32* %5
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %56, i64 %58
%60 = load i32, i32* %6
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %59, i64 0, i64 %61
%63 = getelementptr inbounds [2 x float], [2 x float]* %62, i64 0, i64 0
%64 = load float, float* %63
%65 = fneg float %64
%66 = load [675 x [2 x float]]*, [675 x [2 x float]]** %4
%67 = load i32, i32* %5
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %66, i64 %68
%70 = load i32, i32* %6
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %69, i64 0, i64 %71
%73 = getelementptr inbounds [2 x float], [2 x float]* %72, i64 0, i64 1
store float %65, float* %73
br label %91
74: ; preds = %26, %14
%75 = load [675 x [2 x float]]*, [675 x [2 x float]]** %4
%76 = load i32, i32* %5
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %75, i64 %77
%79 = load i32, i32* %6
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %78, i64 0, i64 %80
%82 = getelementptr inbounds [2 x float], [2 x float]* %81, i64 0, i64 0
store float 1.000000e+02, float* %82
%83 = load [675 x [2 x float]]*, [675 x [2 x float]]** %4
%84 = load i32, i32* %5
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %83, i64 %85
%87 = load i32, i32* %6
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %86, i64 0, i64 %88
%90 = getelementptr inbounds [2 x float], [2 x float]* %89, i64 0, i64 1
store float 1.000000e+02, float* %90
br label %91
91: ; preds = %74, %38
br label %92
92: ; preds = %91
%93 = load i32, i32* %6
%94 = add nsw i32 %93, 1
store i32 %94, i32* %6
br label %11
95: ; preds = %11
br label %96
96: ; preds = %95
%97 = load i32, i32* %5
%98 = add nsw i32 %97, 1
store i32 %98, i32* %5
br label %7
99: ; preds = %7
ret void
}

LLVM IR (-O2):
define void @rearrange([675 x [2 x float]]* nocapture %0, [675 x [2 x float]]* nocapture writeonly %1) {
br label %3
3: ; preds = %2, %25
%4 = phi i64 [ 0, %2 ], [ %26, %25 ]
br label %5
5: ; preds = %3, %20
%6 = phi i64 [ 0, %3 ], [ %23, %20 ]
%7 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %0, i64 %4, i64 %6, i64 0
%8 = load float, float* %7
%9 = fcmp une float %8, 1.000000e+02
br i1 %9, label %10, label %18
10: ; preds = %5
%11 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %0, i64 %4, i64 %6, i64 1
%12 = load float, float* %11
%13 = fcmp une float %12, 1.000000e+02
br i1 %13, label %14, label %18
14: ; preds = %10
%15 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %1, i64 %4, i64 %6, i64 0
store float %12, float* %15
%16 = load float, float* %7
%17 = fneg float %16
br label %20
18: ; preds = %10, %5
%19 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %1, i64 %4, i64 %6, i64 0
store float 1.000000e+02, float* %19
br label %20
20: ; preds = %14, %18
%21 = phi float [ %17, %14 ], [ 1.000000e+02, %18 ]
%22 = getelementptr inbounds [675 x [2 x float]], [675 x [2 x float]]* %1, i64 %4, i64 %6, i64 1
store float %21, float* %22
%23 = add nuw nsw i64 %6, 1
%24 = icmp eq i64 %23, 675
br i1 %24, label %25, label %5
25: ; preds = %20
%26 = add nuw nsw i64 %4, 1
%27 = icmp eq i64 %26, 675
br i1 %27, label %28, label %3
28: ; preds = %25
ret void
}