void p_to_uv_grid(int nlon, int nlat, double *grid1x, double *grid1y,
                  double *gridux, double *griduy, double *gridvx,
                  double *gridvy) {
  int i, j, jp1, ip1;
  for (j = 0; j < nlat; j++)
    for (i = 0; i < nlon; i++) {
      ip1 = i + 1;
      if (ip1 > nlon - 1)
        ip1 = 0;
      gridux[((j) * (nlon) + (i))] =
          (grid1x[((j) * (nlon) + (i))] + grid1x[((j) * (nlon) + (ip1))]) * 0.5;
      if ((grid1x[((j) * (nlon) + (i))] > 340 &&
           grid1x[((j) * (nlon) + (ip1))] < 20) ||
          (grid1x[((j) * (nlon) + (i))] < 20 &&
           grid1x[((j) * (nlon) + (ip1))] > 340)) {
        if (gridux[((j) * (nlon) + (i))] < 180)
          gridux[((j) * (nlon) + (i))] += 180;
        else
          gridux[((j) * (nlon) + (i))] -= 180;
      }
      griduy[((j) * (nlon) + (i))] =
          (grid1y[((j) * (nlon) + (i))] + grid1y[((j) * (nlon) + (ip1))]) * 0.5;
    }
  for (j = 0; j < nlat; j++)
    for (i = 0; i < nlon; i++) {
      jp1 = j + 1;
      if (jp1 > nlat - 1)
        jp1 = nlat - 1;
      gridvx[((j) * (nlon) + (i))] =
          (grid1x[((j) * (nlon) + (i))] + grid1x[((jp1) * (nlon) + (i))]) * 0.5;
      if ((grid1x[((j) * (nlon) + (i))] > 340 &&
           grid1x[((jp1) * (nlon) + (i))] < 20) ||
          (grid1x[((j) * (nlon) + (i))] < 20 &&
           grid1x[((jp1) * (nlon) + (i))] > 340)) {
        if (gridvx[((j) * (nlon) + (i))] < 180)
          gridvx[((j) * (nlon) + (i))] += 180;
        else
          gridvx[((j) * (nlon) + (i))] -= 180;
      }
      gridvy[((j) * (nlon) + (i))] =
          (grid1y[((j) * (nlon) + (i))] + grid1y[((jp1) * (nlon) + (i))]) * 0.5;
    }
}


x86 assembly (clang, -O0):
<p_to_uv_grid>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1336 <p_to_uv_grid+0x236>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1323 <p_to_uv_grid+0x223>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jle    1169 <p_to_uv_grid+0x69>
movl   $0x0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x38(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0xe6b(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xe2b(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1203 <p_to_uv_grid+0x103>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movsd  0xe18(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
ja     124f <p_to_uv_grid+0x14f>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  0xdf4(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    12c7 <p_to_uv_grid+0x1c7>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xdbb(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12c7 <p_to_uv_grid+0x1c7>
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  0xdb0(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    129b <p_to_uv_grid+0x19b>
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  0xd8c(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    12c2 <p_to_uv_grid+0x1c2>
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xd5f(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    12c7 <p_to_uv_grid+0x1c7>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x38(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0xd0d(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    113c <p_to_uv_grid+0x3c>
jmp    1328 <p_to_uv_grid+0x228>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1129 <p_to_uv_grid+0x29>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    154c <p_to_uv_grid+0x44c>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1539 <p_to_uv_grid+0x439>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jle    137f <p_to_uv_grid+0x27f>
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0xc55(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xc15(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1419 <p_to_uv_grid+0x319>
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  0xc02(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
ja     1465 <p_to_uv_grid+0x365>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  0xbde(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    14dd <p_to_uv_grid+0x3dd>
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xba5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    14dd <p_to_uv_grid+0x3dd>
mov    0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  0xb9a(%rip),%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    14b1 <p_to_uv_grid+0x3b1>
mov    0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  0xb76(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    14d8 <p_to_uv_grid+0x3d8>
mov    0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xb49(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    14dd <p_to_uv_grid+0x3dd>
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0xaf7(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1350 <p_to_uv_grid+0x250>
jmp    153e <p_to_uv_grid+0x43e>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    133d <p_to_uv_grid+0x23d>
pop    %rbp
ret

x86 assembly (clang, -O2):
<p_to_uv_grid>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %esi,%esi
jle    1360 <p_to_uv_grid+0x260>
mov    %rcx,%r13
mov    %rdx,%r11
mov    0x38(%rsp),%r12
lea    -0x1(%rdi),%eax
cltq
movslq %edi,%rdx
mov    %rsi,-0x18(%rsp)
mov    %esi,%ecx
mov    %rcx,-0x20(%rsp)
mov    %edx,%r10d
mov    %rdx,-0x10(%rsp)
lea    0x0(,%rdx,8),%rcx
mov    %rcx,-0x28(%rsp)
xor    %ecx,%ecx
mov    %rcx,-0x30(%rsp)
movsd  0xeab(%rip),%xmm0
movsd  0xeab(%rip),%xmm1
movsd  0xeab(%rip),%xmm2
movsd  0xeab(%rip),%xmm3
mov    %r13,%rcx
mov    %r11,%rdx
mov    %rdi,-0x8(%rsp)
lea    0xea1(%rip),%rbx
jmp    11c2 <p_to_uv_grid+0xc2>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    -0x30(%rsp),%rdi
add    $0x1,%rdi
mov    -0x28(%rsp),%rsi
add    %rsi,%rdx
add    %rsi,%r8
add    %rsi,%rcx
add    %rsi,%r9
mov    %rdi,%rsi
mov    %rdi,-0x30(%rsp)
cmp    -0x20(%rsp),%rdi
mov    -0x8(%rsp),%rdi
je     126e <p_to_uv_grid+0x16e>
test   %edi,%edi
jle    1190 <p_to_uv_grid+0x90>
mov    -0x30(%rsp),%rbp
imul   -0x10(%rsp),%rbp
xor    %edi,%edi
jmp    1215 <p_to_uv_grid+0x115>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %esi,%esi
ucomisd %xmm4,%xmm3
seta   %sil
addsd  (%rbx,%rsi,8),%xmm4
movsd  %xmm4,(%r8,%r14,8)
movsd  (%rcx,%r14,8),%xmm4
addsd  0x0(%r13,%r15,8),%xmm4
mulsd  %xmm0,%xmm4
movsd  %xmm4,(%r9,%r14,8)
cmp    %rdi,%r10
je     1190 <p_to_uv_grid+0x90>
mov    %rdi,%r14
add    $0x1,%rdi
cmp    %rax,%r14
movsd  (%rdx,%r14,8),%xmm4
mov    $0x0,%r15d
cmovl  %rdi,%r15
add    %rbp,%r15
addsd  (%r11,%r15,8),%xmm4
mulsd  %xmm0,%xmm4
movsd  %xmm4,(%r8,%r14,8)
movsd  (%rdx,%r14,8),%xmm5
ucomisd %xmm1,%xmm5
jbe    1256 <p_to_uv_grid+0x156>
ucomisd (%r11,%r15,8),%xmm2
ja     11e0 <p_to_uv_grid+0xe0>
ucomisd %xmm5,%xmm2
jbe    11f5 <p_to_uv_grid+0xf5>
movsd  (%r11,%r15,8),%xmm5
ucomisd %xmm1,%xmm5
ja     11e0 <p_to_uv_grid+0xe0>
jmp    11f5 <p_to_uv_grid+0xf5>
mov    -0x18(%rsp),%r9
test   %r9d,%r9d
mov    0x40(%rsp),%r14
jle    1360 <p_to_uv_grid+0x260>
add    $0xffffffff,%r9d
shl    $0x3,%r10
xor    %edx,%edx
mov    %r13,%r15
mov    %r11,%rcx
lea    0xd88(%rip),%rax
jmp    12bf <p_to_uv_grid+0x1bf>
nopw   0x0(%rax,%rax,1)
mov    -0x28(%rsp),%rdx
add    %rdx,%rcx
add    %rdx,%r12
add    %rdx,%r15
add    %rdx,%r14
mov    %r8,%rdx
cmp    -0x20(%rsp),%r8
je     1360 <p_to_uv_grid+0x260>
lea    0x1(%rdx),%r8
test   %edi,%edi
jle    12a0 <p_to_uv_grid+0x1a0>
cmp    %r9,%rdx
mov    %r8d,%edx
cmovae %r9d,%edx
imul   %edi,%edx
movslq %edx,%rdx
lea    (%r11,%rdx,8),%rsi
lea    0x0(,%rdx,8),%rbp
add    %r13,%rbp
xor    %edx,%edx
jmp    1327 <p_to_uv_grid+0x227>
nopw   0x0(%rax,%rax,1)
xor    %ebx,%ebx
ucomisd %xmm4,%xmm3
seta   %bl
addsd  (%rax,%rbx,8),%xmm4
movsd  %xmm4,(%r12,%rdx,1)
movsd  (%r15,%rdx,1),%xmm4
addsd  0x0(%rbp,%rdx,1),%xmm4
mulsd  %xmm0,%xmm4
movsd  %xmm4,(%r14,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%r10
je     12a0 <p_to_uv_grid+0x1a0>
movsd  (%rcx,%rdx,1),%xmm4
addsd  (%rsi,%rdx,1),%xmm4
mulsd  %xmm0,%xmm4
movsd  %xmm4,(%r12,%rdx,1)
movsd  (%rcx,%rdx,1),%xmm5
ucomisd %xmm1,%xmm5
jbe    134d <p_to_uv_grid+0x24d>
ucomisd (%rsi,%rdx,1),%xmm2
ja     12f0 <p_to_uv_grid+0x1f0>
ucomisd %xmm5,%xmm2
jbe    1304 <p_to_uv_grid+0x204>
movsd  (%rsi,%rdx,1),%xmm5
ucomisd %xmm1,%xmm5
ja     12f0 <p_to_uv_grid+0x1f0>
jmp    1304 <p_to_uv_grid+0x204>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @p_to_uv_grid(i32 %0, i32 %1, double* nocapture %2, double* nocapture %3, double* nocapture %4, double* nocapture writeonly %5, double* nocapture %6, double* nocapture writeonly %7) {
%9 = icmp sgt i32 %1, 0
br i1 %9, label %10, label %118
10: ; preds = %8
%11 = icmp sgt i32 %0, 0
%12 = add nsw i32 %0, -1
%13 = sext i32 %12 to i64
%14 = sext i32 %0 to i64
%15 = zext i32 %1 to i64
%16 = zext i32 %0 to i64
br label %17
17: ; preds = %10, %68
%18 = phi i64 [ 0, %10 ], [ %69, %68 ]
br i1 %11, label %19, label %68
19: ; preds = %17
%20 = mul nsw i64 %18, %14
br label %29
21: ; preds = %68
br i1 %9, label %22, label %118
22: ; preds = %21
%23 = icmp sgt i32 %0, 0
%24 = add nsw i32 %1, -1
%25 = zext i32 %24 to i64
%26 = sext i32 %0 to i64
%27 = zext i32 %1 to i64
%28 = zext i32 %0 to i64
br label %71
29: ; preds = %19, %59
%30 = phi i64 [ 0, %19 ], [ %31, %59 ]
%31 = add nuw nsw i64 %30, 1
%32 = icmp slt i64 %30, %13
%33 = add nsw i64 %30, %20
%34 = getelementptr inbounds double, double* %2, i64 %33
%35 = load double, double* %34
%36 = shl i64 %31, 32
%37 = ashr exact i64 %36, 32
%38 = select i1 %32, i64 %37, i64 0
%39 = add nsw i64 %38, %20
%40 = getelementptr inbounds double, double* %2, i64 %39
%41 = load double, double* %40
%42 = fadd double %35, %41
%43 = fmul double %42, 5.000000e-01
%44 = getelementptr inbounds double, double* %4, i64 %33
store double %43, double* %44
%45 = load double, double* %34
%46 = fcmp ogt double %45, 3.400000e+02
br i1 %46, label %47, label %50
47: ; preds = %29
%48 = load double, double* %40
%49 = fcmp olt double %48, 2.000000e+01
br i1 %49, label %55, label %50
50: ; preds = %47, %29
%51 = fcmp olt double %45, 2.000000e+01
br i1 %51, label %52, label %59
52: ; preds = %50
%53 = load double, double* %40
%54 = fcmp ogt double %53, 3.400000e+02
br i1 %54, label %55, label %59
55: ; preds = %52, %47
%56 = fcmp olt double %43, 1.800000e+02
%57 = select i1 %56, double 1.800000e+02, double -1.800000e+02
%58 = fadd double %43, %57
store double %58, double* %44
br label %59
59: ; preds = %55, %52, %50
%60 = getelementptr inbounds double, double* %3, i64 %33
%61 = load double, double* %60
%62 = getelementptr inbounds double, double* %3, i64 %39
%63 = load double, double* %62
%64 = fadd double %61, %63
%65 = fmul double %64, 5.000000e-01
%66 = getelementptr inbounds double, double* %5, i64 %33
store double %65, double* %66
%67 = icmp eq i64 %31, %16
br i1 %67, label %68, label %29
68: ; preds = %59, %17
%69 = add nuw nsw i64 %18, 1
%70 = icmp eq i64 %69, %15
br i1 %70, label %21, label %17
71: ; preds = %22, %116
%72 = phi i64 [ 0, %22 ], [ %73, %116 ]
%73 = add nuw nsw i64 %72, 1
br i1 %23, label %74, label %116
74: ; preds = %71
%75 = icmp ult i64 %72, %25
%76 = trunc i64 %73 to i32
%77 = select i1 %75, i32 %76, i32 %24
%78 = mul nsw i64 %72, %26
%79 = mul nsw i32 %77, %0
%80 = sext i32 %79 to i64
br label %81
81: ; preds = %74, %106
%82 = phi i64 [ 0, %74 ], [ %114, %106 ]
%83 = add nsw i64 %82, %78
%84 = getelementptr inbounds double, double* %2, i64 %83
%85 = load double, double* %84
%86 = add nsw i64 %82, %80
%87 = getelementptr inbounds double, double* %2, i64 %86
%88 = load double, double* %87
%89 = fadd double %85, %88
%90 = fmul double %89, 5.000000e-01
%91 = getelementptr inbounds double, double* %6, i64 %83
store double %90, double* %91
%92 = load double, double* %84
%93 = fcmp ogt double %92, 3.400000e+02
br i1 %93, label %94, label %97
94: ; preds = %81
%95 = load double, double* %87
%96 = fcmp olt double %95, 2.000000e+01
br i1 %96, label %102, label %97
97: ; preds = %94, %81
%98 = fcmp olt double %92, 2.000000e+01
br i1 %98, label %99, label %106
99: ; preds = %97
%100 = load double, double* %87
%101 = fcmp ogt double %100, 3.400000e+02
br i1 %101, label %102, label %106
102: ; preds = %99, %94
%103 = fcmp olt double %90, 1.800000e+02
%104 = select i1 %103, double 1.800000e+02, double -1.800000e+02
%105 = fadd double %90, %104
store double %105, double* %91
br label %106
106: ; preds = %102, %99, %97
%107 = getelementptr inbounds double, double* %3, i64 %83
%108 = load double, double* %107
%109 = getelementptr inbounds double, double* %3, i64 %86
%110 = load double, double* %109
%111 = fadd double %108, %110
%112 = fmul double %111, 5.000000e-01
%113 = getelementptr inbounds double, double* %7, i64 %83
store double %112, double* %113
%114 = add nuw nsw i64 %82, 1
%115 = icmp eq i64 %114, %28
br i1 %115, label %116, label %81
116: ; preds = %106, %71
%117 = icmp eq i64 %73, %27
br i1 %117, label %118, label %71
118: ; preds = %116, %8, %21
ret void
}