void invertLatData(double *array1, double *array2, int gridID1) {
  int nlat, nlon;
  int ilat;
  double **field1, **field2;
  nlon = gridInqXsize(gridID1);
  nlat = gridInqYsize(gridID1);
  if (nlat > 0) {
    field1 = (double **)Malloc(
        __func__,
        "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
        "2022-01-22/02-19-57/repos/AZed/cdo/refs/heads/master/src/Invert.c",
        293, (nlat * sizeof(double *)));
    field2 = (double **)Malloc(
        __func__,
        "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
        "2022-01-22/02-19-57/repos/AZed/cdo/refs/heads/master/src/Invert.c",
        294, (nlat * sizeof(double *)));
    for (ilat = 0; ilat < nlat; ilat++) {
      field1[ilat] = array1 + ilat * nlon;
      field2[ilat] = array2 + ilat * nlon;
    }
    for (ilat = 0; ilat < nlat; ilat++)
      memcpy(field2[nlat - ilat - 1], field1[ilat], nlon * sizeof(double));
    if (field1)
      Free(__func__,
           "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
           "2022-01-22/02-19-57/repos/AZed/cdo/refs/heads/master/src/Invert.c",
           305, (field1));
    if (field2)
      Free(__func__,
           "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
           "2022-01-22/02-19-57/repos/AZed/cdo/refs/heads/master/src/Invert.c",
           306, (field2));
  } else {
    array2[0] = array1[0];
  }
}


x86 assembly (clang, -O0):
<invertLatData>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x14(%rbp),%edi
mov    $0x0,%al
call   1060 <gridInqXsize@plt>
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%edi
mov    $0x0,%al
call   1050 <gridInqYsize@plt>
mov    %eax,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
jle    12dd <invertLatData+0x18d>
movslq -0x18(%rbp),%rcx
shl    $0x3,%rcx
lea    0xe6a(%rip),%rdi
lea    0xe71(%rip),%rsi
mov    $0x125,%edx
mov    $0x0,%al
call   1030 <Malloc@plt>
cltq
mov    %rax,-0x28(%rbp)
movslq -0x18(%rbp),%rcx
shl    $0x3,%rcx
lea    0xe42(%rip),%rdi
lea    0xe49(%rip),%rsi
mov    $0x126,%edx
mov    $0x0,%al
call   1030 <Malloc@plt>
cltq
mov    %rax,-0x30(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1238 <invertLatData+0xe8>
mov    -0x8(%rbp),%rdx
mov    -0x20(%rbp),%eax
imul   -0x1c(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rdx
mov    -0x28(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x10(%rbp),%rdx
mov    -0x20(%rbp),%eax
imul   -0x1c(%rbp),%eax
cltq
shl    $0x3,%rax
add    %rax,%rdx
mov    -0x30(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11de <invertLatData+0x8e>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1286 <invertLatData+0x136>
mov    -0x30(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    -0x20(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rdi
mov    -0x28(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
movslq -0x1c(%rbp),%rdx
shl    $0x3,%rdx
call   1040 <memcpy@plt>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    123f <invertLatData+0xef>
cmpq   $0x0,-0x28(%rbp)
je     12af <invertLatData+0x15f>
mov    -0x28(%rbp),%rcx
lea    0xd64(%rip),%rdi
lea    0xd6b(%rip),%rsi
mov    $0x131,%edx
mov    $0x0,%al
call   1070 <Free@plt>
cmpq   $0x0,-0x30(%rbp)
je     12d8 <invertLatData+0x188>
mov    -0x30(%rbp),%rcx
lea    0xd3b(%rip),%rdi
lea    0xd42(%rip),%rsi
mov    $0x132,%edx
mov    $0x0,%al
call   1070 <Free@plt>
jmp    12ed <invertLatData+0x19d>
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<invertLatData>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %edx,%ebp
mov    %rsi,%r15
mov    %rdi,%r14
mov    %edx,%edi
xor    %eax,%eax
call   1060 <gridInqXsize@plt>
mov    %eax,%r12d
mov    %ebp,%edi
xor    %eax,%eax
call   1050 <gridInqYsize@plt>
test   %eax,%eax
jle    1402 <invertLatData+0x2b2>
mov    %eax,%ebx
mov    %r15,0x10(%rsp)
mov    %r14,0x18(%rsp)
mov    %eax,%r14d
mov    %r12d,(%rsp)
lea    0x0(,%r14,8),%r12
lea    0xe5b(%rip),%rdi
lea    0xe62(%rip),%rsi
xor    %r15d,%r15d
mov    $0x125,%edx
mov    %r12,%rcx
xor    %eax,%eax
call   1030 <Malloc@plt>
mov    %eax,%ebp
movslq %eax,%r13
lea    0xe36(%rip),%rdi
lea    0xe3d(%rip),%rsi
mov    $0x126,%edx
mov    %r12,%rcx
xor    %eax,%eax
call   1030 <Malloc@plt>
mov    %r14,%r10
movslq %eax,%r14
movslq (%rsp),%r12
lea    -0x1(%r10),%rcx
mov    %r10d,%edx
and    $0x3,%edx
cmp    $0x3,%rcx
mov    %rbx,0x20(%rsp)
mov    %eax,0xc(%rsp)
mov    %ebp,0x8(%rsp)
mov    %r10,0x28(%rsp)
mov    %rcx,0x38(%rsp)
mov    %rdx,0x30(%rsp)
jb     12c8 <invertLatData+0x178>
and    $0xfffffffc,%r10d
mov    %r10,(%rsp)
mov    %r12,%rsi
shl    $0x4,%rsi
mov    0x10(%rsp),%r11
lea    (%r11,%rsi,1),%rax
mov    %rax,0x40(%rsp)
mov    %r12,%rax
shl    $0x5,%rax
mov    0x18(%rsp),%r10
add    %r10,%rsi
lea    (%r11,%r12,8),%r9
lea    0x0(,%r12,8),%rcx
lea    (%r10,%r12,8),%rbx
lea    (%rcx,%rcx,2),%rcx
lea    (%r11,%rcx,1),%rdx
add    %r10,%rcx
xor    %edi,%edi
xor    %r15d,%r15d
cs nopw 0x0(%rax,%rax,1)
lea    (%r10,%rdi,1),%r8
mov    %r8,0x0(%r13,%r15,8)
lea    (%r11,%rdi,1),%rbp
mov    %rbp,(%r14,%r15,8)
lea    (%rbx,%rdi,1),%rbp
mov    %rbp,0x8(%r13,%r15,8)
lea    (%r9,%rdi,1),%rbp
mov    %rbp,0x8(%r14,%r15,8)
lea    (%rsi,%rdi,1),%rbp
mov    %rbp,0x10(%r13,%r15,8)
mov    0x40(%rsp),%rbp
add    %rdi,%rbp
mov    %rbp,0x10(%r14,%r15,8)
lea    (%rcx,%rdi,1),%rbp
mov    %rbp,0x18(%r13,%r15,8)
lea    (%rdx,%rdi,1),%rbp
mov    %rbp,0x18(%r14,%r15,8)
add    $0x4,%r15
add    %rax,%rdi
cmp    %r15,(%rsp)
jne    1270 <invertLatData+0x120>
mov    0x30(%rsp),%rbx
test   %rbx,%rbx
je     1327 <invertLatData+0x1d7>
lea    (%r14,%r15,8),%rax
lea    0x0(,%r15,8),%rcx
add    %r13,%rcx
imul   %r12,%r15
mov    0x10(%rsp),%rdx
lea    (%rdx,%r15,8),%rdx
lea    0x0(,%r12,8),%rsi
mov    0x18(%rsp),%rdi
lea    (%rdi,%r15,8),%rdi
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rdi,(%rcx,%rbp,8)
mov    %rdx,(%rax,%rbp,8)
add    $0x1,%rbp
add    %rsi,%rdx
add    %rsi,%rdi
cmp    %rbp,%rbx
jne    1310 <invertLatData+0x1c0>
shl    $0x3,%r12
cmpq   $0x0,0x38(%rsp)
je     141b <invertLatData+0x2cb>
mov    0x28(%rsp),%r15
and    $0xfffffffe,%r15d
mov    0x20(%rsp),%rax
lea    -0x2(%rax),%ebx
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
lea    0x1(%rbx),%eax
cltq
mov    (%r14,%rax,8),%rdi
mov    0x0(%r13,%rbp,8),%rsi
mov    %r12,%rdx
call   1040 <memcpy@plt>
movslq %ebx,%rbx
mov    (%r14,%rbx,8),%rdi
mov    0x8(%r13,%rbp,8),%rsi
mov    %r12,%rdx
call   1040 <memcpy@plt>
add    $0x2,%rbp
add    $0xfffffffe,%ebx
cmp    %rbp,%r15
jne    1350 <invertLatData+0x200>
testb  $0x1,0x28(%rsp)
je     13ac <invertLatData+0x25c>
mov    %ebp,%eax
not    %eax
mov    0x20(%rsp),%rcx
add    %eax,%ecx
movslq %ecx,%rax
mov    (%r14,%rax,8),%rdi
mov    0x0(%r13,%rbp,8),%rsi
mov    %r12,%rdx
call   1040 <memcpy@plt>
cmpl   $0x0,0x8(%rsp)
je     13d0 <invertLatData+0x280>
lea    0xc46(%rip),%rdi
lea    0xc4d(%rip),%rsi
mov    $0x131,%edx
mov    %r13,%rcx
xor    %eax,%eax
call   1070 <Free@plt>
cmpl   $0x0,0xc(%rsp)
je     140c <invertLatData+0x2bc>
lea    0xc22(%rip),%rdi
lea    0xc29(%rip),%rsi
mov    $0x132,%edx
mov    %r14,%rcx
xor    %eax,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1070 <Free@plt>
movsd  (%r14),%xmm0
movsd  %xmm0,(%r15)
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %ebp,%ebp
testb  $0x1,0x28(%rsp)
jne    138d <invertLatData+0x23d>
jmp    13ac <invertLatData+0x25c>

LLVM IR (-O0):
@__func__.invertLatData = [14 x i8] c"invertLatData\00"
@.str = [130 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/AZed/cdo/refs/heads/master/src/Invert.c\00"
define void @invertLatData(double* %0, double* %1, i32 %2) {
%4 = alloca double*
%5 = alloca double*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca double**
%11 = alloca double**
store double* %0, double** %4
store double* %1, double** %5
store i32 %2, i32* %6
%12 = load i32, i32* %6
%13 = call i32 (i32, ...) bitcast (i32 (...)* @gridInqXsize to i32 (i32, ...)*)(i32 %12)
store i32 %13, i32* %8
%14 = load i32, i32* %6
%15 = call i32 (i32, ...) bitcast (i32 (...)* @gridInqYsize to i32 (i32, ...)*)(i32 %14)
store i32 %15, i32* %7
%16 = load i32, i32* %7
%17 = icmp sgt i32 %16, 0
br i1 %17, label %18, label %99
18: ; preds = %3
%19 = load i32, i32* %7
%20 = sext i32 %19 to i64
%21 = mul i64 %20, 8
%22 = call i32 (i8*, i8*, i32, i64, ...) bitcast (i32 (...)* @Malloc to i32 (i8*, i8*, i32, i64, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @__func__.invertLatData, i64 0, i64 0), i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str, i64 0, i64 0), i32 293, i64 %21)
%23 = sext i32 %22 to i64
%24 = inttoptr i64 %23 to double**
store double** %24, double*** %10
%25 = load i32, i32* %7
%26 = sext i32 %25 to i64
%27 = mul i64 %26, 8
%28 = call i32 (i8*, i8*, i32, i64, ...) bitcast (i32 (...)* @Malloc to i32 (i8*, i8*, i32, i64, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @__func__.invertLatData, i64 0, i64 0), i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str, i64 0, i64 0), i32 294, i64 %27)
%29 = sext i32 %28 to i64
%30 = inttoptr i64 %29 to double**
store double** %30, double*** %11
store i32 0, i32* %9
br label %31
31: ; preds = %56, %18
%32 = load i32, i32* %9
%33 = load i32, i32* %7
%34 = icmp slt i32 %32, %33
br i1 %34, label %35, label %59
35: ; preds = %31
%36 = load double*, double** %4
%37 = load i32, i32* %9
%38 = load i32, i32* %8
%39 = mul nsw i32 %37, %38
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds double, double* %36, i64 %40
%42 = load double**, double*** %10
%43 = load i32, i32* %9
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds double*, double** %42, i64 %44
store double* %41, double** %45
%46 = load double*, double** %5
%47 = load i32, i32* %9
%48 = load i32, i32* %8
%49 = mul nsw i32 %47, %48
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds double, double* %46, i64 %50
%52 = load double**, double*** %11
%53 = load i32, i32* %9
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds double*, double** %52, i64 %54
store double* %51, double** %55
br label %56
56: ; preds = %35
%57 = load i32, i32* %9
%58 = add nsw i32 %57, 1
store i32 %58, i32* %9
br label %31
59: ; preds = %31
store i32 0, i32* %9
br label %60
60: ; preds = %83, %59
%61 = load i32, i32* %9
%62 = load i32, i32* %7
%63 = icmp slt i32 %61, %62
br i1 %63, label %64, label %86
64: ; preds = %60
%65 = load double**, double*** %11
%66 = load i32, i32* %7
%67 = load i32, i32* %9
%68 = sub nsw i32 %66, %67
%69 = sub nsw i32 %68, 1
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds double*, double** %65, i64 %70
%72 = load double*, double** %71
%73 = bitcast double* %72 to i8*
%74 = load double**, double*** %10
%75 = load i32, i32* %9
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds double*, double** %74, i64 %76
%78 = load double*, double** %77
%79 = bitcast double* %78 to i8*
%80 = load i32, i32* %8
%81 = sext i32 %80 to i64
%82 = mul i64 %81, 8
br label %83
83: ; preds = %64
%84 = load i32, i32* %9
%85 = add nsw i32 %84, 1
store i32 %85, i32* %9
br label %60
86: ; preds = %60
%87 = load double**, double*** %10
%88 = icmp ne double** %87, null
br i1 %88, label %89, label %92
89: ; preds = %86
%90 = load double**, double*** %10
%91 = call i32 (i8*, i8*, i32, double**, ...) bitcast (i32 (...)* @Free to i32 (i8*, i8*, i32, double**, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @__func__.invertLatData, i64 0, i64 0), i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str, i64 0, i64 0), i32 305, double** %90)
br label %92
92: ; preds = %89, %86
%93 = load double**, double*** %11
%94 = icmp ne double** %93, null
br i1 %94, label %95, label %98
95: ; preds = %92
%96 = load double**, double*** %11
%97 = call i32 (i8*, i8*, i32, double**, ...) bitcast (i32 (...)* @Free to i32 (i8*, i8*, i32, double**, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @__func__.invertLatData, i64 0, i64 0), i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str, i64 0, i64 0), i32 306, double** %96)
br label %98
98: ; preds = %95, %92
br label %105
99: ; preds = %3
%100 = load double*, double** %4
%101 = getelementptr inbounds double, double* %100, i64 0
%102 = load double, double* %101
%103 = load double*, double** %5
%104 = getelementptr inbounds double, double* %103, i64 0
store double %102, double* %104
br label %105
105: ; preds = %99, %98
ret void
}

LLVM IR (-O2):
@__func__.invertLatData = [14 x i8] c"invertLatData\00"
@.str = [130 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/AZed/cdo/refs/heads/master/src/Invert.c\00"
define void @invertLatData(double* %0, double* %1, i32 %2) {
%4 = tail call i32 (i32, ...) bitcast (i32 (...)* @gridInqXsize to i32 (i32, ...)*)(i32 %2)
%5 = tail call i32 (i32, ...) bitcast (i32 (...)* @gridInqYsize to i32 (i32, ...)*)(i32 %2)
%6 = icmp sgt i32 %5, 0
br i1 %6, label %7, label %120
7: ; preds = %3
%8 = zext i32 %5 to i64
%9 = shl nuw nsw i64 %8, 3
%10 = tail call i32 (i8*, i8*, i32, i64, ...) bitcast (i32 (...)* @Malloc to i32 (i8*, i8*, i32, i64, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @__func__.invertLatData, i64 0, i64 0), i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str, i64 0, i64 0), i32 293, i64 %9)
%11 = sext i32 %10 to i64
%12 = inttoptr i64 %11 to double**
%13 = tail call i32 (i8*, i8*, i32, i64, ...) bitcast (i32 (...)* @Malloc to i32 (i8*, i8*, i32, i64, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @__func__.invertLatData, i64 0, i64 0), i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str, i64 0, i64 0), i32 294, i64 %9)
%14 = sext i32 %13 to i64
%15 = inttoptr i64 %14 to double**
%16 = sext i32 %4 to i64
%17 = add nsw i64 %8, -1
%18 = and i64 %8, 3
%19 = icmp ult i64 %17, 3
br i1 %19, label %22, label %20
20: ; preds = %7
%21 = and i64 %8, 4294967292
br label %42
22: ; preds = %42, %7
%23 = phi i64 [ 0, %7 ], [ %68, %42 ]
%24 = icmp eq i64 %18, 0
br i1 %24, label %36, label %25
25: ; preds = %22, %25
%26 = phi i64 [ %33, %25 ], [ %23, %22 ]
%27 = phi i64 [ %34, %25 ], [ 0, %22 ]
%28 = mul nsw i64 %26, %16
%29 = getelementptr inbounds double, double* %0, i64 %28
%30 = getelementptr inbounds double*, double** %12, i64 %26
store double* %29, double** %30
%31 = getelementptr inbounds double, double* %1, i64 %28
%32 = getelementptr inbounds double*, double** %15, i64 %26
store double* %31, double** %32
%33 = add nuw nsw i64 %26, 1
%34 = add i64 %27, 1
%35 = icmp eq i64 %34, %18
br i1 %35, label %36, label %25
36: ; preds = %25, %22
%37 = shl nsw i64 %16, 3
%38 = and i64 %8, 1
%39 = icmp eq i64 %17, 0
br i1 %39, label %98, label %40
40: ; preds = %36
%41 = and i64 %8, 4294967294
br label %71
42: ; preds = %42, %20
%43 = phi i64 [ 0, %20 ], [ %68, %42 ]
%44 = phi i64 [ 0, %20 ], [ %69, %42 ]
%45 = mul nsw i64 %43, %16
%46 = getelementptr inbounds double, double* %0, i64 %45
%47 = getelementptr inbounds double*, double** %12, i64 %43
store double* %46, double** %47
%48 = getelementptr inbounds double, double* %1, i64 %45
%49 = getelementptr inbounds double*, double** %15, i64 %43
store double* %48, double** %49
%50 = or i64 %43, 1
%51 = mul nsw i64 %50, %16
%52 = getelementptr inbounds double, double* %0, i64 %51
%53 = getelementptr inbounds double*, double** %12, i64 %50
store double* %52, double** %53
%54 = getelementptr inbounds double, double* %1, i64 %51
%55 = getelementptr inbounds double*, double** %15, i64 %50
store double* %54, double** %55
%56 = or i64 %43, 2
%57 = mul nsw i64 %56, %16
%58 = getelementptr inbounds double, double* %0, i64 %57
%59 = getelementptr inbounds double*, double** %12, i64 %56
store double* %58, double** %59
%60 = getelementptr inbounds double, double* %1, i64 %57
%61 = getelementptr inbounds double*, double** %15, i64 %56
store double* %60, double** %61
%62 = or i64 %43, 3
%63 = mul nsw i64 %62, %16
%64 = getelementptr inbounds double, double* %0, i64 %63
%65 = getelementptr inbounds double*, double** %12, i64 %62
store double* %64, double** %65
%66 = getelementptr inbounds double, double* %1, i64 %63
%67 = getelementptr inbounds double*, double** %15, i64 %62
store double* %66, double** %67
%68 = add nuw nsw i64 %43, 4
%69 = add i64 %44, 4
%70 = icmp eq i64 %69, %21
br i1 %70, label %22, label %42
71: ; preds = %71, %40
%72 = phi i64 [ 0, %40 ], [ %95, %71 ]
%73 = phi i64 [ 0, %40 ], [ %96, %71 ]
%74 = trunc i64 %72 to i32
%75 = xor i32 %74, -1
%76 = add i32 %5, %75
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds double*, double** %15, i64 %77
%79 = bitcast double** %78 to i8**
%80 = load i8*, i8** %79
%81 = getelementptr inbounds double*, double** %12, i64 %72
%82 = bitcast double** %81 to i8**
%83 = load i8*, i8** %82
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %80, i8* align 8 %83, i64 %37, i1 false)
%84 = or i64 %72, 1
%85 = trunc i64 %84 to i32
%86 = xor i32 %85, -1
%87 = add i32 %5, %86
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds double*, double** %15, i64 %88
%90 = bitcast double** %89 to i8**
%91 = load i8*, i8** %90
%92 = getelementptr inbounds double*, double** %12, i64 %84
%93 = bitcast double** %92 to i8**
%94 = load i8*, i8** %93
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %91, i8* align 8 %94, i64 %37, i1 false)
%95 = add nuw nsw i64 %72, 2
%96 = add i64 %73, 2
%97 = icmp eq i64 %96, %41
br i1 %97, label %98, label %71
98: ; preds = %71, %36
%99 = phi i64 [ 0, %36 ], [ %95, %71 ]
%100 = icmp eq i64 %38, 0
br i1 %100, label %112, label %101
101: ; preds = %98
%102 = trunc i64 %99 to i32
%103 = xor i32 %102, -1
%104 = add i32 %5, %103
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds double*, double** %15, i64 %105
%107 = bitcast double** %106 to i8**
%108 = load i8*, i8** %107
%109 = getelementptr inbounds double*, double** %12, i64 %99
%110 = bitcast double** %109 to i8**
%111 = load i8*, i8** %110
tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %108, i8* align 8 %111, i64 %37, i1 false)
br label %112
112: ; preds = %98, %101
%113 = icmp eq i32 %10, 0
br i1 %113, label %116, label %114
114: ; preds = %112
%115 = tail call i32 (i8*, i8*, i32, double**, ...) bitcast (i32 (...)* @Free to i32 (i8*, i8*, i32, double**, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @__func__.invertLatData, i64 0, i64 0), i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str, i64 0, i64 0), i32 305, double** %12)
br label %116
116: ; preds = %114, %112
%117 = icmp eq i32 %13, 0
br i1 %117, label %122, label %118
118: ; preds = %116
%119 = tail call i32 (i8*, i8*, i32, double**, ...) bitcast (i32 (...)* @Free to i32 (i8*, i8*, i32, double**, ...)*)(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @__func__.invertLatData, i64 0, i64 0), i8* getelementptr inbounds ([130 x i8], [130 x i8]* @.str, i64 0, i64 0), i32 306, double** %15)
br label %122
120: ; preds = %3
%121 = load double, double* %0
store double %121, double* %1
br label %122
122: ; preds = %116, %118, %120
ret void
}